PDA

View Full Version : [C]Mi aiutate a capire perchè non funziona?


stgww
31-03-2008, 21:24
Ciao, sono sempre io alle prese con C, pensavo di aver fatto un buon lavoro, ma a quanto pare c'è qualcosa che non va, mi aiutate? Thx a lot
#include <stdio.h>
#include <stdlib.h>
/*
Un grande Magazzino è formato da N reparti. Creare 2 vettori contenenti il primo l'elenco dei codici dei reparti
e il secondo gli incassi di febbraio corrispondenti ai reparti inseriti.
Calcolare:
a-incasso totale del mese di febbraio;
b-incasso medio mensile di reparto. Usare due funzioni, una per la somma e una per la media;
c-incasso e codice di quale reparto ha venduto di più e quale di meno;
d-la percentuale di chi ha venduto di più nella media.

*/



int departments=0; //Numero reparti del magazzino
int codes[100]; //Vettore contenente i codici
float receipts[100]; //Vettore contenete gli incassi per ogni reparto

int load() //Con questa funzione carichiamo i dati del magazzino chiedendo all'utente di inserirli
{
int i;
printf("In quanti reparti è suddiviso il magazzino ?\n");
scanf("%i",&departments);
for(i=0;i<departments;i++){
printf("Inserici codice numerico reparto\n");
scanf("%i",&codes[i]);
printf("Inserici incasso di questo reparto\n");
scanf("%f",&receipts[i]);
}
return 0;
}

int menu ()//In questa funzione scriviamo il menu di scelta con il quale l'utente potrà orientarsi all'interno delle diverse funzioni
{
int choice=0;
printf("Cosa vuoi fare ?\n\n1)Visualizza incasso totale mensile del Magazzino\n2)Media degli incassi\n3)Quale reparto ha incassato di piu' equale di meno\n4)Percentuale di chi ha incassato di più nella media\n5)Esci\n");
scanf("%i", &choice);
return choice;
}

float addition ()//Usiamo questa funzione per sommare gli incassi di ogni reparto
{
int i;
float sum=0;
for(i=0;i<departments;i++)
sum=sum+receipts[i];
return sum;
}

float average () // Con questa funzione calcoleremo la media degli incassi totali
{
float mean=0, s=0;
s=addition();
mean=s/departments;
return mean;
}

float higher () //Usiamo questa funzione per trovare l'incasso maggiore
{
float big=0;
int i=0;
for(i=0;i<departments;i++)
if(big<receipts[i])
big=receipts[i];
return big;
}

float lower () //Usiamo questa funzione per trovare l'incasso minore
{
float little=receipts[0];
int i=0;
for(i=0;i<departments;i++)
if(little<receipts[i])
little=receipts[i];
return little;
}

int higherreceipt() //Ora confrontiamo con i vari reparti e vediamo a quale appartiene l'incasso maggiore
{
float h=higher();
int i,hr;
for(i=0;i<departments;i++)
if (h==receipts[i])
hr=codes[i];
return hr;
}

int lowerreceipt() //Ora confrontiamo con i vari reparti e vediamo a quale appartiene l'incasso minore
{
float l=lower();
int i,lr;
for(i=0;i<departments;i++)
if (l==receipts[i])
lr=codes[i];
return lr;
}

float percentage () //Con questa funzione calcoliamo la percentuale dell'incasso del reparto che ha incassato di più
{
float perc, sum, big;
sum=addition();
big=higher();
perc=(100*big)/sum;
return perc;
}

int main()
{
int choice, i,c,m,n;
float h,k,j,t,p;

i=load();
c=menu();
choice=menu();

switch(choice) {
case 1 :
h=addition();
printf("Nel corso del mese sono stati incassati euro %f \n", h);
break;

case 2 :
k=average();
printf("La media degli incassi totali per reparto e' %f\n", k);
break;

case 3 :
j=higher();
t=lower();
m=higherreceipt();
n=lowerreceipt();
printf("Il reparto che ha incassto di piu' e' %i e il suo incasso e' stato %f\n", m, j);
printf("Il reparto che ha incassto di meno e' %i e il suo incasso e' stato %f\n", n, t);
break;

case 4 :
p=percentage();
printf("La percentuale dell'incasso del reparto che ha incassato di più e' stata %f\n", p);
break;

case 5 :
break;

}

system ("PAUSE");
return 0;
}

pmhwp
31-03-2008, 21:47
Guarda se ora ti funziona come desideri...
Ho cambiato un paio di cose nel main.

#include <stdio.h>
#include <stdlib.h>
/*
Un grande Magazzino è formato da N reparti. Creare 2 vettori contenenti il primo l'elenco dei codici dei reparti
e il secondo gli incassi di febbraio corrispondenti ai reparti inseriti.
Calcolare:
a-incasso totale del mese di febbraio;
b-incasso medio mensile di reparto. Usare due funzioni, una per la somma e una per la media;
c-incasso e codice di quale reparto ha venduto di più e quale di meno;
d-la percentuale di chi ha venduto di più nella media.

*/



int departments=0; //Numero reparti del magazzino
int codes[100]; //Vettore contenente i codici
float receipts[100]; //Vettore contenete gli incassi per ogni reparto

int load() //Con questa funzione carichiamo i dati del magazzino chiedendo all'utente di inserirli
{
int i;
printf("In quanti reparti è suddiviso il magazzino ?\n");
scanf("%i",&departments);
for(i=0;i<departments;i++){
printf("Reparto %d:\n",i+1);
printf("Inserici codice numerico reparto\n");
scanf("%i",&codes[i]);
printf("Inserici incasso di questo reparto\n");
scanf("%f",&receipts[i]);
}
return 0;
}

int menu ()//In questa funzione scriviamo il menu di scelta con il quale l'utente potrà orientarsi all'interno delle diverse funzioni
{
int choice=0;
printf("Cosa vuoi fare ?\n\n1)Visualizza incasso totale mensile del Magazzino\n2)Media degli incassi\n3)Quale reparto ha incassato di piu' equale di meno\n4)Percentuale di chi ha incassato di più nella media\n5)Esci\n");
scanf("%i", &choice);
return choice;
}

float addition ()//Usiamo questa funzione per sommare gli incassi di ogni reparto
{
int i;
float sum=0;
for(i=0;i<departments;i++)
sum=sum+receipts[i];
return sum;
}

float average () // Con questa funzione calcoleremo la media degli incassi totali
{
float mean=0, s=0;
s=addition();
mean=s/departments;
return mean;
}

float higher () //Usiamo questa funzione per trovare l'incasso maggiore
{
float big=0;
int i=0;
for(i=0;i<departments;i++)
if(big<receipts[i])
big=receipts[i];
return big;
}

float lower () //Usiamo questa funzione per trovare l'incasso minore
{
float little=receipts[0];
int i=0;
for(i=0;i<departments;i++)
if(little<receipts[i])
little=receipts[i];
return little;
}

int higherreceipt() //Ora confrontiamo con i vari reparti e vediamo a quale appartiene l'incasso maggiore
{
float h=higher();
int i,hr;
for(i=0;i<departments;i++)
if (h==receipts[i])
hr=codes[i];
return hr;
}

int lowerreceipt() //Ora confrontiamo con i vari reparti e vediamo a quale appartiene l'incasso minore
{
float l=lower();
int i,lr;
for(i=0;i<departments;i++)
if (l==receipts[i])
lr=codes[i];
return lr;
}

float percentage () //Con questa funzione calcoliamo la percentuale dell'incasso del reparto che ha incassato di più
{
float perc, sum, big;
sum=addition();
big=higher();
perc=(100*big)/sum;
return perc;
}

int main()
{
int choice, i,c,m,n;
float h,k,j,t,p;

i=load();
//c=menu();
//choice=menu();

while (choice!=5){
system("cls");
choice=menu();
switch(choice) {
case 1 :
h=addition();
printf("Nel corso del mese sono stati incassati euro %f \n", h);
break;

case 2 :
k=average();
printf("La media degli incassi totali per reparto e' %f\n", k);
break;

case 3 :
j=higher();
t=lower();
m=higherreceipt();
n=lowerreceipt();
printf("Il reparto che ha incassto di piu' e' %i e il suo incasso e' stato %f\n", m, j);
printf("Il reparto che ha incassto di meno e' %i e il suo incasso e' stato %f\n", n, t);
break;

case 4 :
p=percentage();
printf("La percentuale dell'incasso del reparto che ha incassato di più e' stata %f\n", p);
break;

case 5 :
break;

}
system ("PAUSE");
}

return 0;
}


Ciao.

stgww
31-03-2008, 21:52
Grazie!!! Prima nel menu, inserivo il numero, riappariva il menu e lo dovevo reinserirlo. Mi hai anche aggiunto i CLS:D Thx ancora!

pmhwp
31-03-2008, 21:55
Di nulla!
Comunque era una cosa da poco...una disattenzione.
Se controlli nel main ti ho commentato la riga c=menu();
E subito sotto choice=menu();
Per questo ti veniva due volte il menu!

Un consiglio se mi permetti sarebbe quello di usare le variabili non globali.
Ovvero potresti creare i vettori nel main e passarli alle varie funzioni come parametri.

Comunque riprendi il codice che è postato sopra perchè prima ho modificato il post aggiungendo una riga di codice.
Quando inserisci i dati di reparto dovrebbe venire scritto su quale reparto stai inserendo i dati.

Se hai altri dubbi scrivi pure.
Ciao.

stgww
31-03-2008, 22:14
Gentilissimo, l'unica cosa che non capisco è perchè hai messo %d? Non andava bene un %i ?

pmhwp
01-04-2008, 16:42
Io ho sempre usato %d per gli interi...onestamente non so dirtelo.

Ciao!