+ All Categories
Home > Documents > Politecnico di Milano Esercizi Preparazione alla prima prova intermedia.

Politecnico di Milano Esercizi Preparazione alla prima prova intermedia.

Date post: 01-May-2015
Category:
Upload: teobaldo-del-prete
View: 216 times
Download: 0 times
Share this document with a friend
28
Politecnico Politecnico di Milano di Milano Esercizi Esercizi Preparazione alla prima prova intermedia Preparazione alla prima prova intermedia
Transcript
Page 1: Politecnico di Milano Esercizi Preparazione alla prima prova intermedia.

PolitecnicoPolitecnicodi Milanodi Milano

EserciziEsercizi

Preparazione alla prima prova intermediaPreparazione alla prima prova intermedia

Page 2: Politecnico di Milano Esercizi Preparazione alla prima prova intermedia.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


Recommended