Sei sulla pagina 1di 11

ESERCIZI ARRAY

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

/* stampa a[] */
printf("a[]= ");
for(i=0;i<10;i++)
{
printf(" %d", a[i]);
}

/* copio a[] in b[] */
printf("\ncopio a[] in b[]\n");
for(i=0;i<10;i++)
b[i]=a[i];


/* stampa b[] */

printf("b[]= ");
for(i=0;i<10;i++)
{
printf(" %d,", b[i]);
}
}



Esercizio 2a


/*voti della gara con switch case....*/

#include<stdio.h>

main()
{

int voto1=0, voto2=0, voto3=0, voto4=0, voto5=0;
int voto=0;


/* printf("Inserisci un voto (da 1 a 4)");
scanf(); */
while(voto!=-1)

{ printf("Inserisci un voto (da 1 a 4)");
scanf("%d",&voto);
switch(voto)

{ case 1: voto1++;
break;
case 2: voto2++;
break;
case 3: voto3++;
break;
case 4: voto4++;
break;
case 5: voto5++;
break;
default: printf("Inserimento errato!!!!");
break;
}

}
printf("%d %d %d %d %d", voto1,voto2, voto3, voto4, voto5);

return 0;
}

____________________________________________________________________

Esercizio 2b

/*voti della gara con vettore....*/

#include<stdio.h>

main()
{

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 */

#include <stdio.h> /* direttive al preprocessore */
#include <stdio.h>
#include <math.h>
#include <time.h>

#define NMAX 1000

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

p1 = p/m1; p0 = p%m1;
q1 = q/m1; q0 = q%m1;
ab = (((p1*q0+p0*q1) % m1) * m1 + p0*q0) % m;
return ab;
}


Esercizio 5 (seconda versione)


/* 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*/

#include <stdio.h> /* direttive al preprocessore */
#include<stdlib.h>
#include <math.h>
#include <time.h>

#define NMAX 1000

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

p1 = p/m1; p0 = p%m1;
q1 = q/m1; q0 = q%m1;
ab = (((p1*q0+p0*q1) % m1) * m1 + p0*q0) % m;
return ab;
}




/* lehmer.C -- Genera una sequenza casuale usando il metodo di lehmer */

#include <stdio.h> /* direttive al preprocessore */
#include <math.h>
#include <time.h>

#define NMAX 1000

#define m 381
#define b 19

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

Potrebbero piacerti anche