= 0) { numeri[tot] = n; tot++; printf ("Numero non negativo: "); scanf ("%f", &n); }.">

La presentazione è in caricamento. Aspetta per favore

La presentazione è in caricamento. Aspetta per favore

Politecnico di Milano Esercizi Preparazione alla prima prova intermedia.

Presentazioni simili


Presentazione sul tema: "Politecnico di Milano Esercizi Preparazione alla prima prova intermedia."— Transcript della presentazione:

1 Politecnico di Milano Esercizi Preparazione alla prima prova intermedia

2 - 2 - Filtraggio Lutente inserisce un array di numeri reali non negativi (un numero negativo indica la fine della fase di inserimento) Lelaboratore calcola la seguente formula: v[i] (v[i-1] + v[i] + v[i+1]) / 3 e visualizza larray così filtrato Quando i corrisponde ai bordi dellarray, assumere che v[i-1] (oppure v[i+1]) valga zero.

3 - 3 - Filtraggio #include void main() { unsigned int tot = 0, i; float n, precedente, successivo, numeri[100]; printf ("Numero non negativo: "); scanf ("%f", &n); while (n >= 0) { numeri[tot] = n; tot++; printf ("Numero non negativo: "); scanf ("%f", &n); }.

4 - 4 - Filtraggio for (i = 0; i < tot; i++) { if (i == 0) { precedente = 0; } else { precedente = numeri[i - 1]; }.

5 - 5 - Filtraggio if (i == tot - 1) { successivo = 0; } else { successivo = numeri[i + 1]; } printf ("%f\n", (precedente + numeri[i] + successivo)/3.0); } /* fine ciclo for */ }.

6 - 6 - Trasformazione Lutente inserisce un array di numeri interi, di lunghezza desiderata Chiamando v larray e indicando con m la posizione dellultima cella inserita (larray sarà quindi composto da m+1 celle), il programma applica il seguente calcolo: per ogni i: in v[i] ed in v[m-i] si inserisce il valore v[i]+v[m-i] Esempio: v[0, 3, -7, 5, -2] v[-2, 8, -14, 8, -2] v[5, -7, 3, 2] v[7, -4, -4, 7].

7 - 7 - #include void main() { const unsigned int MAX = 100; unsigned int tot, m, i; int numeri[MAX], temp; printf ("Quanti numeri: "); scanf ("%u", &tot); /* saranno riempite tot celle, da 0 a tot-1 */ for (i = 0; i < tot; i++) { printf ("Numero:"); scanf ("%d", &numeri[i]); } m = tot - 1;. Trasformazione

8 - 8 - for (i = 0; i <= m / 2; i++) { temp = numeri[i] + numeri[m - i]; numeri[i] = temp; numeri[m - i] = temp; } for (i = 0; i < tot; i++) { printf ("%d\n", numeri[i]); } }. Trasformazione

9 - 9 - Def. Struttura dati Si definisca il tipo strutturato Esame che permetta di rappresentare le informazioni riguardanti un esame superato da un certo studente. Esame è composto dai seguenti dati: codiceCorso: una sequenza di 6 caratteri, votoRiportato: numero intero non negativo, annoAccademico: numero intero non negativo; Si definisca il tipo strutturato Studente che permetta di rappresentare informazioni riguardanti tutti gli esami superati da un certo studente. Studente è composto dai seguenti dati: matricola: una sequenza di 6 caratteri; vettEsamiSuperati: un vettore composto da 30 celle di tipo Esame numeroEsamiSuperati: numero intero non negativo;

10 Def. Struttura dati Si definisca inoltre la variabile vettStudenti, che permetta di rappresentare linsieme degli studenti ad una certa università. Luniversità in questione potrà gestire un massimo di 1000 studenti. Supponendo di riferirsi ad una architettura in cui una variabile di tipo char occupi 1 byte e un intero occupi 2 byte, calcolare loccupazione in memoria della variabile vettStudenti.

11 typedef struct { char codiceCorso[6]; unsigned int votoRiportato; unsigned int annoAccademico; } Esame; typedef struct { char matricola[6]; Esame vettEsamiSuperati[30]; unsigned int numeroEsamiSuperati; } Studente; Studente vettStudenti[1000]; Def. Struttura dati

12 Def. Struttura dati Occupazione di memoria: Esame: 6 caratteri x 1 byte + 1 intero x 2 byte + 1 intero x 2 byte = 10 byte Studente: 6 caratteri x Esame x 10 byte + 1 intero x 2 byte = 308 byte Quindi, vettStudenti: 1000 Studente x 308 byte = byte.

13 Offerte fornitori Il programma permette di inserire un certo numero di offerte di fornitori: Codice fornitore (numero naturale) Nome fornitore (stringa) Importo offerta in euro (numero float) Quando lutente inserisce 0 come codice fornitore, linserimento ha termine. Il programma cerca e visualizza lofferta migliore (la più economica).

14 #include void main() { const unsigned int MAX_OFFERTE=1000, MAX_CAR=20; typedef char Stringa[MAX_CAR]; typedef struct { unsigned int codFornitore; Stringa nomeFornitore; float importo; } Offerta; Offerta arrayOfferte[MAX_OFFERTE], nuovaOfferta; int numOfferte = 0, j; float offertaMin; unsigned int posizOffertaMin;. Offerte fornitori

15 printf ("Codice fornitore: "); scanf ("%u", &nuovaOfferta.codFornitore); printf ("Nome fornitore: "); scanf ("%s", nuovaOfferta.nomeFornitore); printf ("Importo offerta (euro): "); scanf ("%f", &nuovaOfferta.importo); while (nuovaOfferta.codFornitore != 0) { arrayOfferte[numOfferte] = nuovaOfferta; numOfferte++; printf ("Codice fornitore: "); scanf ("%u", &nuovaOfferta.codFornitore); printf ("Nome fornitore: "); scanf ("%s", nuovaOfferta.nomeFornitore); printf ("Importo offerta (euro): "); scanf ("%f", &nuovaOfferta.importo); }. Offerte fornitori

16 offertaMin = arrayOfferte[0].importo; posizOffertaMin = 0; for (j = 1; j < numOfferte; j++) { if (arrayOfferte[j].importo < offertaMin) { offertaMin = arrayOfferte[j].importo; posizOffertaMin = j; } } printf ("Cod.fornitore:%u,nome:%s,importo:%f\n", arrayOfferte[posizOffertaMin].codFornitore, arrayOfferte[posizOffertaMin].nomeFornitore, arrayOfferte[posizOffertaMin].importo); }. Offerte fornitori

17 Varie: C Programmazione: Tipi strutturati (lettura, copia, stampa) Array (lettura, copia, stampa) Funzioni (var. locali/globali, regole di visibilità, parametri di ingresso, valore di ritorno, prototipo) Algoritmi tipici: Scambio contenuto di due variabili, multiplo Array: max/min, somme elementi, media, ordinamento, ricerca, merge Definizione di un tipo strutturato complesso: Campi a loro volta strutturati Campi array Calcolo dello spazio allocato in memoria; bit o byte.

18 Varie: assegnamento con vettori Variabili di tipo semplice (int, float, …): int a = 3, b = 4; a = b; Variabili array : char a[10], b[10]; a = b;

19 ilMioRecord2 ??????? ilMioRecord ? Varie: assegnamento con struct Tipi strutturati: typedef struct { char campo1; float campo2; int campo3[2]; } Record; Record ilMioRecord1, ilMioRecord2; ilMioRecord1.campo1 = ' A ' ; ilMioRecord1.campo2 = 24.56; ilMioRecord1.campo3[0] = 23; ilMioRecord1.campo3[1] = 45; ilMioRecord2 = ilMioRecord1; A ilMioRecord1 45 ilMioRecord A45

20 Varie: array Copia di un array: char a[10], b[10]; unsigned int i, lungh; …larray a viene riempito con lungh caratteri… for (i = 0; i < lungh; i++) { b[i] = a[i]; } Quando usare unarray? Leggo più dati, con il medesimo contenuto informativo, sui quali eseguirò il medesimo algoritmo I dati, per essere elaborati, devono essere tutti presenti (no elaborazione al volo); oppure devono essere conservati (es. stampa dopo elaborazione).

21 Diagramma a blocchi e traccia di esecuzione A) Sia data una sequenza di numeri interi positivi diversi da zero. I valori sono letti in input da tastiera. La fine dellinput è indicata dallinserimento dello 0. Si calcoli: Il numero di coppie di numeri consecutivi uguali Il numero di coppie in cui il secondo numero e divisore del primo, ma non uguale Si visualizzi un messaggio che dica quale tipo di coppie tra i due precedenti è presente in numero maggiore. Ad esempio, se la sequenza letta in input è , allora lalgoritmo calcolerà 4 come n.ro di coppie di interi uguali e 2 come n.ro di coppie in cui il secondo numero è divisore del primo e visualizzerà il messaggio: La sequenza contiene un numero maggiore di coppie di numeri uguali. B) Si costruisca la traccia di esecuzione del programma in corrispondenza della sequenza di ingresso: NOTA: non è necessario controllare che i dati di ingresso siano maggiori o uguali a 0

22 - 22 -

23 Traccia di esecuzione - 1 Nº blocco Prox blocco testd1d2divisugua V V 67V

24 Traccia di esecuzione - 2 Nº blocco Prox blocco testd1d2divisugua 56V 67V V 68F 89V 9 1

25 Traccia di esecuzione - 3 Nº blocco Prox blocco testd1d2divisugua V 68F 8 F F 12V(1)(2)

26 Traccia di esecuzione - 4 Nº blocco Prox blocco testd1d2divisugua 1213V(1)(2)

27 Varie: diagramma a blocchi Diagramma a blocchi: E necessario usare i vettori? Numerare i blocchi Traccia di esecuzione: Non ripetere il valore delle variabili se il contenuto non viene modificato I valori tra parentesi servono solo per maggiore chiarezza Usare lo stile visto a lezione per num. blocchi, variabili, test, ecc.

28 Varie: codifica binaria Usare il numero di bit corretto per codifica e calcoli In CPL 2 i numeri non negativi cominciano con uno zero! Formula logica tabella della verità formula logica Nella tabella della verità, ordinare i bit secondo la modalità vista a lezione


Scaricare ppt "Politecnico di Milano Esercizi Preparazione alla prima prova intermedia."

Presentazioni simili


Annunci Google