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

1083

    Vastaukset 5

    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. Ny se loppuu ( Kuhmo)

      Yhtiö on myyty. Notta yyteet meleko äkkiä, notta. Pelastautukoon ken voi. Notta se on tuulista pian.
      Kuhmo
      98
      3094
    2. Parikymppinen hakkasi nelikymppisen kriittiseen tilaan

      Ja ihminen jäi junan alle lautiosaaressa...paljon on taas sattunut ja tapahtunut. Ketähän nämä uhrit mahtaa olla 🤔 htt
      Kemi
      48
      2516
    3. Kaivattusi tärkein ulkoinen tuntomerkki

      Onko jokin muu kuin yleinen kuten kaunis, laiha. hyväkroppainen jne.
      Ikävä
      50
      1321
    4. Mille kirjaimelle

      toivotat hyvää yötä , kuka on mielessäsi kun menet nukkumaan?
      Ikävä
      37
      1047
    5. Mitä tuot pöytään parisuhteessa?

      Siinäpä se kysymys on otsikossa. Mitäpä siis tuot/toisit pöytään parisuhteessa? Oletko mies vai nainen? Koetko sen mitä
      Sinkut
      304
      1042
    6. Äimän käki

      Olen vähää vaille viisikymppinen mies, ja olen elellyt ilman parisuhdetta parisen vuotta. Nyt vihdoin ja viimein tuntuu,
      Sinkut
      154
      901
    7. Paikallinen autokorjaamo

      Kyllä alkaa vituttamaan, palvelua haluaisi niin jono ovelle ja yksi myyjä. Auto valmistunut kuntoon niin kukaan ei ilmoi
      Kuhmo
      11
      871
    8. Nainen, miten suhtautuisit

      Jos mies ehdottaisi tapaamista? Entä siihen, jos mies kertoisi tapaamisessa tunteistaan ja haluaisi seurustella?
      Ikävä
      58
      720
    9. 2 km on nykyään liian pitkä koulumatka

      Hesarissa päivitellään lapset joutuu nyt kulkemaan 2 km kouluun jösses. Ruostefillarilla tuo matka menee vaikka miten äk
      Lieksa
      52
      693
    10. Sinulle mies

      Kohtaamme jälleen kun on oikea aika. Sitä ei voi mikään eikä kukaan estää <3 <3
      Ikävä
      37
      669
    Aihe