[C] Problema vettori paralleli

U

Utente 83992

Ospite
Salve a tutti, a scuola ci hanno dato un esercizio da svolgere in C, sapreste darmi una mano?

#include <stdio.h>
#include <stdlib.h>
main(){
int n; /*Numero di elementi*/
int n1; /*Valore a cui n deve essere maggiore*/
int n2; /*Valore a cui n deve essere minore*/
int scelta; /*Scelta sul menu*/
int eta[1000]; /*Array per le età*/
int i; /*Contatore*/
int med; /*Media delle età*/
int f[1000]; /*Frequenza dei dati*/
int flag; /*Controllo per l'imput delle età*/

flag=0;
do{
printf("Inserire n2 minore di 1000: ");
scanf("%d", & n2);
}
while((n2>1000)||(n2<0));
do{
printf("Inserire n1 minore di n2: ");
scanf("%d", & n1);
}
while((n1>n2)||(n1<0));
do{
printf("Inserire n comopreso fra n1 e n2: ");
scanf("%d", & n);
}
while((n<n1)||(n>n2));

do{
do{ /*Menu per la scelta delle operazioni da effettuare*/
printf("-->FAI LA TUA SCELTA<--");
printf("1-Input delle eta' e stampa di essa. \n");
printf("2-Ricerca delle eta' e stampa della frequenza. \n");
printf("3-Stampa la media delle eta'. \n");
printf("0-Esci \n");
scanf("%d", & scelta);
}
while((scelta<0)||(scelta>3));

switch(scelta){

case 1:{ /*Input delle età e stampa di essa*/
for(i=0;i<n;i++){
printf("Inserire valori delle eta': \n");
scanf("%d", & eta);
}
for(i=0,i<n;i++){
printf("Le eta' sono %d: ", eta);
}
break;
flag=1;
}

case 2:{ /*Frequenza di ogni età*/
if(flag==0){
printf("Prima inserire valori delle eta'");
}
else{

}
break;
}

case 3:{ /*Stampa della media degli elementi*/
if(flag==0){
printf("Prima inserire valori delle eta'");
}
else{
med=0;
for(i=0;i<n;i++){
med=med+eta*f;
}
printf("la media delle eta' e' %d", med);
}
break;
}
}

}
while(scelta!=0);
}


Questo è quello che sono riuscito a fare ma la ricerca delle frequenze per ogni eta proprio non ci riesco... Devo usare 2 vettori paralleli uno per la frequenza e uno per le eta??

Grazie 1000 per le risposte
 
Ultima modifica da un moderatore:

cawletto

Utente Attivo
475
25
CPU
i5 750
HDD
1 TB
RAM
6 GB
GPU
GXT 460 SE 1GB overclocked
Monitor
Samsung LCD 1280x1024
PSU
Cooler Master Silent Pro M 600 W
Case
HP
OS
Windows 7-64 bit
Forse ci servirebbe la traccia del problema eh xD
ps. il codice lo devi inserire tra i tag "
Codice:
"
 
U

Utente 83992

Ospite
Scusami se rispondo solo ora comunque la parte che non riesco a fare è quella di contare le frequenze di ogli età e poi mettere le frequenze in ordne in base all' ordine crescente delle età, se non mi sono spiegato ecco l'esempio: 2012-03-28_192550.png

Grazie per l'attenzione
 
D

deleted_98961

Ospite
Ciao, vediamo...

Abbiamo una serie di dati che stanno per età umana presumo, perciò se utilizziamo valori interi espressi in anni, abbiamo un intervallo [1,120] (ceiling). I dati li salviamo in un vettore di interi age[] la lunghezza dipende dal numero di dati che hai a disposizione.

Un algoritmo semplice, per calcolare le frequenze, è quello di utilizzare un vettore di lunghezza pari alla massima età umana consentita 120 (siamo ottimisti), e salvare al suo interno i valori che incontriamo, zero altrimenti.

Perciò:
Codice:
int age[MAX] = {1,4,10,1,100,2,...} //dichiarazione statica o dinamica vedi te
int freq[120] = {0} //dichiarazione statica con inizializzazione dei valori a 0 che starà per zero occorrenze

int i = 0;
while(i<MAX){
            freq[age[i]]++;
             i++;
}

L'ordinamente è inutile perchè sono già ordinati implicitamente attraverso l'intero che rappresenta la cella dell'array, visto che chiedi un ordinamento crescente.
Alcune freq di età potrebbe essero a zero, probabile, per via della non occorrenza nei tuoi dati. Ora dipende da cosa devi farci son questo array, devi ricordarti che devi filtrare i dati a zero.

Se le età non sono interi (cioè non sono espressi in anni) devi dirlo che modifichiamo.

Nota:
- la frequenza dell'età 0 non ha senso, da come ho definito il problema, ricordati che le età sono da 1 a 120 anni.
- devi inserire un filtro per non sforare la soglia dell'età consentita (in questo caso 120), devi dire te quale hai fissato per l'inserimento.
 
Ultima modifica da un moderatore:

Entra

oppure Accedi utilizzando
Discord Ufficiale Entra ora!

Discussioni Simili