Il 0% ha trovato utile questo documento (0 voti)
14 visualizzazioni7 pagine

Esercitazione 03

Copyright
© © All Rights Reserved
Per noi i diritti sui contenuti sono una cosa seria. Se sospetti che questo contenuto sia tuo, rivendicalo qui.
Formati disponibili
Scarica in formato PDF, TXT o leggi online su Scribd
Il 0% ha trovato utile questo documento (0 voti)
14 visualizzazioni7 pagine

Esercitazione 03

Copyright
© © All Rights Reserved
Per noi i diritti sui contenuti sono una cosa seria. Se sospetti che questo contenuto sia tuo, rivendicalo qui.
Formati disponibili
Scarica in formato PDF, TXT o leggi online su Scribd
Sei sulla pagina 1/ 7

Algoritmi e Strutture Dati (IN110)

Esercitazione n. 3
Marco Liverani *

Esercizio n. 1
Letta una parola S, stabilire se S è palindroma (ossia se è simmetrica).

Diagramma di flusso

Start

Leggi S

n = lung. di S

i=0

i<n/2 e No
S[i]=S[n-i-1]


Sì No
i = n/2
i = i+1

Scrivi Scrivi
"Sì" "No"

Stop

* Università degli Studi Roma Tre, Corso di Laurea in Matematica, Corso di Algoritmi e Strutture Dati (IN110) – sito web del
corso http://www.mat.uniroma3.it/users/liverani/IN110/

1
Pseudo-codifica dell’algoritmo
1: leggi la stringa S
2: sia n la lunghezza di S
3: i =0
4: fintanto che i < n2 e S i = S n−i −1 ripeti
5: i = i +1
6: fine-ciclo
7: se i = n2 allora
8: scrivi “Sì”
9: altrimenti
10: scrivi “No”
11: fine-condizione
12: stop

Codifica in linguaggio C
 
1 #include <stdlib.h>
2 #include <stdio.h>
3 #include <string.h>
4

5 int main(void) {
6 char S[50];
7 int i, n;
8 printf("Inserisci una parola: ");
9 scanf("%s", S);
10 n = strlen(S);
11 for (i=0; i<n/2 && S[i]==S[n-i-1]; i++)
12 ;
13 if (i == n/2)
14 printf("La parola e’ palindroma.\n");
15 else
16 printf("La parola non e’ palindroma.\n");
17 return(0);
18 }
 

2
Esercizio n. 2
Acquisire in input un array A di n numeri interi minori di 100; per ogni elemento di A stampare il
numero di volte che compare nel vettore.

Diagramma di flusso

Start

Leggi n

i=0

No
i<n


i=0
Leggi
A[i]

No
i < 100

i = i+1

i=0

C[i] = 0

No
i<n
i = i+1

i=0
C[A[i]] =
C[A[i]]+1

No
i < 100
i = i+1
Sì Stop

Sì No
C[i] > 0

Scrivi
i, C[i]

i = i+1

3
Pseudo-codifica dell’algoritmo
1: leggi n
2: per i = 0, 1, 2, . . . , n − 1 ripeti
3: leggi in input un numero minore di 100 e memorizzalo in A i
4: fine-ciclo
5: per i = 0, 1, 2, . . . , 99 ripeti
6: Ci = 0
7: fine-ciclo
8: per i = 0, 1, 2, . . . , n − 1 ripeti
9: C Ai = C Ai + 1
10: fine-ciclo
11: per i = 0, 1, 2, . . . , 99 ripeti
12: se C i > 0 allora
13: scrivi “i compare C i volte nel vettore”
14: fine-condizione
15: fine-ciclo
16: stop

4
Codifica in linguaggio C
 
1 #include <stdlib.h>
2 #include <stdio.h>
3 #define MAX 100
4

5 int leggi_array(int X[]) {


6 int i, n;
7 printf("Numero di elementi: ");
8 scanf("%d", &n);
9 printf("Inserisci %d numeri minori di 100: ");
10 for (i=0; i<n; i++)
11 scanf("%d", &X[i]);
12 return;
13 }
14

15 void stampa_array(int X[], int n) {


16 int i;
17 for (i=0; i<n; i++)
18 printf("%d ", X[i]);
19 printf("\n");
20 return;
21 }
22

23 int main(void) {
24 int A[MAX], C[MAX], i, n, h, k;
25 n = leggi_array(A);
26 printf("L’array e’ il seguente: ");
27 stampa_array(A, n);
28 for (i=0; i<MAX; i++)
29 C[i] = 0;
30 for (i=0; i<n; i++)
31 C[A[i]]++;
32 for (i=0; i<MAX; i++)
33 if (C[i]>0)
34 printf("%d compare %d volte\n", i, C[i]);
35 return(0);
36 }
 

5
Esercizio n. 3
Letta in input una matrice A di n × m numeri interi, stampa la colonna con il maggior numero di
elementi dispari.

Diagramma di flusso

Start

Lettura della matrice


Leggi n,
m

i=0

No
i<n
Numero elementi
cmax = 0, dispari sulla

jmax = 0 colonna 0
j=0

i=0
No
j<m

Sì i<n

Leggi Sì j=0
A[i][j]

Sì A[i][0]%2 No Stmpa la
=1 colonna jmax
j = j+1 No
j<m

cmax = cmax
+1 Sì Numero elementi i=0
dispari sulla
i = i+1 colonna j
c=0

i = i+1
No
i<n
i=0

Scrivi Stop
No A[i][jmax]
i<n

Sì No Sì
c > cmax i = i+1

Sì A[i][0]%2 No
=1 cmax = c
jmax = j

c = c+1

j = j+1

i = i+1

Pseudo-codifica dell’algoritmo
1: leggi la matrice A di n righe e m colonne
2: sia c max il numero di elementi dispari sulla prima colonna (quella di indice 0)
3: per j = 1, 2, . . . , m − 1 ripeti
4: sia c il numero di elementi dispari sulla colonna di indice j
5: se c > c max allora
6: c max = c e la colonna con il maggior numero di elementi dispari è la colonna j max = j
7: fine-condizione
8: fine-ciclo
9: stampa la colonna j max
10: stop

6
Codifica in linguaggio C
 
1 #include <stdlib.h>
2 #include <stdio.h>
3 #define MAX 100
4

5 void leggi_matrice(int A[MAX][MAX], int *n, int *m) {


6 int i, j;
7 printf("Numero di righe e di colonne: ");
8 scanf("%d %d", n, m);
9 for (i=0; i<*n; i++) {
10 printf("Elementi della riga n.%d: ", i);
11 for (j=0; j<*m; j++)
12 scanf("%d", &A[i][j]);
13 }
14 return;
15 }
16

17 int conta_dispari(int A[MAX][MAX], int n, int j) {


18 int i, c = 0;
19 for (i=0; i<n; i++)
20 if (A[i][j] % 2 == 1)
21 c++;
22 return(c);
23 }
24

25 int main(void) {
26 int A[MAX][MAX], n, m, j, jmax, c, cmax;
27 leggi_matrice(A, &n, &m);
28 jmax = 0;
29 cmax = conta_dispari(A, n, 0);
30 for (j=1; j<m; j++) {
31 c = conta_dispari(A, n, j);
32 if (c > cmax) {
33 jmax = j;
34 cmax = c;
35 }
36 }
37 printf("La colonna con piu’ elementi dispari e’ la %d^: ", jmax+1);
38 for (j=0; j<n; j++)
39 printf("%d ", A[j][jmax]);
40 printf("\n");
41 return(1);
42 }
 

Potrebbero piacerti anche