Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - Calcolatrice Elementare in C
Forum - C/C++ - Calcolatrice Elementare in C

Pagine: [ 1 2 ] Precedente | Prossimo
Avatar
Impronta Geek (Normal User)
Rookie


Messaggi: 36
Iscritto: 24/06/2009

Segnala al moderatore
Postato alle 19:30
Mercoledì, 24/06/2009
Salve a tutti, sono nuovo nel forum, e come ho già spiegato nel mio post di presentazione sono alle prime armi con il C.

Per esercitarmi, ho cercato di creare una semplicissima calcolatrice in C, e ho ottenuto diversi risultati positivi, ma mai corrispondenti a quello che volevo.
Sono riuscito a creare delle calcolatrici "a scelte", che però non mi invitano più di tanto  :rofl: Il massimo che sono riuscito a fare, per il momento, è questo:

#include <stdio.h>
main(){
char operatore;
float numero1, numero2, risultato;
int i, e;
i=0;
while(i!=1){
printf("\t\tCalcolatrice\n\n");
printf("Inserisci l'Operatore: +,-,*,/\n");
scanf("\n%cn",&operatore);
if(operatore=='+'){
        printf("\nHai scelto di effettuare un'addizione!\n");
        printf("\nOra premi 'addendo,addendo'(Esempio:2,2) e poi invio\n");
        scanf("\n%f,%f",&numero1,&numero2);
        risultato=numero1+numero2;
    }
if(operatore=='-'){
        printf("\nHai scelto di effettuare una sottrazione!\n");
        printf("\nOra premi 'numero1, numero2' (Esempio: 6,2)\n");
        scanf("\n%f,%f",&numero1,&numero2);
        risultato=numero1-numero2;
    }
if(operatore=='*'){
        printf("\nHai scelto di effettuare una moltiplicazione!\n");
        printf("\nOra premi 'numero1, numero2' (Esempio: 6,2)\n");
        scanf("\n%f,%f",&numero1,&numero2);
        risultato=numero1*numero2;
    }
if(operatore=='/'){
        printf("\nHai scalto di effettuare una divisionen!\n");
        printf("\nOra premi 'numero1, numero2' (Esempio: 6,2)\n");
        scanf("\n%f,%f",&numero1,&numero2);
        risultato=numero1/numero2;
    }
printf("\nEcco il risultato:\n");
printf("\n\t%f", risultato);
printf("\n\nPer usare di nuovo la calcolatrice, premi due volte invio\n");
scanf("\n%cn",&e);
}
}

Il mio obbiettivo, però, era eliminare del tutto la scelta :( . Se provo a fare cose di questo tipo, non riesco a ottenere il risultato:
#include <stdio.h>
main(){
char operatore;
double risultato;
double numero1, numero2;
int i, e;
i=0;
while(i!=1){
printf("\t\tCalcolatrice\n\n");
printf("Inserisci 'numero1, operatore(+,-,*,/), numero2' \n\n");
scanf("%.0f,%cn,%.0f",&numero1,&operatore,&numero2);
if(operatore=='+'){
        printf("\nHai scelto di effettuare un'addizione!\n");
        risultato=numero1+numero2;
    }
if(operatore=='-'){
        printf("\nHai scelto di effettuare una sottrazione!\n");
        risultato=numero1-numero2;
    }
if(operatore=='*'){
        printf("\nHai scelto di effettuare una moltiplicazione!\n");
        risultato=numero1*numero2;
    }
if(operatore=='/'){
        printf("\nHai scalto di effettuare una divisionen!\n");
        risultato=numero1/numero2;
    }
printf("\nEcco il risultato:\n");
printf("%.0f", risultato);
printf("\n\nPer usare di nuovo la calcolatrice, premi due volte invio\n");
scanf("\n%d",&e);
}
}

Sapreste dirmi perchè non funziona e cosa dovrei cambiare? :yup: Grazie in anticipo!

Ultima modifica effettuata da Impronta Geek il 24/06/2009 alle 19:31
PM Quote
Avatar
()
Newbie


Messaggi:
Iscritto:

Segnala al moderatore
Postato alle 2:16
Giovedì, 25/06/2009
così funziona ;)

Codice sorgente - presumibilmente C

  1. #include <stdio.h>
  2.  
  3. int main (int argc, char **argv)
  4. {
  5.         char operatore;
  6.         double risultato;
  7.         double numero1, numero2;
  8.         int i, e;
  9.         i = 0;
  10.         while(i!=1)
  11.         {
  12.                 printf ("\t\tCalcolatrice\n\n");
  13.                 printf ("Inserisci 'numero1 operatore(+,-,*,/) numero2' \n\n");
  14.                 scanf ("%lf %c %lf", &numero1, &operatore, &numero2);
  15.  
  16.                 if (operatore == '+')
  17.                 {
  18.                         printf ("\nHai scelto di effettuare un'addizione!\n");
  19.                         risultato = numero1 + numero2;
  20.                 }
  21.                 if (operatore == '-')
  22.                 {
  23.                         printf ("\nHai scelto di effettuare una sottrazione!\n");
  24.                         risultato = numero1 - numero2;
  25.                 }
  26.                 if (operatore == '*')
  27.                 {
  28.                         printf ("\nHai scelto di effettuare una moltiplicazione!\n");
  29.                         risultato = numero1 * numero2;
  30.                 }
  31.                 if (operatore == '/')
  32.                 {
  33.                         printf ("\nHai scalto di effettuare una divisionen!\n");
  34.                         risultato = numero1 / numero2;
  35.                 }
  36.  
  37.                 printf ("\nEcco il risultato:\n");
  38.                 printf ("%lf\n\n", risultato);
  39. //              printf ("\n\nPer usare di nuovo la calcolatrice, premi due volte invio\n");
  40. //              scanf ("%d\n", &e);
  41.         }
  42. }



L'errore era nelle format strings che passavi alle due funzioni scanf.

adesso gestisce correttamente anche l'input di numeri float

ad esempio

12.3 + 5.1

restituisce correttamente

17.400000

Ultima modifica effettuata da il 25/06/2009 alle 2:21
PM Quote
Avatar
Impronta Geek (Normal User)
Rookie


Messaggi: 36
Iscritto: 24/06/2009

Segnala al moderatore
Postato alle 13:30
Giovedì, 25/06/2009
Grazie Mille. Io nel frattempo ero riuscito a farla funzionare così:
Codice sorgente - presumibilmente C++

  1. #include <stdio.h>
  2. main(){
  3. char operatore;
  4. float risultato;
  5. float numero1, numero2;
  6. int i, e;
  7. i=0;
  8. while(i!=1){
  9. printf("\t\t\t\tCalcolatrice\n\n");
  10. printf("Inserisci la tua operazione (+), sottrazione (-), moltiplicazione (*) o\ndivisione (/), fino a due numeri Es:30*3 \n\n");
  11. scanf("%f%c%f",&numero1,&operatore,&numero2);
  12. if(operatore=='+'){
  13.         printf("\nHai scelto di effettuare un'addizione!\n");
  14.         risultato=numero1+numero2;
  15.     }
  16. if(operatore=='-'){
  17.         printf("\nHai scelto di effettuare una sottrazione!\n");
  18.         risultato=numero1-numero2;
  19.     }
  20. if(operatore=='*'){
  21.         printf("\nHai scelto di effettuare una moltiplicazione!\n");
  22.         risultato=numero1*numero2;
  23.     }
  24. if(operatore=='/'){
  25.         printf("\nHai scelto di effettuare una divisione!\n");
  26.         risultato=numero1/numero2;
  27.     }
  28. printf("\nEcco il risultato:\n");
  29. printf("%f\n\n\n", risultato);
  30. }
  31. }



Ora seguendo il tuo consiglio aggiungerò anche l'input con la virgola :cheer:
Non mi accontento mai, però, e sto cercando di aggiungere un operatore ed un numero. Questo è quello che ho prodotto finora:
Codice sorgente - presumibilmente C++

  1. /*Espressioni*/
  2. #include <stdio.h>
  3. main(){
  4. char operatore, operatore2;
  5. float risultato, risultato2;
  6. float numero1, numero2, numero3;
  7. int i, e;
  8. i=0;
  9. while(i!=1){
  10. printf("\t\t\tCalcolatrice\n\n");
  11. printf("Inserisci 'numero1, operatore(+,-,*,/), numero2'\n\n");
  12. scanf("%f%c%f%c%f",&numero1,&operatore,&numero2,&operatore2,&numero3);
  13. if(operatore=='+'){
  14.         risultato=numero1+numero2;
  15.     }
  16. else if(operatore=='-'){
  17.         risultato=numero1-numero2;
  18.     }
  19. else if(operatore=='*'){
  20.         risultato=numero1*numero2;
  21.     }
  22. else if(operatore=='/'){
  23.         risultato=numero1/numero2;
  24.     }
  25. if(operatore2=='+'){
  26.         printf("\nHai scelto di effettuare un'espressione!\n");
  27.         risultato2=risultato+numero3;
  28.         printf("\nEcco il risultato dell'espressione:\n");
  29.         printf("%f\n\n\n", risultato2);
  30.     }
  31. else if(operatore2=='-'){
  32.         printf("\nHai scelto di effettuare un'espressione!\n");
  33.         risultato2=risultato-numero3;
  34.         printf("\nEcco il risultato dell'espressione:\n");
  35.         printf("%f\n\n\n", risultato2);
  36.     }
  37. else if(operatore2=='*'){
  38.         printf("\nHai scelto di effettuare un'espressione!\n");
  39.         risultato2=risultato*numero3;
  40.         printf("\nEcco il risultato dell'espressione:\n");
  41.         printf("%f\n\n\n", risultato2);
  42.     }
  43. else if(operatore2=='/'){
  44.         printf("\nHai scelto di effettuare un'espressione!\n");
  45.         risultato2=risultato/numero3;
  46.         printf("\nEcco il risultato dell'espressione:\n");
  47.         printf("%f\n\n\n", risultato2);
  48.     }
  49.      else{
  50.         printf("\nEcco il risultato:\n");
  51.         printf("%f\n\n\n", risultato);
  52.     }
  53. }
  54. }


Però come al solito ho sbagliato qualcosa 8-|
Comunque non capisco cosa sbaglio anche perchè i blocchi if ed else if mi pare funzionino abbastanza bene, solo che nell'eseguibile a volte fa calcoli sbagliati 8-|
La riga da modificare penso sia questa
Codice sorgente - presumibilmente Plain Text

  1. scanf("%f%c%f%c%f",&numero1,&operatore,&numero2,&operatore2,&numero3);


Mi puoi aiutare ancora? Grazie! :rotfl:

PM Quote
Avatar
Lawliet (Normal User)
Expert


Messaggi: 386
Iscritto: 09/04/2009

Segnala al moderatore
Postato alle 13:46
Giovedì, 25/06/2009
Ma scusa, usare la switch no?

PM Quote
Avatar
Impronta Geek (Normal User)
Rookie


Messaggi: 36
Iscritto: 24/06/2009

Segnala al moderatore
Postato alle 13:48
Giovedì, 25/06/2009
Io non volevo le scelte, e su "Il Linguaggio C" sta scritto che è meglio usarlo quando ci sono... poi magari non cambia niente, ma per me è più facile con if, else if, ed else :yup:

PM Quote
Avatar
Lawliet (Normal User)
Expert


Messaggi: 386
Iscritto: 09/04/2009

Segnala al moderatore
Postato alle 14:16
Giovedì, 25/06/2009
Piccola curiosità: nella while.. mai si esce? o.O'

PM Quote
Avatar
Impronta Geek (Normal User)
Rookie


Messaggi: 36
Iscritto: 24/06/2009

Segnala al moderatore
Postato alle 14:31
Giovedì, 25/06/2009
Beh meglio così no? Tanto uno se vuole uscire chiude la finestra :rofl:

PM Quote
Avatar
()
Newbie


Messaggi:
Iscritto:

Segnala al moderatore
Postato alle 15:15
Giovedì, 25/06/2009
beh, a questo punto non credo ti servano altri aiuti :)

la tecnica è uguale sia per 3 valori di input che per 152mila variabili :D

Se vuoi fare qualcosa di più complesso però, ad esempio qualcosa che valuti le stringhe del tipo (3 + 4) * (56 - 1 / 7) allora avrai bisogno di cambiare tecnica ed implementare un parser... è una cosa più avanzata, e non ti consiglio di affrontarla prima di aver imparato un po' di teoria.

Comunque se vuoi imparare, ti consiglio di studiare ed implementare qualcosa sugli alberi binari. Dopodichè ti darò una mano a scrivere un parser per le espressioni numeriche, anche con variabili dinamiche ;)

PM Quote
Avatar
Impronta Geek (Normal User)
Rookie


Messaggi: 36
Iscritto: 24/06/2009

Segnala al moderatore
Postato alle 15:38
Giovedì, 25/06/2009
Intendi dire che sbaglio sempre la stessa cosa? :-?

PM Quote
Pagine: [ 1 2 ] Precedente | Prossimo