• Non ci sono risultati.

Proglab 17 – Stampa i primi x multipli di y, z per riga

N/A
N/A
Protected

Academic year: 2021

Condividi "Proglab 17 – Stampa i primi x multipli di y, z per riga"

Copied!
1
0
0

Testo completo

(1)

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;

}

(2)

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);

}

(3)

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);

}

(4)

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);

}

(5)

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);

}

(6)

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); }

(7)

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); }

(8)

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);

}

(9)

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);

}

(10)

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);

}

(11)

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

(12)

#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);

}

(13)

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; }

Riferimenti

Documenti correlati

Perci`o dovrebbe esistere un punto di flesso a sinistra di −1.. In questi commenti ci proponiamo di trovare tutti i punti di

Possiamo studiare la restrizione della funzione ad una curva che passa per il punto (1, 1) T (attenzione a scegliere una curva che non intersechi la bisettrice x = y in un intorno

Scomporre il numero 411 nella somma di tre numeri positivi in modo che il loro prodotto sia massimo.. Il problema `e un problema di

DERIVE entra in modalità Trace: il cursore assume la forma di un quadratino, non è più libero di muoversi dovunque nel piano ed ogni suo movimento con i tasti cursore è vincolato

tali singolarit`a sono date dalle radici cubiche di −1 , che giacciono tutte sulla circonferenza di centro l’origine e raggio 1. Pertanto, la funzione f `e certamente olomorfa nel

concludere che la funzione non ammette punti stazionari interni ad A, dunque massimo e minimo assoluti dovranno necessariamente appartenere alla frontiera @A.. Ne segue che

COSA CONSEGNARE: questo foglio e il foglio intestato con gli svolgimenti

REGOLE: NON inserire fogli di brutta copia - Risposte non giustificate sul foglio intestato o non coerenti con quanto ivi scritto non saranno prese in considerazione - TEMPO: 2 h