Stránka: 1 z 1
| [ Príspevkov: 10 ] | |
Autor | Správa |
---|
Registrovaný: 05.04.11 Príspevky: 1693 Témy: 50 | 50 Bydlisko: Žilina, Pop... |
main : http://pastebin.com/mCpgFWnt
number.h : http://pastebin.com/kbG72WEr
number.cpp : http://pastebin.com/iQnPxRR2
Mám takýto program, ak v main v cykle do musím stále prepisovať premenné num1,num2 na základnú hodnotu inak sa mi to tam rozhádže už po prvom case. Problém tam asi robí memcpy(), žiaľ toto je môj prvý C++ program tak ak by si nejaký skúsenejší C-čkar nájde čas tak na to look prosím Za všetky chyby a nápady budem vďačný // pridané po 5 minútach od posledného príspevkuMomentálne to však robí to čo by som chcel, ale chcel by som názor niekoho skúsenejšieho na to
_________________ rMBP 13 2015 iPhone 7
|
|
|
ja odporúčam prvý program písať hello world a potom prejsť na zložitejšie procedurálne a potom ked si v tom dobrý tak objektové programy. a za behu sa naučíš aj formátovať kód aby z toho nebolela myseľ a dalo sa rýchlo v tom vyznať. to je moj nápad.
|
|
Registrovaný: 17.07.11 Prihlásený: 29.12.20 Príspevky: 1516 Témy: 3 | 3 | Napísal BX: 20.10.2012 11:33 | C++ | |
|
V prvom rade by som chcel vedieť, čo má ten program robiť a aký je problém.
_________________ Na súkromné správy týkajúce sa problémov, ktoré sa riešia vo fóre, neodpovedám! |
|
Registrovaný: 05.04.11 Príspevky: 1693 Témy: 50 | 50 Bydlisko: Žilina, Pop... | Napísal autor témy XOLOO: 20.10.2012 11:57 | C++ | |
|
normálne iba previesť čísla z Arabského tvaru -> rímsky a späť a potom operácie s rímskymi, samozrejme všetko funguje, dokonca aj záporné mám dorobené ak sú zadané. Problém je v tom ako mám do, while v maine tak ak tam pred switchom nenapíšem že mám znovu nastaviť num1 a num2 na ich počiatočné hodnoty tak mi to začne padať v pamäti a potom tam už dostávam nejaké hatlaniny . Presnejšie celé zadanie :
Vytvorte triedu, ktorá bude umožňovať pracovať s číslami, zapísanými pomocou rímskych číslic. Vytvorteoperátorove funkcie pre súčet, rozdiel, násobenie a celo-číselné delenie, funkcie pre porovnávanie týchto čísel a funkciu pre zobrazenie čísla na obrazovke.Trieda spracováva i záporné čísla, zadávané v tvare „-XV“. // pridané po 10 minútach od posledného príspevku@ebrithil - prosím ťa C++ mám akurát prvý semester a na hello world nie je čas prvé zadanie nám nahodil nejaký rezervačný systém divadla, ale len konzolovo a toto je druhé zadanie za semester
_________________ rMBP 13 2015 iPhone 7
|
|
Registrovaný: 17.07.11 Prihlásený: 29.12.20 Príspevky: 1516 Témy: 3 | 3 | Napísal BX: 20.10.2012 12:17 | C++ | |
|
No tak v prvom rade, konštruktor máš na to, aby si si v ňom objekt inicializoval a ty ho veselo preskakuješ. To môže byť tvoj problém s tými "hatlaninami"
V druhom rade, máš vytvoriť "operátorové funkcie", čo mi skôr príde ako "preťažte operátory pre +,-,*,/".
Takisto písať pre operácie vlastnú triedu je maximálna hlúposť. Nejako si ešte nestihol pobrať zmysel OOP. Takto nejako by si mal túto úlohu riešiť:
1.) Vytvorím si triedu RomaNumer, kde do konštruktora pošlem string - rímske číslo - a prevediem si ho na arabské. To si uložím do členskej premennej typu int.
Taktiež vytvorím bezparametrický konštruktor, kde hodnotu inicializujem na nulu.
2.) Preťažím operátory pre klasický súčet, rozdiel atď. To bude jednoduché, keďže pracujem s klasickým intom.
3.) Rovnako preťažím operátory porovnávania. To bude rovnako jednoduché.
4.) Vytvorím metódu Print(), ktorá mi arabské číslo prevedie späť na string a vypíše ho.
Celé použitie triedy by potom vyzeralo takto:
Kód: RomaNumer num1 ( "XXXI" ); // vo vnutri je to 31 RomaNumer num2 ( "CCXI" ); // vo vnutri je to 211 RomaNumer num3; // vo vnutri je to 0
num3 = num1 + num2; num1 = num 3 / num 2; num1.Print(); /* pripadne mozem pretazit aj operator << a budem to pouzivat ako cout << num1; */
if ( num3 > num1 ) do_something...
Ako vidíš, jedna trieda zaobstará všetko. Žiadne getre, žiadne setre a už vôbec nie žiadna friend trieda pre operácie. NIE! To už nikdy nerob
|
|
Registrovaný: 05.04.11 Príspevky: 1693 Témy: 50 | 50 Bydlisko: Žilina, Pop... | Napísal autor témy XOLOO: 20.10.2012 12:38 | C++ | |
|
Aha, chápem kam mieriš. Nie ono sme mali Javu 2 semestre a teraz som troška inak na tom s týmto v Jave by som tam rovno stringy posielal a bral z metód, ale ak som správne pochopil tu ti metóda môže poslať iba pointer ? Tie operátory tomu som však moc nepochopil to je jasné ... ako by som to zapísal ? Napríklad ?
Kód: friend RomaNumber operator +(num1,num2){ return RomaNumber(num1+num2); };
ale neviem ako by som zapísal tie na porovnávanie, alebo tak isto nejak o.O
A takže vo vnútri objektu RomaNumber nepotrebujem držať hodnotu rímskeho čísla ? ak dobre chápem tvoje zmýšlanie ? teraz ako na to pozerám sa mi to pozdáva čím ďalej viac a uvažujem o otm že by som takto zjednodušil aj kód Vďaka za nápady
_________________ rMBP 13 2015 iPhone 7
|
|
Registrovaný: 24.08.12 Prihlásený: 09.02.19 Príspevky: 59 Témy: 0 | 0 |
Citácia: ono sme mali Javu 2 semestre
Aha, a jaké jazyky ses učil předtím? Protože: http://www.itnews.sk/spravy/software/20 ... om-je-java
Trochu mě děsí, že ten tvůj kód je namíchané C a C++ dohromady, to jsou dva odlišné jazyky, a opravdu není dobré je takhle křížit. Buď piš v jednom nebo v druhém.
_________________ "Existuje pouze jeden člověk, který má méně přátel než Bill Gates, a tím je Saddám Husajn." (Paul Grayson) |
|
Registrovaný: 17.07.11 Prihlásený: 29.12.20 Príspevky: 1516 Témy: 3 | 3 | Napísal BX: 20.10.2012 13:47 | C++ | |
|
Ach jaj, takto to dopadne, keď človek ide z javy do C++ :/
Žiadne friend! Firend je slovo, ktoré treba v OOP používať čo najmenej. Znamená to, že inej triede/funkcii sprístupníš privátne zložky triedy (premenné, metódy...) Toto ale ty nepotrebuješ, keď sa stále pohybuješ V ROVNAKEJ triede - V JEDNEJ JEDINEJ (RomaNumber)
Ďalej, ten operátor, ktorý si napísal, pravdepodobne spôsobí nekonečnú rekurziu (ak sú tie parametre typu RomaNumber) Na to si dávaj pozor.
Operátory môžeš kľudne dať ako metódu RomaNumber, nejako takto:
Kód: RomaNumber operator+ ( RomaNumber num ) { return RomaNumber ( this->normalne_cislo + num.normalne_cislo ); // toto bude chciet, idealne private konstruktor pre parameter int) }
V kóde to potom budeš volať takto: Kód: num3 = num1.operator+ (num2); // alebo skratene num3 = num1 + num2;
Zabudni na ten kód, čo máš a prepíš to znovu podľa tohoto môjho vzoru. Potom si to porovnaj a napíš, na čo si prišiel
|
|
Registrovaný: 05.04.11 Príspevky: 1693 Témy: 50 | 50 Bydlisko: Žilina, Pop... | Napísal autor témy XOLOO: 20.10.2012 21:59 | C++ | |
|
faraon píše: Citácia: ono sme mali Javu 2 semestre Aha, a jaké jazyky ses učil předtím? Protože: http://www.itnews.sk/spravy/software/20 ... om-je-javaTrochu mě děsí, že ten tvůj kód je namíchané C a C++ dohromady, to jsou dva odlišné jazyky, a opravdu není dobré je takhle křížit. Buď piš v jednom nebo v druhém.
Toto verím Predtým ? tak možno Pascal, troška Assembleru, Control Web, alebo ako sa to volá a potom až na vysokej tú Javu. A problém cítim fakt, ten učiteľ moc toho k tomu nepovie tak neviem. Rád by som aj vedel čo z tohto kódu sú hlavné prvky C samotného. Kedže na hodinách nám k tomu moc učiteľ nepovie tak sa mi tiež moc nepáči.
@BX - toho frienda nám tam ukazoval na hodine keď robil operácie s binárnmi tak to tak definoval ako som to zapísal no cca. A mám otázky : normalne_cislo ? bude asi metóda na vrátenie hodnoty intu ?
a potom this bude braný potom odkiaľ ?
_________________ rMBP 13 2015 iPhone 7
|
|
Registrovaný: 17.07.11 Prihlásený: 29.12.20 Príspevky: 1516 Témy: 3 | 3 | Napísal BX: 20.10.2012 22:18 | C++ | |
|
Nie, veď píšem, že si stále v jednej jedinej triede. Tam máš prístup k svojim členským premenným.
normalne_cislo je normálne číslo typu int (int normalne_cislo;) z private časti.
Nože skús napísať triedu z toho, čo som napísal, postni to sem a ešte ti opravím, čo bude zle
|
|
Stránka: 1 z 1
| [ Príspevkov: 10 ] | |
Podobné témy | Témy | Odpovede | Zobrazenia | Posledný príspevok |
---|
| v Assembler, C, C++, Pascal, Java | 5 | 797 | 08.07.2014 20:40 XOLOO | | v Assembler, C, C++, Pascal, Java | 4 | 623 | 20.07.2010 12:54 walther | | v Assembler, C, C++, Pascal, Java | 18 | 2480 | 21.05.2010 21:08 Wpegb | | v Kúpim | 0 | 465 | 13.05.2014 18:16 expresado | | v Ponuka práce | 0 | 1426 | 10.05.2016 14:59 evolvsys | | v Počítačové hry | 10 | 1299 | 07.03.2007 19:22 Spirit | | v Assembler, C, C++, Pascal, Java | 8 | 2015 | 19.02.2011 22:46 vendo2 | | v Assembler, C, C++, Pascal, Java | 17 | 1201 | 25.09.2011 18:14 reDo | | v Vymením a darujem | 0 | 486 | 01.04.2019 11:20 tomasteicher | | v Ponuka práce | 1 | 610 | 24.10.2016 15:28 michalesku | | v Assembler, C, C++, Pascal, Java | 7 | 597 | 02.11.2012 18:47 MasterMatoSK | | v Assembler, C, C++, Pascal, Java | 2 | 880 | 12.03.2009 12:08 Svjatogor | | v Assembler, C, C++, Pascal, Java | 2 | 354 | 09.12.2012 10:43 nBXXL | | v Assembler, C, C++, Pascal, Java | 20 | 1873 | 12.02.2011 0:12 The | | v Počítačové hry | 0 | 847 | 25.02.2009 20:18 k0t0l | | v Assembler, C, C++, Pascal, Java | 1 | 429 | 20.03.2015 22:36 walther |
|