Visualizzazione dei risultati da 1 a 7 su 7
  1. #1

    [C++] Calcolo somiglianza tra 2 numeri

    Salve mi sn appena iscritto. Vorrei subito sfoderare un programmino che mi è stato richiesto dal mio prof di creare. secondo voi può avere un senso? altrimenti che mi consigliate?

    codice:
    #include <cstdlib>
    #include <iostream>
    
    using namespace std;
    
    // header funzione
    
    float Controlla (double a, double b);
    
    int main(void)
    {
        // dichiarazione ed inizializzazione precauzionale dei "personaggi"
        
        double n1=0,n2=0;
        float perc=0.0;
        char answ='n';
        
        // presentazione del programma all'utente
        
        cout << "+------------------------------------------------------------+" << endl << endl;
        cout << "  Questo programma si propone di calcolare la percentuale di"<< endl;
        cout << "''somiglianza'' tra due numeri interi arbitrari. QWERTY group"<< endl << endl;
        cout << "+------------------------------------------------------------+"<< endl << endl;
        
        cout << "ATTENZIONE:      puoi scrivere qualsiasi numero intero e/o decimale" << endl;
        cout << "\t\t ma per i decimali devi usare il punto e non la virgola!" << endl << endl << endl;
        
        do{
        // programma
        
        cout << "Inserisci il primo numero: ";
        cin >> n1;
        cout << endl;
        cout << "Inserisci il secondo numero: ";
        cin >> n2;
        cout << endl;
        
        // analisi
        
        perc = Controlla(n1,n2);
        
        // controllo dell'ordine di grandezza + stampa
        
        if(perc < 0.0001){cout << "La percentuale e' troppo piccola" << endl << endl;}
        else{cout << "I due numeri sono simili allo/al: " << perc << "%\n\n";}
        
        // implementazione per + sessioni di gioco
        
        do{
        cout << "Vuoi giocare di nuovo? [y/n]:  ";
        cin >> answ; cout << endl;
          }while(answ != 'y' && answ != 'n' && answ != 'Y' && answ != 'N');
                  
         }while(answ == 'y' || answ == 'Y');    
        
        cout << "Bye Bye! =]" << endl << endl;
        
        system("PAUSE");
        return EXIT_SUCCESS;
    }
    
    float Controlla (double a, double b)
    {
         double min=0,max=0;
         float perc=0.0,diff=0.0;
         
         // analisi del caso di 2 numeri uguali
         
         if(a==b){perc=100.0;return perc;}
         
         // analisi del caso con lo 0
         
         if((a==0)||(b==0)){
                            a=a+1;
                            b=b+1;}
         
         // analisi dei casi negativi
         
         if((a<0) && (b>0)){
                             a = a*(-1);
                             if(a<b){max = b;}
                             else{max = a;}
                             diff = (float)b + (float)a;
                             perc = 100.0 - ((diff * 100.0)/(float)max);
                             if(perc < 0.0){perc = perc*(-1);}
                             return perc;}
                             
         if((b<0) && (a>0)){
                             b = b*(-1);
                             if(b<a){max = a;}
                             else{max = b;}
                             diff = (float)b + (float)a;
                             perc = 100.0 - ((diff * 100.0)/(float)max);
                             if(perc < 0.0){perc = perc*(-1);}
                             return perc;}
         
         // analisi dei casi standard positivi
         
         if(a<b){min = a;
                 max = b;
                 diff = (float)b - (float)a;
                 perc = 100.0 - ((diff * 100.0)/(float)max);
                 return perc;}
                 
         if(a>b){min = b;
                 max = a;
                 diff = (float)a - (float)b;
                 perc = 100.0 - ((diff * 100.0)/(float)max);
                 return perc;}  
         
    }

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Per facilitare il compito di chi vorrebbe e potrebbe risponderti, indica cosa dovrebbe fare il programma e soprattutto, come lo hai fatto tu ...

    Anche se c'e' qualche riferimento nel codice e nei commenti, è sempre bene in un forum, cercare di dare il maggior numero di indicazioni a chi ti legge ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    A prima vista:
    La funzione "Controlla" ritorna al chiamante in 5 punti: modificala in modo che "ritorni" in un solo punto.
    Sempre nella funzione "Controlla" l'espressione "100.0 - ((diff * 100.0)/(float)max)" viene ripetuta 4 volte: mettila in una funzione e chiama quella.
    La variabile "prec" in "main" potrebbe essere una costante, se venisse definita nel momento del bisogno.

  4. #4
    Originariamente inviato da oregon
    Per facilitare il compito di chi vorrebbe e potrebbe risponderti, indica cosa dovrebbe fare il programma e soprattutto, come lo hai fatto tu ...

    Anche se c'e' qualche riferimento nel codice e nei commenti, è sempre bene in un forum, cercare di dare il maggior numero di indicazioni a chi ti legge ...
    hai ragione skusatemi. cmq il programma dovrebbe dati due numeri con le opportune restrizioni e controlli, restituirmi la differenza che c'è tra i 2 sottoforma di percentuale! il problema è solo capire se è giusto il ragionamento matematico!

    macapp dici semplicemente di cancellare il return e di metterne uno solo alla fine della funzione! giusto :P quella della costante nn l'ho capita potresti delucidarmi maggiormente?devo fare una macro?

  5. #5
    Originariamente inviato da net.cat

    macapp dici semplicemente di cancellare il return e di metterne uno solo alla fine della funzione! giusto :P
    Evidentemente modificando opportunamente la funzione in modo che sia equivalente alla precedente.
    Originariamente inviato da net.cat
    quella della costante nn l'ho capita potresti delucidarmi maggiormente?devo fare una macro?
    Elimina la definizione di "prec" all'inizio della "main" e sostuisci la seguente:
    Codice PHP:
    perc Controlla(n1,n2); 
    con
    Codice PHP:
    const float perc Controlla(n1,n2); 
    Così perdi una variabile e guadagni una costante ;-)

  6. #6
    e skusa l'ignoranza...ma quale sarebbe il vantaggio? e poi con const io nn dovrei non permettere che la mia variabile venga modificata...o sbaglio? skusa ma è anche l'ora tarda che nn mi fa ben connettere :P

  7. #7
    Originariamente inviato da net.cat
    e skusa l'ignoranza...ma quale sarebbe il vantaggio? e poi con const io nn dovrei non permettere che la mia variabile venga modificata...o sbaglio? skusa ma è anche l'ora tarda che nn mi fa ben connettere :P
    E' più facile controllare delle costanti che delle variabili, non credi? Anche nella vita, ed anche per il compilatore.
    ;-)

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 © 2025 vBulletin Solutions, Inc. All rights reserved.