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...
Laskin ongelmia
5
1085
Vastaukset 5
- 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
- 551022
- 981004
Tiesitkö? Jorma Uotisen EX-rakas on Helena Lindgren - Nämä ovat välit nyt: "Me ollaan..."
Jorma Uotinen ja Helena Lindgren olivat avoliitossa v. 1982-1999. Pariskunta oli aikansa näyttävä julkkispari, missä i21852- 135802
Anteeksi J-mies
Anteeksi että myötävaikutin siihen että rakastuit minuun, jota et voi koskaan saada. Viimeksi kun näimme ja katselimme t121786Olet nainen ollut vaikein rasti
Eniten olet tunteitani myllännyt ja niitä kuluttanut, ja tuottanut. 🤔55774Kenen viisautta on ollut laittaa tie väärällä murskeella pilalle
Kenen viisautta on ollut kun Siimeksen/Kylmänpurontie pantu pilalle kun on ajettu liian karkeaa mursketta. Rengasliikke25659- 45656
- 50638
Minä muistan
Minä muistan sinut nauravana. Sellaisena, joka sai tavallisenkin hetken tuntumaan vähän kevyemmältä, kuin huoneeseen ol45610- 19607
- 46578
- 35570
Kuhmolainen opettaja tuomittu vainoamisesta
https://yle.fi/a/74-20248184 ”Kuusikymppinen kuhmolaisnainen piinasi naapureitaan lähes kahdeksan vuoden ajan. Nainen13570Siinä kävi mies nyt niin että tämä ämmä muuttaa ulkomaille
Vuonojen maa kutsuu, joten ei hätää. Et kuule minusta enää. 😂 Lycka till! Ämmä riittää.72558Koska Martina viettää aikaansa lapsiensa kanssa
Äiti vaan juoksee miehen perässä Tallinnassa, Lontoossa, Turussa. Kyllä oli kätilö oikeassa, kun sanoi, että ei olisi ka141555Ähtäri on taas TV: n ja radion ykkösuutinen
Uusi podcast on julkaistu ja on nyt kuunneltavissa. Mot on tehnyt hyvää työtä! Mikko Savola ja kepu ei ota mitään vast47548Mitä muuta on olemassa kuin lisääntyminen
Jos mies ei pääse lisääntymään niin mikä hänen osansa elämässä on? mitä jää jäljelle? Hän on vain muiden palvelija kok120536- 47515
Pahkalassa tapahtuu
Mitäs on tapahtunut yöllä pahkalan kerrostaloilla.oli poliisia ja ambulanssia taas vaihteeksi9513