Strumenti Utente

Strumenti Sito


informatica:sol:laboratorio15:esercitazionia:esercitazione1

Differenze

Queste sono le differenze tra la revisione selezionata e la versione attuale della pagina.

Link a questa pagina di confronto

Entrambe le parti precedenti la revisioneRevisione precedente
Prossima revisione
Revisione precedente
informatica:sol:laboratorio15:esercitazionia:esercitazione1 [24/02/2015 alle 07:27 (10 anni fa)] – [Esercizio 6] Massimo Torquatiinformatica:sol:laboratorio15:esercitazionia:esercitazione1 [16/03/2015 alle 16:16 (10 anni fa)] (versione attuale) Massimo Torquati
Linea 6: Linea 6:
 In caso di difficoltà su aspetti del C, discuterne con il docente. In caso di difficoltà su aspetti del C, discuterne con il docente.
  
-===== Esercizio 1 (sul debugging con gdb===== +===== Illustrazione uso gdb ===== 
-Usare il debugger [[http://www.gnu.org/software/gdb|gdb]] per trovare gli errori in questo programma C +Vediamo come si usa il debugger [[http://www.gnu.org/software/gdb| gdb]] usando [[usogdb|questo]] codice non funzionante. I comandi del gdb da ricordare sono: \\ 
-(ce ne sono almeno 2):+- run ( r ), break <file:linea> ( b ), step ( s ), next ( n ), print <variabile> ( p ), set args <argomenti>, backtrace ( bt ), finish, continue ( c ), quit ( q ).  
 + 
 +===== Esercizio 1 ===== 
 +Usare il debugger gdb (o per chi vuole la sua interfaccia grafica [[http://www.gnu.org/software/ddd|ddd]] ) per trovare gli errori in questo programma C (ce ne sono almeno 2):
 <code c> <code c>
 #include <stdlib.h> #include <stdlib.h>
Linea 49: Linea 52:
  
 ===== Esercizio 3 ===== ===== Esercizio 3 =====
-Data una stringa con caratteri minuscoli e maiuscoli, trasformarla in una stringa con tutti i caratteri maiuscoli. NOTE: è possibile utilizzare le funzioni di libreria 'islower' e 'toupper' definite in ctype.h (vedere man 3 islower).+Data una stringa con caratteri minuscoli e maiuscoli, trasformarla in una stringa con tutti i caratteri maiuscoli. NOTE: è possibile utilizzare le funzioni di libreria ''islower'' e ''toupper'' definite in ''ctype.h'' (vedere man 3 islower).
 Ad esempio usare la stringa: Ad esempio usare la stringa:
 <code c> <code c>
Linea 74: Linea 77:
 const char *mystrcat(char *prima, ...); const char *mystrcat(char *prima, ...);
 </code> </code>
-che prenda un numero di stringhe variabili e che concateni  tutte le stringhe alla 'prima' con lo stesso comportamento della funzione di libreria 'strcat' (man 3 strcat).+che prenda un numero di stringhe variabili e che concateni  tutte le stringhe alla 'prima' con lo stesso comportamento della funzione di libreria ''strcat'' (man 3 strcat).
 Utilizzare il seguente main: Utilizzare il seguente main:
 <code c> <code c>
Linea 86: Linea 89:
 NOTA: A che cosa serve l'ultimo argomento 'NULL' ? NOTA: A che cosa serve l'ultimo argomento 'NULL' ?
 ===== Esercizio 6 ===== ===== Esercizio 6 =====
-Scrivere un programma che dato un intero A a 32bit (usare i tipi int16_t, int32_t definiti in #include<stdint.h>) calcoli lo 'xor bit a bit' dei 2 byte piu' significativi (quelli di sinistra) con i 2 byte meno significativi. L'operatore di xor bit a bit è '^' (es. 0101 ^ 1100 = 1001). +Scrivere un programma che dato un intero A a 32bit (usare i tipi int16_t, int32_t definiti in #include<stdint.h>) calcoli lo 'xor bit a bit' dei 2 byte piu' significativi (quelli di sinistra) con i 2 byte meno significativi. L'operatore di xor bit a bit in C è '^' (es. 0101 ^ 1100 = 1001). 
-Dato A1 in formato network-byte-order di A (cioè formato big-endian, utilizzare htonl -- vedi man 3 htonl),  +Dato A1 contenente A in formato network-byte-order (cioè formato big-endian, utilizzare A1=htonl(A) -- vedi man 3 htonl), riordinare esplicitamente i byte di A1 in host-byte-order (cioè formato little-endian per sistemi Intel/AMD based) senza usare la funzione 'ntohl'. Dato il numero in formato esadecimale 0x1234567, i due formati hanno la seguente rappresentazione in memoria:
-riordinare i byte di A1 in host-byte-order (cioè formato little-endian per sistemi Intel/AMD based). Vedere man 3 byteorder.  +
-Dato il numero in formato esadecimale 0x1234567:+
 <code c> <code c>
   high <------------------- low   high <------------------- low
Linea 100: Linea 101:
     3                1              3                1         
 </code> </code>
-===== Esercizio 7 =====+===== Esercizio 7 (binaryTree) =====
  
 Scrivere un programma che, dato un array di N elementi interi, costruisca un albero binario di ricerca (cioè per ogni nodo dell'albero, l'elemento del nodo è maggiore di tutti gli elementi del sottoalbero di sinistra e minore o uguale di tutti gli elementi del sottoalbero di destra).  Scrivere un programma che, dato un array di N elementi interi, costruisca un albero binario di ricerca (cioè per ogni nodo dell'albero, l'elemento del nodo è maggiore di tutti gli elementi del sottoalbero di sinistra e minore o uguale di tutti gli elementi del sottoalbero di destra). 
Linea 144: Linea 145:
 </code> </code>
 Se ci sono opzioni non riconosciute queste dovranno essere stampate a video Se ci sono opzioni non riconosciute queste dovranno essere stampate a video
-con il messaggio "opzione X non riconosciuta".+con il messaggio "opzione X non riconosciuta"Per convertire le stringhe in interi usare la funzione 
 +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'eseguibile si chiami cmdlineparsing): Testare il programma con i seguenti casi (supponiamo che l'eseguibile si chiami cmdlineparsing):
 <code c> <code c>
 cmdlineparsing -n 10 -m 11 -s 'ciao mondo'  cmdlineparsing -n 10 -m 11 -s 'ciao mondo' 
-cmdlineparsing -n 10 -h     // deve stampare solo il messaggio di usage +cmdlineparsing -n 10 -h     // deve stampare il messaggio di usage 
 cmdlineparsing -n 10 -k 12  // k e' una opzione non riconosciuta cmdlineparsing -n 10 -k 12  // k e' una opzione non riconosciuta
 cmdlineparsing ----n 10 -s-s 'ciao mondo'  // deve stampare -n: 10 e -s: -s cmdlineparsing ----n 10 -s-s 'ciao mondo'  // deve stampare -n: 10 e -s: -s
informatica/sol/laboratorio15/esercitazionia/esercitazione1.1424762846.txt.gz · Ultima modifica: 24/02/2015 alle 07:27 (10 anni fa) da Massimo Torquati

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki