Proglab 17 – Stampa i primi x multipli di y, z per riga
La funzione main legge tre interi positivi x, y, z e chiama una funzione che stampa, z per riga, i primi x multipli di y, in ordine decrescente.
Ad esempio, se x=6, y=2, z=3 viene stampato:
12 10 8
6 4 2
#include <stdlib.h>
#include <stdio.h>
void multipli(int x, int y, int z);
main() {
int a, b, c;
printf("digita tre interi positivi: ");
scanf("%d %d %d", &a, &b, &c);
multipli(a, b, c);
printf ("\n\n");
system ("pause");
return(0);
}
void multipli(int x, int y, int z) {
int i;
for (i=x; i>=1; i--) { printf("%3d ", i*y);
if ((x-i+1)%z == 0) printf("\n");
}
return;
}
Proglab 18 – Elimina multipli di k (con for)
La funzione main chiama una funzione che legge n numeri naturali, main legge poi un naturale k e chiama una funzione che elimina dall’array, compattandolo, gli eventuali multipli di k, infine main chiama una funzione che stampa l’array modificato.
Ad esempio, se n=5, k=3 e A=[23, 33, 14, 66, 26] abbiamo A=[23, 14, 26]
#include <stdlib.h>
#include <stdio.h>
int leggi_array(int A[]);
int elimina_multipli(int A[], int n, int k);
void stampa_array(int A[], int n);
main() {
int n, A[100], k;
n = leggi_array(A);
printf("digita k: ");
scanf("%d", &k);
n = elimina_multipli(A, n, k);
stampa_array(A, n);
system ("pause");
return(0);
}
int leggi_array(int A[]) { int i, n;
printf("numero di elementi: ");
scanf("%d", &n);
printf("digita %d elementi: ", n);
for (i=0; i<n; i++) scanf("%d", &A[i]);
return(n);
}
void stampa_array(int A[], int n) { int i;
for(i=0; i<n; i++)
printf("%d ", A[i]);
printf("\n");
return;
}
int elimina_multipli(int A[], int n, int k) {
int i, j;
for (i=0; i < n; i++) { if (A[i] % k == 0) { n = n-1;
for (j=i; j<n; j++) { A[j] = A[j+1];
} i--;
} }
return(n);
}
Proglab 19 – Elimina multipli di k (con while)
La funzione main chiama una funzione che legge n numeri naturali, main legge poi un naturale k e chiama una funzione che elimina dall’array, compattandolo, gli eventuali multipli di k, infine main chiama una funzione che stampa l’array modificato.
#include <stdlib.h>
#include <stdio.h>
int leggi_array(int A[]);
int elimina_multipli(int A[], int n, int k);
void stampa_array(int A[], int n);
main() {
int n, A[100], k;
n = leggi_array(A);
printf("digita k: ");
scanf("%d", &k);
n = elimina_multipli(A, n, k);
stampa_array(A, n);
system ("pause");
return(0);
}
int leggi_array(int A[]) { int i, n;
printf("numero di elementi: ");
scanf("%d", &n);
printf("digita %d elementi: ", n);
for (i=0; i<n; i++) scanf("%d", &A[i]);
return(n);
}
int elimina_multipli(int A[], int n, int k) { int i, j;
i = 0;
while (i < n) {
if (A[i] % k == 0) { n = n-1;
for (j=i; j<n; j++) { A[j] = A[j+1];
} i--;
} i++;
}
return(n);
}
oppure, in modo equivalente:
int elimina_multipli(int A[], int n, int k) { int i, j;
i=0;
while (i<n) {
if (A[i] % k == 0) { n = n-1;
for (j=i; j<n; j++) { A[j] = A[j+1];
} } else { i = i+1;
} }
return(n);
}
Proglab 20 – Parentesi corrette (con break)
main legge un’espressione algebrica contenente parentesi tonde aperte e chiuse, chiama una funzione che verifica la correttezza delle sole parentesi senza controllare che l’espressione sia valida algebricamente.
Ad esempio, (a+b)*(c-d), ((s+(u-)/*)n) sì, (a-b)), x*)+(t), (s/(n)+(, )a+b(, (x*y)+c)-f no
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
int verifica(char s[]);
main() {
char s[100];
printf("digita un’espressione: ");
scanf("%s", s);
if (verifica(s) == 1)
printf("le parentesi sono corrette\n");
else
printf("le parentesi NON sono corrette\n");
system ("pause");
return(0); }
int verifica(char s[]) { int i, n, cont;
n = strlen(s);
cont = 0;
for (i=0; i<n; i++) { if (cont < 0) break;
if (s[i] == '(') cont++;
if (s[i] == ')') cont--;
}
if (cont == 0) return(1);
else
return(0); }
Proglab 21 – Parentesi corrette (con while)
main legge un’espressione algebrica contenente parentesi tonde aperte e chiuse, chiama una funzione che verifica la correttezza delle sole parentesi e quindi main stampa l’esito della verifica.
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
int verifica(char s[]);
main() {
char s[100];
printf("digita un’espressione: ");
scanf("%s", s);
if (verifica(s) == 1)
printf("le parentesi sono corrette\n");
else
printf("le parentesi NON sono corrette\n");
system ("pause");
return(0); }
int verifica(char s[]) { int i, n, cont;
n = strlen(s);
cont = 0;
i = 0;
while (i < n && cont >= 0) { if (s[i] == '(')
cont++;
if (s[i] == ')') cont--;
i++;
}
if (cont == 0) return(1);
else
return(0); }
Proglab 22 – Somma elementi di due array
Vengono letti gli array A e B di lunghezza n e viene avvalorato e l’array C i cui elementi sono: il primo elemento è la somma del primo di A e l’ultimo di B, il secondo elemento è la somma del secondo di A e il penultimo di B, e così via fino a sommare l’ultimo di A e il primo di B.
Ad esempio, se A=[3, 2, 8, 5] e B=[15, 2, 9, 1], abbiamo C=[4,11,10,20]
#include <stdio.h>
#include <stdlib.h>
main() {
int i, j, n, A[100], B[100], C[100];
printf("\nnumero di elementi di A e B: ");
scanf(" %d", &n);
printf("\ndigita gli elementi di A: ");
for (i=0; i<n; i++) { scanf(" %d", &A[i]);
}
printf("\ndigita gli elementi di B: ");
for (i=0; i<n; i++) { scanf(" %d", &B[i]);
}
for (i=0; i<n; i++) {
C[i] = A[i] + B[n-i-1];
}
for (i=0; i<n; i++) { printf (" \n%d", C[i]);
}
printf ("\n\n");
system ("pause");
return(0);
}
Proglab 23 – Elementi in B ma non in A (con for)
Il programma legge gli array di interi A e B (lunghi n ed m) e stampa gli elementi presenti in B ma non in A.
Ad esempio, se A=[5, 7, 2] e B=[2, 9, 5, 8] stampiamo 9 e 8.
#include <stdlib.h>
#include <stdio.h>
main() {
int i, j, n, m, A[100], B[100];
printf("numero di elementi di A: ");
scanf("%d", &n);
printf("digita gli elementi di A: ");
for (i=0; i<n; i++) scanf("%d", &A[i]);
printf("numero di elementi di B: ");
scanf("%d", &m);
printf("digita gli elementi di B: ");
for (i=0; i<m; i++) scanf("%d", &B[i]);
printf("elementi presenti in B ma non in A: ");
for (i=0; i<m; i++) { for (j=0; j<n; j++) { if (B[i] == A[j]) break;
}
if (j==n) {
printf("%d ", B[i]);
} }
printf("\n");
system ("pause");
return(0);
}
Proglab 24– Elementi in B ma non in A (con while)
Il programma legge gli array di interi A e B (lunghi n ed m) e stampa gli elementi presenti in B ma non in A.
#include <stdlib.h>
#include <stdio.h>
main() {
int i, j, n, m, A[100], B[100];
printf("numero di elementi di A: ");
scanf("%d", &n);
printf("digita gli elementi di A: ");
for (i=0; i<n; i++) scanf("%d", &A[i]);
printf("numero di elementi di B: ");
scanf("%d", &m);
printf("digita gli elementi di B: ");
for (i=0; i<m; i++) scanf("%d", &B[i]);
printf("elementi presenti in B ma non in A: ");
for (i=0; i<m; i++) { j = 0;
while (j<n && B[i] != A[j]) { j++;
}
if (j==n) {
printf("%d ", B[i]);
} }
printf("\n");
system ("pause");
return(0);
}
Proglab 25 – Stampa h-ma riga e k-ma colonna matrice
main legge una matrice intera n x m. Poi legge gli indici h e k e stampa la riga di indice h e la colonna di indice k.
Ad esempio, se la matrice è:
3 7 2 9
1 8 7 6
8 3 4 8
e gli indici sono h=1 e k=2 viene stampata la riga:
1 8 7 4 e la colonna:
2 7 4
#include <stdlib.h>
#include <stdio.h>
#define MAX 100 main()
{
int A[MAX][MAX], i, j, n, m, h, k;
printf("numero di righe e di colonne: ");
scanf("%d %d", &n, &m);
printf("digita gli elementi della matrice: ");
for (i=0; i<n; i++) { for (j=0; j<m; j++) { scanf("%d", &A[i][j]);
} }
printf("digita indice di riga e indice di colonna: ");
scanf("%d %d", &h, &k);
printf("riga %d: ", h);
for (j=0; j<m; j++) { printf("%d ", A[h][j]);
}
printf("\ncolonna %d: ", k);
for (i=0; i<n; i++) { printf("%d ", A[i][k]);
}
printf("\n\n");
system ("pause");
return(0);
}
Proglab 26 – Stampa numeri random non multipli di k
La funzione main legge i naturali n, k e chiama una funzione che costruisce un array di n numeri casuali x tali che non sono multipli di k e inoltre 50 x < 200. Quindi main chiama una funzione che stampa l’array.
Ad esempio, se n=4 e k=2 l’array potrebbe essere A=[53, 121, 187, 73]
#include <stdlib.h>
#include <stdio.h>
#include <time.h>
int costruisciarray(int X[]);
void stamparray(int X[], int n);
main() {
int A[100], n;
n = costruisciarray(A);
stamparray(A, n);
system ("pause");
return(0);
}
int costruisciarray(int X[]) { int i, n, k;
printf("digita n e k: ");
scanf("%d %d", &n, &k);
srand(time(NULL));
for (i=0; i<n; i++) { do {
X[i] = rand()%(199 - 50 + 1) + 50;
} while (X[i] % k == 0);
}
return(n); }
void stamparray(int X[], int n) { int i;
for (i=0; i<n; i++) { printf("%d ", X[i]); } printf("\n"); return; }