Obsah fóra
PravidláRegistrovaťPrihlásenie




Odpovedať na tému [ Príspevkov: 7 ] 
AutorSpráva
Offline

Užívateľ
Užívateľ
jednoducha kalkulacka

Registrovaný: 18.03.07
Prihlásený: 02.06.13
Príspevky: 264
Témy: 82
Príspevok NapísalOffline : 15.01.2012 10:33

zdravim snazil som sa naprogramovat jednoduchu kalkulacku:
Kód:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>


    float cislo1, cislo2;
    char operand;
    float vysledek;

int main (void){

    puts("this is calculator from SVEJK");
    puts("=============================\n\n\n");


    scanf("%f%c%f", &cislo1, &operand, &cislo2);
    vypocet();


return 0;
}


void vypocet (){

    switch(operand){
        case'+':
        vysledek=cislo1+cislo2;
        printf("%f\n", vysledek);
        scanf("%c%f", &operand, &cislo2);
        vypocet();
        case'/':
        vysledek=cislo1/cislo2;
        printf("%f", vysledek);
        scanf("%c%f", &operand, &cislo2);
        vypocet();
        case'*':
        vysledek=cislo1*cislo2;
        printf("%f", vysledek);
        scanf("%c%f", &operand, &cislo2);
        vypocet();
        case'-':
        vysledek=cislo1-cislo2;
        printf("%f", vysledek);
        scanf("%c%f", &operand, &cislo2);
        vypocet();

        }

}


no je tu jeden problem.. najskor nacita cislo+operand+cislo, pokracujefunkciou vypocet kde sa podla operandu prevedie vypocet. dalej som chcel aby znovu nacital operand+cislo, a pokracoval funkciou vypocet, aby to fungovalo jak nekonecna kalkulacka..

lenze scanf("%c%f", &operand, &cislo2); poda kontrolnych vypisou nenacitava dbre znak operand. neviete niektopreco??

som zaciatocnik.. sorry za mozno debilne otazky :)


Online

Skúsený užívateľ
Skúsený užívateľ
jednoducha kalkulacka

Registrovaný: 11.01.09
Prihlásený: 16.04.24
Príspevky: 1385
Témy: 9
Bydlisko: Hrinova
Príspevok NapísalOnline : 15.01.2012 13:31

1.) kedze nepouzivas prikaz break po kazdom navesti v prikaze switch, po kazdom navesti sa jednoducho prejde na dalsie navestie. Prejavi sa to sice az uplne na konci, ak zadas napr iny znak, ako + - * / , kedze pouzivas rekurziu, ale je to velmi casta chyba a zaciatocnici ju dost tazko hladaju. Nikdy preto na break nezabudaj, ak nie je nutne vykonat viac navesti - v tomto pripade to nutne nie je, prave naopak, je to chyba.

2.) predopkladam, ze ak zadavas dalsie moznosti hned po prvej, kde uz citas iba operand a cislo, chces nadvazovat na predchadzajuci vysledok. Ty ale nikde nepouzivas tento vysledok, stale pocitas odznova.

3.) tu je hlavny povodca chyby - opat zabudas, ze scanf nacitava aj znak enter a ten robi pri dalsom citani neplechu. Radu, ako sa s tym vysporiadat, som ti dal v tejto teme. Takze mozes pouzit %*c aby ho ignorovalo, kedze vravis, ze funkcia, ktoru som ti poradil, je pre teba tazkopadna.

Vysledny funkcny program:
Kód:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

void vypocet ();


    float cislo1, cislo2;
    char operand;
    float vysledek;

int main (void){

    puts("this is calculator from SVEJK");
    puts("=============================\n\n\n");


    scanf("%f%c%f%*c", &cislo1, &operand, &cislo2);
    vysledek = cislo1;
    vypocet();


return 0;
}


void vypocet (){

    switch(operand){
        case'+':
        vysledek=vysledek+cislo2;
        printf("%f\n", vysledek);
        scanf("%c%f%*c", &operand, &cislo2);
        vypocet();
        break;
        case'/':
        vysledek=vysledek/cislo2;
        printf("%f\n", vysledek);
        scanf("%c%f%*c", &operand, &cislo2);
        vypocet();
        break;
        case'*':
        vysledek=vysledek*cislo2;
        printf("%f\n", vysledek);
        scanf("%c%f%*c", &operand, &cislo2);
        vypocet();
        break;
        case'-':
        vysledek=vysledek-cislo2;
        printf("%f\n", vysledek);
        scanf("%c%f%*c", &operand, &cislo2);
        vypocet();
        break;
        }

}


Offline

Užívateľ
Užívateľ
jednoducha kalkulacka

Registrovaný: 18.03.07
Prihlásený: 02.06.13
Príspevky: 264
Témy: 82
Príspevok Napísal autor témyOffline : 15.01.2012 16:45

dakujem, na ten enter stale zabudam..

este by som ta prosil o vysvetlenie ohladom jedneho caseu ktory som dorobil. mal by vyrabat mocninu len hlasi ze je zly navratovy typ, no on je dobry tu je ta cast:
Kód:
case'n':
        vysledek=mocnina(vysledek, cislo2);
        printf("%f", vysledek);
        scanf("%c%f%*c", &operand, &cislo2);
        vypocet();
        break;

        }
return 0;
}

float mocnina (float cislo, float exponent){
float umocnene;
    for(int n=exponent; n>0; n--){
        umocnene=cislo*cislo;
        }
return umocnene;
}


to vyladovanie programou mi nejde..

// pridané po 6 minútach od posledného príspevku

alebo dalsi moznost:
Kód:
case'n':
        vysledek=mocnina();
        printf("%f", vysledek);
        scanf("%c%f%*c", &operand, &cislo2);
        vypocet();
        break;

        }
return 0;
}

float mocnina (){

    for(int n=cislo2; n>1; n--){
        vysledek=vysledek*vysledek;
        }
return vysledek;
}


// pridané po 7 minútach od posledného príspevku

no uz mi to funguje:
Kód:
case'n':
        vysledek=pow(vysledek, cislo2);
        printf("%f\n", vysledek);
        scanf("%c%f%*c", &operand, &cislo2);
        vypocet();
        break;

        }
return 0;
}


jaka bola chyba v tych funkciach?
diki


Online

Skúsený užívateľ
Skúsený užívateľ
jednoducha kalkulacka

Registrovaný: 11.01.09
Prihlásený: 16.04.24
Príspevky: 1385
Témy: 9
Bydlisko: Hrinova
Príspevok NapísalOnline : 15.01.2012 21:13

Pretoze funkcia mocnina() bola sice definovana ( telo funkcie ), ale zrejme nebola deklarovana - v programe nebolo zavedene jej meno. Je spravne uviest prototypy ( deklaracie ) funkcii na zaciatku programu, ak nepouzivas hlavickove subory, ktore to maju za ulohu. Priklad tvojho riesenia:
Kód:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

void vypocet ();
float mocnina (float cislo, float exponent);

/* pokracovanie programu ... */


Offline

Užívateľ
Užívateľ
jednoducha kalkulacka

Registrovaný: 29.09.11
Prihlásený: 11.03.16
Príspevky: 170
Témy: 21
Bydlisko: Trenčín
Príspevok NapísalOffline : 17.01.2012 15:18

ak sa mozem spytat v akom jazyku je to?


Offline

Čestný člen
Čestný člen
jednoducha kalkulacka

Registrovaný: 11.08.07
Príspevky: 4088
Témy: 34
Bydlisko: Brno
Príspevok NapísalOffline : 17.01.2012 15:24

C.


Offline

Užívateľ
Užívateľ
jednoducha kalkulacka

Registrovaný: 29.09.11
Prihlásený: 11.03.16
Príspevky: 170
Témy: 21
Bydlisko: Trenčín
Príspevok NapísalOffline : 17.01.2012 15:33

Dakujem


Odpovedať na tému [ Príspevkov: 7 ] 


Podobné témy

 Témy  Odpovede  Zobrazenia  Posledný príspevok 
V tomto fóre nie sú ďalšie neprečítané témy. kalkulacka

v Ostatné

3

362

25.01.2012 14:54

jtbs Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. kalkulacka

v JavaScript, VBScript, Ajax

2

721

09.08.2008 18:39

exoomer Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Kalkulacka

v Ostatné

6

761

10.03.2012 21:36

F3RY Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Kalkulačka

v Ostatné programy

1

492

30.05.2011 23:00

shiro Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. kalkulačka

v Ostatné

3

494

03.02.2011 22:16

elfman Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. kalkulačka

v Ostatné programy

0

636

21.02.2009 21:24

bugi512 Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Kalkulačka - assembler

v Assembler, C, C++, Pascal, Java

0

674

10.11.2011 18:54

Reverser Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Java Kalkulacka

v Assembler, C, C++, Pascal, Java

1

960

19.04.2010 15:04

Forty- Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. euro kalkulacka

v PHP, ASP

16

1683

12.08.2008 9:22

javo Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Delphi-kalkulačka

v Delphi, Visual Basic

17

1155

02.03.2013 10:18

expoox Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. kalkulacka v C++

v Assembler, C, C++, Pascal, Java

12

2054

16.09.2007 16:51

Bacil Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. anketa, počitadlo, kalkulačka....

v Webdesign

9

542

05.07.2014 15:00

shaggy Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. kalkulacka ceny produktu

v JavaScript, VBScript, Ajax

11

1240

14.02.2009 19:06

pildo Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Visual Basic Kalkulačka

v Delphi, Visual Basic

1

1020

29.04.2011 12:28

walther Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Socialne stipendium - kalkulacka?

v Vzdelanie, štúdium, škola

5

1639

02.10.2013 17:12

Ominous Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Pomoc kalkulacka C++

v Assembler, C, C++, Pascal, Java

2

1985

21.01.2008 17:23

Peto670 Zobrazenie posledných príspevkov


Nemôžete zakladať nové témy v tomto fóre
Nemôžete odpovedať na témy v tomto fóre
Nemôžete upravovať svoje príspevky v tomto fóre
Nemôžete mazať svoje príspevky v tomto fóre

Skočiť na:  

Powered by phpBB Jarvis © 2005 - 2024 PCforum, webhosting by WebSupport, secured by GeoTrust, edited by JanoF
Ako väčšina webových stránok aj my používame cookies. Zotrvaním na webovej stránke súhlasíte, že ich môžeme používať.
Všeobecné podmienky, spracovanie osobných údajov a pravidlá fóra