Array e matrici -...
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
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
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