souhrn otazek :)

socketka

souhrn otazek :)

Příspěvek od socketka »

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
jipi
Matfyz(ák|ačka) level I
Příspěvky: 15
Registrován: 27. 10. 2004 22:41

Příspěvek od jipi »

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
socketka

Příspěvek od socketka »

ok, opravim, dekuju :) asi to tak bude
jipi
Matfyz(ák|ačka) level I
Příspěvky: 15
Registrován: 27. 10. 2004 22:41

ještě jedna věc

Příspěvek od jipi »

A když už jsem byl v tom, tak jsem kouknul i na ten zbytek:

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 - pro nedostatek pameti; 6 - to, ze jsme zvetsili alokovanou pamet dvakrat jeste neznamena, ze je vetsi nez used; b - vubec nezkoumame velikost s)
4 beru,
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ě :D . 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ší.
Návštěvník

Příspěvek od Návštěvník »

Jakožto dnešní absolvent ještě jednou díky za ten souhrn, kéž by se na každou zkoušku dalo naučit za půl hoďky :twisted:
socketka

re jipi

Příspěvek od socketka »

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? :)
jipi
Matfyz(ák|ačka) level I
Příspěvky: 15
Registrován: 27. 10. 2004 22:41

Příspěvek od jipi »

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.
Návštěvník

Příspěvek od Návštěvník »

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
Uživatelský avatar
Almer
Site Admin
Příspěvky: 686
Registrován: 12. 10. 2004 10:58
Typ studia: Informatika Ph.D.
Bydliště: Mala Strana - 203
Kontaktovat uživatele:

Re: re jipi

Příspěvek od Almer »

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.....
Zakládající člen klubu Ortodoxních Matfyzáků :-D

Jsem LAMER ale neumim se ani podepsat ]:-)
Uživatelský avatar
Dawe
Supermatfyz(ák|ačka)
Příspěvky: 360
Registrován: 12. 10. 2004 12:32
Typ studia: Informatika Mgr.
Bydliště: Doma a nebo na koleji

Příspěvek od Dawe »

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

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... :?: :?: :?:
Plug 'n' Pray.
Návštěvník

Příspěvek od Návštěvník »

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
Uživatelský avatar
wintermute
Matfyz(ák|ačka) level III
Příspěvky: 153
Registrován: 23. 5. 2005 22:06
Typ studia: Informatika Mgr.

Příspěvek od wintermute »

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

chyba

Příspěvek od hippies »

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

Příspěvek od socketka »

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?
Odpovědět

Zpět na „2005“