souhrn otazek :)

Odeslat odpověď

Smajlíci
:D :) :( :o :shock: :? 8) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen:

BBCode je zapnutý
[img] je zapnutý
[flash] je vypnutý
[url] je zapnuté
Smajlíci jsou zapnutí

Přehled tématu
   

Rozšířit náhled Přehled tématu: souhrn otazek :)

od BB » 3. 2. 2006 00:19

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ý.

od David » 2. 2. 2006 20:45

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 -> ...

od Tuetschek » 1. 2. 2006 23:34

Myslim ze na tohle tema se uz vedla debata o stranku vedle :)
http://forum.matfyz.info/viewtopic.php?t=1274

od hippies » 1. 2. 2006 22:53

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

od David » 1. 2. 2006 21:40

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..

Re: chyba

od socketka » 1. 2. 2006 20:06

hippies píše:Nejsem si jistý, ale u poslední otázky je ta odpověď podezřelá:)
Možná by neměla být stejná s tou na předchozí otázku, ale prostě jen písmenko A-D
kterou presne mas na mysli?

chyba

od hippies » 1. 2. 2006 19:25

Nejsem si jistý, ale u poslední otázky je ta odpověď podezřelá:)
Možná by neměla být stejná s tou na předchozí otázku, ale prostě jen písmenko A-D

od wintermute » 1. 2. 2006 17:11

Otázka ale nebyla, kdy to může vyvolat výjimku, ale kdy může nastat běhová chyba (= spadne to, pze po prvním insertu jsou všechny iterátory neplatný)

od Návštěvník » 1. 2. 2006 16:50

Tuetschek píše:Ted jsem to prochazel, a napadlo me, jestli tady:
otazka:

f(std::vector<int> v)
{
[A] std::vector<int>::iterator it;
it=std::find(v.begin(), v.end(), 0);
[C] v.insert(it, -1);
[D] v.insert(it+1, 1);
}

na kterych radcich muze nastat vyjimka?
odpoved:
D
(po insertu se vsechny iteratory zneplatni)


nemuze vyvolat vyjimku i [C] - kdyby pri insertu dosla pamet.
Je fakt ze to resim tak trochu od oka, takze kdyby se nasel nekdo normy C++ znaly... :?: :?: :?:


mnooo, to je dobrej dotaz :) v pisemce ale ne - mela jsem tam presne toto a dala jsem jen D a bylo to ok

od Tuetschek » 1. 2. 2006 15:53

Ted jsem to prochazel, a napadlo me, jestli tady:
otazka:

f(std::vector<int> v)
{
[A] std::vector<int>::iterator it;
it=std::find(v.begin(), v.end(), 0);
[C] v.insert(it, -1);
[D] v.insert(it+1, 1);
}

na kterych radcich muze nastat vyjimka?
odpoved:
D
(po insertu se vsechny iteratory zneplatni)


nemuze vyvolat vyjimku i [C] - kdyby pri insertu dosla pamet.
Je fakt ze to resim tak trochu od oka, takze kdyby se nasel nekdo normy C++ znaly... :?: :?: :?:

od Dawe » 1. 2. 2006 14:50

Nevím, jestli je ta věta stejně formulovaná v písemce jako tady, ale podle definice může být konzistentní funkce (apod.) a ne třída (=zásobník).

Re: re jipi

od Almer » 1. 2. 2006 10:32

socketka píše:to s tim nedostatkem pameti jasne, to se taky muze stat, to tam pripisu, dekuju

to [C] mi prijde diskutabilni: protoze rekneme, ze spadneme treba na radku 6. pred tim jsme ala 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". spatne jsem to pochopila? :)
Ja mel tuhle vec na zkousce, a mezi odpovedmi nebylo C, ovsem to neznamena , ze by se to nedalo uhadat.....

od Návštěvník » 1. 2. 2006 10:06

jipi píše:Tak jestli byla konzistentnost definovaná takhkle: "nedostupna data byla korektne destruovana a odalokovana", tak se omlouvám, ten zásobník opravdu v konzistentním stavu nebude.

V mojí písemce byl, ale konzistentní stav definován tak, že allocated určuje počet naalokovaných prvků a used počet použitých. Ztráty paměti se konzistentnost netýkala (asi proto, že na to udělali speciální odpověď B). Pak by C bylo špatně.

Záleží na definici konzistentnosti.
ve slidech je popsana takto:
* nedostupna data byla korektne destruovana a odalokovana
* ukazatele nemiri na odalokovana data
* plati dalsi invarianty dane logikou aplikace

ja to tam zatim necham, ze C je spravne - trosku jsem predelala vysvetleni, odvolala jsem se na tu definici. treba to jednou nekdo rozresi, jak to teda je :) imho je C ok

od jipi » 1. 2. 2006 09:57

Tak jestli byla konzistentnost definovaná takhkle: "nedostupna data byla korektne destruovana a odalokovana", tak se omlouvám, ten zásobník opravdu v konzistentním stavu nebude.

V mojí písemce byl, ale konzistentní stav definován tak, že allocated určuje počet naalokovaných prvků a used počet použitých. Ztráty paměti se konzistentnost netýkala (asi proto, že na to udělali speciální odpověď B). Pak by C bylo špatně.

Záleží na definici konzistentnosti.

re jipi

od socketka » 1. 2. 2006 08:39

to s tim nedostatkem pameti jasne, to se taky muze stat, to tam pripisu, dekuju

to [C] mi prijde diskutabilni: protoze rekneme, ze spadneme treba na radku 6. pred tim jsme ala 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". spatne jsem to pochopila? :)

Nahoru