Corso di Informatica
(Programmazione)
Esercitazione 1 (26 novembre 2008)
1
Esercizi sugli array
Esercizio 1
dato un array A di N interi calcolare la
somma degli elementi che sono multipli di 3
Esempio (N=10)
A
4 15 20 21 40 6
7
9 10 1
Risultato  15 + 21 + 6 + 9 = 51
2
Esercizi sugli array
Algoritmo: dichiaro una variabile s che dovrà
contenere il risultato finale e che inizialmente ha
valore 0. Scorro gli elementi di A dal
primo in posizione 0 (cioè A[0]) all’ultimo in
posizione (N-1) (cioè A[N-1]). Aggiungo a s
l’elemento che sto considerando nella generica
posizione i (cioè A[i]) ogni volta che questo
è multiplo di 3.
3
Esercizi sugli array
Esecuzione dell’algoritmo per l’array A di 10
interi dell’esempio precedente:
- all’inizio ho s=0
- step 1  i=0 (i è l’indice che scandisce gli elementi di A)
A
4 15 20 21 40 6
7
9 10 1
A[0] è multiplo di 3? NO! Quindi s rimane a 0
4
Esercizi sugli array
- step 2  i=1
A
4 15 20 21 40 6
7
9 10 1
A[1] è multiplo di 3? SI’! Quindi sommo a s il valore
di A[1] che è 15  s=s+15=0+15=15
- step 3  i=2
A
4 15 20 21 40 6
7
9 10 1
A[2] è multiplo di 3? NO! Quindi s rimane a 15
5
Esercizi sugli array
- step 4  i=3
A
4 15 20 21 40 6
7
9 10 1
A[3] è multiplo di 3? SI’! Quindi sommo a s il valore
di A[3] che è 21  s=s+21=15+21=36
- step 5  i=4
A
4 15 20 21 40 6
7
9 10 1
A[4] è multiplo di 3? NO! Quindi s rimane a 36
6
Esercizi sugli array
- step 6  i=5
A
4 15 20 21 40 6
7
9 10 1
A[5] è multiplo di 3? SI’! Quindi sommo a s il valore
di A[5] che è 6  s=s+6=36+6=42
- step 7  i=6
A
4 15 20 21 40 6
7
9 10 1
A[6] è multiplo di 3? NO! Quindi s rimane a 42
7
Esercizi sugli array
- step 8  i=7
A
4 15 20 21 40 6
7
9 10 1
A[7] è multiplo di 3? SI’! Quindi sommo a s il valore
di A[7] che è 9  s=s+9=42+9=51
- step 9  i=8
A
4 15 20 21 40 6
7
9 10 1
A[8] è multiplo di 3? NO! Quindi s rimane a 51
8
Esercizi sugli array
- step 10  i=9
A
4 15 20 21 40 6
7
9 10 1
A[9] è multiplo di 3? NO! Quindi s rimane a 51
Risultato  51
9
Esercizi sugli array
public class SommaMultipliTre {
public static void main(String arg[]) {
int[] A={4,15,20,21,40,6,7,9,10,1};
int i;
int s, length;
length=10;
i=0;
s=0;
while(i <= lentgth-1){
//Verifico se l’elemento i-esimo
//è multiplo di 3
if(A[i] % 3 == 0){
s=s+A[i];
}
i=i+1;
}
System.out.println(“Somma=“+s);
}
}
10
Esercizi sugli array
Esercizio 2
dato un array A di N interi calcolare
contare il numero degli elementi pari
Esempio (N=10)
A
4 15 20 21 40 6
7
9 10 1
Risultato  5
11
Esercizi sugli array
Algoritmo: dichiaro una variabile c che dovrà
contenere il risultato finale e che inizialmente ha
valore 0. Scorro gli elementi di A dal
primo in posizione 0 (cioè A[0]) all’ultimo in
Posizione (N-1) (cioè A[N-1]). Incremento c di 1
ogni volta che l’elemento, che sto considerando
nella generica posizione i (cioè A[i]), è pari.
12
Esercizi sugli array
Esecuzione dell’algoritmo per l’array A di 10
interi dell’esempio precedente:
- all’inizio ho c=0
- step 1  i=0 (i è l’indice che scandisce gli elementi di A)
A
4 15 20 21 40 6
7
9 10 1
A[0] è pari? SI’! Quindi incremento c di 1, e c va a 1
13
Esercizi sugli array
- step 2  i=1
A
4 15 20 21 40 6
7
9 10 1
A[1] è pari? NO! Quindi c rimane a 1
- step 3  i=2
A
4 15 20 21 40 6
7
9 10 1
A[2] è pari? SI’! Quindi incremento c di 1, e c va a 2 14
Esercizi sugli array
- step 4  i=3
A
4 15 20 21 40 6
7
9 10 1
A[3] è pari? NO! Quindi c rimane a 2
- step 5  i=4
A
4 15 20 21 40 6
7
9 10 1
A[4] è pari? SI’! Quindi incremento c di 1, e c va a 3 15
Esercizi sugli array
- step 6  i=5
A
4 15 20 21 40 6
7
9 10 1
A[5] è pari? SI’! Quindi incremento c di 1, e c va a 4
- step 7  i=6
A
4 15 20 21 40 6
7
9 10 1
A[6] è pari? NO! Quindi c rimane a 4
16
Esercizi sugli array
- step 8  i=7
A
4 15 20 21 40 6
7
9 10 1
A[7] è pari? NO! Quindi c rimane a 4
- step 9  i=8
A
4 15 20 21 40 6
7
9 10 1
A[8] è pari? SI’! Quindi incremento c di 1, e c va a 5 17
Esercizi sugli array
- step 10  i=9
A
4 15 20 21 40 6
7
9 10 1
A[9] è pari? NO! Quindi c rimane a 5
Risultato  5
Il programma per contare i dispari è analogo!
18
Esercizi sugli array
public class ContaPari {
public static void main(String arg[]) {
int[] A={4,15,20,21,40,6,7,9,10,1};
int i;
int c, length;
length=10;
i=0;
c=0;
while(i <= lentgth-1){
//Verifico se l’elemento i-esimo
//è pari (multiplo di 2)
if(A[i] % 2 == 0){
c=c+1;
}
i=i+1;
}
System.out.println(“Numero pari=“+c);
}
}
19
Esercizi sugli array
public class ContaDispari {
public static void main(String arg[]) {
int[] A={4,15,20,21,40,6,7,9,10,1};
int i;
int c, length;
length=10;
i=0;
c=0;
while(i <= lentgth-1){
//Verifico se l’elemento i-esimo
//è dispari (non è multiplo di 2)
if(A[i] % 2 != 0){
c=c+1;
}
i=i+1;
}
System.out.println(“Numero dispari=“+c);
}
}
20
Esercizi sugli array
Esercizio 3
dato un array A di N interi cercare
l’elemento minimo e la sua posizione in A
Esempio (N=10)
A
4 15 20 21 3
6
7
9 10 40
Risultato  3
21
Esercizi sugli array
Algoritmo: dichiaro due variabili, min e posMin, che
dovranno contenere i risultati finali (rispettivamente
il valore minimo e la sua posizione) e che inizialmente
sono uguali rispettivamente al valore del primo elemento
di A (cioè A[0]) e al valore della sua posizione in A (cioè 0).
Scorro gli elementi di A dal secondo in posizione 1 (cioè A[1])
all’ultimo in posizione (N-1) (cioè A[N-1]). Ogni volta che
l’elemento che sto considerando nella generica posizione i
(cioè A[i]) è minore del valore di min, allora aggiorno min con
il valore di A[i] e posMin con il valore i.
22
Esercizi sugli array
Esecuzione dell’algoritmo per l’array A di 10
interi dell’esempio precedente:
- all’inizio ho min=A[0]=4 e posMin=0
- step 1  i=1 (i è l’indice che scandisce gli elementi di A)
A
4 15 20 21 3
6
7
9 10 40
A[1] è minore di min? NO! Quindi min rimane a 4
e posMin a 0
23
Esercizi sugli array
- step 2  i=2
A
4 15 20 21 3
6
7
9 10 40
A[2] è minore di min? NO! Quindi min rimane a 4
e posMin a 0
- step 3  i=3
A
4 15 20 21 3
6
7
9 10 40
A[3] è minore di min? NO! Quindi min rimane a 4
e posMin a 0
24
Esercizi sugli array
- step 4  i=4
A
4 15 20 21 3
6
7
9 10 40
A[4] è minore di min? SI’! Quindi min assume il valore 3
e posMin il valore 4
- step 5  i=5
A
4 15 20 21 3
6
7
9 10 40
A[5] è minore di min? NO! Quindi min rimane a 3
e posMin a 4
25
Esercizi sugli array
- step 6  i=6
A
4 15 20 21 3
6
7
9 10 40
A[6] è minore di min? NO! Quindi min rimane a 3
e posMin a 4
- step 7  i=7
A
4 15 20 21 3
6
7
9 10 40
A[7] è minore di min? NO! Quindi min rimane a 3
e posMin a 4
26
Esercizi sugli array
- step 8  i=8
A
4 15 20 21 3
6
7
9 10 40
A[8] è minore di min? NO! Quindi min rimane a 3
e posMin a 4
- step 9  i=9
A
4 15 20 21 3
6
7
9 10 40
A[9] è minore di min? NO! Quindi min rimane a 3
e posMin a 4
27
Esercizi sugli array
Risultato  min è 3 e posMin è 4
Il programma per trovare il massimo è analogo!
28
Esercizi sugli array
public class TrovaMinimo {
public static void main(String arg[]) {
int[] A={4,15,20,21,3,6,7,9,10,4};
int i;
int min, posMin, length;
length=10;
i=1;
posMin=0;
min=A[posMin];
while(i <= lentgth-1){
//Verifico se l’elemento i-esimo
//è minore del minimo corrente
if(A[i] < min){
min=A[i];
posMin=i;
}
i=i+1;
}
System.out.println(“Minimo=“+min+” in posizione “+posMin);
}
}
29
Esercizi sugli array
public class TrovaMassimo {
public static void main(String arg[]) {
int[] A={4,15,20,21,3,6,7,9,10,4};
int i;
int max, posMax, length;
length=10;
i=1;
posMax=0;
max=A[posMax];
while(i <= lentgth-1){
//Verifico se l’elemento i-esimo
//è maggiore del massimo corrente
if(A[i] > max){
max=A[i];
posMax=i;
}
i=i+1;
}
System.out.println(“Massimo=“+max+” in posizione “+posMax);
}
}
30
Scarica

ProgrammazioneES1