Programma sulle percentuali

di il
14 risposte

Programma sulle percentuali

Salve a tutti, ho realizzato un programma sulla seguente traccia:
Dati in Input i risultati relativi a n seggi elettorali (num iscritti/votanti/schede nulle/schede bianche), stampare in Outputi seguenti dati:
1. % VOTANTI SU TUTTI I SEGGI (max 999.99%);
2. % SCHEDE BIANCHE (max 99.99%);
3. % SCHEDE NULLE (max 99.99%).

Il programma che ho realizzato è il seguente (spero che il nome delle variabili sia comprensibile):

#include <stdio.h>
#include <stdlib.h>
using namespace std;

	  int main(){
	  	unsigned int num_seg;
		float t_iscr=0,t_vot=0,t_null=0,t_bia=0;
	  		
			printf("Benvenuto! Questo programma calcola: \n1. La percentuale dei votanti su tutti gli iscritti;\n2. La percentuale delle schede bianche;\n3. La percentuale delle schede nulle.\n\nInserisci il numero totale dei seggi: ");
	  		scanf("%i", &num_seg);
	  		
	  			while(num_seg>0)
	  				{
	  					unsigned long int n_iscr=0,n_vot=0,s_nul=0,s_bia=0;
	  					
						  //Dati input da testiera
						printf("\nInserisci il numero degli iscritti: ");
	  					scanf("%i", &n_iscr);
	  					printf("Inserisci il numero dei votanti: ");
	  					scanf("%i", &n_vot);
	  					printf("Inserisci il numero delle schede nulle: ");
	  					scanf("%i", &s_nul);
	  					printf("Inserisci il numero delle schede bianche: ");
	  					scanf("%i", &s_bia);
	  					
	  					//Incremento al numero totale di iscritti, votanti, schede nulle/bianche
	  					t_iscr=t_iscr+n_iscr;
	  					t_vot=t_vot+n_vot;
	  					t_null=t_null+s_nul;
	  					t_bia=t_bia+s_bia;
	  					num_seg--;
				  	}
				  	
			//Calcolo delle percentuali
			t_iscr=(float)t_vot/(float)t_iscr*100;	//% votanti su tutti i seggi
			t_null=(float)t_null/(float)t_vot*100;	//% schede nulle 
			t_bia=(float)t_bia/(float)t_vot*100;	//% schede bianche
			1
			
		//Output
		printf("\nIl %f fra tutti gli iscritti ai seggi ha votato",t_iscr);
		printf("\nFra tutti i voti il %f sono schede nulle",t_null);
		printf("\nFra tutti i voti il %f sono schede bianche",t_bia);
	
	return 0;
 	}
Alla fine il risultato viene, ma ho bisogno di due aiuti principalmente. Primo, vorrei sapere come posso settare che t_null e t_bia abbiano valore massimo di 99.99 e t_iscr 999.99; secondo, vorrei sapere se c'è un modo per inserire "%" nel printf (nel senso che me lo stampi a video), perchè quando lo metto, ad esempio subito dopo %f, dà caratteri strani sul programma.

14 Risposte

  • Re: Programma sulle percentuali

    Per la seconda domanda puoi fare cosi: printf("%c",'%');
    Per il primo punto non ho ben capito....
  • Re: Programma sulle percentuali

    Per il % basta inserirlo doppio nella stringa del printf

    ".... %% ..."

    Per il resto, non ho capito neanch'io ...
  • Re: Programma sulle percentuali

    Magari potresti fare una semplice if dove controlli che questi due valori se superano 99.99% vengono riportati a 99.99% ma dubito che se inserisci i dati giusti questi valori possano essere superati...
  • Re: Programma sulle percentuali

    Potresti crearti un metodo che si chiama, ad esempio, float checkAndGet(float vToCheck, float vMax);

    Il metodo controlla il risultato delle operazioni, se queste non superano 99.99 o 999.99, o in generale il valore massimo che passi in input a vMax, ritorna il risultato dato in input a vToCheck, altrimenti ritorna il valore massimo.

    Una banale implementazione potrebbe essere questa:
    
    float checkAndGet(float vToCheck,float vMax){
    	return (vToCheck > vMax) ? vMax: vToCheck;
    }
    In questo modo, ad esempio, le istruzioni:
    
    t_iscr=(float)t_vot/(float)t_iscr*100;   //% votanti su tutti i seggi
    t_null=(float)t_null/(float)t_vot*100;   //% schede nulle 
    t_bia=(float)t_bia/(float)t_vot*100;   //% schede bianche
    Diventano:
    
    t_iscr=checkAndGet((float)t_vot/(float)t_iscr*100, 999.99);   //% votanti su tutti i seggi
    t_null=checkAndGet((float)t_null/(float)t_vot*100, 99.99);   //% schede nulle 
    t_bia=checkAndGet((float)t_bia/(float)t_vot*100, 99.99);   //% schede bianche
  • Re: Programma sulle percentuali

    CarDeFusco ha scritto:


    Potresti crearti un metodo che si chiama, ad esempio, float checkAndGet(float vToCheck, float vMax);

    Il metodo controlla il risultato delle operazioni, se queste non superano 99.99 o 999.99, o in generale il valore massimo che passi in input a vMax, ritorna il risultato dato in input a vToCheck, altrimenti ritorna il valore massimo.

    Una banale implementazione potrebbe essere questa:
    
    float checkAndGet(float vToCheck,float vMax){
    	return (vToCheck > vMax) ? vMax: vToCheck;
    }
    In questo modo, ad esempio, le istruzioni:
    
    t_iscr=(float)t_vot/(float)t_iscr*100;   //% votanti su tutti i seggi
    t_null=(float)t_null/(float)t_vot*100;   //% schede nulle 
    t_bia=(float)t_bia/(float)t_vot*100;   //% schede bianche
    Diventano:
    
    t_iscr=checkAndGet((float)t_vot/(float)t_iscr*100, 999.99);   //% votanti su tutti i seggi
    t_null=checkAndGet((float)t_null/(float)t_vot*100, 99.99);   //% schede nulle 
    t_bia=checkAndGet((float)t_bia/(float)t_vot*100, 99.99);   //% schede bianche
    Ringrazio i due utenti che hanno commentato per primi per avermi aiutato nel risolvere il problema del %.

    Ringrazio CarDeFusco, il codice funzionerà sicuramente nel tuo metodo, ma queste funzioni che hai messo ancora non le abbiamo fatte a scuola (sono appena al terzo superiore), e personalmente non mi sembra il modo adatto per risolverle il problema. Pensavo che ci fosse qualche istruzione più banale e semplice, per i miei livelli per intenderci, se tu o altri hanno dei suggerimenti sono tutt'orecchi
  • Re: Programma sulle percentuali

    Secondo me dovresti spiegare meglio la questione, dato che non è affatto chiaro.
  • Re: Programma sulle percentuali

    oregon ha scritto:


    Secondo me dovresti spiegare meglio la questione, dato che non è affatto chiaro.
    Scusami per non averlo fatto subito. Ciò che chiedo io è che i risultati di Output non devono superare un certo limite. Ad esempio, il numero dei votanti fra tutti gli iscritti deve essere massimo 999.99% e quindi il risultato non può essere maggiore di questo numero (risultato<1000.00).
    Gli altri due output invece devono avere valore massimo di 99.99% e il discorso è lo stesso di quello precedente. Ciò che mi interessa di più è che i numeri dopo il punto (sto usando il punto anglosassone, che quindi corrisponde alla nostra virgola) siano solo due cifre.
  • Re: Programma sulle percentuali

    Il fatto è che le percentuali dipendono dai dati inseriti im precedenza... Per capirci puoi fare un esempio di dati non corretti?
  • Re: Programma sulle percentuali

    Eduadie ha scritto:


    Magari potresti fare una semplice if dove controlli che questi due valori se superano 99.99% vengono riportati a 99.99% ma dubito che se inserisci i dati giusti questi valori possano essere superati...
    Ti avevo già scritto qualcosa...Dubito come quei tuoi valori possano essere superati, solo se inserisci dati non veritieri.
  • Re: Programma sulle percentuali

    alexg55 ha scritto:


    Ringrazio CarDeFusco, il codice funzionerà sicuramente nel tuo metodo, ma queste funzioni che hai messo ancora non le abbiamo fatte a scuola (sono appena al terzo superiore), e personalmente non mi sembra il modo adatto per risolverle il problema. Pensavo che ci fosse qualche istruzione più banale e semplice, per i miei livelli per intenderci, se tu o altri hanno dei suggerimenti sono tutt'orecchi

    Il fatto che ancora non hai visto come si creano e/o usano le funzioni a scuola non ti evita di imparare a farlo. Se aspetti che il tuo prof ti faccia vedere da subito tutte le potenzialità e cose che puoi fare con un linguaggio di programmazione limiti te stesso. Per distinguerti dagli altri bisogna perseverare, imparare da soli ed approfondire. Se impari già da ora cose in più ben venga quando il tuo Prof le farà. Prendilo come un consiglio personale.
  • Re: Programma sulle percentuali

    alexg55 ha scritto:


    ..... Ad esempio, il numero dei votanti fra tutti gli iscritti deve essere massimo 999.99% e quindi il risultato non può essere maggiore di questo numero (risultato<1000.00).....
    Sinceramente mi sfugge come il n° di votanti possa essere maggiore del 100% degli iscritti.
    Credo che neanche nelle 'migliori' dittature si sia mai arrivati a tanto, infatti le famose percentuali bulgari erano comunque inferiori al 100%
  • Re: Programma sulle percentuali

    max.riservo ha scritto:


    alexg55 ha scritto:


    ..... Ad esempio, il numero dei votanti fra tutti gli iscritti deve essere massimo 999.99% e quindi il risultato non può essere maggiore di questo numero (risultato<1000.00).....
    Sinceramente mi sfugge come il n° di votanti possa essere maggiore del 100% degli iscritti.
    Credo che neanche nelle 'migliori' dittature si sia mai arrivati a tanto, infatti le famose percentuali bulgari erano comunque inferiori al 100%
    Infatti me lo chiedevo anche io. Non so se sia un'errore del libro o lo voglia così solo perchè bisogna utilizzare delle funzioni diverse.
  • Re: Programma sulle percentuali

    max.riservo ha scritto:


    alexg55 ha scritto:


    ..... Ad esempio, il numero dei votanti fra tutti gli iscritti deve essere massimo 999.99% e quindi il risultato non può essere maggiore di questo numero (risultato<1000.00).....
    Sinceramente mi sfugge come il n° di votanti possa essere maggiore del 100% degli iscritti.
    Credo che neanche nelle 'migliori' dittature si sia mai arrivati a tanto, infatti le famose percentuali bulgari erano comunque inferiori al 100%
    Infatti me lo chiedevo anche io. Non so se sia un'errore del libro o lo voglia così solo perchè bisogna utilizzare delle funzioni diverse.
  • Re: Programma sulle percentuali

    CarDeFusco ha scritto:


    alexg55 ha scritto:


    Ringrazio CarDeFusco, il codice funzionerà sicuramente nel tuo metodo, ma queste funzioni che hai messo ancora non le abbiamo fatte a scuola (sono appena al terzo superiore), e personalmente non mi sembra il modo adatto per risolverle il problema. Pensavo che ci fosse qualche istruzione più banale e semplice, per i miei livelli per intenderci, se tu o altri hanno dei suggerimenti sono tutt'orecchi

    Il fatto che ancora non hai visto come si creano e/o usano le funzioni a scuola non ti evita di imparare a farlo. Se aspetti che il tuo prof ti faccia vedere da subito tutte le potenzialità e cose che puoi fare con un linguaggio di programmazione limiti te stesso. Per distinguerti dagli altri bisogna perseverare, imparare da soli ed approfondire. Se impari già da ora cose in più ben venga quando il tuo Prof le farà. Prendilo come un consiglio personale.
    Grazie del consiglio, magari cercherò di provarlo anche nel tuo modo e seguire il tuo consiglio
Devi accedere o registrarti per scrivere nel forum
14 risposte