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
Fórum › C / C++
Jednoduché kupecké počky pomocí dynamických objektů
skuste viacej specifikovat vstup, lebo je rozdiel parsovat nieco taketo op1 + op2, alebo (op1/op2)*op3-(op4*op5)
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 -, *,/
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
To psychofanator : mam tam malu chybu na riadku 18, namiesto
Number::operator+(const Number & num) ma bit
Number Number::operator+(const Number & num)
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
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í.
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.
To Zelenáč : ci je v takejto situacii vhodne pouzit dynaicky alokovane objekty je bezpredmetne, jednoducho to je tak zadane v ulohe a basta
pojem "halda" znáš?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?
halda==(řízená) hromada :-)
jinak dynamické objekty jsem taky nikdy neslyšel
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;
}
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 ;)
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
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;
}
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".
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
[c#] Pohyb objektu pomoci klaves — založil xerwin
Přesunutí objektů pomocí point — založil Gustik
Zaseknutí při přesunu objektu pomocí sleep() — založil Jan Vesely
Vytvoření a přístup k vlastnostem objektů stejného typu pomocí indexů — založil KingScorpion
Kupecké počty — založil Martin
Moderátoři diskuze