| | |
| Stránka: 1 z 1
| [ Príspevkov: 6 ] | |
Autor | Správa |
---|
Registrovaný: 13.09.08 Prihlásený: 06.12.11 Príspevky: 115 Témy: 14 | Napísal RBK: 26.11.2011 12:17 | |
|
Ahojte . dostal som zadanu ulohu naprogramovat postfixovu kalkulacku..(to by aj bolo)
no problem je v tom,ze postup(nasobenia,delenia atd..) a aj vystup ma byt v HTMLku cize v nejakom index.html,no len neviem vobec ako nato.
tu je moj kod.
Kód: #include "stdafx.h" #include<iostream> #include<cstdlib> #include<math.h> #include<string.h> #include<stdio.h> #include <fstream>
/** * @brief Program vypočíta zadaný postfixový zápis.
* Program Postfixový kalkulátor je program, ktorý zo zadaného postfixového zápisu vypočíta výsledok. */ char a=160, u=163, e=130, c=159, s=231, o=236, z=167, y=236, i=161, p=147; using namespace std;
/** * STACKSIZE reprezentuje velkosť poľa zásobníku. */ const int STACKSIZE=100000;
/** * ITEMS je pole zásobníku. */ double ITEMS[STACKSIZE];
/** * TOP reprezentuje aktuálnu pozíciu zásobníku. */ int TOP=0;
/** * Funkcia Push zapisuje čísla do zásobníku. * @param x je hodnota typu <b>double</b> ktorá má byť zapísaná do zásobníku */ void Push(double x) { if(TOP == STACKSIZE-1) { cout << "CHYBA: Prete"<<c<<"enie z"<<a<<"sobn"<<i<<"ku!\n" << endl; system("PAUSE"); exit(EXIT_FAILURE); } else ITEMS[++TOP] = x; return; }
/** * Funkcia Pop je funkcia, pomocou ktorej vyťahujeme čísla zo zásobníku. Pokial by bol zásobník prázdny, funkcia vypíše chybové hlásenie. * @return funkcia vracia hodnotu typu <b>double</b> z aktualnej pozície zásobníku. */ double Pop(void) { if(TOP==0) { cout << "\nCHYBA: Podte"<<c<<"enie z"<<a<<"sobn"<<i<<"ku!\n" << endl; system("PAUSE"); exit(EXIT_FAILURE); } else return(ITEMS[(TOP)--]); }
/** Funkcia PostCalc vypočíta zadaný postfixový zápis. Ak je zápis v nesprávnom tvare funkcia vypíše chybové hlásenie. * @param in je vstupný reťazec v postfixovom zápise ktorý funkcia vypočíta. * @return Funkcia vracia hodnotu typu <b>double</b> to je výsledok zadaného postfixového zápisu. */ double PostCalc(char in[100]) { /** * Premenné a, b sú pomocné premenné použité pri výpočtoch. */ double a,b; /** * Premmenná element je premenná obsahujúca aktuálne spracúvajúci sa prvok zadaného postfixového zápisu. */ char *element;
element = strtok(in, " "); while(element != NULL) { if(atof(element)==0.0) { if(strcmp(element, "+") == 0) { a=Pop(); b=Pop(); Push(a+b); }
else if(strcmp(element, "-") == 0) { a=Pop(); b=Pop(); Push(b-a); }
else if(strcmp(element, "/") == 0) { a=Pop(); b=Pop(); Push(b/a); }
else if(strcmp(element, "*") == 0) { a=Pop(); b=Pop(); Push(a*b); }
else if(strcmp(element, "f") == 0) { a=Pop(); Push(floor(a)); }
else if(strcmp(element, "^") == 0) { a=Pop(); b=Pop(); Push(pow(b,a)); }
else if(strcmp(element, "%") == 0) { a=Pop(); b=Pop(); Push(int(b)%int(a)); }
else { cout << "\nCHYBA: Zadan"<<y<<" v"<<y<<"raz je neplatn"<<y<<"!\n\n"; system("PAUSE"); exit(EXIT_FAILURE); } } else Push(atof(element)); element = strtok(NULL, " "); }
if(TOP==1) return(ITEMS[TOP]); else { cout << "\nCHYBA: V zasobn"<<i<<"ku sa nachadza viac hodn"<<p<<"t ked je o"<<c<<"akavan"<<y<<" v"<<y<<"sledok alebo ste nezadali "<<z<<"iaden v"<<y<<"raz!\n\n"; system("PAUSE"); exit(EXIT_FAILURE); } }
/** * Funkcia main je hlavná funkcia programu. */ int _tmain(int argc, _TCHAR* argv[]) {
char a=160, u=163, e=130, c=159, s=231, o=236, z=167, y=236; char string[10000]; cout << "\n\t\t\tProgram: Postfixov"<<y<< " kalkul"<<a<<"tor\n" << endl; cout << "\nZadajte v"<<y<<"raz: \n" <<endl; gets(string); cout << "\nV"<<y<<"sledok je: " << PostCalc(string) << endl; cout << "\n"; system("PAUSE"); return 0; } Kód: // stdafx.cpp : source file that includes just the standard includes // PostFix.pch will be the pre-compiled header // stdafx.obj will contain the pre-compiled type information
#include "stdafx.h"
// TODO: reference any additional headers you need in STDAFX.H // and not in this file
Prosim Vas, este je tam mensia chyba,ze pri zadani 0 mi ten program crashuje a vypise "Zadany vyraz je neplatny" neviem ako to osetrit :/
Dakujem
|
|
Registrovaný: 11.01.09 Prihlásený: 18.04.24 Príspevky: 1385 Témy: 9 Bydlisko: Hrinova | Napísal Fico: 26.11.2011 14:59 | |
|
V tom HTML ma byt celkovy vysledok, alebo cely postup spracovavania? Troska to pribliz. Aj ako to ma vyzerat v tom html. V kazdom pripade bude zrejme treba vytvorit zakladnu kostru html a do <body> pastovat pozadovane data.
K tej nule, ktoru nechce spracovat: ono funkcia atof vracia 0.0 v pripade neuspechu, takze bud este k tejto podmienke pridaj priame porovnanie s nulou strcmp( element, "0" ) ale tu zas mozes mat vstup aj s medzerami a podobne, cize to nemusi fungovat, ako si predstavujes. Potom radsej pouzi miesto atof funkciu strtod. Ta sice tiez v pripade zlej konverzie vracia 0.0, no premenna *endptr sa rovna premennej str v pripade chyby. Takze mozes spravit takyto test, ci bol vstup naozaj nula:
Kód: #include <stdio.h> #include <stdlib.h> #include <string.h>
int main() {
char s[10]; char* OK;
scanf( "%s", s );
if ( strtod( s, &OK ) == 0.0 ) { if ( OK == s ) printf( "chyba...\n" ); else printf( "zadana nula...\n" ); }
return 0;
}
|
|
Registrovaný: 13.09.08 Prihlásený: 06.12.11 Príspevky: 115 Témy: 14 | Napísal autor témy RBK: 26.11.2011 15:09 | |
|
No najlepsie by bolo ak by tam bol cely postup...napr pri deleni/deleni so zvyskom...alebo pri nasobeni, nemam tusenie ako sa to robi ....aby mi to v htmlku vypisalo ten postup....jj to viem,ze treba vytvorit subor index.html...s <body> </body> ale neviem ako to zakomponovat do toho C++ kodu aby po stlaceni Enteru sa vysledok (najlepsie aj postup) zapisali do toho suboru ....a vyzerat to asi nemusi nijako....hola stranka len s postupom asi bude stacit..
|
|
Registrovaný: 11.01.09 Prihlásený: 18.04.24 Príspevky: 1385 Témy: 9 Bydlisko: Hrinova | Napísal Fico: 26.11.2011 15:46 | |
|
Tak ten zapis klasika, cez streamy:
Kód: ofstream of; A potom napr pri spomenutom deleni, kde mas: Kód: else if(strcmp(element, "/") == 0) { a=Pop(); b=Pop(); Push(b/a); } pridas trebars toto: Kód: else if(strcmp(element, "/") == 0) { a=Pop(); b=Pop(); Push(b/a); sprintf( buffer, "%f delime %f<br><br>", b, a ); of << buffer; }
Nieco v tomto zmysle. Samozrejme, subor riadne otvorit, zatvorit, pridat osestrenia, atd.
|
|
Registrovaný: 13.09.08 Prihlásený: 06.12.11 Príspevky: 115 Témy: 14 | Napísal autor témy RBK: 27.11.2011 14:45 | |
|
vdaka ...idem sa nato pozriet // pridané po 1 hodine 45 minútach od posledného príspevkueste by som sa chcel opytat ako vypocitam n-tu odmocninu z nejakeho cisla ?
viem,ze druha odmocnina je
Kód: odmocnina = sqrt (cislo);
|
|
Registrovaný: 11.01.09 Prihlásený: 18.04.24 Príspevky: 1385 Témy: 9 Bydlisko: Hrinova | |
| Stránka: 1 z 1
| [ Príspevkov: 6 ] | |
Podobné témy | Témy | Odpovede | Zobrazenia | Posledný príspevok |
---|
| Darujem knihy o programovaní (HTML, Java, Visual C++, C++ Builder, Android) v Vymením a darujem | 0 | 428 | 01.04.2019 11:20 tomasteicher | | Výstup USB-c v Notebooky a netbooky | 1 | 255 | 16.09.2018 18:56 shiro | | vystup na sluchadla Výstup pro sluchátka (1xS/PDIF) v Notebooky a netbooky | 1 | 585 | 29.06.2011 19:20 rhonin37 | | ext USB zvukovka 5.1 vystup a SPDIF vstup/vystup v Zvuk | 5 | 1478 | 20.01.2010 15:39 kolacek | | Mám sa učiť C ++/objective C/ C#? v Assembler, C, C++, Pascal, Java | 5 | 729 | 08.07.2014 20:40 XOLOO | | Mŕtvy výstup v Audio programy | 2 | 479 | 08.05.2010 22:12 Victorious_ | | Coaxial vystup v Ostatné | 13 | 1558 | 18.09.2011 15:27 BIO | | hdmi vystup v nVidia čipové sady | 1 | 1411 | 26.12.2010 13:18 brmbo | | optický výstup v Zvuk | 5 | 1246 | 01.11.2007 17:18 apet | | xml vystup v PHP, ASP | 6 | 581 | 21.08.2008 16:07 MKI-Miro | | double vystup v Zvuk | 3 | 487 | 21.01.2010 14:29 Tech | | audio vystup problem v Audio programy | 2 | 365 | 15.02.2015 18:08 dixi | | Nejde VGA výstup v Ostatné grafické karty | 3 | 958 | 07.10.2010 22:02 Icehammer | | nefungujuci dvi vystup v nVidia grafické karty | 14 | 827 | 11.06.2008 21:07 OmeGa | | Žiadny výstup (OUTPUT) v JavaScript, VBScript, Ajax | 3 | 623 | 28.09.2009 19:04 d0.0b | | Formulár - PHP výstup v PHP, ASP | 7 | 945 | 04.10.2007 13:04 imcold |
| 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
|
|