= 0) { numeri[tot] = n; tot++; printf ("Numero non negativo: "); scanf ("%f", &n); }."> = 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 - 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 - 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 - 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 1 + 30 Esame x 10 byte + 1 intero x 2 byte = 308 byte Quindi, vettStudenti: 1000 Studente x 308 byte = 308000 byte.

13 - 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 - 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 - 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 - 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 - 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 - 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 - 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; 24.5623A ilMioRecord1 45 ilMioRecord2 24.5623A45

20 - 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 - 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 è 5 5 5 5 5 2 3 12 6 2, 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: 4 4 4 2 9 NOTA: non è necessario controllare che i dati di ingresso siano maggiori o uguali a 0

22 - 22 -

23 - 23 - Traccia di esecuzione - 1 Nº blocco Prox blocco testd1d2divisugua 1200 234 34V 454 56V 67V 7101 44 454

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

25 - 25 - Traccia di esecuzione - 3 Nº blocco Prox blocco testd1d2divisugua 1042 459 56V 68F 8 F 49 450 511F 12V(1)(2)

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

27 - 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 - 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