Visualizzazione dei risultati da 1 a 2 su 2
  1. #1
    Utente di HTML.it
    Registrato dal
    Oct 2018
    residenza
    Torino, Italia
    Messaggi
    1

    [C] Problema programma informazioni riassuntive sui flussi di cassa di un registro contabile

    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.

    codice:
    #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.

  2. #2
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,304
    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.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.