[ Príspevkov: 10 ] 
AutorSpráva
Offline

Užívateľ
Užívateľ
C++

Registrovaný: 05.04.11
Príspevky: 1693
Témy: 50 | 50
Bydlisko: Žilina, Pop...
NapísalOffline : 20.10.2012 9:01 | C++

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íspevku

Momentá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
Offline

Zmazaný užívateľ
Zmazaný užívateľ
Obrázok užívateľa
NapísalOffline : 20.10.2012 11:31 | C++

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.


Offline

Skúsený užívateľ
Skúsený užívateľ
Obrázok užívateľa

Registrovaný: 17.07.11
Prihlásený: 29.12.20
Príspevky: 1516
Témy: 3 | 3
NapísalOffline : 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!
Offline

Užívateľ
Užívateľ
C++

Registrovaný: 05.04.11
Príspevky: 1693
Témy: 50 | 50
Bydlisko: Žilina, Pop...
Napísal autor témyOffline : 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 :D a na hello world nie je čas :P prvé zadanie nám nahodil nejaký rezervačný systém divadla, ale len konzolovo a toto je druhé zadanie za semester :P


_________________
rMBP 13 2015
iPhone 7
Offline

Skúsený užívateľ
Skúsený užívateľ
Obrázok užívateľa

Registrovaný: 17.07.11
Prihlásený: 29.12.20
Príspevky: 1516
Témy: 3 | 3
NapísalOffline : 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 ;)


Offline

Užívateľ
Užívateľ
C++

Registrovaný: 05.04.11
Príspevky: 1693
Témy: 50 | 50
Bydlisko: Žilina, Pop...
Napísal autor témyOffline : 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 :P 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
Offline

Užívateľ
Užívateľ
C++

Registrovaný: 24.08.12
Prihlásený: 09.02.19
Príspevky: 59
Témy: 0 | 0
NapísalOffline : 20.10.2012 13:37 | C++

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)
Offline

Skúsený užívateľ
Skúsený užívateľ
Obrázok užívateľa

Registrovaný: 17.07.11
Prihlásený: 29.12.20
Príspevky: 1516
Témy: 3 | 3
NapísalOffline : 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 :)


Offline

Užívateľ
Užívateľ
C++

Registrovaný: 05.04.11
Príspevky: 1693
Témy: 50 | 50
Bydlisko: Žilina, Pop...
Napísal autor témyOffline : 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-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.


Toto verím :P 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
Offline

Skúsený užívateľ
Skúsený užívateľ
Obrázok užívateľa

Registrovaný: 17.07.11
Prihlásený: 29.12.20
Príspevky: 1516
Témy: 3 | 3
NapísalOffline : 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 :)


 [ Príspevkov: 10 ] 


C++



Podobné témy

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

Mám sa učiť C ++/objective C/ C#?

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

5

797

08.07.2014 20:40

XOLOO

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

rozdiel medzi Borland 3.1 C++ vs Net. C++

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

4

623

20.07.2010 12:54

walther

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

Naučte se C++ za 21 dní + C++Builder 6

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

18

2480

21.05.2010 21:08

Wpegb

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

K: PC Literaturu- C++/C#/java/python/ruby/RoR

v Kúpim

0

465

13.05.2014 18:16

expresado

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

Hledá se programátor C/C++ pro vesmírné projekty (Praha)

v Ponuka práce

0

1426

10.05.2016 14:59

evolvsys

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

Hladam hracov na C&C Generals Zero Hour

v Počítačové hry

10

1299

07.03.2007 19:22

Spirit

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

aky je rozdiel medzi C++ a Visual C++ ?

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

8

2015

19.02.2011 22:46

vendo2

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

Čo mi treba na programovanie v C/C++

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

17

1201

25.09.2011 18:14

reDo

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

Darujem knihy o programovaní (HTML, Java, Visual C++, C++ Builder, Android)

v Vymením a darujem

0

486

01.04.2019 11:20

tomasteicher

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

Hladame 3x C/C++ Linux developer- projekt 11/2016-2/2017

v Ponuka práce

1

610

24.10.2016 15:28

michalesku

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

C - Ako prekompilovať .c súbor do .exe?

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

7

597

02.11.2012 18:47

MasterMatoSK

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

program na projekt (C#, C++, pascal, java)

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

2

880

12.03.2009 12:08

Svjatogor

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

C/C++ problém so súbormi a hodnotami

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

2

354

09.12.2012 10:43

nBXXL

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

C# alebo C++ , ktore knizky na ucenie?

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

20

1873

12.02.2011 0:12

The

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

C&C Generals : Zero Hour - turnaj

v Počítačové hry

0

847

25.02.2009 20:18

k0t0l

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

C# alebo C++ appka/program na výpočty

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

1

429

20.03.2015 22:36

walther



© 2005 - 2025 PCforum, edited by JanoF