Funzione C Soluzione Strutture dati
Transcript
Funzione C Soluzione Strutture dati
Funzione C Definire una struttura dati per memorizzare un elenco di libri. Ciascun libro è descritto da un Autore, un Titolo, un Editore e un anno di pubblicazione Scrivere una funzione in linguaggio C che acquisisca da tastiera l’elenco di libri e li memorizzi in una variabile che deve essere restituita dalla funzione. Esercizi del 18.12.2009 Fondamenti di Informatica II Soluzione Strutture dati typedef char stringa[50]; typedef struct{ stringa Autore; stringa Titolo; stringa Editore; int Anno; } Libro; typedef struct { Libro E[1000]; int NumLibri; } Elenco; Esercizi del 18.12.2009 Fondamenti di Informatica II Soluzione Funzione Elenco LeggiDati(void) { int i; Elenco L; printf("Scrivi il numero dei libri "); scanf("%d",&L.NumLibri); for(i=0;i<L.NumLibri;i++) { scanf("%s",L.E[i].Autore); scanf("%s",L.E[i].Titolo); scanf("%s",L.E[i].Editore); scanf("%d",&L.E[i].Anno); } return L; } Esercizi del 18.12.2009 Fondamenti di Informatica II Funzione C Con riferimento alla struttura dati dell’esercizio precedente, scrivere una funzione che prenda in ingresso un elenco di libri e restituisca l’anno di uscita del libro più vecchio in elenco. La funzione deve inoltre stampare i dati del libro più vecchio in elenco. Esercizi del 18.12.2009 Fondamenti di Informatica II Soluzione Funzione C int LibroPiuVecchio(Elenco L) { int i; int vecchio = L.E[0].Anno; int IndiceLibroVecchio = 0; for(i=1;i<L.NumLibri;i++) if(vecchio > L.E[i].Anno) { vecchio = L.E[i].Anno; IndiceLibroVecchio = i; } printf("Autore: %s\n", L.E[IndiceLibroVecchio].Autore); printf("Titolo: %s\n", L.E[IndiceLibroVecchio].Titolo); printf("Editore: %s\n", L.E[IndiceLibroVecchio].Editore); printf(”Anno: %d\n", L.E[IndiceLibroVecchio].Anno); return vecchio; } Esercizi del 18.12.2009 Fondamenti di Informatica II Funzione C Scrivere una funzione C che prende in ingresso una stringa di testo e restituisce 1 se è palindroma (è identica letta da sinistra a destra e da destra a sinistra), 0 altrimenti. Utilizzare la funzione di libreria int strlen(char *) per calcolare la lunghezza della stringa http://it.wikipedia.org/wiki/Palindromo Esercizi del 18.12.2009 Fondamenti di Informatica II Soluzione Palindroma int Palindroma(char parola[]) { int ris = 1; int l = strlen(parola); int i; for(i=0;i<l/2;i++) if(parola[i]!=parola[l-1-i]) { ris = 0; break; } return ris; } Esercizi del 18.12.2009 Fondamenti di Informatica II Mistero int mistero(char frase[]) { int i=0, k=0; while(frase[i]){ if(frase[i]=" ") k++; i++; } return k; } Risposta: conta le parole contenute nella frase Esercizi del 18.12.2009 Fondamenti di Informatica II SQL CD(Codice,Autore,Casadisco) CLIENTE(Ntess,Nome,Indirizzo) ACQUISTO(Codice,Ntess,Data,Qta) FK Codice REFERENCES CD FK Ntess REFERENCES Cliente Trovare • Clienti che non hanno acquistato CD di Pearl Jam • Clienti che hanno acquistato il maggior numero di dischi • Clienti che hanno acquistato il maggior numero di copie (qta) di uno stesso CD in un acquisto Esercizi del 18.12.2009 Fondamenti di Informatica II Clienti che non hanno acquistato CD di Pearl Jam SELECT Ntess FROM Cliente WHERE Ntess NOT IN ( SELECT A.Ntess FROM Acquisto A, CD C WHERE A.Codice = C.codice AND C.Autore = 'Pearl Jam') Esercizi del 18.12.2009 Fondamenti di Informatica II Clienti che hanno acquistato il maggior numero di dischi SELECT Ntess FROM Acquisto GROUP BY Ntess HAVING SUM(qta) >= ALL (SELECT SUM(Qta) FROM Acquisto GROUP BY Ntess) Esercizi del 18.12.2009 Fondamenti di Informatica II Clienti che hanno acquistato il maggior numero di copie (qta) di un certo CD in un acquisto SELECT Ntess FROM Acquisto WHERE Qta = (SELECT MAX(Qta) FROM Acquisto) Esercizi del 18.12.2009 Fondamenti di Informatica II