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

1052

    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. S-kauppa nosti hintoja, K-kauppa laski

      Elintarvikkeiden arvonlisävero laski vuodenvaihteessa 13,5 prosenttiin. S-kauppa siirsi alennuksen suoraan katteisiin pi
      Maailman menoa
      157
      7543
    2. Hiihtäjä Vilma Nissisen kommentit aiheutti paniikkia

      ja hernettä vedettiin nenään. Nissinen kertoi torstaina haastattelussa, kun häneltä kysyttiin, että tykkääkö hän hiihtä
      Maailman menoa
      130
      5189
    3. Huuto yltyy persujen piirissä Venezuelan johdosta.

      Kohta kakofonia yltyy kun persut tajuavat mitä Venezuelassa tapahtui. Von den Leydenki jo kipuilee kuten persut EU:ssa y
      Maailman menoa
      43
      2680
    4. Koska mennään retkeilemään?

      pusi pusi 😗
      Ikävä
      263
      2293
    5. Nyt ottaa persua pattiin: sähköauto joulukuun myydyin

      🤣 prööt prööt pakoputkellaan pörisevää persua ottaa nyt saamaristi pattiin, kun paristoilla kulkeva sähköauto on noussu
      Maailman menoa
      81
      2218
    6. Ovatko Perussuomalaiset kommunisteja?

      Toiset sanovat että ovat, toiset sanovat että eivät. Ainakin heillä on paljon sen aatteen piirteitä, koska haluavat kont
      Maailman menoa
      67
      2078
    7. Yhdysvaltain hyökkäys Venezuelaan on YK:n peruskirjan mukaan laiton hyökkäyssota

      Oman sävynsä tähän tuo vielä se, että hyökkäys kohdistettiin nimenomaan valtiojohtoa vastaan. Toki, kun tavoitteena on v
      Maailman menoa
      566
      2057
    8. Ei tule uni

      Kuten epäilin. Onneksi viime yön sain ihan hyvin nukutuksi. Tiesin kyllä, ettei tästä mitään tänään tule.
      Ikävä
      57
      1116
    9. Miksi juuri Venezuela?

      Kaikista maailman valtioista Trump otti silmätikukseen Venezuelan. Mutta minkä ihmeen takia? Kyseessä on kuitenkin vähäp
      Maailman menoa
      291
      1077
    10. Laittaisin whatsuppissa viestin

      Jos olisin täysin varma että se on toivottua vielä kun aikaa on mennyt ja että toivot sitä edelleen.
      Ikävä
      66
      1065
    Aihe