ESERCIZI ARRAY 1. Scrivere un programma che inizializza un

Transcript

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