Tut 03
Tut 03
Tutorato n. 3
Marco Liverani*
Esercizio n. 1
Letti in input tre array di interi con lo stesso numero n di elementi, costruisce un quarto array di numeri
floating point con la media aritmetica degli elementi corrispondenti nei primi tre (es.: D i = (A i + B i +
C i )/3, per i = 0, 1, . . . , n − 1). Stampa l’array D.
Diagramma di flusso
Start
Leggi
n
i=0
No
i<n
Sì
i=0
Leggi
A[i]
No
i<n
i = i+1
Sì
i=0
Leggi
B[i]
No
i<n
i = i+1
Sì
i=0
Leggi
C[i]
No
i<n
i = i+1
Sì
i=0
D[i] = (A[i]+
B[i]+C[i])/3
No
i<n
i = i+1
Sì
Stop
Scrivi
D[i]
i = i+1
* Università degli Studi Roma Tre, Corso di Laurea in Matematica, Corso di Algoritmi e Strutture Dati (IN110); e-mail
[email protected] – sito web del corso http://www.mat.uniroma3.it/users/liverani/IN110/
1
Pseudo-codifica dell’algoritmo
1: leggi l’array A di n elementi
2: leggi l’array B di n elementi
3: leggi l’array C di n elementi
4: per i = 0, 1, 2, . . . , n − 1 ripeti
5: D i = (A i + B i +C i )/3
6: fine-ciclo
7: scrivi l’array D di n elementi
8: stop
Codifica in linguaggio C
1 #include <stdlib.h>
2 #include <stdio.h>
3 #define MAX 100
4
5 int main(void) {
6 int i, n, A[MAX], B[MAX], C[MAX];
7 float D[MAX];
8 printf("Numero di elementi: ");
9 scanf("%d", &n);
10 printf("inserisci %d elementi del vettore A: ", n);
11 for (i=0; i<n; i++) {
12 scanf("%d", &A[i]);
13 }
14 printf("inserisci %d elementi del vettore B: ", n);
15 for (i=0; i<n; i++) {
16 scanf("%d", &B[i]);
17 }
18 printf("inserisci %d elementi del vettore C: ", n);
19 for (i=0; i<n; i++) {
20 scanf("%d", &C[i]);
21 }
22 for (i=0; i<n; i++) {
23 D[i] = (float)(A[i]+B[i]+C[i])/3.0;
24 }
25 for (i=0; i<n; i++) {
26 printf("%f ", D[i]);
27 }
28 printf("\n"); return(0);
29 }
2
Esercizio n. 2
Leggere una matrice n × m di numeri interi; letti in input due interi h e k (0 ≤ h < n e 0 ≤ k < m)
stampare gli elementi della riga h e della colonna k.
Diagramma di flusso
Start
Leggi n,m
i=0
No
i<n
Sì
j=0
Leggi h,k
No
j<m
j=0
Sì
Leggi A[i][j]
No
j<m
Sì
j = j+1
Scrivi A[h][j]
i=0
i = i+1 j = j+1 No
i<n
Sì
i = i+1
3
Pseudo-codifica dell’algoritmo
1: leggi n, m
2: per i = 0, 1, 2 . . . , n − 1 ripeti
3: per j = 0, 1, 2, . . . , m − 1 ripeti
4: leggi A i , j
5: fine-ciclo
6: fine-ciclo
7: leggi h, k
8: per j = 0, 1, 2, . . . , m − 1 ripeti
9: scrivi A h, j
10: fine-ciclo
11: per i = 0, 1, 2, . . . , n − 1 ripeti
12: scrivi A i ,k
13: fine-ciclo
14: stop
Codifica in linguaggio C
1 #include <stdlib.h>
2 #include <stdio.h>
3 #define MAX 20
4
5 int main(void) {
6 int A[MAX][MAX], i, j, n, m, h, k;
7 printf("Numero di righe e di colonne: ");
8 scanf("%d %d", &n, &m);
9 for (i=0; i<n; i++) {
10 for (j=0; j<m; j++) {
11 scanf("%d", &A[i][j]);
12 }
13 }
14 printf("Inserisci h e k: ");
15 scanf("%d %d", &h, &k);
16 printf("Riga %d: ", h);
17 for (j=0; j<m; j++) {
18 printf("%d ", A[h][j]);
19 }
20 printf("\nColonna %d: ", k);
21 for (i=0; i<n; i++) {
22 printf("%d ", A[i][k]);
23 }
24 printf("\n");
25 return(0);
26 }
4
Esercizio n. 3
Letti in input due array di numeri interi (rispettivamente di n e m elementi) verifica se tutti gli elementi
del primo sono contenuti nel secondo (gli elementi di A = (1, 2, 3) sono contenuti in B = (8, 1, 3, 7, 5, 2, 6)).
Diagramma di flusso
Start
Leggi
n
i=0
No
i<n
Sì
Leggi
m
Leggi
A[i]
i=0
i = i+1
No
i<m
Sì flag = 1
Leggi
B[i]
i=0
i = i+1
i<n e No
flag=1
Sì
Sì No
flag = 1
flag = 0
Scrivi Scrivi
j=0 Sì No
j<m e No
Stop
A[i]!=B[j]
Sì
j = j+1
Sì No
j<m
flag = 1
i = i+1
5
Pseudo-codifica dell’algoritmo
1: leggi n
2: per i = 0, 1, 2, . . . , n − 1 ripeti
3: leggi A i
4: fine-ciclo
5: leggi m
6: per i = 0, 1, 2, . . . , m − 1 ripeti
7: leggi B i
8: fine-ciclo
9: f l ag = 1
10: i =0
11: fintanto che i < n e f l ag = 1 ripeti
12: f l ag = 0
13: j =0
14: fintanto che j < m e A i , B j ripeti
15: j = j +1
16: fine-ciclo
17: se j < m allora
18: f l ag = 1
19: fine-condizione
20: i = i +1
21: fine-ciclo
22: se f l ag = 1 allora
23: scrivi “l’array A è contenuto in B ”
24: altrimenti
25: scrivi “l’array A non è contenuto in B ”
26: fine-condizione
27: stop
6
Codifica in linguaggio C
1 #include <stdlib.h>
2 #include <stdio.h>
3 #define MAX 30
4
5 int main(void) {
6 int A[MAX], B[MAX], i, j, n, m, flag;
7 printf("Numero di elementi di A: ");
8 scanf("%d", &n);
9 printf("inserisci %d elementi: ");
10 for (i=0; i<n; i++) {
11 scanf("%d", &A[i]);
12 }
13 printf("Numero di elementi di B: ");
14 scanf("%d", &m);
15 printf("inserisci %d elementi: ");
16 for (i=0; i<m; i++) {
17 scanf("%d", &B[i]);
18 }
19 flag = 1;
20 for (i=0; i<n && flag==1; i++) {
21 flag = 0;
22 j = 0;
23 while (j<m && A[i]!=B[j]) {
24 j = j+1;
25 }
26 if (j<m)
27 flag = 1;
28 }
29 if (flag == 1)
30 printf("L’array A e’ contenuto in B.\n");
31 else
32 printf("L’array A non e’ contenuto in B.\n");
33 return(0);
34 }
7
Esercizio n. 4
Letta in input una matrice quadrata A di n × n numeri interi, stampa il prodotto della somma degli
elementi della diagonale principale per la somma degli elementi della diagonale secondaria.
Diagramma di flusso
Start
Leggi
n
i=0
No
i<n
Sì
S1 = 0
j=0 S2 = 0
i=0
No
j<n
Sì
No
i<n
Leggi
A[i][j] Sì
Scrivi
S1 = S1*S2
j = j+1 S1 + A[i][i]
S2 = Stop
S2 + A[i][n-i-1]
i = i+1
i = i+1
8
Pseudo-codifica dell’algoritmo
1: leggi n
2: per i = 0, 1, 2, . . . , n − 1 ripeti
3: per j = 0, 1, 2, . . . , n − 1 ripeti
4: leggi A i , j
5: fine-ciclo
6: fine-ciclo
7: S 1 = 0, S 2 = 0
8: per i = 0, 1, 2, . . . , n − 1 ripeti
9: S 1 = S 1 + A i ,i
10: S 2 = S 2 + A i ,n−i −1
11: fine-ciclo
12: scrivi S 1 · S 2
13: stop
Codifica in linguaggio C
1 #include <stdlib.h>
2 #include <stdio.h>
3 #define MAX 20
4
5 int main(void) {
6 int A[MAX][MAX], i, j, n, s1, s2;
7 printf("Ordine della matrice quadrata (numero di righe e di colonne): ");
8 scanf("%d", &n);
9 for (i=0; i<n; i++) {
10 printf("Inserisci gli elementi della riga %d: ", i);
11 for (j=0; j<n; j++) {
12 scanf("%d", &X[i][j]);
13 }
14 }
15 s1 = 0;
16 s2 = 0;
17 for (i=0; i<n; i++) {
18 s1 = s1 + A[i][i];
19 s2 = s2 + A[i][n-i-1];
20 }
21 printf("S1*S2 = %d\n", s1*s2);
22 return(0);
23 }