Politecnico di Milano Esercizi Preparazione alla prima prova intermedia.
-
Upload
teobaldo-del-prete -
Category
Documents
-
view
218 -
download
0
Transcript of Politecnico di Milano Esercizi Preparazione alla prima prova intermedia.
![Page 1: Politecnico di Milano Esercizi Preparazione alla prima prova intermedia.](https://reader035.fdocumenti.com/reader035/viewer/2022062701/5542eb59497959361e8c4b0f/html5/thumbnails/1.jpg)
PolitecnicoPolitecnicodi Milanodi Milano
EserciziEsercizi
Preparazione alla prima prova intermediaPreparazione alla prima prova intermedia
![Page 2: Politecnico di Milano Esercizi Preparazione alla prima prova intermedia.](https://reader035.fdocumenti.com/reader035/viewer/2022062701/5542eb59497959361e8c4b0f/html5/thumbnails/2.jpg)
- - 22 - -
FiltraggioFiltraggio
L’utente inserisce un array di numeri reali non negativi (un numero negativo indica la fine della fase di inserimento)L’elaboratore calcola la seguente formula:
v[i] (v[i-1] + v[i] + v[i+1]) / 3
e visualizza l’array così filtratoQuando i corrisponde ai “bordi” dell’array, assumere che v[i-1] (oppure v[i+1]) valga zero.
![Page 3: Politecnico di Milano Esercizi Preparazione alla prima prova intermedia.](https://reader035.fdocumenti.com/reader035/viewer/2022062701/5542eb59497959361e8c4b0f/html5/thumbnails/3.jpg)
- - 33 - -
FiltraggioFiltraggio
#include <stdio.h>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);
} .
![Page 4: Politecnico di Milano Esercizi Preparazione alla prima prova intermedia.](https://reader035.fdocumenti.com/reader035/viewer/2022062701/5542eb59497959361e8c4b0f/html5/thumbnails/4.jpg)
- - 44 - -
FiltraggioFiltraggio
for (i = 0; i < tot; i++){
if (i == 0) {
precedente = 0; }
else {
precedente = numeri[i - 1]; }
.
![Page 5: Politecnico di Milano Esercizi Preparazione alla prima prova intermedia.](https://reader035.fdocumenti.com/reader035/viewer/2022062701/5542eb59497959361e8c4b0f/html5/thumbnails/5.jpg)
- - 55 - -
FiltraggioFiltraggio
if (i == tot - 1) {
successivo = 0; }
else {
successivo = numeri[i + 1]; }
printf ("%f\n", (precedente + numeri[i] + successivo)/3.0);
} /* fine ciclo for */} .
![Page 6: Politecnico di Milano Esercizi Preparazione alla prima prova intermedia.](https://reader035.fdocumenti.com/reader035/viewer/2022062701/5542eb59497959361e8c4b0f/html5/thumbnails/6.jpg)
- - 66 - -
TrasformazioneTrasformazione
L’utente inserisce un array di numeri interi, di lunghezza desiderataChiamando v l’array e indicando con m la posizione dell’ultima cella inserita (l’array 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].
![Page 7: Politecnico di Milano Esercizi Preparazione alla prima prova intermedia.](https://reader035.fdocumenti.com/reader035/viewer/2022062701/5542eb59497959361e8c4b0f/html5/thumbnails/7.jpg)
- - 77 - -
#include <stdio.h>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;
.
TrasformazioneTrasformazione
![Page 8: Politecnico di Milano Esercizi Preparazione alla prima prova intermedia.](https://reader035.fdocumenti.com/reader035/viewer/2022062701/5542eb59497959361e8c4b0f/html5/thumbnails/8.jpg)
- - 88 - -
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]);}
} .
TrasformazioneTrasformazione
![Page 9: Politecnico di Milano Esercizi Preparazione alla prima prova intermedia.](https://reader035.fdocumenti.com/reader035/viewer/2022062701/5542eb59497959361e8c4b0f/html5/thumbnails/9.jpg)
- - 99 - -
Def. Struttura datiDef. 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 EsamenumeroEsamiSuperati: numero intero non negativo;
![Page 10: Politecnico di Milano Esercizi Preparazione alla prima prova intermedia.](https://reader035.fdocumenti.com/reader035/viewer/2022062701/5542eb59497959361e8c4b0f/html5/thumbnails/10.jpg)
- - 1010 - -
Def. Struttura datiDef. Struttura dati
Si definisca inoltre la variabile vettStudenti, che permetta di rappresentare l’insieme degli studenti ad una certa università. L’università 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 l’occupazione in memoria della variabile vettStudenti.
![Page 11: Politecnico di Milano Esercizi Preparazione alla prima prova intermedia.](https://reader035.fdocumenti.com/reader035/viewer/2022062701/5542eb59497959361e8c4b0f/html5/thumbnails/11.jpg)
- - 1111 - -
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 datiDef. Struttura dati
![Page 12: Politecnico di Milano Esercizi Preparazione alla prima prova intermedia.](https://reader035.fdocumenti.com/reader035/viewer/2022062701/5542eb59497959361e8c4b0f/html5/thumbnails/12.jpg)
- - 1212 - -
Def. Struttura datiDef. 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.
![Page 13: Politecnico di Milano Esercizi Preparazione alla prima prova intermedia.](https://reader035.fdocumenti.com/reader035/viewer/2022062701/5542eb59497959361e8c4b0f/html5/thumbnails/13.jpg)
- - 1313 - -
Offerte fornitoriOfferte 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 l’utente inserisce 0 come codice fornitore, l’inserimento ha termine.Il programma cerca e visualizza l’offerta migliore (la più economica).
![Page 14: Politecnico di Milano Esercizi Preparazione alla prima prova intermedia.](https://reader035.fdocumenti.com/reader035/viewer/2022062701/5542eb59497959361e8c4b0f/html5/thumbnails/14.jpg)
- - 1414 - -
#include <stdio.h>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 fornitoriOfferte fornitori
![Page 15: Politecnico di Milano Esercizi Preparazione alla prima prova intermedia.](https://reader035.fdocumenti.com/reader035/viewer/2022062701/5542eb59497959361e8c4b0f/html5/thumbnails/15.jpg)
- - 1515 - -
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 fornitoriOfferte fornitori
![Page 16: Politecnico di Milano Esercizi Preparazione alla prima prova intermedia.](https://reader035.fdocumenti.com/reader035/viewer/2022062701/5542eb59497959361e8c4b0f/html5/thumbnails/16.jpg)
- - 1616 - -
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 fornitoriOfferte fornitori
![Page 17: Politecnico di Milano Esercizi Preparazione alla prima prova intermedia.](https://reader035.fdocumenti.com/reader035/viewer/2022062701/5542eb59497959361e8c4b0f/html5/thumbnails/17.jpg)
- - 1717 - -
Varie: CVarie: 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, multiploArray: max/min, somme elementi, media, ordinamento, ricerca, merge
Definizione di un tipo strutturato complesso:Campi a loro volta strutturatiCampi arrayCalcolo dello spazio allocato in memoria; bit o byte.
![Page 18: Politecnico di Milano Esercizi Preparazione alla prima prova intermedia.](https://reader035.fdocumenti.com/reader035/viewer/2022062701/5542eb59497959361e8c4b0f/html5/thumbnails/18.jpg)
- - 1818 - -
Varie: assegnamento con Varie: assegnamento con vettorivettori
Variabili di tipo semplice (int, float, …):
int a = 3, b = 4;a = b;
Variabili array :
char a[10], b[10];a = b;
![Page 19: Politecnico di Milano Esercizi Preparazione alla prima prova intermedia.](https://reader035.fdocumenti.com/reader035/viewer/2022062701/5542eb59497959361e8c4b0f/html5/thumbnails/19.jpg)
- - 1919 - -
ilMioRecord2
? ?? ?
? ??
ilMioRecord
?
Varie: assegnamento con Varie: assegnamento con structstruct
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.56 23A
ilMioRecord1
45
ilMioRecord2
24.56 23A 45
![Page 20: Politecnico di Milano Esercizi Preparazione alla prima prova intermedia.](https://reader035.fdocumenti.com/reader035/viewer/2022062701/5542eb59497959361e8c4b0f/html5/thumbnails/20.jpg)
- - 2020 - -
Varie: arrayVarie: array
Copia di un array:char a[10], b[10];unsigned int i, lungh;
…l’array a viene riempito con lungh caratteri…
for (i = 0; i < lungh; i++){
b[i] = a[i];}
Quando usare un’array?Leggo più dati, con il medesimo contenuto informativo, sui quali eseguirò il medesimo algoritmoI dati, per essere elaborati, devono essere tutti presenti (no elaborazione “al volo”); oppure devono essere conservati (es. stampa dopo elaborazione).
![Page 21: Politecnico di Milano Esercizi Preparazione alla prima prova intermedia.](https://reader035.fdocumenti.com/reader035/viewer/2022062701/5542eb59497959361e8c4b0f/html5/thumbnails/21.jpg)
- - 2121 - -
Diagramma a blocchi Diagramma a blocchi e traccia di esecuzionee 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 dell’input è indicata dall’inserimento dello 0. Si calcoli:
Il numero di coppie di numeri consecutivi ugualiIl numero di coppie in cui il secondo numero e’ divisore del primo, ma non ugualeSi 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 l’algoritmo 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
![Page 22: Politecnico di Milano Esercizi Preparazione alla prima prova intermedia.](https://reader035.fdocumenti.com/reader035/viewer/2022062701/5542eb59497959361e8c4b0f/html5/thumbnails/22.jpg)
- - 2222 - -
divis = 0; ugua = 0
d1 != 0
d2 != 0
d1 == d2
ugua++
d1 = d2
d1 % d2 == 0
divis++
A
ugua!= 0 ||divis != 0
ugua > divis
A
V
F
F
V
F
V
F
V
V
F
V
F
0
1
2
3
15
184
5
6
8
7 9
10
11
16
14
12
13
18
Leggi d1
“Sequenzanon esiste”
Inizio
Fine
Leggi d2
“Nessunacoppia”
“Più coppiecon divisore”
“Più coppieuguali”Fine
![Page 23: Politecnico di Milano Esercizi Preparazione alla prima prova intermedia.](https://reader035.fdocumenti.com/reader035/viewer/2022062701/5542eb59497959361e8c4b0f/html5/thumbnails/23.jpg)
- - 2323 - -
Traccia di esecuzione - 1Traccia di esecuzione - 1
Nº blocco
Prox blocco
test d1 d2 divis ugua
1 2 0 0
2 3 4
3 4 V
4 5 4
5 6 V
6 7 V
7 10 1
10 4 4
4 5 4
![Page 24: Politecnico di Milano Esercizi Preparazione alla prima prova intermedia.](https://reader035.fdocumenti.com/reader035/viewer/2022062701/5542eb59497959361e8c4b0f/html5/thumbnails/24.jpg)
- - 2424 - -
Traccia di esecuzione - 2Traccia di esecuzione - 2
Nº blocco
Prox blocco
test d1 d2 divis ugua
5 6 V
6 7 V
7 10 2
10 4 4
4 5 2
5 6 V
6 8 F
8 9 V
9 10 1
![Page 25: Politecnico di Milano Esercizi Preparazione alla prima prova intermedia.](https://reader035.fdocumenti.com/reader035/viewer/2022062701/5542eb59497959361e8c4b0f/html5/thumbnails/25.jpg)
- - 2525 - -
Traccia di esecuzione - 3Traccia di esecuzione - 3
Nº blocco
Prox blocco
test d1 d2 divis ugua
10 4 2
4 5 9
5 6 V
6 8 F
8 10 F
10 4 9
4 5 0
5 11 F
11 12 V (1) (2)
![Page 26: Politecnico di Milano Esercizi Preparazione alla prima prova intermedia.](https://reader035.fdocumenti.com/reader035/viewer/2022062701/5542eb59497959361e8c4b0f/html5/thumbnails/26.jpg)
- - 2626 - -
Traccia di esecuzione - 4Traccia di esecuzione - 4
Nº blocco
Prox blocco
test d1 d2 divis ugua
12 13 V (1) (2)
13 18
18 -
![Page 27: Politecnico di Milano Esercizi Preparazione alla prima prova intermedia.](https://reader035.fdocumenti.com/reader035/viewer/2022062701/5542eb59497959361e8c4b0f/html5/thumbnails/27.jpg)
- - 2727 - -
Varie: diagramma a blocchiVarie: 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.
![Page 28: Politecnico di Milano Esercizi Preparazione alla prima prova intermedia.](https://reader035.fdocumenti.com/reader035/viewer/2022062701/5542eb59497959361e8c4b0f/html5/thumbnails/28.jpg)
- - 2828 - -
Varie: codifica binariaVarie: codifica binaria
Usare il numero di bit corretto per codifica e calcoliIn CPL2 i numeri non negativi cominciano con uno zero!Formula logica tabella della verità formula logicaNella tabella della verità, ordinare i bit secondo la modalità vista a lezione