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
1046
Vastaukset
- 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
IL - PerSut tykittää - Vaaralliset tappajat vankilaan jopa loppuelämäksi!!
Entistä rajumpi elinkautinen tulee – Vaaralliset tappajat vankilaan jopa loppuelämäksi Henkirikosten uusijat voidaan ja2413836Päivi Räsänen vs. Abbas Bahmanpour
(Bahmanpour on imaami Helsingissä) Syyttäjä siis jahtaa edelleen Räsästä tämän H-puheista, joissa hän on ilmeisesti vaa1535440Demokratian uhka: Perussuomalaiset ja polarisoiva "me ja muut" -ajattelu
Laurence Rees varoittaa, kuinka demokratian heikkeneminen ja autoritaaristen liikkeiden nousu voidaan liittää "me ja muu1995076SIELTÄ SE TULI: Kepu-Kurvinen: "Emme enää lähde punavihreään hallitukseen"
Nyt muuten nauretaan loppuviikko, että tähänkö kaatui Lindtmanin pääministerihaaveet. "Antti Kurvisen mukaan puolue ei734187"Rauhanomainen" miekkari hesassa: "Eläköön aseellinen vastarinta" - lakana
Kyseessä on Suomen Palestiinalaisten yhdistyksen viime perjantaina järjestämä ”Hiljainen kynttiläkulkue Palestiinalaiste873541Palkansaajan oikeus nauttia työuransa hedelmistä
Työeläkejärjestelmä on verrattavissa pyramidihuijaukseen, jossa alemmat tasot, eli nykyiset palkansaajat, toimivat maksa1093048HS - Sanna Marinin kirja on priimaluokan vedätys!
Kirja-arvio|Toivo on tekoja tulisi ensisijaisesti nähdä maineen rahallisen hyödyntämisen voimaannuttavana merkkipaaluna.122852Monella äärivasemmistolaisella C-paperit armeijasta
Kuinka kävisi sodan tullen noille? Puolustusvoimat huomauttaa, että C-luokituksen saaneiden sijoittumisesta sodan aikan362479Vanhat miehet eivät muista
Niinistö muistaa vain Marinin hölmistyneen ilmeen, mutta ei miksi möllötti sen näköisenä. Vanhanen taas ei muuten vaan122101Onko rajojen kiinnipitäminen ihmisoikeuksien vastaista?
Maahanmuutosta puhutaan usein niin kuin kyse olisi vain numeroista ja rajoista. Kyse on kumminkin ihmisistä, jotka halua2752056