souhrn otazek :)
souhrn otazek :)
pokusila jsem se udelat jakysi souhr znamych otazek. dat je vsechny na jedno misto a odfiltrovat nepresna zadani a odpovedi.
tady je vysledek, doufam, ze nekomu pomuze
ocenim dalsi priklady, opravy i doplneni
http://s0cketka.php5.cz/skola/pspzzoop.php
tady je vysledek, doufam, ze nekomu pomuze
ocenim dalsi priklady, opravy i doplneni
http://s0cketka.php5.cz/skola/pspzzoop.php
Zkoušku už mám za sebou, a tak jsem jen ze zvědavosti nakoukl na souhrn otázek. A když píšeš, že oceníš připomínky, tak tady jedna je.
Hned druhá odpověď je podle mě blbě zdůvodněná. (Možná, že se pletu a pak se omlouvám). Myslím si, že v tom případě, co tam je, se pozdní vazba vůbec ke slovu nedostane. Zavolá se sice T::f(), ale to se určí už při překladu. y je prostě jenom instance (tzn. ani pointer ani reference) T, tzn. už při překladu se určí, že se volá T::f().
Podle mě je to příklad na to, že se sice zkopírujou položky potomka do předka, ale VMT se nekopíruje
Hned druhá odpověď je podle mě blbě zdůvodněná. (Možná, že se pletu a pak se omlouvám). Myslím si, že v tom případě, co tam je, se pozdní vazba vůbec ke slovu nedostane. Zavolá se sice T::f(), ale to se určí už při překladu. y je prostě jenom instance (tzn. ani pointer ani reference) T, tzn. už při překladu se určí, že se volá T::f().
Podle mě je to příklad na to, že se sice zkopírujou položky potomka do předka, ale VMT se nekopíruje
ještě jedna věc
A když už jsem byl v tom, tak jsem kouknul i na ten zbytek:
ale 6 i b může spadnout ze stejného důvodu jako 4 - nedostatek paměti.
Důvod: V operátoru = se u stringů volá copy constructor a ten alokuje paměť a tím pádem může vyvolat výjimku.
Sice lituju člověka, kterému uznali [C] jako chybu, ale popravdě řečeno se není čemu divit, protože je to opravdu špatná odpověď, protože ať to spadne, kde chce tak ten zásobník zůstane konzistentní (alocated říká kolik je alokováno, used kolik využito).
Ale jinak je supr, že ty odpovědi jsou teď pohromadě . Bude se to daleko líp učit. A jedno varování těch verzí je fakt hafo a zrovna tenhle příklad má opravdu moc variant, co se liší jenom pořadím řádek kódu. A tím pádem se ty odpovědi liší.
Kód: Vybrat vše
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[i] = p_[i];
[7] delete[] p_;
[8] p_ = p2;
[9] allocated_ = n2;
[a] }
[b] p_[used_] = s;
[c] ++used_;
}
4 beru,(4 - pro nedostatek pameti; 6 - to, ze jsme zvetsili alokovanou pamet dvakrat jeste neznamena, ze je vetsi nez used; b - vubec nezkoumame velikost s)
ale 6 i b může spadnout ze stejného důvodu jako 4 - nedostatek paměti.
Důvod: V operátoru = se u stringů volá copy constructor a ten alokuje paměť a tím pádem může vyvolat výjimku.
Sice lituju člověka, kterému uznali [C] jako chybu, ale popravdě řečeno se není čemu divit, protože je to opravdu špatná odpověď, protože ať to spadne, kde chce tak ten zásobník zůstane konzistentní (alocated říká kolik je alokováno, used kolik využito).
Ale jinak je supr, že ty odpovědi jsou teď pohromadě . Bude se to daleko líp učit. A jedno varování těch verzí je fakt hafo a zrovna tenhle příklad má opravdu moc variant, co se liší jenom pořadím řádek kódu. A tím pádem se ty odpovědi liší.
re jipi
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?
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?
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.
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: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.
* 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
- Almer
- Site Admin
- Příspěvky: 686
- Registrován: 12. 10. 2004 10:58
- Typ studia: Informatika Ph.D.
- Login do SIS: lasap4am
- Bydliště: Mala Strana - 203
- Kontaktovat uživatele:
Re: re jipi
Ja mel tuhle vec na zkousce, a mezi odpovedmi nebylo C, ovsem to neznamena , ze by se to nedalo uhadat.....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?
Zakládající člen klubu Ortodoxních Matfyzáků
Jsem LAMER ale neumim se ani podepsat ]
Jsem LAMER ale neumim se ani podepsat ]
- Tuetschek
- Supermatfyz(ák|ačka)
- Příspěvky: 657
- Registrován: 15. 6. 2005 13:54
- Typ studia: Nestuduji ale učím na MFF
- Login do SIS: duseo7af
- Kontaktovat uživatele:
Ted jsem to prochazel, a napadlo me, jestli tady:
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...
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...
Plug 'n' Pray.
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
- wintermute
- Matfyz(ák|ačka) level III
- Příspěvky: 153
- Registrován: 23. 5. 2005 22:06
- Typ studia: Informatika Mgr.
- hippies
- Admin(ka) level I
- Příspěvky: 990
- Registrován: 29. 9. 2004 12:46
- Typ studia: Informatika Mgr.
- Login do SIS: procj4am
- Bydliště: Mladá Boleslav
- Kontaktovat uživatele:
chyba
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
Možná by neměla být stejná s tou na předchozí otázku, ale prostě jen písmenko A-D
-
- Matfyz(ák|ačka) level I
- Příspěvky: 26
- Registrován: 1. 2. 2006 08:52
- Typ studia: Informatika Bc.
- Kontaktovat uživatele:
Re: chyba
kterou presne mas na mysli?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