Stránka 1 z 2

souhrn otazek :)

Napsal: 31. 1. 2006 19:08
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

Napsal: 31. 1. 2006 21:15
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

Napsal: 31. 1. 2006 21:24
od socketka
ok, opravim, dekuju :) asi to tak bude

ještě jedna věc

Napsal: 31. 1. 2006 21:43
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ší.

Napsal: 31. 1. 2006 22:18
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:

re jipi

Napsal: 1. 2. 2006 08:39
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? :)

Napsal: 1. 2. 2006 09:57
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.

Napsal: 1. 2. 2006 10:06
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

Re: re jipi

Napsal: 1. 2. 2006 10:32
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.....

Napsal: 1. 2. 2006 14:50
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).

Napsal: 1. 2. 2006 15:53
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... :?: :?: :?:

Napsal: 1. 2. 2006 16:50
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

Napsal: 1. 2. 2006 17:11
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ý)

chyba

Napsal: 1. 2. 2006 19:25
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

Re: chyba

Napsal: 1. 2. 2006 20:06
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?