Stránka: 1 z 1
| [ Príspevkov: 7 ] | |
Autor | Správa |
---|
Registrovaný: 18.03.07 Prihlásený: 02.06.13 Príspevky: 264 Témy: 82 | 82 |
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
|
|
Registrovaný: 11.01.09 Prihlásený: 23.12.24 Príspevky: 1395 Témy: 10 | 10 Bydlisko: Hrinova |
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; }
}
|
|
Registrovaný: 18.03.07 Prihlásený: 02.06.13 Príspevky: 264 Témy: 82 | 82 |
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íspevkualebo 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íspevkuno 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
|
|
Registrovaný: 11.01.09 Prihlásený: 23.12.24 Príspevky: 1395 Témy: 10 | 10 Bydlisko: Hrinova |
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 ... */
|
|
Registrovaný: 29.09.11 Prihlásený: 11.03.16 Príspevky: 170 Témy: 21 | 21 Bydlisko: Trenčín |
ak sa mozem spytat v akom jazyku je to?
|
|
Registrovaný: 11.08.07 Príspevky: 4088 Témy: 34 | 34 Bydlisko: Brno | |
Registrovaný: 29.09.11 Prihlásený: 11.03.16 Príspevky: 170 Témy: 21 | 21 Bydlisko: Trenčín | |
Stránka: 1 z 1
| [ Príspevkov: 7 ] | |
Podobné témy | Témy | Odpovede | Zobrazenia | Posledný príspevok |
---|
| v Ostatné | 3 | 548 | 03.02.2011 22:16 elfman | | v Ostatné programy | 0 | 677 | 21.02.2009 21:24 bugi512 | | v Ostatné | 3 | 407 | 25.01.2012 14:54 jtbs | | v JavaScript, VBScript, Ajax | 2 | 755 | 09.08.2008 18:39 exoomer | | v Ostatné | 6 | 855 | 10.03.2012 21:36 F3RY | | v Ostatné programy | 1 | 531 | 30.05.2011 23:00 shiro | | v Delphi, Visual Basic | 17 | 1221 | 02.03.2013 10:18 expoox | | v Assembler, C, C++, Pascal, Java | 0 | 719 | 10.11.2011 18:54 Reverser | | v Assembler, C, C++, Pascal, Java | 1 | 1004 | 19.04.2010 15:04 Forty- | | v PHP, ASP | 16 | 1723 | 12.08.2008 9:22 javo | | v Vzdelanie, štúdium, škola | 5 | 1705 | 02.10.2013 17:12 Ominous | | v Assembler, C, C++, Pascal, Java | 2 | 2021 | 21.01.2008 17:23 Peto670 | | v Assembler, C, C++, Pascal, Java | 12 | 2102 | 16.09.2007 16:51 Bacil | | v Webdesign | 9 | 597 | 05.07.2014 15:00 shaggy | | v JavaScript, VBScript, Ajax | 11 | 1298 | 14.02.2009 19:06 pildo | | v Delphi, Visual Basic | 1 | 1057 | 29.04.2011 12:28 walther |
|