[ RMAN @ 02.11.2007. 09:30 ] @
Napisati C program koji predstavlja kalkulator sa 4 osnovne operacije (+ - * / ). Kalkulator realizovati pomocu promenljive operand1 i operand2.Obezbediti sekvencijalno ucitavanje niza operacija sve dok se ne unese operacija =.

Mogu da koristim if i while petlje. For ne!

Ne razumem kako da uradim. Dal ovako nekako:

operand1= neka vrednost
operacija= neki znak
operand2= neka vrednost

ako je ucitano = onda kraj a ako ne ponovo

Ovakav nacin mi je glup ne razumem kako treba ucitavati vrednosti.
[ glorius @ 03.11.2007. 15:47 ] @
Logican nacin...

Ucitas prvu vrednost.

Udjes u while petlju.

Sad ucitavas operator i ako operator nije =, ucitavas drugi operand... Rezultat stavljas u prvi operadand i ides na pocetak petlje...
[ EArthquake @ 04.11.2007. 18:26 ] @
treba ga implementirati preko do while ,

to je naglasio asistent cini mi se

i savet dugare , kad vec postavljas takva pitanja , ukloni svoje pravo ime iz profila :)))

i asistenti imaju internet :) da ne nabasaju na nesto interesantno :)

[ cirko @ 05.11.2007. 09:25 ] @
Evo ti uradjen zadatak
Pogledaj dali ti odgovara.
Koriscen je ,,case,, operator
Pozdrav
[ RMAN @ 08.11.2007. 21:29 ] @
Ma uradio sam program sa svim mogucim zastitama cak i vise nego sto treba. Dobio sam 5+ poena od mogucih 5.

@EArthquake

Dobro si mi to predlozio. Koristicu drugo ime :)
[ EArthquake @ 09.11.2007. 21:26 ] @
si uspeo mozda sa samo dve promenljive ?

bez trece za unos operacije ? :)
[ ivanzj @ 02.11.2008. 15:58 ] @
imam i ja jedan problem sa kalkulatorom.
Moj mora da mnozi i deli samo uz pomoc operacija + i - , ali nikako da ga nateram da mi to i uradi.
moze li mi neko pomoci?
Pokusavam kroz switch, ali nikako nece da izbaci rezultat

Code:

#include <stdio.h>
main()
{
    float a, b, rez;
    char op;
    printf(" + \n -\n /\n *\n");
    scanf("%f%c%f",&a,&op,&b);
    switch(op)
    {
    case'+':
        printf("%f\n",a+b);
        break;
    case'-':
        printf("%f\n",a-b);
        break;
    case'*':
        do {
            (a+a);
        }
        while (a<b);            
        printf("%f\n",a+b);
        break;
    
    default:
        printf("error");
        break;
    }
    
return(0);
}

ovo je bio neki moj pokusaj, ali ne ide

izbacuje rezultat, ali ne pravilno. Broblem je samo u *

[Ovu poruku je menjao ivanzj dana 02.11.2008. u 19:32 GMT+1]
[ zivotus @ 02.11.2008. 21:26 ] @
case'*':
do {
(a+a);
}
while (a<b);
printf("%f\n",a+b); //vraca ti a+b umesto a...
break;
[ ivanzj @ 02.11.2008. 22:11 ] @
ne radi mi ni ovo.

10*5=15
3*2=5 :D

kad mu stavim a+a u printf
5*4=10
10*5=20
3*2=6

,ali hvala u svakom slucaju
[ Aleksandar Ružičić @ 03.11.2008. 01:23 ] @
Code:

case'*':
if (b == 0) a = 0;
else for (int i = 1; i < b; i++) a += a;
printf("%f\n",a);
break; 

ovako?
[ ivanzj @ 03.11.2008. 16:38 ] @
:) nije
pokusacu ja jos nesto, a cu javiti da l sam nasao resenje
Hvala u svakom slucaju
[ zivotus @ 04.11.2008. 11:43 ] @
Ti rezultat smestas u promenjljivu a, znaci na stampi treba da bude promenjljiva a ne a+a, nego a.


case'*':
do {
(a+=a);
}
while (a<b);
printf("%f\n",a);
break;


samo stavi if za 0 i to je to...

[Ovu poruku je menjao zivotus dana 04.11.2008. u 15:55 GMT+1]
[ Aleksandar Ružičić @ 04.11.2008. 13:49 ] @
nije mi jasno kako sa
Code:

do {
(a+=a);
}
while (a<b);
printf("%f\n",a+b);

pokusavate da mnozite a i b?

recimo da je a = 100 a b = 3:

1. prvi prolaz kroz petlju: a += 100 ( a je sada 200 )
2. provera uslova a < b (200 < 3) daje false i petlja nikada ne ulazi u drugi krug
3. kao rezultat se stampa a + b = 200 + 3 = 203!


@ivanzj: sta je pogresno u onom resenju koje sam ja dao? (nisam ga testirao, priznajem, ali bi trebalo da radi...)
[ ivanzj @ 04.11.2008. 20:05 ] @
Citat:
Aleksandar Ružičić:
Code:

case'*':
if (b == 0) a = 0;
else for (int i = 1; i < b; i++) a += a;
printf("%f\n",a);
break; 

ovako?


@ivanzj: sta je pogresno u onom resenju koje sam ja dao? (nisam ga testirao, priznajem, ali bi trebalo da radi...)


Radi, ali ne radi kako treba. za 1*3 izbaci 4, 1*4=8, 1*5=16, 3*4=24; 2*5=32
[ Aleksandar Ružičić @ 04.11.2008. 21:45 ] @
u pravu si, ja sam napravio (glupu, priznajem :p) gresku...

ovo je ispravno:
Code:

case'*':
int r = 0;
for (int i = 0; i < b; i++) r += a;
printf("%f\n",r);
break; 


ili, malo optimizovano:
Code:

case'*':
int r = 0;
if ( a != 0 && b != 0 )
{
     if ( ! ( a >= b ) )
     {
         a = a ^ b;
         b = a ^ b;
         a = a ^ b;
     }

     for (int i = 0; i < b; i++) r += a;
}
printf("%f\n",r);
break;
[ ivanzj @ 05.11.2008. 19:19 ] @
sa maliim ispravkama radi
Code:

case'*':
        
        {r = 0;};
        for ( i = 0; i < b; i++) r += a;
        printf("%f\n",r);
        break; 

[ Aleksandar Ružičić @ 06.11.2008. 00:22 ] @
kojim kompajlerom ti to kompajliras?
[ ivanzj @ 06.11.2008. 12:24 ] @
To je MS studio c++ 6, pa verovatno taj sto se u njemu nalazi, posto i komajlujem preko njega
[ X Files @ 06.11.2008. 13:09 ] @
Ako si int r; deklarisao negde van (ispred) switch/case, onda ovo {r = 0;}; može da bude samo ovako: r = 0; bez potrebe da bude u svom bloku.
[ ivanzj @ 12.11.2008. 11:01 ] @
NE znam da li mi je poruka izbrisana, ili sam jednostavno zaboravio da postujem, ali treba mi ideja, kako da uradim deljenje, takodje samo uz pomoc + i -