Array e matrici -...

35
Facoltà di Ingegneria Industriale Laurea in Ingegneria Energetica, Meccanica e dei Trasporti Informatica B Esercitazione 3 Array e matrici Andrea Galbiati [email protected] Dipartimento di Elettronica e Informazione

Transcript of Array e matrici -...

Facoltà di Ingegneria Industriale

Laurea in Ingegneria Energetica, Meccanica

e dei Trasporti

Informatica B – Esercitazione 3

Array e matrici

Andrea Galbiati [email protected]

Dipartimento di

Elettronica e Informazione

F.A.Q.

Frequently Asked Questions

2

Programmazione e programmazione

• La Programmazione è l’arte di risolvere

un problema “grande” scomponendolo

in problemi più “piccoli”

• La programmazione è la tecnica di

scrivere codice che implementi le

soluzioni

• E’ un ERRORE iniziare a scrivere

codice subito, senza prima progettare la

soluzione

3

Strutturare la soluzione

• Leggere il testo (capendolo)

• Dividerlo in sottoproblemi o compiti

atomici

• Prima di scrivere il codice usare i

commenti per dividere il file sorgente

nelle parti decise

• Iniziare a scrivere il codice, cioè ad

implementare le idee

4

“Scusi, come si fa?”

• Domanda che sento spesso....

• .... La risposta non c’è. Non univoca

almeno.

• Un problema può essere affrontato in

diversi modi, ognuno dei quali ha

molteplici possibili implementazioni

• Ci sono soluzioni più o meno eleganti,

più o meno efficienti, più o meno

comprensibili, più o meno robuste....

5

Scrivere codice

1. Indenting da usare spesso e volentieri

2. Date ARIA al codice... Rendetelo

leggibile

3. Commentare commentare

commentare

6

Scrivere codice

7

int main()

{

if ( i < 0){

for (j=0; j < num; j++){

printf(“Ciao %s!”, nome);}

puts(“********”);}

system(“pause”);

}

Scrivere codice

8

int main()

{

if ( i < 0){

for (j=0; j < num; j++){

printf(“Ciao %s!”, nome);}

puts(“********”);}

system(“pause”);

}

Scrivere codice

9

int main()

{

if ( i < 0)

{

for (j=0; j < num; j++)

{

printf(“Ciao %s!”, nome);

}

puts(“********”);

}

system(“pause”);

}

Scrivere codice

10

int main()

{

// Controlliamo la variabile

if ( i < 0)

{

// Cicliamo per stampare

// il risultato

for (j=0; j < num; j++)

{

printf(“Ciao %s!”, nome);

}

// Inseriamo dei caratteri

// per mettere dello spazio

puts(“\n********”);

}

// Attendiamo....

system(“pause”);

}

Punto e virgola

• Il punto e virgola va alla fine di ogni

ISTRUZIONE

• Non va alla fine di ogni RIGA

• Per cui

– Non va dopo la condizione dell’IF

– Non va dopo la condizione del WHILE

– Non va dopo la condizione del FOR

• Il compilatore si lamenta....

11

L’ordine delle cose....

12

int main()

{

int a, b, c;

float delta;

delta = pow(b,2) – 4*a*c;

printf(“Inserire a: ”);

scanf(“%d”, &a);

printf(“Inserire b: ”);

scanf(“%d”, &b);

printf(“Inserire c: ”);

scanf(“%d”, &c);

printf(“Delta vale: %f”, delta);

system(“pause”);

}

L’ordine delle cose....

Quanto vale delta?13

int main()

{

int a, b, c;

float delta;

delta = pow(b,2) – 4*a*c;

printf(“Inserire a: ”);

scanf(“%d”, &a);

printf(“Inserire b: ”);

scanf(“%d”, &b);

printf(“Inserire c: ”);

scanf(“%d”, &c);

printf(“Delta vale: %f”, delta);

system(“pause”);

}

L’ordine delle cose....

Quanto vale delta?14

int main()

{

int a, b, c;

float delta;

delta = pow(b,2) – 4*a*c;

printf(“Inserire a: ”);

scanf(“%d”, &a);

printf(“Inserire b: ”);

scanf(“%d”, &b);

printf(“Inserire c: ”);

scanf(“%d”, &c);

printf(“Delta vale: %f”, delta);

system(“pause”);

}

UN NUMERO CASUALE!

L’ordine delle cose....

Quanto vale delta?15

int main()

{

int a, b, c;

float delta;

delta = pow(b,2) – 4*a*c;

printf(“Inserire a: ”);

scanf(“%d”, &a);

printf(“Inserire b: ”);

scanf(“%d”, &b);

printf(“Inserire c: ”);

scanf(“%d”, &c);

printf(“Delta vale: %f”, delta);

system(“pause”);

}

UN NUMERO CASUALE!

Tipi di dati (1)

• Int e float NON sono intercambiabili a piacere

• Il C segue regole di TIPIZZAZIONE FORTE

• Non cadete nella tentazione INT = FLOAT senza i decimali.... Non sempre è così!

• Le operazioni e le funzioni sono definite per certi TIPI e in base a questi restituiscono dati di un certo TIPO

• Esempio sqrt– double sqrt ( double x );

– float sqrt ( float x );

– long double sqrt ( long double x );

16

Tipi di dati (2)

• E int sqrt( int x ) !!?!?!

• Non c’è perché int è l’anello più “debole”

della catena e viene automaticamente

convertito in altri tipi (float, double) se

serve.

int < float < double

• Vediamo un esempio.....

17

delta = pow(b,2) – 4*a*c;

Tipi di dati (2)

• E int sqrt( int x ) !!?!?!

• Non c’è perché int è l’anello più “debole”

della catena e viene automaticamente

convertito in altri tipi (float, double) se

serve.

int < float < double

• Vediamo un esempio.....

18

delta = pow(b,2) – 4*a*c;

Tipi di dati (2)

• E int sqrt( int x ) !!?!?!

• Non c’è perché int è l’anello più “debole”

della catena e viene automaticamente

convertito in altri tipi (float, double) se

serve.

int < float < double

• Vediamo un esempio.....

19

delta = pow(b,2) – 4*a*c;

int

Tipi di dati (2)

• E int sqrt( int x ) !!?!?!

• Non c’è perché int è l’anello più “debole”

della catena e viene automaticamente

convertito in altri tipi (float, double) se

serve.

int < float < double

• Vediamo un esempio.....

20

delta = pow(b,2) – 4*a*c;

int

Tipi di dati (2)

• E int sqrt( int x ) !!?!?!

• Non c’è perché int è l’anello più “debole”

della catena e viene automaticamente

convertito in altri tipi (float, double) se

serve.

int < float < double

• Vediamo un esempio.....

21

delta = pow(b,2) – 4*a*c;

intfloat

Tipi di dati (2)

• E int sqrt( int x ) !!?!?!

• Non c’è perché int è l’anello più “debole”

della catena e viene automaticamente

convertito in altri tipi (float, double) se

serve.

int < float < double

• Vediamo un esempio.....

22

delta = pow(b,2) – 4*a*c;

intfloat

Tipi di dati (2)

• E int sqrt( int x ) !!?!?!

• Non c’è perché int è l’anello più “debole”

della catena e viene automaticamente

convertito in altri tipi (float, double) se

serve.

int < float < double

• Vediamo un esempio.....

23

delta = pow(b,2) – 4*a*c;

intfloat

Tipi di dati (2)

• E int sqrt( int x ) !!?!?!

• Non c’è perché int è l’anello più “debole”

della catena e viene automaticamente

convertito in altri tipi (float, double) se

serve.

int < float < double

• Vediamo un esempio.....

24

delta = pow(b,2) – 4*a*c;

float float

Tipi di dati (2)

• E int sqrt( int x ) !!?!?!

• Non c’è perché int è l’anello più “debole”

della catena e viene automaticamente

convertito in altri tipi (float, double) se

serve.

int < float < double

• Vediamo un esempio.....

25

delta = pow(b,2) – 4*a*c;

float float

ESERCIZI

Vediamo esercizi sui cicli

26

Esercizio 1 – array

Testo: chiedere nome, cognome ed età dell'utente e scrivere frase di benvenuto personalizzata

Dichiarazione arraytipo nome[dimensione];

esempio:

int intArray[20];

char stringa[40];

float bidim[20][20];

27

Esercizio 1 (2)

• Progetto

– Chiediamo nome, cognome ed età

(separatamente)

– Leggiamo i dati e salviamoli

– Visualizziamo la stringa di benvenuto

• Implementazione

– Quante variabili? Che tipo?

– Come leggiamo e salviamo?

28

Esercizio 1 (3) – Extras...

• Cosa contiene la variabile nome?

• Cosa vedo se visualizzo la variabile

nome?

• Come si inizializza un array?

29

Esercizio 2 – Ancora array di char

Testo: chiedere nome, cognome e data di nascita dell’utente con un unico input. I dati vanno divisi da virgole, la data in formato dd/mm/yyyy. In uscita dare il resoconto dei dati utente e calcolare l’età.

Esempio:

IN Andrea, Galbiati, 11/05/1982

OUT Nome: Andrea

Cognome: Galbiati

Data di nascita: 11/05/1982

Età: 28 anni.30

Esercizio 2 (2)

• Progetto

– Chiediamo nome, cognome ed età

secondo una certa formattazione

– Leggiamo i dati e salviamoli nelle apposite

variabili

– Visualizziamo la stringa di benvenuto

• Implementazione

– Quante variabili? Che tipo?

– Come leggiamo e salviamo?

31

Esercizio 3 – Matrici numeriche

Testo: far inserire all’utente due matrici. Chiedere poi che operazione svolgere tra: somma, differenza, e moltiplicazione scalare. Calcolare anche il massimo di ogni matrice e la media aritmetica dei suoi valori.

• Le dimensioni delle matrici?

• Che variabili?

• Attenzione agli indici....

32

Esercizio 3 (1) – Matrici numeriche

• Cosa serve?– Sulle matrici (singole)

• Inserire i valori

• Il massimo

• Il minimo

• La media aritmetica

– Su entrambe le matrici• Somma

• Differenza

• Prodotto

– Visualizzazione• Le matrici inserite

• Il risultato dell’operazione scelta

33

Esercizio 3 (2) – Matrici numeriche

• MAX e MIN

– Cosa serve?

– Quando li calcoliamo?

• Media aritmetica

– Cosa serve?

– Quando li calcoliamo?

• Somma, prodotto, differenza

– Cosa serve?

– Quando effettuare il calcolo?

34

Esercizio 3 (3) – Matrici numeriche

• Progetto– Inseriamo le dimensioni delle matrici

– Popoliamo le matrici

– Calcoli vari

– Vediamo il risultato

• Implementazione– Quante variabili? Che tipo?

– Come leggiamo e salviamo?

– Quando facciamo le varie operazioni?

– Le dimensioni fornite dall’utente van tutte bene?

35