Corso di Informatica 1 (IN110)
Tutorato n. 2
Marco Liverani∗
Esercizio n. 1
Letto in input un array A di n interi, costruire un array B di n numeri tale che B i sia dato dalla media
aritmetica dei primi i elementi di A. Stampare il vettore B .
Diagramma di flusso
Start
Leggi n
i=0
i<n
Sì
No
s=0
Leggi
A[i]
i=0
i = i+1
No
i<n
Sì
i=0
s = s + A[i]
i<n
B[i] = s/(i+1)
Sì
No
Stop
Scrivi
B[i]
i = i+1
i = i+1
∗ Università degli Studi Roma Tre, Corso di Laurea in Matematica, Corso di Informatica Generale 1 (IN110); e-mail
[email protected] – sito web del corso http://www.mat.uniroma3.it/users/liverani/IN110/
1
Pseudo-codifica dell’algoritmo
1:
2:
3:
4:
5:
6:
7:
8:
9:
leggi n
leggi n numeri interi e memorizzali nell’array A
s =0
per i = 0, 1, . . . , n − 1 ripeti
s = s + Ai
s
B i = i +1
fine-ciclo
stampa l’array B
stop
Codifica in linguaggio C
1
2
3
#include <stdlib.h>
#include <stdio.h>
#define MAX 100
4
5
6
7
int main(void) {
int A[MAX], n, i, s;
float B[MAX];
8
printf("Numero di elementi: ");
scanf("%d", &n);
printf("Inserisci %d elementi: ", n);
for (i=0; i<n; i++)
scanf("%d", &A[i]);
9
10
11
12
13
14
s = 0;
for (i=0; i<n; i++) {
s = s + A[i];
B[i] = (float)s/(i+1);
}
15
16
17
18
19
20
printf("Vettore dei valori medi: ");
for (i=0; i<n; i++)
printf("%f ", B[i]);
21
22
23
24
return(0);
25
26
}
2
Esercizio n. 2
Letto in input un array A di n interi, costruire un array B con gli stessi elementi di A, ma memorizzati
al contrario (il primo elemento di A è l’ultimo elemento di B , l’ultimo elemento di A è il primo di B ).
Stampare il vettore B .
Diagramma di flusso
Start
Leggi n
i=0
i<n
No
Sì
i=0
Leggi A[i]
No
i<n
i = i+1
Sì
i=0
B[n-i-1] = A[i]
i<n
i = i+1
Sì
Scrivi B[i]
i = i+1
3
No
Stop
Pseudo-codifica dell’algoritmo
1:
2:
3:
4:
5:
6:
7:
leggi n
leggi n numeri interi e memorizzali nell’array A
per i = 0, 1, . . . , n − 1 ripeti
B n−i −1 = A i
fine-ciclo
stampa l’array B
stop
Codifica in linguaggio C
1
2
3
#include <stdlib.h>
#include <stdio.h>
#define MAX 100
4
5
6
int main(void) {
int A[MAX], B[MAX], n, i;
7
printf("Numero di elementi: ");
scanf("%d", &n);
printf("Inserisci %d elementi: ", n);
for (i=0; i<n; i++)
scanf("%d", &A[i]);
8
9
10
11
12
13
for (i=0; i<n; i++)
B[n-i-1] = A[i];
14
15
16
for (i=0; i<n; i++)
printf("%d ", B[i]);
17
18
19
return(0);
20
21
}
4
Esercizio n. 3
Letti in input due interi positivi n e m, leggere in input una matrice A di numeri interi, con n righe ed
m colonne. Costruire un array B con m elementi e memorizzare in B k (0 ≤ k < m) il massimo elemento
della colonna k della matrice A. Stampare il vettore B .
Diagramma di flusso
Start
Leggi n,
m
i=0
i<n
No
Sì
j=0
j=0
No
j<m
j<m
No
Sì
j=0
Sì
B[j] = A[0][j]
Leggi
A[i][j]
j<m
i=1
No
Sì
j = j+1
Stop
Scrivi B[j]
No
i<n
j = j+1
Sì
i = i+1
Sì
A[i][j] > B[j]
B[j] = A[i][j]
i = i+1
j = j+1
5
No
Pseudo-codifica dell’algoritmo
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
leggi n e m
leggi in input gli elementi della matrice A
per j = 0, 1, 2, . . . , m − 1 ripeti
B j = A 0, j
per i = 1, 2, . . . , n − 1 ripeti
se A i , j > B j allora
B j = Ai , j
fine-condizione
fine-ciclo
fine-ciclo
per j = 0, 1, 2, . . . , m − 1 ripeti
stampa B j
fine-ciclo
stop
Codifica in linguaggio C
1
2
3
#include <stdlib.h>
#include <stdio.h>
#define MAX 100
4
5
6
int main(void) {
int A[MAX][MAX], B[MAX], n, m, i, j;
7
printf("Numero di righe e colonne: ");
scanf("%d %d", &n, &m);
for (i=0; i<n; i++) {
printf("Inserisci gli elementi della riga %d: ", i);
for (j=0; j<m; j++)
scanf("%d", &A[i][j]);
}
8
9
10
11
12
13
14
15
for (j=0; j<m; j++) {
B[j] = A[0][j];
for (i=1; i<n; i++) {
if (A[i][j] > B[j])
B[j] = A[i][j];
}
}
16
17
18
19
20
21
22
23
printf("Elementi massimi delle colonne della matrice:\n");
for (j=0; j<m; j++)
printf("%d ", B[j]);
24
25
26
27
return(0);
28
29
}
6