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.