1. Scrivere un programma che inizializza un vettore
monodimensionale di interi e poi copia il vettore in un altro vettore della stessa dimensione. 2. In una gara il punteggio di ciascun atleta dato dal pubblico. I voti possono andare da 1 a 10. Scrivere un programma che per ogni atleta rilevi il numero di occorrenze dei vari voti. a. con switchcase; b. con i vettori 3. Scrivere un programma che stampa i numeri primi minori di 100 (Crivello di Eratostene) 4. Scrivere un programma che calcola il MCD di due numeri positivi (Euclide) 5. Scrivere un programma che ordina n numeri casuali con il metodo bubblesort
Esercizio 1
/* array2.c definisce 2 array, ne inizializza uno e compia un array nell'altro */ #include <stdio.h>
main() { int i; int a[10]={1,2,3,4,5,6,7,8,9,10}; /* inizializzazione in fase di definizione */ int b[10];
int voto[11]={0}, i=0,j=0; for(j=1;j<=4;j++) { printf("Inserisci un voto per la mensa (tra 1 e 10):"); scanf("%d",&i); voto[i]++; } for(i=1;i<=10;i++) printf("%d", voto[i]);
return 0; }
Esercizio 3
/*stampa i numeri primi tra i primi 100 numeri con il metodo di Eratostene*/
#include<stdio.h>
main() { int i,j; int array[100];
for (i=0;i<100;i++) array[i]=1; for (i=2;i<=100;i++) { if(array[i]==1) { for (j=2;j<(100/i);j++) array[i*j]=0; } } printf("\nnumeri primi <100"); for (i=1;i<100;i++){ if(array[i]==1) printf("\t%d", i); } }
Esercizio 5 (prima versione)
/* lehmer1.C -- Genera una sequenza casuale usando il metodo di lehmer */
#define m 100000000 #define b 31415821 #define m1 10000
long mult(long p, long q); long lehmer(long a);
int main(void) /* definizione della funzione principale MAIN */ {
int max, r; long f[NMAX]={0}, i, n, a; double s; time_t t;
printf("\n \nGenerazione di una sequenza di numeri interi pseudocasuale."); printf("\nI numeri della sequenza sono compresi fra 0 e N-1."); printf("\n \nInserisci N:");
if (scanf("%d", &max) != 1) { printf("Errore !\a\n"); exit(1); } else if (max <=0) { printf("Errore ! Il numero deve essere >0 ! \a\n"); exit(1); }
printf("\nInserisci il numero di elementi della sequenza:");
if (scanf("%ld", &n) != 1) { printf("Errore !\a\n"); exit(1); } else if (n <=0) { printf("Errore ! Il numero deve essere >0 ! \a\n"); exit(1); }
printf("Generazione casuale di %ld numeri compresi fra 0 e %d\n\n",n,max);
srand((unsigned) time(&t)); a=t % m;
for(i=0; i<n; i++) { a = lehmer(a); r = a % max; /* <- sbagliato ! */ f[r]++; }
for (i=0; i < max; ++i) printf("Il numero di %ld %ld e la freq. rel. %f\n",i,f[i],(float) f[i]/n);
/* statistica del chi quadro */
for (i=0, s=0; i < max; ++i) s += f[i]*f[i];
s = s*max/n-n;
printf("chi-quadro=%lf \n", s);
if ( fabs(s-max)< 2*sqrt(max) ) printf("\n Test del chi-quadro superato !\a\n"); else printf("\n Test del chi-quadro NON superato !\a\n");
system("pause"); return 0;
}
long lehmer(long a) { a = (mult(a,b) +1) % m; return a; }
long mult(long p, long q) { long p1, p0, q1, q0, ab;
/* lehmer2.C -- Genera una sequenza di n numeri casuali tra 0 e N(=max)-1 usando il metodo di lehmer e calcola la statistica del Chi-quadro (per verificare la casualita': se prossima a N, allora ok)*/
/*1.generare un numero casuale tra 0 e 1. 2.moltiplicare ciasun numero per N*/
#define m 100000000 #define b 31415821 #define m1 10000
long mult(long p, long q); long lehmer(long a);
main() /* definizione della funzione principale MAIN */ {
int max, r; float c; long f[NMAX]={0}, i, n, a; double s; time_t t;
printf("\n \nGenerazione di una sequenza di numeri interi pesudo casuale."); printf("\nI numeri della sequenza sono compresi fra 0 e N-1."); printf("\n \nInserisci N:");
if (scanf("%d", &max) != 1) { printf("Errore !\a\n"); exit(1); } else if (max <=0) { printf("Errore ! Il numero deve essere >0 ! \a\n"); exit(1); }
printf("\nInserisci il numero di elementi della sequenza:");
if (scanf("%ld", &n) != 1) { printf("Errore !\a\n"); exit(1); } else if (n <=0) { printf("Errore ! Il numero deve essere >0 ! \a\n"); exit(1); }
printf("Generazione casuale di %ld numeri compresi fra 0 e %d\n\n",n,max);
srand((unsigned) time(&t)); a=t % m;
/*generazione di una sequenza di numeri casuali tra 0 e 1: //1. generare un numero casuale tra 0 e m-1 //2. dividere ciascun numero per m */
for(i=0; i<n; i++) { a = lehmer(a); /*a e' un numero casuale tale che 0< a < m */ c = (float) a/m; /* c e' un numero casuale tale che 0 < c < 1 */ r = (int) (c * max); /* r e' un numero casuale tale che 0 < r < max */ f[r]++; }
for (i=0; i < max; ++i) printf("Il numero di %ld e' %ld e la freq. rel. %f\n",i,f[i],(float) f[i]/n);
/* statistica del chi quadro: implementa (\sum_{0<=i<max}(f[i]-n/max)^2 ) / (n/max) nota che \sum f[i]= n ; n/max e' il valore atteso*/
for (i=0, s=0; i < max; ++i) s += f[i]*f[i];
s = s*max/n-n;
printf("chi-quadro=%lf \n", s);
if ( fabs(s-max)< 2*sqrt(max) ) printf("\n Test del chi-quadro superato !\a\n"); else printf("\n Test del chi-quadro NON superato !\a\n");
system("pause"); }
long lehmer(long a) { a = (mult(a,b) +1) % m; return a; }
long mult(long p, long q) { long p1, p0, q1, q0, ab;
int main(void) /* definizione della funzione principale MAIN */ {
int max, r; long f[NMAX]={0}, i, n, a; double s; time_t t;
printf("\n \nGenerazione di una sequenza di numeri interi pesudo casuale."); printf("\nI numeri della sequenza sono compresi fra 0 e N-1 con N<=1000."); printf("\n \nInserisci N:");
if (scanf("%d", &max) != 1) { printf("Errore !\a\n"); exit(1); } else if (max <=0 || max >1000) { printf("Errore ! Il numero deve essere >0 e <=1000! \a\n"); exit(1); }
printf("\nInserisci il numero di elementi della sequenza:");
if (scanf("%ld", &n) != 1) { printf("Errore !\a\n"); exit(1); } else if (n <=0) { printf("Errore ! Il numero deve essere >0 ! \a\n"); exit(1); }
printf("Generazione casuale di %ld numeri compresi fra 0 e %d\n\n",n,max);
srand((unsigned) time(&t)); a=t % m;
for(i=0; i<n; i++) { a = lehmer(a); r = a % max; /* 0 <= rand() < max */ f[r]++; }
for (i=0; i < max; ++i) printf("Il numero di %ld %ld e la freq. rel. %f\n",i,f[i],(float) f[i]/n);
/* statistica del chi quadro */
printf("\nStatistica del chi-quadro \n");
for (i=0, s=0; i < max; ++i) s += f[i]*f[i];
s = s*max/n-n;
printf("chi-quadro=%lf \n", s);
if ( fabs(s-max)< 2*sqrt(max) ) printf("\n Test del chi-quadro superato !\a\n"); else printf("\n Test del chi-quadro NON superato !\a\n");
system("Pause");
return 0;
}
long lehmer(long a) { a = (a * b +1) % m; return a; }