Začneme s kódy projektu calc prp-lab13-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.
read_calc. Sestavte z implementace read_calc.c dynamickou knihovnu. Postupujte podle návodu.
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.
print_number, která vytiskne binární číslo typu number_t.
calc.c sestavte opět dynamickou knihovnu.
ldd otestujte, že vytvořený program hledá dynamické knohihovny v aktuálním adresáři.
Pro další práci s dynamickými knihovnami můžete využít přiložený Makefile, který můžete zobecnit dle lec10 slide 33.
is_equal pro porovnání dvou binárních čísel. Implementaci otestujte.
expression_t. Navrhněte postup vyhodnocení, který zachová prioritu aritmetických operací. Svůj návrh implementujte.