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