Warning
This page is located in archive. Go to the latest version of this course pages. Go the latest version of this page.

12 - Sdílená knihovna a konzultace k bonusovým úkolům

  • pro vyučující: 12

Cíle cvičení

  1. Seznámit se jak vytvářet dynamickou knihovnou a využívat ji ve složitějších projektech.
  2. Konzultovat možnosti řešení bonusových úloh HW 04 a HW 06.

Zadání

Začneme s kódy projektu calc prp-lab12-calc.zip.

Vytváříme binární kalkulačku, která dokáže sčítat, odečítat, násobit a dělit čísla zadaná ve dvojkové soustavě. Jednotlivé číslo je uloženo ve struktuře.

#define NUMBER_LENGTH 50
 
typedef struct {
   bool number[NUMBER_LENGTH];
   char operator;
} number_t;

Položka number představuje vlastní číslo. Nultý bit čísla ukládáme na pozici NUMBER_LENGTH - 1, první bit na pozici NUMBER_LENGTH - 2 atd. Položka operator složí pro uložení operátoru ('+', ' -', '*', '/'), který za daným číslem případně následuje ve výrazu.

Celý výraz je uložen ve struktuře expression_t, která obsahuje pole ukazatelů na jednotlivá čísla výrazu.

typedef struct {
    number_t** numbers;
    size_t expr_size;
} expression_t;

Knihovna read_calc obsahuje implementaci funkcí pro čtení binárních čísel i celých výrazů ze zadaných řetězců. Implementovány jsou rovněž funkce pro uvolnění čísla a výrazu.

Úkoly

Sdílené knihovny

  • Seznamte se se strukturou binárních výrazů a knihovnou read_calc. Sestavte z implementace read_calc.c dynamickou knihovnu. Postupujte podle návodu.
  • Projděte si hlavní program v souboru main.c. Slinkujte jej s dynamickou knihovnou read_calc a ověřte jeho funkčnost.

Rozhraní pro práci s binárními výrazy je předepsáno v calc.h.

  • Implementujte metodu print_number, která vytiskne binární číslo typu number_t.
  • Z implementace calc.c sestavte opět dynamickou knihovnu.
  • Upravte hlavní program a slinkujte ho s oběmi knihovnami a program otestujte.
  • Příkazem ldd otestujte, že vytvořený program hledá dynamické knohihovny v aktuálním adresáři.

Konzultace k bonusovým úkolům

Pro další práci s dynamickými knihovnami můžete využít přiložený Makefile, který můžete zobecnit dle lec10 slide 33.

  • Konzultujte možnosti práce s dlouhými binárními čísly. Začněte implementací funkce is_equal pro porovnání dvou binárních čísel. Implementaci otestujte.
  • Postupně implementujte funkce pro jednotlivé operátory - sčítání, odčítání, násobení a dělení.
Implementace realizujte ve dvojkové soustavě. Čísla do desítkové soustavy nepřevádějte!
  • Konzultujte možnosti vyhodnocení výrazu uloženého ve struktuře expression_t. Navrhněte postup vyhodnocení, který zachová prioritu aritmetických operací. Svůj návrh implementujte.
courses/b0b36prp/labs/lab12.txt · Last modified: 2022/12/06 07:59 by nagyoing