souhrn otazek :)

David
Matfyz(ák|ačka) level II
Příspěvky: 80
Registrován: 7. 11. 2004 18:57
Typ studia: Informatika Bc.
Kontaktovat uživatele:

Příspěvek od David »

Mam takove tuseni, ze jde o tohle:
otazka:
jaky je nejvhodnejsi operator+= pro Complex

[A] Complex operator+=(const & Complex)
Complex& operator+=(const & Complex)
[C] Complex& operator+=(const & Complex, const & Complex)
[D] Complex& operator+=(const & Complex, const & Complex) const


odpoved:

* nedostupna data byla korektne destruovana a odalokovana
* ukazatele nemiri na odalokovana data
* plati dalsi invarianty dane logikou aplikace

(ze slidu)


Ja bych typnul . Ale nejsem zadny c++ guru..
Uživatelský avatar
hippies
Admin(ka) level I
Příspěvky: 990
Registrován: 29. 9. 2004 12:46
Typ studia: Informatika Mgr.
Bydliště: Mladá Boleslav
Kontaktovat uživatele:

Příspěvek od hippies »

David píše:Mam takove tuseni, ze jde o tohle:
Tvé tušení je správné, odpověď bohužel posoudit nemohu, ni já nejsem guru:)
Uživatelský avatar
Tuetschek
Supermatfyz(ák|ačka)
Příspěvky: 657
Registrován: 15. 6. 2005 13:54
Typ studia: Nestuduji ale učím na MFF
Kontaktovat uživatele:

Příspěvek od Tuetschek »

Myslim ze na tohle tema se uz vedla debata o stranku vedle :)
http://forum.matfyz.info/viewtopic.php?t=1274
Plug 'n' Pray.
David
Matfyz(ák|ačka) level II
Příspěvky: 80
Registrován: 7. 11. 2004 18:57
Typ studia: Informatika Bc.
Kontaktovat uživatele:

Příspěvek od David »

class SStk
{
public:
/* ... */
void push(const std::string & s);
private:
std::string * p_;
int allocated_, used_;
};

void SStk::push (const std::string & s)
{
[1] if (used_ >= allocated)
[2] {
[3] int n2 = (allocated_ +1) * 2;
[4] std::string * p2 = new string[n2];
[5] for(int i = 0; i < used_; ++i)
[6] p2 = p_;
[7] delete[] p_;
[8] p_ = p2;
[9] allocated_ = n2;
[a] }
p_[used_] = s;
[c] ++used_;
}

Na kterych radcich muze byt vyvolana vyjimka?
odpoved:
4, 6, b
(4 - pro nedostatek pameti. 6 - to, ze jsme zvetsili alokovanou pamet dvakrat jeste neznamena, ze je vetsi nez used; navic opet muze spadnout pro nedostatek pameti (volani copy konstruktoru operatorem =, tedy alokace pameti). b - vubec nezkoumame velikost s; opet alokujeme pamet v copy konstruktoru)
otazka:
Pokud nastane vyjimka:

[A] zanecha zasobnik v nezmenenem stavu
muze zpusobit ztratu (nedostupnost) alokovane pameti
[C] muze zanechat zasobnik v nekonzistentnim stavu, ktery muze zpusobit behovou chybu


odpoved:
B, C
(na foru se objevil clovek, kteremu bylo zatrzene C pocitano jako chyba :( B - napriklad pokud spadneme na 4; C - pokud spadneme treba na radku 6. pred tim jsme alokovali misto pro string p2. pri padu ale tuhle pamet neuvolnime a me prijde, ze to koliduje s prvnim bodem v 'definici' konzistence a to je "nedostupna data byla korektne destruovana a odalokovana")


Podle me je C spatne. - Vyjimka na radku 6 sice zanecha zasobnik v nekonzistentnim stavu, ale ne v takovem, ktery muze zpusobit behovou chybu. (nemam tam zadny ukazatel, ktery ukazuje na odalokovanou pamet, takze to nespadne).

Je pravda, ze tohle je jen takove slovickareni. Ale zase muset se pak kvuli tomu hadat z clovekem, ktery to opravuje -> Bednarkem -> dekanem -> ...
BB

Příspěvek od BB »

Já teda taky nejsem žádnej C++ guru, ale víc těch odpovědí se mi zdá přinejmenším podeřele odůvodněných. Každopádně děkuji za souhrn přibližných verzí zadání. Je příjemné mít všechno na jednom místě. Ty podezřelý odpovědi člověka aspoň donutěj, aby se nad tím zamyslel :wink: Snad mi to zítra k něčemu bude...

PS: Asi by trochu usnadnilo orientaci, kdyby ty příklady byly očíslovaný.
Odpovědět

Zpět na „2005“