PROGRAMMA 1 /* Specifica: Es. 6 Programma che legge 10 numeri da tastiera, li ordina (con bubblesort) e li stampa. */ #include <stdio.h> #include <stdlib.h> #define N 10 int main (void){ int num[N]; int i,j; /* vettore dei valori letti */ /* indici per il ciclo for */ /* lettura degli N numeri */ printf("Inserisci %d numeri interi\n",N); for (i=0; i<N; i++){ scanf("%d",&num[i]); } /* bubblesort */ for (i=0; i<N; i++){ for(j=i+1; j<N; j++){ if (num[i] > num[j]){ int temp; /* temporaneo per lo scambio */ /* scambio */ temp = num[i]; num[i] = num[j]; num[j] = temp; } } } /* stampa formattata degli N numeri */ printf("[ "); for (i=0; i<N; i++){ printf("%d ",num[i]); } printf("]\n"); system("PAUSE"); return 0; } PROGRAMMA 2 #include <stdio.h> #include <stdbool.h> bool paridispari(int numero); int main(void) { int letto; printf("inserisci un numero intero:\n)"); scanf("%d",&letto); if(paridispari(letto)== true) printf("il numero %d letto e' pari\n",letto); else printf("il numeo letto %d e' dispari\n",letto); system("PAUSE"); return 0; } bool paridispari(int numero){ if((numero%2)==0) return true; else return false; } PROGRAMMA 3 #include <stdio.h> #include <string.h> #include <stdlib.h> int main(){ char nome[30]; scanf("%s", nome); printf(" stampa nome: %s"); system("PAUSE"); return 0; } PROGRAMMA 4 #include <stdio.h> #include <string.h> int main () char stringa[256]; int i,k,lunghezza; printf("inserire parola:"); gets(stringa); lunghezza= strlen(stringa); for(i=0;i<lunghezza;i++) { if( i % 2 ==0) printf(" %c e' in una cella pari \n", stringa[i]); else printf(" %c e' in una cella dispari \n", stringa[i]); } system("PAUSE"); return 0; } PROGRAMMA 5 #include <stdio.h> #include <time.h> int lancio(){ int faccia; faccia=(rand() % 6)+1; return faccia; } int main(){ srand (time(0)); int numeroLanci; int nl; printf("Numero lanci da effettuare: "); scanf("%d",&numeroLanci); for(nl=0;nl<numeroLanci;nl++) printf("Lancio N.ro %d e' uscito il numero %d \n ",nl,lancio()); system("PAUSE"); return 0; } PROGRAMMA 6 #include <stdio.h> #include <stdlib.h> #include <string.h> int main(int argc, char *argv[]) { char nome1[255], nome2[255], nome3[255], nome4[255]; gets(nome1); gets(nome2); gets(nome3); gets(nome4); system("PAUSE"); return 0; } PROGRAMMA 7 /* Scopo: funzioni */ #include <stdio.h> #include <stdbool.h> bool paridispari(int numero); /*prototipo: parametri formali */ int main(void) /* progeramma pari o dispari */ { int letto; printf("\ninserisci un numero intero\n"); scanf ("%d",&letto); if (paridispari(letto)==true) /* chiamata della funzione: parametri attuali */ printf("Il numero %d letto e' pari",letto); else printf("Il numero %d letto e' dispari",letto); printf("\n\n"); system("PAUSE"); return 0; } bool paridispari(int numero) /* header della funzione con parametri formali*/ { if ((numero%2)==0) return true; /* valore di ritorno */ else return false; /* valore di ritorno */ } PROGRAMMA 8 /*Questo programma confronta i tempi dei vari algoritmi di ordinamento per 100.000 elementi con numeri compresi fra 1 e 10 mila con scambio (4) 53 secondi con selezione (6) 14 secondi con insert sort (7) 9 secondi*/ #include <stdio.h> #include <stdlib.h> #include <time.h> #define M 100000000 int v[M], n; int scelta(scelta) { printf("\nscelta: "); scanf("%d", &scelta); return scelta; } void randomize() /* Chiamare 1 sola volta, prima di random() */ { time_t t; srand((unsigned) time(&t)); /* inizializza generatore pseudocasuale sul tempo di sistema */ } int random(int n) // ritorna un numero pseudocasuale fra 0 ed n-1 { return rand() % n; } void menu() { printf("\n1) dimensionamento vettore\n"); printf("2) riempimento vettore\n"); printf("3) stampa vettore\n"); printf("4) ordinamento per scambio bubblesort\n"); printf("5) ordinamento per scambio bubblesort (for i,j)\n"); printf("6) ordinamento per selezione\n"); printf("7) insert sort\n"); printf("8) quicksort\n"); printf("9) esci\n"); } int vet_pos_max(int v[], int n) { int pos_max_num = 0; int i; for (i=1; i<n; i++) { if(v[i]>v[pos_max_num]) pos_max_num = i; } return pos_max_num; } void dimensionamento() { char invio; printf("inserisci il numero degli elementi del vettore(max 100 milioni): "); scanf("%d%c", &n, &invio); } void riempimento(int v[], int n, int nrandom) { int i; for(i=0; i<n; i++) v[i]=random(nrandom)+1; printf("vettore riempito!!\n"); } void scambio(int v[], int pa, int pb) { int dep=v[pa]; v[pa]=v[pb]; v[pb]=dep; } void bubble_sort(int v[], int n) { int i, scambia=1; do { scambia=0; for(i=0; i<n-1; i++) if(v[i]>v[i+1]) scambio(v,i, i+1), scambia=1; } while(scambia); } void bubble_sort2(int v[], int n) { int i,j; for(i=0; i<n-1; i++) for(j=i+1; j<n; j++) if(v[i]>v[j]) scambio(v, i, j); } void ordina_selezione(int v[], int n) { int i,pm=n; for (i=n-1; i >= 0; i--) { pm=vet_pos_max(v,i+1); if (pm!=i) scambio(v,i,pm); } } void insert_sort(int v[], int n) { int i,j, value; for(i=1; i<n; i++) { value=v[i], j=i-1; while((j>=0)&&(v[j]>value)) { v[j+1]=v[j]; j--; v[j+1]=value; } } } void quicksort(int v[], int sx, int dx) { int pivot = v[(sx+dx)/2], i =sx , j = dx; while(i <= j ) { while(v[i]<pivot ) i++; while(v[j]>pivot ) j--; if ( i < j) scambio(v,i,j); if ( i <= j) i++, j--; } if (sx < j ) quicksort(v,sx,j); if (i < dx ) quicksort(v,i,dx); } void print(int v[], int n) { int i, risposta=1; for(i=0; i<n && risposta==1; i++) { printf("%9d^ elemento --> %9d\n", i+1, v[i]); if((i+1)% 20==0) { printf("stampo ancora? 1=si 0=no: "); scanf("%d", &risposta); } } void premi_un_tasto() { printf("\npremi un tasto per continuare.. \n"); getchar(); } int main() { int i, sc,nrandom; char invio; time_t inizio, fine; double secondi; randomize(); do { menu(); sc=scelta(sc); switch (sc) { //dimensionamento vet case 1: dimensionamento(v, n); premi_un_tasto(); break; case 2: printf("inserisci il numero massimo per il random: "); scanf("%d%c", &nrandom, &invio); riempimento(v, n, nrandom); premi_un_tasto(); break; case 3: print(v, n); premi_un_tasto(); break; case 4: inizio=time(NULL); bubble_sort(v, n); fine=time(NULL); secondi=difftime(fine, inizio); printf("\nper ordinare il vettore il computer ci mette %10.0lf secondi \n", secondi); break; case 5: inizio=time(NULL); bubble_sort2(v, n); fine=time(NULL); secondi=difftime(fine, inizio); printf("\nper ordinare il vettore il computer ci mette %10.0lf secondi \n", secondi); break; case 6: inizio=time(NULL); ordina_selezione(v, n); fine=time(NULL); secondi=difftime(fine, inizio); printf("\nper ordinare il vettore il computer ci mette %10.0lf secondi \n", secondi); break; case 7: inizio=time(NULL); insert_sort(v, n); fine=time(NULL); secondi=difftime(fine, inizio); printf("\nper ordinare il vettore il computer ci mette %10.0lf secondi \n", secondi); break; case 8: inizio=time(NULL); quicksort(v,0, n-1); fine=time(NULL); secondi=difftime(fine, inizio); printf("\nper ordinare il vettore il computer ci mette %10.0lf secondi \n", secondi); break; case 9: printf("fine programma"); break; default: printf("scelta sbagliata"); break; } } while(sc!=9); return 0; } PROGRAMMA 9 #include <stdio.h> #define DIM 5 void ordina(int v); void stampa(int v); int main(){ int a[DIM]={3,10,6,2,9}; stampa(a); ordina(a); stampa(a); return 0; } void ordina(int*v) { int i,j,temp,pos; for(i=0;i<DIM-1;i++) { pos=1; for(j=i+1;j<DIM;j++) { if(v[j]<v[pos]) pos=j; } temp=v[pos]; v[pos]=v[i]; v[i]=temp; } void stampa(int*v) { int i; for(i=0;i<DIM;i++) printf("%d\n",v[i]); }} PROGRAMMA 10 #include <stdio.h> #include <stdlib.h> void f2 (double v[] , int n, int c){ double a; int i,j; for(j=0 ; j<c;j++){ a=v[n-1]; for(i=n-1;i>0;i--) v[i]=v[i-1]; v[0]=a; } return; } int main() system("PAUSE"); return 0; } PROGRAMMA 11 #include <stdio.h> #include <string.h> #include <windows.h> int main () { char numero [256]; printf(" inserire un numero "); gets(numero); printf(" il numero che hai inserito ha %d numeri", strlen(numero)); system("PAUSE"); return 0; } PROGRAMMA 12 /* Scopo: algoritmo di bubble-sort */ #include <stdio.h> #include <stdbool.h> #include <stdlib.h> #include <time.h> void riempi(int vet[], int num, int max) { int conta; srand((unsigned)time(NULL)); // inizializza il seme // estrai i valori e riempi il vettore for (conta=0; conta<num; conta ++) vet[conta]=(rand()%max+1); // valori casuali tra 1 e max } void visualizza(int vet[], int num) { int conta; printf("\n"); for (conta=0; conta<num; conta ++) printf ("%4d",vet[conta]); // visualizza vettore } void bubbleSort(int vet[], int tanti) { int x, y, min; int temp; for (x=0; x<tanti-1; x++) { // ripeti per tutto i numeri for (y=0; y<tanti-1; y++) // li confronto tutti a coppie if (vet[y]>vet[y+1]) { // se ne trovo uno maggiore temp = vet[y]; // li scambio tra loro vet[y] = vet[y+1]; vet[y+1] = temp; } visualizza(vet,tanti); // visualizza un passo di ordinamento } } int main (){ int tanti,nuovo; int numPosiz = 10; // dimensione del problema int massimo = 100; // valore massimo del numero da generare int numeri[numPosiz]; // vettore dei dati riempi(numeri,numPosiz,massimo); visualizza(numeri,numPosiz); bubbleSort (numeri,numPosiz); // visualizza(numeri,numPosiz); printf("\n\n"); system("PAUSE"); return 0; } // visualizza vett disordinato // ordinalo per selezione // visualizza parziali