Laskin ongelmia

Metsäminnni

Miten on järkevintä tehdä yksinkertainen laskin joka laskee plus-, miinus-, kerto- ja jakolaskuja?

Olen saanut aikaiseksi sellaisen laskimen joka kyllä toimii mutta sekoaa jos siihen syöttää kirjaimia...

Nykyinen laskin on tehty do-while-rakenteella.

1-4 numeroilla valitaan laskutoimitus ja 0 lopettaa. Laskutoimitukset suoritetaan aliohjelmissa...

5

1012

    Vastaukset

    Anonyymi (Kirjaudu / Rekisteröidy)
    5000
    • pjotrrrrrr

      Kaiketikkin nopein/yksinkertiaisin tapa lienee tehdä laskutoimitukset try-catch rakenteen sisällä. Ohjelman ei ainakaan pitäisi seota sitten.

      Mutta siihen miten tommonen laskin on "järkevintä" tehdä, niin en ota kantaa :) Nykyistä toteutustapaa en kyllä oikein ymmärrä, mutta jos se toimii niin anna palaa xD

    • pjotrrrrr

      Kaiketikkin nopein/yksinkertiaisin tapa lienee tehdä laskutoimitukset try-catch rakenteen sisällä. Ohjelman ei ainakaan pitäisi seota sitten.

      Mutta siihen miten tommonen laskin on "järkevintä" tehdä, niin en ota kantaa :) Nykyistä toteutustapaa en kyllä oikein ymmärrä, mutta jos se toimii niin anna palaa xD

    • Metsäminnni

      Onko kellään mitään esimerkkiä?

      • tämän kaltaista

        Nopeesti miettien näin. Koodi ei suoriltaan toimi et sinne joutuu lisään omaa tauhkaa.
        käyttäjä siis on valinnut minkä laskutoimituksen haluaa:
        while(valid){

        //kysytään lukut
        try{
        double d = Double.parseDouble(luku);
        double p = Double.parseDouble(luku2);
        valid = false;
        }
        catch(ParseException ex){}
        }
        System.out.println("tulos on:" c);


    • ma_vaan__

      Joskus väsäsin rpn-laskimen, tosin se laskee vaan miinus ja plus laskuja, mutta lisäämällä siihen saa helposti jako ja kerto laskut ja toi on tehty c-kielellä, mutta tässä ainaki pääohjelmasta esimerkki (aika huonosti rivittyy :)

      //Laskin käyttää RPN notaatiota (Reverse Polish //Notation) eli se on ns. //pinolaskin.Pinolaskimella laskettaessa annetaan //ensin laskettavat luvut ja sitten vasta //laskutoimitus.


      int main(void)
      {
      Tintstack stack;
      Tboolean succeeded;
      int item, pop_item = 0, i, sum = 0;
      int luku = 0;
      initialize_int_stack(&stack);

      printf("RPN-laskin. Ohjelmalle annetaan yksinumeroisia kokonaislukuja");
      printf("\nja operaatioita , - = ja L. Operaatio = tulostaa pinon");
      printf("\npaallimaisen alkion. Operaatio L lopettaa ohjelman.\n>");
      while((item = getchar()) != 'L') //getchar ottaa vastaan merkin, jos merkki L niin while silmukka päättyy
      {
      fflush(stdin);
      if(item == ' ')
      {
      sum = 0;
      succeeded = pop_int(&stack, &pop_item);
      if(succeeded == 0) //tarkistetaan onko pinossa operandia
      {
      printf("Pinossa ei operandia %d\n", succeeded);
      }
      else
      {
      sum = pop_item sum;
      succeeded = pop_int(&stack, &pop_item);
      if(succeeded == 0) //tarkistetaan onko pinossa operandia
      {
      printf("Pinossa ei operandia\n");
      }
      else
      {
      sum = pop_item sum;
      if(push_int(&stack, sum) == 0) //laitetaan summa pinoon päällimmäiseksi
      {
      printf("/nStack is full"); //push_int() palauttaa 0 jos pino täynnä ja 1 jos pino ei ole täynnä
      }
      else
      {
      //printf("Summa tallennettiin pinoon\n");
      }
      }
      }
      }
      else if(item == '-')
      {
      sum = 0;
      succeeded = pop_int(&stack, &pop_item);
      if(succeeded == 0) //tarkistetaan onko pinossa operandia
      {
      printf("Pinossa ei operandia %d\n", succeeded);
      }
      else
      {
      sum = pop_item-sum; //erotus
      succeeded = pop_int(&stack, &pop_item);
      if(succeeded == 0) //tarkistetaan onko pinossa operandia
      {
      printf("Pinossa ei operandia\n");
      }
      else
      {
      sum = pop_item-sum; //erotus
      if(push_int(&stack, sum) == 0) //Tallennetaan erotus pinoon päällimmäiseksi
      {
      printf("/nStack is full"); //push_int() palauttaa 0 jos pino täynnä ja 1 jos pino ei ole täynnä
      }
      else
      {
      //printf("Erotus tallennettiin pinoon\n");
      }
      }
      }
      }
      else if(item == '=')
      {
      succeeded = pop_int(&stack, &pop_item);
      if(succeeded == 0) //tarkistetaan onko pinossa operandia
      {
      printf("Pinossa ei operandia\n");
      }
      else
      {
      printf("\t \t tulos %d\n", pop_item);
      }
      if(push_int(&stack, pop_item) == 0) //laitetaan takasi pinoon päällimmäiseksi
      {
      printf("/nStack is full"); //push_int() palauttaa 0 jos pino täynnä ja 1 jos pino ei ole täynnä
      }
      }
      else if(isdigit(item)) //onko numero
      {
      if(push_int(&stack, item - '0') == 0) //laitetaan käyttäjän syöttämä merkki pinoon päällimmäiseksi, täytyy vähentää '0' koska ascii
      {
      printf("/nStack is full"); //push_int() palauttaa 0 jos pino täynnä ja 1 jos pino ei ole täynnä
      }
      else
      {
      //printf("Merkki tallennettiin pinoon\n");
      }
      }
      else
      {
      printf("Et antanut oikein\n");
      }
      printf(">");
      }
      print_int_stack (&stack);
      system("PAUSE");   
      return 0;
      }

    Ketjusta on poistettu 0 sääntöjenvastaista viestiä.

    Luetuimmat keskustelut

    1. Janne Ahonen E R O A A

      Taas 2 lasta jää vaille ehjää perhettä!
      Kotimaiset julkkisjuorut
      204
      3998
    2. Tekisi niin mieli laittaa sulle viestiä

      En vaan ole varma ollaanko siihen vielä valmiita, vaikka halua löytyykin täältä suunnalta, ja ikävää, ja kaikkea muuta m
      Ikävä
      92
      1906
    3. Miksi ihmeessä?

      Erika Vikman diskattiin, ei osallistu Euroviisuihin – tilalle Gettomasa ja paluun tekevä Cheek
      Ateismi
      30
      1592
    4. Ootko huomannut miten

      pursuat joka puolelta. Sille joka luulee itsestään liikoja 🫵🙋🏻‍♂️
      Ikävä
      165
      1402
    5. Erika Vikman diskattiin, tilalle Gettomasa ja paluun tekevä Cheek

      Erika Vikman diskattiin, ei osallistu Euroviisuihin – tilalle Gettomasa ja paluun tekevä Cheek https://www.rumba.fi/uut
      Maailman menoa
      25
      1276
    6. Pitääkö penkeillä hypätä Martina?

      Eivätkö puistonpenkit ole istumista varten.Ei niitä kannata liata hyppäämällä koskaa likaantuvat eikä siellä kukaan niit
      Kotimaiset julkkisjuorut
      212
      1150
    7. Kerropa ESA miten kävi tuomioiden

      Osaako ESA kertoa miten haukkumasi kunnanhallituksen kävi.
      Puolanka
      39
      1132
    8. Kuinka kauan

      Olet ollut kaivattuusi ihastunut/rakastunut? Tajusitko tunteesi heti, vai syventyivätkö ne hitaasti?
      Ikävä
      94
      1109
    9. Maikkarin tentti: Orpo jälleen rauhallinen ja erittäin hyvä, myös Purra oli hyvä

      Lindtman ja Kaikkonen oli kohtalaisia, sen sijaan punavihreät Koskela ja Virta olivat taas heikkoja. Ja vastustavat jalk
      Maailman menoa
      129
      1093
    10. Milli-helenalla ongelmia

      Suomen virkavallan kanssa. Eipä ole ihme kun on etsintäkuullutettu jenkkilässäkin. Vähiin käy oleskelupaikat virottarell
      Kotimaiset julkkisjuorut
      197
      1026
    Aihe