informatica:sol:laboratorio17:esercitazionib:esercitazione1
Differenze
Queste sono le differenze tra la revisione selezionata e la versione attuale della pagina.
Prossima revisione | Revisione precedente | ||
informatica:sol:laboratorio17:esercitazionib:esercitazione1 [20/02/2017 alle 05:30 (8 anni fa)] – creata Massimo Torquati | informatica:sol:laboratorio17:esercitazionib:esercitazione1 [22/02/2017 alle 11:16 (8 anni fa)] (versione attuale) – [Esercizio 3] Massimo Torquati | ||
---|---|---|---|
Linea 5: | Linea 5: | ||
===== Illustrazione uso gdb ===== | ===== Illustrazione uso gdb ===== | ||
- | Vediamo come si usa il debugger [[http:// | + | Vediamo come si usa il debugger [[http:// |
- run ( r ), break < | - run ( r ), break < | ||
Linea 28: | Linea 28: | ||
< | < | ||
int main(int argc, char *argv[], char *envp[]); | int main(int argc, char *argv[], char *envp[]); | ||
+ | </ | ||
+ | |||
+ | ===== Esercizio 3 ===== | ||
+ | |||
+ | Scrivere una funzione ' | ||
+ | <code c> | ||
+ | const char *mystrcat(char* buffer, int buffer_size, | ||
+ | </ | ||
+ | La funzione prende un buffer, la lunghezza del buffer ed almeno uno stringa. Le stringhe possono essere un numero variabile (>1). La funzione concatena tutte le stringhe nel ' | ||
+ | ATTENZIONE alla gestione della memoria! | ||
+ | |||
+ | Utilizzare il seguente main: | ||
+ | <code c> | ||
+ | #include < | ||
+ | #include < | ||
+ | #include < | ||
+ | #include < | ||
+ | |||
+ | #define RIALLOCA(buf, | ||
+ | < | ||
+ | |||
+ | char* mystrcat(char *buf, size_t sz, char *first, ...) { | ||
+ | < | ||
+ | } | ||
+ | |||
+ | int main() { | ||
+ | char *buffer=NULL; | ||
+ | RIALLOCA(buffer, | ||
+ | buffer[0]=' | ||
+ | buffer = mystrcat(buffer, | ||
+ | printf(" | ||
+ | free(buffer); | ||
+ | return 0; | ||
+ | } | ||
+ | </ | ||
+ | NOTA: Che cosa puo' succedere al programma se invece di | ||
+ | <code c> | ||
+ | | ||
+ | </ | ||
+ | si fosse scritto: | ||
+ | < | ||
+ | | ||
+ | </ | ||
+ | |||
+ | ===== Per chi ha bisogno di prendere dimestichezza con il C (homeworks) ===== | ||
+ | |||
+ | ===== Esercizio 4 ===== | ||
+ | |||
+ | Scrivere un programma che, dato un array di N elementi interi, costruisca un albero binario di ricerca (cioè per ogni nodo dell' | ||
+ | Implementare le seguenti funzioni: | ||
+ | <code c> | ||
+ | struct node_t *buildTree(long elem, struct node_t *t); // costruisce l' | ||
+ | long getMin(struct node_t *root); | ||
+ | long getMax(struct node_t *root); | ||
+ | void printInOrder(struct node_t *root); // stampa gli elementi in modo ordinato | ||
+ | void deleteTree(struct node_t *root); | ||
+ | </ | ||
+ | |||
+ | Definire il tipo ' | ||
+ | |||
+ | ===== Esercizio 5 ===== | ||
+ | |||
+ | Non utilizzando la funzioni di libreria ' | ||
+ | <code c> | ||
+ | -n < | ||
+ | </ | ||
+ | Il programma dovrà stampare le opzioni riconosciute con il relativo argomento. L' | ||
+ | <code c> | ||
+ | nome-programma -n < | ||
+ | </ | ||
+ | Se ci sono opzioni non riconosciute queste dovranno essere stampate a video | ||
+ | con il messaggio " | ||
+ | di libreria //atoi// (vedere man 3 atoi) o meglio ancora la funzione //strtol// (vedere man strtol). | ||
+ | Testare il programma con i seguenti casi (supponiamo che l' | ||
+ | <code c> | ||
+ | cmdlineparsing -n 10 -m 11 -s 'ciao mondo' | ||
+ | cmdlineparsing -n 10 -h // deve stampare il messaggio di usage | ||
+ | cmdlineparsing -n 10 -k 12 // k e' una opzione non riconosciuta | ||
+ | cmdlineparsing ----n 10 -s-s 'ciao mondo' | ||
+ | cmdlineparsing -n10 -m11 -s' | ||
+ | cmdlineparsing -n -m 11 // deve stampare un messaggio di errore per -n | ||
</ | </ |
informatica/sol/laboratorio17/esercitazionib/esercitazione1.1487568648.txt.gz · Ultima modifica: 20/02/2017 alle 05:30 (8 anni fa) da Massimo Torquati