Data: 2023/03/26
Tags: C, esercizi, lezione 3, funzioni libreria string.h, nuovi tipi (struct, union, enum, typedef), allocazione dinamica della memoria
Riassunto
Soluzioni degli esercizi assegnati durante la lezione 3, tenuta il 21 Marzo 2023.
Scrivere una funzione che, sfruttando funzioni della libreria string.h, rimuova tutte le occorrenze di una sottostringa fornita dallâutente. Si assume che tutte le stringhe siano terminate da â\0â.
Hint: La funzione non dovrebbe avere valore di ritorno e dovrebbe accettare i seguenti parametri: (a) la stringa originale su cui operare, (b) la sottostringa di cui si desidera la rimozione, (c) un puntatore ad una stringa da fornire in output.
Esempio: (a) âciao ciao ciaoâ, (b) âoâ â (c) âcia cia ciaâ
Scrivere due funzioni che verifichino che gli indirizzi di memoria di puntatori a membri di una struct siano diversi, mentre gli indirizzi di memoria di puntatori a membri di una union siano uguali.
Hint: la format string per puntatori è â%pâ; entrambe le funzioni accettano due argomenti: (a) un puntatore a struct oppure un puntatore a union, rispettivamente, e (b) un puntatore a funzione che implementi lâoperazione di confronto (per struct testa ugualianza tra indirizzi, per union testa disuguaglianza); gli indirizzi di memoria devono essere confrontati tramite le funzioni della libreria string.h.
Assumendo una single linked list composta da Element (dichiarato come negli esempi), scrivere le funzioni insertAt e removeAt tali che: (1) insertAt â inserisce un elemento in una qualsiasi posizione, fornita dallâutente come indice (analogo ad array); (2) removeAt â rimuove un elemento in una qualsiasi posizione, fornita dallâutente come indice (analogo ad array).
Hint: 1 (head) -> 2 -> 3 -> 4; insertAt(head, 5, 1) â 1 (head) -> 5 -> 2 -> 3 -> 4; removeAt(head, 0) â 5 (head) -> 2 -> 3 -> 4; prestare attenzione ai valori di ritorno delle funzioni e come usarli
Implementare una doubly linked list ed annesse funzioni tali che: (1) Supporti elementi int, float, e char[10] â una lista comunque conterrĂ elementi di tipi omogenei; (2) Supporti le funzioni insertAt e removeAt definite come allâEsercizio 3 ed opportunamente modificate per lâuso in una doubly linked list; (3) Implementi una funzione apply tale che accetti un puntatore a funzione fnPtr ed una direzione (enum Dir{ FRONT, BACK}; ): se FRONT, fnPtr viene applicato a tutti gli elementi scorrendo la lista dallâinizio alla fine, e in ordine inverso se la direzione è invece BACK.
Hint: è necessario effettuare controlli specifici per evitare elementi di tipi diversi allâinterno di una lista; il puntatore a funzione fornito ad apply deve aver accesso solo ad un singolo elemento, potenzialmente con la possibilitĂ di modificarlo; può essere utile definire una nuova struct che rappresenti la lista stessa, evitando la gestione diretta di elementi