Ahoj, potřeboval bych pomoct. Potřebuju udělat v c++ vědecký kalkulátor s fcemi sin, con, tg, sqrt atd. Měl by fungovat tak, že se zadá výraz na řádku (např.: 15+6*(1+sin85)). A já bych potřeboval poradit jaké fce použít pro rozkódování toho výrazu, kterej byl zadán... Byl byste prosím někdo tak hodný a poradil mi (popřípadě sem postnul kód)?
Fórum › C / C++
Věděcký kalkulátor
tak v prvni rade zalezi co pouzijes za typ pro ten vstupni retezec, pokud pouzijes klasicky ceckovy retezec, pak pouzijest funkce s prefixem str... (strcpy,strcmp...), lepsi varianta je pouzit stl string, ktery uz obsahuje potrebne metody a pokud delas v builderu nebo turbu, tak pak by prichazel jeste v uvahu ansistring....
loop
Bude potřeba výraz naparsovat[1] a vytvořit si AST[2], nebo převést na postfixovou notaci[3], která je jednodušší na interpretaci.
[1] http://en.wikipedia.org/wiki/Parsing
[2] http://en.wikipedia.org/wiki/Abstract_syntax_tree
[3] http://en.wikipedia.org/wiki/Shunting_yard_algorithm
Rozhodně doporučuju postfixovou notaci, je to naprosto jednoduché a krásně se s tim pracuje ;-)
tak mi to nějak nejde, nemůžu se hnout z místa... mohli byste sem teda hodit nějakej kód, kterej by mi pomohl... chtěl jsem to udělat tak, že bych ten výraz dal do pole charů a pak se v tom poli pohyboval pomocí indexu, bral bych to znak po znaku, ale nevim jak z toho získat číslo, aby bylo číslem, zvlášť když je to třebas číslo s desetinou čárkou... chtěl jsem pomužít atof a to mi taky nejde tak to zkouším od nuly, ale furt nic... :(
vyraz=(char*)malloc(100*sizeof(char));
cin >> vyraz;
char cteni;
double cislo;
int i=0, j=0,kon=0;
cteni=vyraz[i];
char *cis;
cis=(char*)malloc(1*sizeof(char));
while(cteni!=NULL){
cislo=0;
while((cteni>='0' && cteni <='9') || (kon>0 && (cteni=='.' || cteni==','))){
kon++;
cis=(char*)realloc(cis, kon*sizeof(char));
cis[j]=cteni;
cteni=vyraz[i++];
j++;
}
cislo=atof(cis);
}
je to určitě blbost já vím, to je tim, že se jinak programováním nezabývám...
jj hele už mi to funguje... mám v tom kódu i++ a tak mi to zapsalo dvakrát to samý, mělo tam být ++i... no tak to by bylo jen je blbý, že se ty čísla zaokrouhlej, když zadám nějaký dlouhý a poměrně velký číslo i s desetinejma tak ty desetinný odpadnou :( to se mi moc nelíbí, ale nevim jestli to jde nějak udělat aby se to nezaokrouhlovalo... no jdu dál... :)
To loop : Jak zjistujes ze odpadnou desetiny? Vypsani na obrazovku nebo v debuggeru (krokovanim)?
Pokud vypsanim, tak je mozny ze nemas spravne nastaveny vypis na obrazovku. Pokud pouzivas k vypsani printf, tak zkus tento zapis..... printf("%5.5f", promenna); Pokud pouzivas cout, tak tam to z hlavy nevim, ale myslim ze tam je metoda nejak setPrecision nebo tak neco.... Pokud se zaokrouhleni provede drive nez pri vypisu, pak bude chyba nekde jinde a bez kodu asi neporadim....
Přidej příspěvek
Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku
×Vložení zdrojáku
×Vložení obrázku
×Vložení videa
Uživatelé prohlížející si toto vlákno
Podobná vlákna
Postfixový kalkulátor — založil Kanax
Postfixový kalkulátor — založil georgenight
Kalkulátor OKU 101 — založil remmidemmi
Brigáda - kalkulátor ceny výrobku - vizuální — založil Vincent
Dám 30GB czshare za kalkulátor čisté mzdy v C++ — založil LENCAK
Moderátoři diskuze