PDA

Visualizza la versione completa : [C] Problema programma informazioni riassuntive sui flussi di cassa di un registro contabile


al3xmill3r74
31-01-2019, 00:26
Salve,
Sono uno studente di ingegneria informatica al primo anno e per esercitarmi ho tentato di svolgere il seguente esercizio:



Si realizzi un programma in C per consultare un registro contabile (registro che memorizza i flussi dicassa in entrata e in uscita di un’attività commerciale) memorizzato su un file di testo. La prima rigadel file, che è sempre presente, contiene due informazioni: la data (GG/MM/YYYY) e la differenzatra i flussi di cassa in entrata e in uscita a quella data (numero con 2 cifre decimali). Tutte le altrerighe del file descrivono i flussi di cassa in entrata/uscita memorizzati sul registro contabile ordinateper date crescenti. Ogni operazione è caratterizzata dai seguenti campi separati da uno spazio l’unodall’altro. La data è una stringa nel formato GG/MM/YYYY, la descrizione del flusso di cassa è una stringaalfanumerica lunga al massimo 20 caratteri, l’importo è un numero reale con due cifre decimali, iltipo flusso di cassa è una stringa che può assumere due valori: “FCE” (flusso di cassa in entrata),“FCU” (flusso di cassa in uscita). Si facciano le seguenti assunzioni: il numero di righe del file non è noto a priori, il formato del file sia corretto.Un file di esempio è il seguente:
----------------------------------------------
01/05/2012 12800.50
02/05/2012 RisFattura 5250.00 FCE
03/05/2012 PagFattura 2500.00 FCU
05/05/2012 RisCambiale 3255.50 FCE
09/05/2012 RisCambiale 1245.50 FCE
10/05/2012 RisRID 1205.80 FCE
27/05/2012 PagStipendi 4800.00 FCU
30/05/2012 RisCambiale 2500.50 FCE
----------------------------------------------
Si realizzi un programma per visualizzare alcune informazioni riassuntive sui flussi di cassa delregistro contabile. Il programma riceve da linea di comando due parametri: il nome del file contenente il registro contabile e il nome del file di output su cui scrivere alcune informazioni.Il programma devevisualizzare sullo schermo le seguenti informazioni:
1. il rapporto tra l’importo totale dei flussi di cassa in entrata e l’importo totale dei flussi dicassa in uscita
2. il numero di flussi di cassa in entrata e il numero di flussi di cassa in uscita
3. l’importo di un bonus ottenuto dalla somma di due valori: (i) 1.75% dell’importocomplessivo dei flussi di cassa in entrata di tipo RisCambiale e (b) 15 Euro ogni 3 flussi dicassa in entrata di tipo RisCambiale.

Ho provato a scrivere il seguente codice, che tuttavia non mi restituisce alcun risultato.



#include <stdio.h>
#include <stdlib.h>
#include <time.h>


int main(int argc, char *argv[])
{
FILE *fp;
fp = fopen(argv[1], "r");


if (fp == NULL)
{
printf("\n");
fprintf(stderr, " <%s> is not a valid file.\n", argv[1]);
exit(0);
}


char olddate, date, descrpt, fc;
float oldtot, value, RisCambiale, RisCambiale175 = 0, fcetot = 0, fcutot = 0;
int RisCambiale3 = 0, fce = 0, fcu = 0, fcratio;


fscanf(fp, "%s %s", &olddate, &oldtot);


while (fscanf(fp, "%s %s %s %s", &date, &descrpt, &value, &fc) != EOF)
{
if (descrpt == "RisCambiale")
{
RisCambiale3 = RisCambiale3 + 1;
RisCambiale175 = RisCambiale175 + ((value / 10000) * 175);
}


if (fc == "FCE")
{
fce = fce + 1;
fcetot = fcetot + value;
}
else if (fc == "FCU")
{
fcu = fcu + 1;
fcutot = fcutot + value;
}
}


fcratio = fcetot / fcutot;
RisCambiale = RisCambiale175 + (((RisCambiale3 - (RisCambiale3 % 3)) / 3) * 15);


printf("\n Rapporto tra importo totale flussi di cassa in entrata e importo totale flussi di cassa in uscita : %f / %f = %f ", &fcetot, &fcutot, &fcratio);
printf("\n Flussi di cassa in entrata: %d", &fce);
printf("\n Flussi di cassa in uscita: %d", &fcu);
printf("\n Importo del bonus sui flussi di cassa in entrata di tipo RisCambiale: %f", RisCambiale);

fclose(fp);
return 0;
}

Vorrei evitare di confrontare il mio programma con le correzioni che ho trovato sui server del Poli prima di capire perché quello che ho scritto non va.
Ovviamente sono ben accetti consigli e critiche, ma in primis vorrei capire cosa ho sbagliato.
Grazie in anticipo a chi saprà aiutarmi.

LeleFT
04-02-2019, 14:36
Due cose che vedo al volo (non ho letto tutto il codice):

Le variabili "olddate", "date", "fc" e "descript" sono dichiarate di tipo char. Questo significa che possono contenere un solo carattere (mentre tu le tratti come se fossero delle stringhe).

Se poi fossero state dichiarate correttamente (ovvero come puntatore a carattere), il confronto non si fa con l'operatore ==, ma usando la funzione strcmp().


Ciao. :ciauz:

Loading