ricerca valore ripetuto più volte - matrici, svolgimento finito

« Older   Newer »
  Share  
tonno16
view post Posted on 2/12/2012, 14:52




salve a tutti. Per una volta, sono riuscito ad finire un esercizio, sempre leggendo guide e confrontandomi con gli altri.
Mi è sembrata buona cosa condividerlo perchè spesso gli esercizi che si danno in facoltà, sono molto simili fra loro o comunque richiedono un ragionamento simile.

TESTO:
Scrivere un programma che chieda all'utente un numero n e quindi - allochi n vettori di interi di lunghezza rispettivamente da 2 a n+1; - riempa i vettori - cerchi fra gli interi quello di valore massimo e quello ripetuto più volte.


esempio: l'utente inserisce in input il numero n=4.
il programma deve creare 4 vettori, di lunghezza compresa fra 2 ed n+1, quindi lunghezza minima=2, lunghezza massima=5.
il programma deve poi inserire un numero in ogni cella, con numeri casuali. (Io limito la casualità fra 0 e 10);

ESEMPIO:

vettore[0]= 1, 2, 6, 1, 5 la lunghezza è 5
vettore[1]= 4, 6, 8 lunghezza è 3
vettore[2]= 5, 6 " 2
vettore[3]= 7, 7, 8, 1 " 4


CODICE:
CODICE
#include <stdio.h>
#include <stdlib.h>

int main(){
   
   int casuale,conta,contamax,max0=0,max=0,i,n,k,dim;
   int **vettore;
   int *p_dim; // memorizzo in un array le dimensioni di ogni riga/vettore
   int p,h;  // p riferito a i.....h riferito a k;
     
       printf(" numero vettori da creare, n: ");
       scanf("%d",&n);
       
       vettore=(int **)malloc(sizeof(int *)*n);
       p_dim=(int *)malloc(sizeof(int)*n);
       

       srand(time(NULL));
       
       for(i=0;i<n;i++){
           dim=rand() %(n)+2;   // da 2 a n+1
           p_dim[i]=dim;
           
           vettore[i]=(int *)malloc(sizeof(int)*dim);
           
           for(k=0;k<dim;k++){
               casuale=rand() %10; // FACENDO %10+10 OTTENGO NUM CASUALI DA 10 A 20...cosi nn confondo indirici i,k,n con gli elementi
               vettore[i][k]=casuale;
               printf("%d  ", vettore[i][k]);
               if(vettore[i][k]>max){  max=vettore[i][k];  }  // CALCOLO DEL MASSIMO SU TUTTA LA MATRICE
           }
           if(max>max0){}
           else{ max0=max; }
         
         printf("nn");
       }

       printf("nn");
       // CALCOLO DEL NUMERO PIU PRESENTE NELLA MATRICE
       
       
       int numero;// memorizza i numeri che compaiono più volte ma in egual numero
       contamax=0;
       
       for(i=0;i<n;i++){
           for(k=0;k<p_dim[i];k++){
               
                conta=0;
               //CONFRONTO OGNI SINGOLO VALORE CON TUTTA LA MATRICE, cambiando indici;  
               for(p=0;p<n;p++){
                     
                   for(h=0;h<p_dim[p];h++){
                       if(vettore[i][k]==vettore[p][h]){   conta++;    }
                   }
                 if(conta>=contamax){   contamax=conta;    numero=vettore[i][k];    }
               }
               //printf("%d   ", conta);  
           }
           //printf("nn");
       }              
               
       printf(" il numero %d si ripete con un massimo di %d volte nn", numero, contamax);
       printf(" il numero massimo e': %d nn", max);
       system("pause");
}



il programma calcola:

- il valore massimo dell intera matrice
- il valore che compare più volte e quante volte.

ora, premetto che l'esercizio funziona, è stato validato dalla mia prof. Comunque penso che possa essere migliorato, e quindi nel caso qualcuno volesse dirmi come far ciò sono lieto di ascoltare.

spero di aver scritto qualcosa di utile ad un prossimo che leggerà in questo forum.

 
Top
0 replies since 2/12/2012, 14:52   329 views
  Share