Jednoduché kupecké počky pomocí dynamických objektů – C / C++ – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Jednoduché kupecké počky pomocí dynamických objektů – C / C++ – Fórum – Programujte.comJednoduché kupecké počky pomocí dynamických objektů – C / C++ – Fórum – Programujte.com

 

12. 1. 2008   #1
-
0
-

Zdravím,
potřeboval bych nakopnout k vyřešení této úlohy:

Pomocí třídy a dynamických objektů napište program tak, aby prováděl se dvěma čísly jednoduché kupecké počky (+;-;x,/). Čísla i druh požadované operace musí jít zadávat z klávesnice. Celé to udělejte tak tak, aby se na tom daly demonstrovat dynamické objekty.

No, ve škole jsem z toho moc moudrosti nepobral, tak jsem si teď našel co je to třída, dynamický objekt a příklady na to, ale popravdě,pořádně ani nevím, jak to vlasně spolu funguje. Vím, času není, ale za jakoukoliv formu nakopnuní předem mnohokrát děkuji.

Martin

Nahlásit jako SPAM
IP: 62.240.190.–
AdamHlavatovic0
Stálý člen
12. 1. 2008   #2
-
0
-

skuste viacej specifikovat vstup, lebo je rozdiel parsovat nieco taketo op1 + op2, alebo (op1/op2)*op3-(op4*op5)

Nahlásit jako SPAM
IP: 217.73.16.–
Zelenáč0
Posthunter
12. 1. 2008   #3
-
0
-

:-O Co to jsou dynamické objekty?

Nahlásit jako SPAM
IP: 89.176.254.–
AdamHlavatovic0
Stálý člen
12. 1. 2008   #4
-
0
-

pokial by sme obmedzili vstup len na op1 + op2, op1 - op2, apod, potom pouzitie objektov nieje prilis vhodne (ale daju sa tam naprat) a cela uloha by mohla vypdat nejako takto:

#include <iostream>

using std::cin;
using std::cout;
using std::istream;
using std::ostream;

//! dummy number class
class Number
{
private:
double m_num;
public:
Number operator+(const Number & num);
friend istream & operator>>(istream & is, Number & num);
friend ostream & operator<<(ostream & os, const Number & num);
}

Number::operator+(const Number & num)
{
Number tmp;
tmp.m_num = m_num + num.m_num;
return tmp;
}

istream & operator>>(istream & is, Number & num)
{
is >> num.m_num;
return is;
}

ostream & operator<<(ostream & os, const Number & num)
{
os << num.m_num;
return os;
}


int main(int argc, char * argv[])
{
cout << "zadaj kupecky pocet v tvare (num1 operator num2): ";
Number * pnum1 = new Number;
cin >> *pnum1;
char op;
cin >> op;
Number * pnum2 = new Number;
cin >> *pnum2;

Number * presult = new Number;
switch (op)
{
case '+':
{
*presult = *pnum1 + *pnum2;
break;
}
}

cout << *pnum1 << op << *pnum2 << "=" << *presult << "\n";

delete pnum1;
delete pnum2;
delete presult;

system("pause");
return 0;
}

podobnym sposobom mozte pretazit ak operatory -, *,/

Nahlásit jako SPAM
IP: 217.73.16.–
12. 1. 2008   #5
-
0
-

To Zelenáč : No, nechal jsem se poučit v manuálu C++ na ČVÚT http://www.fs.cvut.cz/cz/U201/skrcpp.html#prdo.... V jazyku C a C++ lze pracovat s tzv. dynamickými objekty. Jsou to objekty, jež se vytvářejí v& průběhu procesu. Jsou umísťovány v paměti, která se nazývá hromada a každý objekt je definován tak, že na něj ukazuje nějaký ukazatel. Pomocí dynamických objektů, lze realizovat složité algoritmy prací se symboly, symbolické derivování, integrování apod. .....

To AdamHlavatovic: Díky moc za ukázku, právě se tím prolouskávám, akorát nemůžu přijít na to, proč mi kompilátor na řádku 22 vyplivne hlášku:new types may not be defined in a return type

Nahlásit jako SPAM
IP: 62.240.190.–
Zelenáč0
Posthunter
12. 1. 2008   #6
-
0
-

To psychofanator : Tedy "dynamicky objekt" ani "hromada" jsem nikdy neslysel :-) To se pouziva nebo to mam hodne rychle zapomenout?
BTW. jak se ty "dynamicke objekty" maji proboha demonstrovat na takovemhle priklade?

Nahlásit jako SPAM
IP: 89.176.254.–
Zelenáč0
Posthunter
12. 1. 2008   #7
-
0
-

BTW2. Tedy že na ČVUT ani nezvládnou nastavit správné kódování...

Nahlásit jako SPAM
IP: 89.176.254.–
AdamHlavatovic0
Stálý člen
12. 1. 2008   #8
-
0
-

To psychofanator : mam tam malu chybu na riadku 18, namiesto
Number::operator+(const Number & num) ma bit

Number Number::operator+(const Number & num)

Nahlásit jako SPAM
IP: 217.73.16.–
12. 1. 2008   #9
-
0
-

To AdamHlavatovic : Ještě jednou díky, začínám tomu už pomalu přicházet na kloub, ovšem i když 18. řádek opravím opravím, tak mi kompilátor pro změnu nahlásí toto: Number' does not name a type

Nahlásit jako SPAM
IP: 62.240.190.–
12. 1. 2008   #10
-
0
-

Nn, chyba tam neni. Ale moc se mi to nezdá.
Zelenáč ":-O Co to jsou dynamické objekty?": To asi aby nepoužíval statický objekty. A tak se vyhli ještě většímu množství řešení.

Nahlásit jako SPAM
IP: 85.160.70.–
Muj starý nick Tomik512
Zelenáč0
Posthunter
12. 1. 2008   #11
-
0
-

To Tomas_Dejmek :

Celé to udělejte tak tak, aby se na tom daly demonstrovat dynamické objekty.


Na tomhle se to prostě imho nedá rozumně demonstrovat.. To už bys rovnou mohl psát:


int *a = new int;
int *b = new int;
int *c = new int;
*a = 1;
*b = 2;
*c = (*a)+(*b);
std::cout << *c;
delete a;
delete b;
delete c;


Dynamická alokace se přece používá, pokud předem nevíš velikost proměnné (event. pokud chceš mít program co nejmenší) a tohle rozhodně není ten případ.

Nahlásit jako SPAM
IP: 89.176.254.–
AdamHlavatovic0
Stálý člen
12. 1. 2008   #12
-
0
-

To Zelenáč : ci je v takejto situacii vhodne pouzit dynaicky alokovane objekty je bezpredmetne, jednoducho to je tak zadane v ulohe a basta

Nahlásit jako SPAM
IP: 217.73.16.–
Chrasty
~ Redaktor
+4
Posthunter
12. 1. 2008   #13
-
0
-

Zelenáč napsal:
To psychofanator : Tedy "dynamicky objekt" ani "hromada" jsem nikdy neslysel :-) To se pouziva nebo to mam hodne rychle zapomenout?
BTW. jak se ty "dynamicke objekty" maji proboha demonstrovat na takovemhle priklade?

pojem "halda" znáš?

halda==(řízená) hromada :-)

jinak dynamické objekty jsem taky nikdy neslyšel

Nahlásit jako SPAM
IP: 193.179.196.–
AdamHlavatovic0
Stálý člen
12. 1. 2008   #14
-
0
-

To psychofanator : este som zabudol na ; v 16 riadku, teda namiesto } ma bit };

#include <iostream>

using std::cin;
using std::cout;
using std::istream;
using std::ostream;

//! dummy number class
class Number
{
private:
double m_num;
public:
Number operator+(const Number & num) const;
friend istream & operator>>(istream & is, Number & num);
friend ostream & operator<<(ostream & os, const Number & num);
};

Number Number::operator+(const Number & num) const
{
Number tmp;
tmp.m_num = m_num + num.m_num;
return tmp;
}

istream & operator>>(istream & is, Number & num)
{
is >> num.m_num;
return is;
}

ostream & operator<<(ostream & os, const Number & num)
{
os << num.m_num;
return os;
}


int main(int argc, char * argv[])
{
cout << "zadaj kupecky pocet v tvare (num1 operator num2): ";
Number * pnum1 = new Number;
cin >> *pnum1;
char op;
cin >> op;
Number * pnum2 = new Number;
cin >> *pnum2;

Number * presult = new Number;
switch (op)
{
case '+':
{
*presult = *pnum1 + *pnum2;
break;
}
}

cout << *pnum1 << op << *pnum2 << "=" << *presult << "\n";
system("pause");
return 0;
}

Nahlásit jako SPAM
IP: 217.73.16.–
Zelenáč0
Posthunter
12. 1. 2008   #15
-
0
-

To Chrasty : Jasně, že "halda" znám (i když pokud to jde, používám heap - halda je taková moc infantilní :-)..

Nahlásit jako SPAM
IP: 89.176.254.–
12. 1. 2008   #16
-
0
-

To AdamHlavatovic : Jooo, nevšiml jsem si toho ";", ale teď už sčítání krásně funguje... ještě jednou děkuji, moc si mi pomohl ;)

Nahlásit jako SPAM
IP: 62.240.190.–
12. 1. 2008   #17
-
0
-

AdamHlavatovic napsal:
To psychofanator : este som zabudol na ; v 16 riadku, teda namiesto } ma bit };

#include 
using std::cin;
using std::cout;
using std::istream;
using std::ostream;

//! dummy number class
class Number
{
private:
double m_num;
public:
Number operator+(const Number & num) const;
friend istream & operator>>(istream & is, Number & num);
friend ostream & operator(istream & is, Number & num)
{
is >> num.m_num;
return is;
}

ostream & operator op;
Number * pnum2 = new Number;
cin >> *pnum2;

Number * presult = new Number;
switch (op)
{
case '+':
{
*presult = *pnum1 + *pnum2;
break;
}
}

cout


Je mi to už trochu blbý ale ještě jedna věc...
Sedím nad tím už několi hodin, experimentuji, když nahradím
všechny "+" za "-" tak to krásně odčítá, ale nedaří se mi to vychytat tak,
aby byl program připraven pro obě varianty -
prostě i když by to podle mě mělo být schopné sčítat nebo odčítat,
tak to pořád jen sčítá....heh

Nahlásit jako SPAM
IP: 62.240.190.–
AdamHlavatovic0
Stálý člen
13. 1. 2008   #18
-
0
-

ved so mate jak na striebornom tace, stacilo tam pretazit ostavajuce operatory -,* a / a do switchu dopisat knim prisluchajuce opearacie, napr. takto

#include <iostream>

#include <limits>
using std::cin;
using std::cout;
using std::istream;
using std::ostream;
using std::numeric_limits;


//! dummy number class
class Number
{
private:
double m_num;
public:
Number() : m_num(0.0) {}
Number(double num) : m_num(num) {}
Number operator+(const Number & num) const {return Number(m_num + num.m_num);}
Number operator-(const Number & num) const {return Number(m_num - num.m_num);}
Number operator*(const Number & num) const {return Number(m_num * num.m_num);}
Number operator/(const Number & num) const;
friend istream & operator>>(istream & is, Number & num);
friend ostream & operator<<(ostream & os, const Number & num);
};

Number Number::operator/(const Number & num) const
{
if (num.m_num == 0.0)
return Number(numeric_limits<double>::signaling_NaN());
else
return Number(m_num / num.m_num);
}
istream & operator>>(istream & is, Number & num)
{
is >> num.m_num;
return is;
}

ostream & operator<<(ostream & os, const Number & num)
{
os << num.m_num;
return os;
}


int main(int argc, char * argv[])
{
cout << "zadaj kupecky pocet v tvare (num1 operator num2): ";
Number * pnum1 = new Number;
cin >> *pnum1;
char op;
cin >> op;
Number * pnum2 = new Number;
cin >> *pnum2;

Number * presult = new Number;
switch (op)
{
case '+':
{
*presult = *pnum1 + *pnum2;
break;
}

case '-':
{
*presult = *pnum1 - *pnum2;
break;
}

case '*':
{
*presult = *pnum1 * *pnum2;
break;
}

case '/':
{
*presult = *pnum1 / *pnum2;
break;
}
}

cout << *pnum1 << op << *pnum2 << "=" << *presult << "\n";
system("pause");
return 0;
}

Nahlásit jako SPAM
IP: 217.73.16.–
tmi0
Věrný člen
13. 1. 2008   #19
-
0
-

drobne dodatky: nevim jak je to mozne, ale v souvislosti s prostorem pro alokaci pameti casteji slychavam termin "hromada", zatim co v souvislosti se datovou strukturou spise termin "halda", ackoli v anglictine se oboji souhrnne nazyva "heap".

Zelenáč napsal:
:-O Co to jsou dynamické objekty?


dynamicky objekt jsem sice nikdy neslysel ale nevidim na tom nic zvlastniho. v programovani obecne byva termin "dynamicky"
spojen s dynamickou alokaci pameti, at uz se jedna o cokoli, a objekt je obecne souhrn promenych a metod. podle fungujiciho principu kompozice adjektivum-substantivum si dam dohromady "dynamicky alokovany souhrn promenych a metod".

Nahlásit jako SPAM
IP: 89.185.230.–
ksp.mff.cuni.cz -- doporučuje 5 z 0 přetečených bufferů!
Zelenáč0
Posthunter
13. 1. 2008   #20
-
0
-

To tmi : Ale pro jistotu se zeptam, abych priste mohl hrat toho chytryho ja ;-)

Nahlásit jako SPAM
IP: 89.176.254.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 26 hostů

Moderátoři diskuze

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý