#include <stdio.h>
#define COSTO_GIORN 2.60 /*costo biglietto giornaliero*/
#define COSTO_SETT 16.90 /*costo settimanale*/
#define COSTO_MENS 52.00 /*costo mensile*/
void CalcolaCosto (float NumGiorni,int NumSett); /*calcola il costo dei biglietti*/
int main()
{
float NumGiorni;
int NumGiorniInt; /*sono i NumGiorni in int*/
int NumSett;
int Scelta;
char Vuoto[2];
void ScomponiGiorni (float NumGiorni,int NumSett);
printf ("\n\n\t\tCOSTI PULLMAN\n\n\n");
printf ("\nN.B. Il Programma è impostato con la tratta 'Ossona - Milano Lotto' + metropolitana della linea ATM. Premi Enter per continuare.\n");
fgets (Vuoto,2,stdin); /*serve per far aspettare un pò prima di procedere all'input per far leggere il N.B.*/
printf("\nInserisci il numero di settimane: ");
scanf ("%d",& NumSett);
printf ("\nInserisci il numero di giorni: ");
scanf ("%f",& NumGiorni);
if (NumGiorni>=4)
{
NumGiorniInt=NumGiorni;
printf ("\nI %d giorni inseriti in input sono relativi a una (1) o a più settimane (2)? ",NumGiorniInt
);
scanf ("%d",&Scelta);
if (Scelta==1)
{
CalcolaCosto(NumGiorni,NumSett);
}
else if (Scelta==2)
{
ScomponiGiorni (NumGiorni,NumSett);
}
}
else
{
CalcolaCosto(NumGiorni,NumSett);
}
printf ("\n\n\n\tBuon Viaggio!\n");
printf ("\n\nPremere 'Esc' per uscire.\n\n\n\n");
getch();
return (0);
}
void CalcolaCosto (float NumGiorni,int NumSett)
{
float CostoGiorni; /*indica il costo dei giorni.Un giorno sono due biglietti giornalieri*/
float CostoSett; /*costo delle settimane*/
float CostoSettPiu; /*costo delle settimane inserite + una*/
float CostoTot; /*costo delle settimane + costo dei giorni*/
float Risparmio; /*contiene il risparmio di una tariffa rispetto all'altra*/
float Spesa; /*contiene la spesa supplementare tra una tariffa e un altra*/
float CostoSingGiorno; /*contiene il costo di un singolo giorno.Un giorno sono due biglietti giornalieri*/
int NumGiorniVisu; /*serve a far visualizzare il numero dei giorni come intero.Così se ho 3.5 visualizza 7*/
CostoSingGiorno=COSTO_GIORN*2;
CostoGiorni=CostoSingGiorno*NumGiorni;
CostoSett=COSTO_SETT*NumSett;
CostoTot=CostoSett+CostoGiorni;
CostoSettPiu=CostoSett+COSTO_SETT;
NumGiorniVisu=NumGiorni*2;
if (0==NumGiorni)
{
printf ("\nIl costo di %d settimanali è %f\n",NumSett
,CostoSett
);
}
if (0==NumSett)
{
printf ("\nIl costo di %d giornalieri è %f\n",NumGiorniVisu
,CostoGiorni
);
}
if (0!=NumGiorni && 0!=NumSett)
{
printf ("\nIl costo di %d settimanali e %d giornalieri è %f\n",NumSett
,NumGiorniVisu
,CostoTot
);
}
if (0==NumGiorni)
{
if (CostoSett<COSTO_MENS)
{
printf ("\nIl costo di %d setimanali è minore rispetto al costo di un mensile\n",NumSett
);
Risparmio=COSTO_MENS-CostoSett;
printf ("\n\t\t%f $\n",Risparmio
);
printf ("\n\nConsiglio di acquisto: %d settimanali\n",NumSett
);
}
if (CostoSett>COSTO_MENS)
{
printf ("\nIl costo di %d setimanali è maggiore rispetto al costo di un mensile\n",NumSett
);
printf ("\nSpesa aggiuntiva: ");
Spesa=CostoSett-COSTO_MENS;
printf ("\n\t\t%f $\n",Spesa
);
printf ("\n\nConsiglio di acquisto: 1 mensile\n");
}
if (CostoSett==COSTO_MENS)
{
printf ("\nIl costo di %d setimanali è uguale al costo di un mensile\n",NumSett
);
printf ("\n\nConsiglio di acquisto: 1 mensile\n");
}
}
if (0==NumSett)
{
if (CostoGiorni<COSTO_SETT)
{
printf ("\nIl costo di %d giornalieri è minore rispetto al costo di un settimanale\n",NumGiorniVisu
);
Risparmio=COSTO_SETT-CostoGiorni;
printf ("\n\t\t%f $\n",Risparmio
);
printf ("\n\nConsiglio di acquisto: %d giornalieri\n",NumGiorniVisu
);
}
if (CostoGiorni>COSTO_SETT)
{
printf ("\nIl costo di %d giornalieri è maggiore rispetto al costo di un settimanale\n",NumGiorniVisu
);
printf ("\nSpesa aggiuntiva: ");
Spesa=CostoGiorni-COSTO_SETT;
printf ("\n\t\t%f $\n",Spesa
);
printf ("\n\nConsiglio di acquisto: 1 settimanale\n");
}
if (CostoGiorni==COSTO_SETT)
{
printf ("\nIl costo di %d giornalieri è uguale al costo di un settimanale\n",NumGiorniVisu
);
printf ("\n\nConsiglio di acquisto: %d giornalieri\n",NumGiorniVisu
);
}
}
if (0!=NumGiorni && 0!=NumSett)
{
if (CostoTot<CostoSettPiu)
{
printf ("\nIl costo di %d setimanali e %d giornalieri è minore rispetto al costo di %d settimanali\n",NumSett
,NumGiorniVisu
,NumSett
+1
);
Risparmio=CostoSettPiu-CostoTot;
printf ("\n\t\t%f $\n",Risparmio
);
if (CostoTot<COSTO_MENS)
{
printf ("\ned è anche minore al costo di un mensile\n");
Risparmio=COSTO_MENS-CostoTot;
printf ("\n\t\t%f $\n",Risparmio
);
printf ("\n\nConsiglio di acquisto: %d settimanali pië %d giornalieri\n",NumSett
,NumGiorniVisu
);
}
if (CostoTot>COSTO_MENS)
{
printf ("\nma è maggiore rispetto al costo di un mensile\n");
printf ("\nSpesa aggiuntiva: ");
Spesa=CostoTot-COSTO_MENS;
printf ("\n\t\t%f $\n",Spesa
);
printf ("\n\nConsiglio di acquisto: 1 mensile\n");
}
if (CostoTot==COSTO_MENS)
{
printf ("\ned è uguale al costo di un mensile\n");
printf ("\n\nConsiglio di acquisto: 1 mensile\n");
}
}
if (CostoTot>CostoSettPiu)
{
printf ("\nIl costo di %d setimanali e %d giornalieri è maggiore rispetto al costo di %d settimanali\n",NumSett
,NumGiorniVisu
,NumSett
+1
);
printf ("\nSpesa aggiuntiva: ");
Spesa=CostoTot-CostoSettPiu;
printf ("\n\t\t%f $\n",Spesa
);
if (CostoTot<COSTO_MENS)
{
printf ("\nè minore al costo di un mensile ma non è conveniente\n");
printf ("\n\nConsiglio di acquisto: %d settimanali\n",NumSett
+1
);
}
if (CostoTot>COSTO_MENS)
{
if (COSTO_MENS==CostoSettPiu)
{
printf ("\ned il costo di %d settimanali è uguale al costo di un mensile\n",NumSett
+1
);
printf ("\n\nConsiglio di acquisto: 1 mensile\n");
}
if (COSTO_MENS<CostoSettPiu)
{
printf ("\nma il costo di un mensile è minore rispetto al costo di %d settimanali\n",NumSett
+1
);
printf ("\n\nConsiglio di acquisto: 1 mensile\n");
}
if (COSTO_MENS>CostoSettPiu)
{
printf ("\ned il costo di un mensile è maggiore rispetto al costo di %d settimanali\n",NumSett
+1
);
printf ("\n\nConsiglio di acquisto: %d settimanali\n",NumSett
+1
);
}
}
if (CostoTot==COSTO_MENS)
{
printf ("\nma è uguale al costo di un mensile\n");
printf ("\n\nConsiglio di acquisto: %d settimanali\n",NumSett
+1
);
}
}
if (CostoTot==CostoSettPiu)
{
printf ("\nIl costo di %d setimanali e %d giornalieri è uguale al costo di %d settimanali\n",NumSett
,NumGiorniVisu
,NumSett
+1
);
if (CostoTot<COSTO_MENS)
{
printf ("\ned è minore al costo di un mensile\n");
Risparmio=COSTO_MENS-CostoTot;
printf ("\n\t\t%f $\n",Risparmio
);
printf ("\n\nConsiglio di acquisto: %d settimanali pië %d giornalieri\n",NumSett
,NumGiorniVisu
);
}
if (CostoTot>COSTO_MENS)
{
printf ("\nma è maggiore rispetto al costo di un mensile\n");
printf ("\nSpesa aggiuntiva: ");
Spesa=CostoTot-COSTO_MENS;
printf ("\n\t\t%f $\n",Spesa
);
printf ("\n\nConsiglio di acquisto: 1 mensile\n");
}
if (CostoTot==COSTO_MENS)
{
printf ("\ned è anche uguale al costo di un mensile\n");
printf ("\n\nConsiglio di acquisto: %d settimanali pië %d giornalieri\n",NumSett
,NumGiorniVisu
);
}
}
}
return;
}
void ScomponiGiorni (float NumGiorni,int NumSett)
{
int SettScomp; /*sono le settimane in cui vanno scomposti i giorni*/
int Cont; /*si decrementa da SettScomp verso 0*/
int ContSett; /*conta il numero di settimane.Serve solo per una stampa a schermo*/
int GiorniSett1; /*sono i giorni della settimana 1*/
int GiorniSett2; /*sono i giorni della settimana 2*/
int GiorniSett3; /*sono i giorni della settimana 3*/
int GiorniSett4; /*sono i giorni della settimana 4*/
int GiorniSett5; /*sono i giorni della settimana 5*/
int GiorniSett6; /*sono i giorni della settimana 6*/
float GiorniRim; /*sono i giorni che rimangono da scomporre*/
int GiorniRimInt; /*sono in int*/
float CostoGiorni; /*indica il costo dei giorni.Un giorno sono due biglietti giornalieri*/
float CostoSingGiorno; /*contiene il costo di un singolo giorno.Un giorno sono due biglietti giornalieri*/
char Risposta; /*serve a contenere s o n*/
int NumGiorniScomp; /*indica il numero dei giorni scomposti*/
int NumSettScomp; /*indica il numero di settimane una volta scomposti i giorni*/
char Vuoto[2];
printf ("\nInserire il numero di settimane in cui scomporre i giorni: ");
scanf ("%d",&SettScomp);
while ((SettScomp<=0) || (SettScomp>=6))
{
printf ("\nIl numero di settimane in cui scomporre i giorni è sbagliato. Si prega di re-inserirlo: ");
scanf ("%d",&SettScomp);
}
RicominciaScomp:
GiorniRim=NumGiorni;
Cont=SettScomp;
ContSett=0;
while (Cont>0)
{
++ContSett;
if (ContSett==1)
{
printf ("\nInserire il numero di giorni riferito alla 1^ settimana: ");
scanf ("%d",&GiorniSett1);
GiorniRim=GiorniRim-GiorniSett1;
GiorniRimInt=GiorniRim;
printf ("\nGiorniRim: %d",GiorniRimInt
);
}
else if (ContSett==2)
{
printf ("\nInserire il numero di giorni riferito alla 2^ settimana: ");
scanf ("%d",&GiorniSett2);
GiorniRim=GiorniRim-GiorniSett2;
GiorniRimInt=GiorniRim;
printf ("\n\nGiorniRim: %d",GiorniRimInt
);
}
else if (ContSett==3)
{
printf ("\nInserire il numero di giorni riferito alla 3^ settimana: ");
scanf ("%d",&GiorniSett3);
GiorniRim=GiorniRim-GiorniSett3;
GiorniRimInt=GiorniRim;
printf ("\n\nGiorniRim: %d",GiorniRimInt
);
}
else if (ContSett==4)
{
printf ("\nInserire il numero di giorni riferito alla 4^ settimana: ");
scanf ("%d",&GiorniSett4);
GiorniRim=GiorniRim-GiorniSett4;
GiorniRimInt=GiorniRim;
printf ("\n\nGiorniRim: %d",GiorniRimInt
);
}
else if (ContSett=5)
{
printf ("\nInserire il numero di giorni riferito alla 5^ settimana: ");
scanf ("%d",&GiorniSett5);
GiorniRim=GiorniRim-GiorniSett5;
GiorniRimInt=GiorniRim;
printf ("\n\nGiorniRim: %d",GiorniRimInt
);
}
else if (ContSett=6)
{
printf ("\nInserire il numero di giorni riferito alla 6^ settimana: ");
scanf ("%d",&GiorniSett6);
GiorniRim=GiorniRim-GiorniSett6;
GiorniRimInt=GiorniRim;
printf ("\n\nGiorniRim: %d",GiorniRimInt
);
}
Cont--;
}
if (GiorniRim!=0)
{
printf ("\n\nSono rimasti %d giorni. E' stato sbagliato il calcolo di scomposizione.");
printf ("\nSi intende rifarlo (s/n) ? ");
fgets (Vuoto,2,stdin); /*serve per far aspettare un pò prima di procedere all'input per far leggere il N.B.*/
scanf ("%c",&Risposta);
if (Risposta=='s')
{
goto RicominciaScomp;
}
else if (Risposta=='n')
{
printf ("\nNon si sanno i dati esatti dei giorni e delle settimane.");
printf("\n\nIl programma viene interrotto.\n\n");
return;
}
}
else
{
CostoSingGiorno=COSTO_GIORN*2;
Cont=SettScomp;
ContSett=0;
NumGiorniScomp=0;
NumSettScomp=NumSett;
while (Cont>0)
{
++ContSett;
if (ContSett==1)
{
CostoGiorni=CostoSingGiorno*GiorniSett1;
if (CostoGiorni<COSTO_SETT)
{
NumGiorniScomp=NumGiorniScomp+GiorniSett1;
}
else
{
++NumSettScomp;
}
}
else if (ContSett==2)
{
CostoGiorni=CostoSingGiorno*GiorniSett2;
if (CostoGiorni<COSTO_SETT)
{
NumGiorniScomp=NumGiorniScomp+GiorniSett2;
}
else
{
++NumSettScomp;
}
}
else if (ContSett==3)
{
CostoGiorni=CostoSingGiorno*GiorniSett3;
if (CostoGiorni<COSTO_SETT)
{
NumGiorniScomp=NumGiorniScomp+GiorniSett3;
}
else
{
++NumSettScomp;
}
}
else if (ContSett==4)
{
CostoGiorni=CostoSingGiorno*GiorniSett4;
if (CostoGiorni<COSTO_SETT)
{
NumGiorniScomp=NumGiorniScomp+GiorniSett4;
}
else
{
++NumSettScomp;
}
}
else if (ContSett==5)
{
CostoGiorni=CostoSingGiorno*GiorniSett5;
if (CostoGiorni<COSTO_SETT)
{
NumGiorniScomp=NumGiorniScomp+GiorniSett5;
}
else
{
++NumSettScomp;
}
}
else if (ContSett==6)
{
CostoGiorni=CostoSingGiorno*GiorniSett6;
if (CostoGiorni<COSTO_SETT)
{
NumGiorniScomp=NumGiorniScomp+GiorniSett6;
}
else
{
++NumSettScomp;
}
}
Cont--;
}
}
CalcolaCosto (NumGiorniScomp,NumSettScomp);
return;
}