CALCOLI ERRATI

di il
6 risposte

CALCOLI ERRATI

Buongiorno a tutti ,

ho scritto questo programmino per il calcolo delle ferie

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

//Programma che calcola i giorni di ferie, le ore di permesso e di ex-festività//

int main(){
	
	float Fm=1.91666,Exm=2.66666,Pm=6.00000,Fr,Exr,Pr,Sf,Sex,Sp,Fu,Exu,Pu; //dichiarazioni delle variabili in float , con tre variabili costanti//
			int mesi,scelta; // dichiarazione delle variabili per la scelta e l'inserimento dei mesi//
			
	printf("Vuo fare il calcolo delle ferie ?\n");//richiesta di scelta//
		printf("1) SI , 2) NO ");// inserimento della risposta //
		 scanf("%d",&scelta);//inserimento della variabile scelta//
		
		
	if(scelta=1)//se scelta è uguale a 1//
	
	{
	
		
		printf("Inserisci il saldo Ferie del mese precedente\n ");//iserimento del saldo mese precedente//
			scanf("%f",&Sf);//iserimento della variabile Sf(saldo ferie)//
			
			printf("Inserisci il saldo Ex festivita' del mese precedente\n ");//iserimento del saldo mese precedente//
			scanf("%f",&Sex);//inserimento della variabile Sex(saldo ex-festività)//
			
				printf("Inserisci il saldo Permessi del mese precedente\n ");//iserimento del saldo mese precedente//
			scanf("%f",&Sp);//inserimento dekka variabile Sp(saldo permessi)//
			
		
		printf("Quante ferie hai utilizzato ? ");//rischiesta inserimento ferie utilizzate nel mese //
			scanf("%Fu",&Fu);//inserimento della variabile Fu(ferie utilizzate )//
			
			printf("Quante Ex festivita' hai utilizzato ? ");//richiesta inserimento ex-festività utilizzate nel mese//
				scanf("%Exu",&Exu);//inserimento della variabile Exu(ex-festività utilizzate)//
			
			printf("Quanti Permessi hai utilizzato ? ");//richiesta permessi utilizzati nel mese //
				scanf("%Pu",&Pu);//inserimento della varibile Pu(permessi utilizzati)//	
				
				
	printf("Per quanti mesi vuo fare il calcolo? ");//richiesta dei mesi da calcolare //
		scanf("%d",&mesi);// inserimento della variabile mmesi//
	

		
	
	
	Fr=((Sf-Fu+Fm)*mesi);// calcolo dei giorni di ferie residue per il mese successivo //
	Exr=((Sex-Exu+Exm)*mesi);// calcolo delle ore ex-festività residue per il mese successivo//
	Pr=((Sp-Pu+Pm)*mesi);// calcolo delle ore permessi residui per il mese successivo//
	
		printf("Per %d mesi avrai disponibile %f\n",mesi,Fr); //stampa a video del risultato//
		printf("Per %d mesi avrai disponibile %f\n",mesi,Exr);//stampa a video del risultato//
		printf("Per %d mesi avrai disponibile %f\n",mesi,Pr);//stampa a video del risultato//
}
		
		else
			("Ci vediamo alla prossima");
	
		system("PAUSE");
		return 0;
		
}
il problema sta proprio nel calcolo , mi da dei risultati errati es:

((saldo ferie - ferie usufruite + ferie maturate) x mesi di calcolo)
((1,92146-3+1,91666)*1)=0,83812 (questo è il risultato che dovrebbe darmi )
ma come risultato mi da 3,838120 ma no è corretto
dove sbaglio?

6 Risposte

  • Re: CALCOLI ERRATI

    Ma perché i float per un problema del genere?
    if(scelta=1)
    if(scelta==1)
    scanf("%Fu",&Fu);
    scanf("%Exu",&Exu);
    scanf("%Pu",&Pu);
    
    Eh?
  • Re: CALCOLI ERRATI

    Weierstrass grazie non avevo visto quell'errore , ora il calcolo me lo fa giusto, ma solo per 1 mese , se voglio calcolare per più mesi i calcoli sono errati, quindi a logica è come ho scritto l'espressione l'errore giusto?

    Ho usato il float perchè se non sbaglio per i calcoli in virgola mobile è consigliato utilizzare questo al posto di double o sbaglio?
  • Re: CALCOLI ERRATI

    L'errore del calcolo l'ho risolto cambiando l'espressione in questo modo
    
    
    	Fr=((Sf-Fu)+(Fm*mesi));// calcolo dei giorni di ferie residue per il mese successivo //
    	Exr=((Sex-Exu)+(Exm*mesi));// calcolo delle ore ex-festività residue per il mese successivo//
    	Pr=((Sp-Pu)+(Pm*mesi));// calcolo delle ore permessi residui per il mese successivo//
    
    
    vorrei capire solo perchè non dovrei utilizzare delle variabili float per questo calcolo?
  • Re: CALCOLI ERRATI

    1.91666 immagino che sia 46/24: è un'approssimazione brutta.

    Calcola tutto in ore con gli interi. Avendo un int totale_ore, i giorni saranno totale_ore/24, le ore residue saranno totale_ore%24
  • Re: CALCOLI ERRATI

    No mi è chiaro come tradurre l'espressione in codice

    il calcolo delle ferie viene fatto in questo modo :

    nell'anno accumuliamo
    Sf=23,00000 giorni di ferie
    Sex= 32,0000 ore di ex-festività
    Sp= 72.00000 ore di permessi

    diviso 12 mesi sono:
    1,91666 giorni
    2,66666 ore di ex-festività
    6 ore di permessi
    che si accumulano nel mese

    ora ho cambiato ancora il codice definendo il risultato mensile in variabili fisse e dando un limite di stampa dei numeri dopo la virgola
    
    #include <stdio.h>
    #include <stdlib.h>
    #define Fm 1.91666
    #define Exm 2.66666
    #define Pm 6.00000
    //Programma che calcola i giorni di ferie, le ore di permesso e di ex-festività//
    
    int main(){
    	
    	float Fr,Exr,Pr,Sf,Sex,Sp,Fu,Exu,Pu; //dichiarazioni delle variabili in float , con tre variabili costanti//
    			int mesi,scelta,count; // dichiarazione delle variabili per la scelta e l'inserimento dei mesi//
    			
    	printf("Vuo fare il calcolo delle ferie ?\n");//richiesta di scelta//
    		printf("1) SI , 2) NO ");// inserimento della risposta //
    		 scanf("%d",&scelta);//inserimento della variabile scelta//
    		
    		
    	if(scelta=1)//se scelta è uguale a 1//
    	
    	{
    	
    		
    		printf("Inserisci il saldo Ferie del mese precedente\n ",count);//iserimento del saldo mese precedente//
    			scanf("%f",&Sf);//iserimento della variabile Sf(saldo ferie)//
    			
    			printf("Inserisci il saldo Ex festivita' del mese precedente\n ",count);//iserimento del saldo mese precedente//
    			scanf("%f",&Sex);//inserimento della variabile Sex(saldo ex-festività)//
    			
    				printf("Inserisci il saldo Permessi del mese precedente\n ",count);//iserimento del saldo mese precedente//
    			scanf("%f",&Sp);//inserimento dekka variabile Sp(saldo permessi)//
    			
    		
    		printf("Quante ferie hai utilizzato ? ",count);//rischiesta inserimento ferie utilizzate nel mese //
    			scanf("%f",&Fu);//inserimento della variabile Fu(ferie utilizzate )//
    			
    			printf("Quante Ex festivita' hai utilizzato ? ",count);//richiesta inserimento ex-festività utilizzate nel mese//
    				scanf("%f",&Exu);//inserimento della variabile Exu(ex-festività utilizzate)//
    			
    			printf("Quanti Permessi hai utilizzato ? ",count);//richiesta permessi utilizzati nel mese //
    				scanf("%f",&Pu);//inserimento della varibile Pu(permessi utilizzati)//	
    				
    				
    	printf("Per quanti mesi vuo fare il calcolo? ",count);//richiesta dei mesi da calcolare //
    		scanf("%d",&mesi);// inserimento della variabile mmesi//
    	
    
    		
    	
    	
    	Fr=((Sf-Fu)+(Fm*mesi));// calcolo dei giorni di ferie residue per il mese successivo //
    	Exr=((Sex-Exu)+(Exm*mesi));// calcolo delle ore ex-festività residue per il mese successivo//
    	Pr=((Sp-Pu)+(Pm*mesi));// calcolo delle ore permessi residui per il mese successivo//
    	
    		printf("Per %d mesi avrai disponibile %3.5f\n",mesi,Fr); //stampa a video del risultato//
    		printf("Per %d mesi avrai disponibile %3.5f\n",mesi,Exr);//stampa a video del risultato//
    		printf("Per %d mesi avrai disponibile %3.5f\n",mesi,Pr);//stampa a video del risultato//
    }
    		
    		else
    			("Ci vediamo alla prossima");
    	
    		system("PAUSE");
    		return 0;
    		
    }
    
    
  • Re: CALCOLI ERRATI

    Ho riscritto il codice, può andare bene così o bisogna correggere qualcosa?

    
    #include <stdio.h>
    #include <stdlib.h>
    #define Fm 1.91666
    #define Exm 2.66666
    #define Pm 6.00000
    //Programma che calcola i giorni di ferie, le ore di permesso e di ex-festività//
    
    int main(){
    	
    	float Fr,Exr,Pr,Sf,Sex,Sp,Exu,Pu; //dichiarazioni delle variabili in float , con tre variabili costanti//
    			int mesi,scelta=0,Fu; // dichiarazione delle variabili per la scelta e l'inserimento dei mesi//
    			
    	printf("Vuo fare il calcolo delle ferie ?\n");//richiesta di scelta//
    		printf("1) SI , 2) NO ");// inserimento della risposta //
    		 scanf("%d",&scelta);//inserimento della variabile scelta//
    	
    	while(scelta<=1){
    		
    			
    					
    		printf("Inserisci il saldo Ferie del mese precedente\n ");//iserimento del saldo mese precedente//
    			scanf("%f",&Sf);//iserimento della variabile Sf(saldo ferie)//
    			
    			printf("Inserisci il saldo Ex festivita' del mese precedente\n ");//iserimento del saldo mese precedente//
    			scanf("%f",&Sex);//inserimento della variabile Sex(saldo ex-festività)//
    			
    				printf("Inserisci il saldo Permessi del mese precedente\n ");//iserimento del saldo mese precedente//
    			scanf("%f",&Sp);//inserimento dekka variabile Sp(saldo permessi)//
    			
    		
    		printf("Quante ferie hai utilizzato ? ");//rischiesta inserimento ferie utilizzate nel mese //
    			scanf("%d",&Fu);//inserimento della variabile Fu(ferie utilizzate )//
    			
    			printf("Quante Ex festivita' hai utilizzato ? ");//richiesta inserimento ex-festività utilizzate nel mese//
    				scanf("%f",&Exu);//inserimento della variabile Exu(ex-festività utilizzate)//
    			
    			printf("Quanti Permessi hai utilizzato ? ");//richiesta permessi utilizzati nel mese //
    				scanf("%f",&Pu);//inserimento della varibile Pu(permessi utilizzati)//	
    				
    				
    	printf("Per quanti mesi vuo fare il calcolo? ");//richiesta dei mesi da calcolare //
    		scanf("%d",&mesi);// inserimento della variabile mmesi//
    	
    
    		
    	Fr=((Sf-Fu)+(Fm*mesi));// calcolo dei giorni di ferie residue per il mese successivo //
    	Exr=((Sex-Exu)+(Exm*mesi));// calcolo delle ore ex-festività residue per il mese successivo//
    	Pr=((Sp-Pu)+(Pm*mesi));// calcolo delle ore permessi residui per il mese successivo//
    	
    		printf("Per %d mesi avrai disponibile %3.5f\n",mesi,Fr); //stampa a video del risultato//
    		printf("Per %d mesi avrai disponibile %3.5f\n",mesi,Exr);//stampa a video del risultato//
    		printf("Per %d mesi avrai disponibile %3.5f\n",mesi,Pr);//stampa a video del risultato//
    		
    		printf("\nVuoi continuare con il calcolo? ");
    			printf("1) SI o 2)NO: ");
    			scanf("%d",&scelta);
    
       }
    
    
    if(scelta=2)
    	printf("Ci vediamo alla prossima\n");
    	
    	
    	system("PAUSE");
    		return 0;
    		
    	
    }
    
    
Devi accedere o registrarti per scrivere nel forum
6 risposte