[C] Problema vettori paralleli

luca.oli

Utente Attivo
149
8
CPU
Intel i5 3570K 3.5 Ghz + Be Quiet Topflow
Scheda Madre
MSI Z77A-G45
HDD
Samsung 840 evo 250gb/WD Caviar Blue 500Gb 7200rpm/Maxtor 250Gb 5400rpm
RAM
2x4Gb 1600Mhz Corsair LP Black
GPU
AMD Sapphire 7950 3Gb Vapor-X
Audio
Asus Xonar DGX 5.1
Monitor
HP Pavillon 23cw
PSU
Seasonic 520w 80Plus Bronze
Case
Fractal ARC Midi R2 Finestrato
OS
Windows 10 Professional
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:

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:
"
 

luca.oli

Utente Attivo
149
8
CPU
Intel i5 3570K 3.5 Ghz + Be Quiet Topflow
Scheda Madre
MSI Z77A-G45
HDD
Samsung 840 evo 250gb/WD Caviar Blue 500Gb 7200rpm/Maxtor 250Gb 5400rpm
RAM
2x4Gb 1600Mhz Corsair LP Black
GPU
AMD Sapphire 7950 3Gb Vapor-X
Audio
Asus Xonar DGX 5.1
Monitor
HP Pavillon 23cw
PSU
Seasonic 520w 80Plus Bronze
Case
Fractal ARC Midi R2 Finestrato
OS
Windows 10 Professional
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

Hot: E3 2021, chi ti è piaciuto di più?

  • Ubisoft

    Voti: 30 22.4%
  • Gearbox

    Voti: 2 1.5%
  • Xbox & Bethesda

    Voti: 87 64.9%
  • Square Enix

    Voti: 10 7.5%
  • Capcom

    Voti: 6 4.5%
  • Nintendo

    Voti: 18 13.4%
  • Altro (Specificare)

    Voti: 12 9.0%

Discussioni Simili