ESERCIZI ARRAY 1. Scrivere un programma che inizializza un

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 switch…case;
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;
}