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

1061

    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. Hallitus pyrkii rajoittamaan kaupan omien halpamerkkien myyntiä

      Helsingin Sanomien mukaan hallitus valmistelee lakihanketta, joka suitsii kaupan valtaa ja rajoittaa omien halpamerkkien
      Yhteiskunta
      224
      3302
    2. Tapettu

      On joku kangaskadulla perjantaina
      Sotkamo
      58
      2796
    3. Persut päättivät hiilivoiman kieltämisestä Suomessa

      Moni on jo unohanut kuka hyväksyi hiilivoimaloiden kieltämisen Suomessa: persut Sukupuolineutraalit liikennemerkitk
      Maailman menoa
      17
      2429
    4. Björn Wahlroos, maataloustuet lakkautettava

      Sanoo pankkimies. Mitäs persut ja muut tukinulliem perskärpäset tähän? "Wahlroos listaa kansallisen maataloustuen. – I
      Maailman menoa
      20
      2409
    5. Työvoimatoimisto

      Nyt kysyisin miksi pitää käydä työvoimatoimistossa paikanpäällä, kun he eivät muuta tee kuin laittavat koneelle uudet ve
      Työttömyys
      70
      1899
    6. Muistattekos kuinka kokoomus ja persut vinkuivat sähkön hinnasta?

      Oppositiossa vuonna 2022, kun sähkön hinta uhkasi nousta 20 senttiin kilowattitunnilta? Nyt ovat hiiren hiljaa, kun pitä
      Maailman menoa
      84
      1830
    7. Vain persut vastustivat hiilivoimaloiden alasajoa

      Persut vastusti jyrkästi hiilen kieltolakia ja on myöhemmin vaatinut hiilivoimaloiden pitämistä käytössä. He perusteliva
      Maailman menoa
      40
      1802
    8. Nalle Wahlroos ei ulise kuten Teemu Selänne sähkölaskuista

      Nalle "hah hah" nauroi saamistaan sähkötuista, kun taas Teemu-poika itkeä tirautti kovasta sähkön hinnasta. Nalle nauro
      Maailman menoa
      16
      1779
    9. Mikä aate kaiken pahan takana?

      Se laiskistuttaa kansat, opettaa vaatimaan etuisuuksia, syleilee maailmoja eikä omaa kansaa.
      Maailman menoa
      84
      1632
    10. Mietin sua liikaa

      Mietin nytkin sitä, että millaista se olisi tulla kotiin, kun sinä olisit täällä vastassa. Tai niin päin, että sinä tuli
      Ikävä
      65
      955
    Aihe