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 (9 anni fa)] – creata Massimo Torquati | informatica:sol:laboratorio17:esercitazionib:esercitazione1 [22/02/2017 alle 11:16 (9 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 (9 anni fa) da Massimo Torquati
