Implementujte funkci, která vrátí nově alokovaný řetězec, jehož obsah vznikne spojením dvou řetězců předaných funkci jako argumenty.
Implementuje zásobník pomocí dynamického pole.
typedef struct {
int *data; // pole pro vlozena data
int top; // pocet vlozenych prvku
int cap; // velikost pole data
} Stack;
Stack create_stack() {
return (Stack){0};
}Doprogramujte operaci push tak, aby v momentě, kdy je
zásobník zaplněn, tato operace realokovala položku data na dvojnásobnou
velikost.
Doprogramujte operaci ‘pop’ tak, aby v momentě, kdy je zásobník zaplněn z jedné čtvrtiny, zmenšila položku data na polovinu.
První nenulovou velikost zásobníku vyberte jako malou mocninu 2, např. 16.
Vytvořte strukturu struct matrix pro matici
desetinných čísel (double), s položkami pro rozměry matice
(počet řádků a sloupců) a data (obsah matice). O vnitřním uložení a
adresování jednotlivých prvků matice rozhodněte sami.
Naprogramujte funkce:
void allocate_matrix(struct matrix *m, int rows, int cols)Funkce nastaví v m položky pro rozměry matice a alokuje
pamět pro data.
void initialize_matrix_from_array(struct matrix *m, double *array)Funkce inicializuje obsah podle pole array v row-major
pořadí: řádky matice jsou naskládány za sebe, jako reprezentaci
dvourozměrného pole jednorozměrným. Můžete předpokládat, že
array je dostatečně velké.
void destroy_matrix(struct matrix *m);Funkce dealokuje paměť a nastaví odpovídající pointery na 0.
struct matrix multiply_matrix(struct matrix a, struct matrix b);Funkce vynásobí matice (předpokládejme, že vynásobit jdou). Pro data výsledné matice alokuje novou paměť.
void print_matrix(struct matrix a);Funkce vytiskne matici jako tabulku.
Naprogramujte následující funkci.
char** split_string(char *str, char delimiter, int *n);Funkce rozdělí řetězec str na části oddělené znakem
delimiter, ten přitom do žádné části nepatří. Funkce vrátí
takto vzniklé řetězce v nově alokovaném poli, každý z jeho prvků je
klonem části původního řetězce, tj. jeho paměť je
nově alokována. Počet vzniklých řetězců zapíše na adresu
n.
Příklady rozdělení řetězce (delimiter je
'-')
"ahoj-svete" -> "ahoj", "svete"
"ahoj--svete" -> "ahoj", "", "svete"
"-ahoj-svete" -> "", "ahoj", "svete"
"ahoj-svete-" -> "ahoj", "svete", ""
"ahoj" -> "ahoj"