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.