Test 31.1.2006

Uživatelský avatar
Necroman
Supermatfyz(ák|ačka)
Příspěvky: 459
Registrován: 20. 1. 2005 19:46
Typ studia: Informatika Mgr.
Bydliště: Louny / kolej Jednota, Praha
Kontaktovat uživatele:

Test 31.1.2006

Příspěvek od Necroman »

Dnesni test byl opet na stejne tema, narazil jsem ale na par otazek, ktere tu jeste nebyly:

Kdy se inicializuji nestaticke promenne ve funkci? (opraveno)

Kód: Vybrat vše

Pri vstupu do funkce
Pri prvnim pouziti ve funkci
Pri pruchodu rizeni pres jeji deklaraci [X]
Pri prvnim volani fce
Jaky je nejvhodnejsi operator+= pro Complex
(uz nevim presne ty moznosti, kdyz tak me opravte)

Kód: Vybrat vše

Complex operator+=(const Complex&)
Complex& operator+=(const Complex&) [X]
Complex& operator+=(const Complex&, const Complex&)
Complex& operator+=(const Complex&, const Complex&) const
Oprava, puvodni me odpovedi byly obe spatne, takto je to snad jiz dobre :) :)
Naposledy upravil(a) Necroman dne 2. 2. 2006 12:17, celkem upraveno 2 x.
WANTED:
Dead or Alive
^-^
( ^ )
Schroedinger's Cat
Polik

Příspěvek od Polik »

Ad to prvni - chybi mi tam moznost, kterou jsem vybral ja, tedy proste normalne pri behu programu kdyz narazi na to misto. Nejak se to jmenovalo "kdyz na ni narazi, pri behovem zpracovani" (moje pamet je velmi spatna). Jine chovani by mi nedavalo smysl - muzu chtit objekt zalozit na datech, ktere jsem vytvoril v prubehu funkce, tudiz promennou nelze zkonstruovat drive.

Ad to druhe - afaik z techto moznosti dvojky, += prece bere jen jeden parametr, ktery nebudeme menit, takze const a sami byt const nemuzeme, protoze k sobe neco pricteme.
qwyxyo
Matfyz(ák|ačka) level II
Příspěvky: 51
Registrován: 30. 5. 2005 19:26
Typ studia: Informatika Mgr.
Kontaktovat uživatele:

Uloha so zasobnikom SStk

Příspěvek od qwyxyo »

Mozno ste si vsimli ze tu aj na feare bola uz viackrat spomenuta uloha (kde moze nastat vynimka -> [X]), pri ktorej chcem upozornit na jednu malu malickost... Uvadzam v kode dva rozne zapisy jednej casti kodu...

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) { 
       if (used_ >= allocated) { 
          int n2 = (allocated_ +1) * 2; 
----------------------------------------------------
Verzia 1
[X]     std::string * p2 = new string[n2]; 
----------------------------------------------------
Verzia 2
        std::string * p2 ...          //nieco tu este bolo, ale neviem si spomenut
[X]     p2 = new string[n2]; 
---------------------------------------------------
          for(int i = 0; i < used_; ++i) 
[X]            p_[i] = p2[i]; 
          delete[] p2; 
          p_ = p2; 
          allocated_ = n2; 
       } 
[X]   p_[used_] = s; 
       ++used_; 
    }
A potom v druhej cast je zadanie:
Ak sa vyskytne vynimka co sa s konzistentnym stackom stane?

A. Zanecha zasobnik v nezmenenom stave
B. Moze sposobit stratu (nedostupnost) alokovanej pamate
C. Moze zanechat zasobnik v nekonzistentnom stave, ktery moze (neskor) sposobit behovu chybu

Odpoved: Verzia 1 : iba B; Verzia 2: B aj C !!!

Clovek si to nevsimne a bodiky dole:)
Uživatelský avatar
tutchek
Site Admin
Příspěvky: 795
Registrován: 21. 9. 2004 00:40
Typ studia: Informatika Mgr.
Bydliště: Praha, Bohnice
Kontaktovat uživatele:

Příspěvek od tutchek »

No ja sve reseni hnal vys a vys, az k orlu skalnimu.. malem jsem chtel az k dekanovi, ale u Bednarka se to zarazilo ;))

A ted oc slo

Kód: Vybrat vše

class T
{
public:
   T();
   T(const T &);
   T(int);
}

void f(T p)
{

}

jaky se zavola pro p konstruktor:
[ ] T::T(int)
[ ] Podle parametru p
[X] T::T(const T &)
[ ] T::T()
vyznaceno je vzorove reseni.. no ale ja dal "podle parametru p", protoze prekladac to optimalizuje a prece neudela T(int) --> T(const T&).... mnoo.. dle normz to udela... ale ja uhadal, ze diky tomu ze norma umoznuje tu optimalizaci, tak je spravne i "podle parametru p" - kdzbzste se s tim potkali, tak se nenechte odbyt "vzorovym resenim"

jo a jeste

jaka je nejvhodnejsi forma konstruktoru pro abstraktni tridu:

Kód: Vybrat vše

[ ] public
[X] protected
[ ] private
[ ] zadny
no a tady mi bednarek pri prilezitosti kontroly me stiznosti ubral trestny bod za "zadny", protoze to je prej taky vesmes dobre... opet tedy plati, pokud vite ze jste nenapsali kravinu, odvolavejte se, vyplati se to... me to zlepsilo trojku na dvojku...
exAdmin. Magistr přes umělou inteligenci. Právník přes daně.
Uživatelský avatar
Isidor
Adoptoval Tutcheka
Adoptoval Tutcheka
Příspěvky: 247
Registrován: 8. 12. 2004 23:22
Typ studia: Informatika Mgr.
Bydliště: mám
Kontaktovat uživatele:

Re: Test 31.1.2006

Příspěvek od Isidor »

V otazke s operatorom += bol jeden virtualny, takto:

Kód: Vybrat vše

virtual Complex operator+=(const Complex&)
Complex& operator+=(const Complex&)[X]
Complex& operator+=(const Complex&, const Complex&)
Complex& operator+=(const Complex&, const Complex&) const
A stale nerozumiem, preco by operator += (a tiez =) mal vracat referenciou a nie len hodnotou... :roll:
Inteligentních lidí je menšina. Demokracie je vláda většiny.
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:

Příspěvek od Almer »

tutchek píše:
jaka je nejvhodnejsi forma konstruktoru pro abstraktni tridu:

Kód: Vybrat vše

[ ] public
[X] protected
[ ] private
[ ] zadny
no a tady mi bednarek pri prilezitosti kontroly me stiznosti ubral trestny bod za "zadny", protoze to je prej taky vesmes dobre... opet tedy plati, pokud vite ze jste nenapsali kravinu, odvolavejte se, vyplati se to... me to zlepsilo trojku na dvojku...
To mi jako chces rict, ze by mi mel ubrat dva body? Sem dal zadny a tam mi sebral dva body, a tim sem mel 3, misto 2. a tak sem si nechal dat 4.:((( Dvojku bych bral.
Zakládající člen klubu Ortodoxních Matfyzáků :-D

Jsem LAMER ale neumim se ani podepsat ]:-)
Uživatelský avatar
Hugo
Donátor
Donátor
Příspěvky: 233
Registrován: 2. 6. 2005 13:31
Typ studia: Informatika Mgr.
Bydliště: treti kontejner zleva
Kontaktovat uživatele:

Příspěvek od Hugo »

Isidor: Rekl bych, ze to je proto, ze prirazujes na pravou stranu =
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: Test 31.1.2006

Příspěvek od Almer »

Isidor píše:A stale nerozumiem, preco by operator += (a tiez =) mal vracat referenciou a nie len hodnotou... :roll:
A mohl by si udelat hodnotu neco jako a=b=c ?
Zakládající člen klubu Ortodoxních Matfyzáků :-D

Jsem LAMER ale neumim se ani podepsat ]:-)
Uživatelský avatar
Isidor
Adoptoval Tutcheka
Adoptoval Tutcheka
Příspěvky: 247
Registrován: 8. 12. 2004 23:22
Typ studia: Informatika Mgr.
Bydliště: mám
Kontaktovat uživatele:

Re: Test 31.1.2006

Příspěvek od Isidor »

Almer píše:
Isidor píše:A stale nerozumiem, preco by operator += (a tiez =) mal vracat referenciou a nie len hodnotou... :roll:
A mohl by si udelat hodnotu neco jako a=b=c ?
S vracanim hodnotou mozes urobit a = (b = c)
S referenciou dokonca (a = b) = c a prave to sa mi zda ako dost ObrázekObrázekObrázek
Inteligentních lidí je menšina. Demokracie je vláda většiny.
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:

Příspěvek od Almer »

A neni to kvuli tomu ze to muze prirazovat do predka? jako ze kdyby to bylo neco jako

class U {
/*...*/
}

class T: public U {
/*...*/
}

T x,y
U& z

z = x + y
Zakládající člen klubu Ortodoxních Matfyzáků :-D

Jsem LAMER ale neumim se ani podepsat ]:-)
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 »

Ty prasátka! :lol:
Uživatelský avatar
zapo
Matfyz(ák|ačka) level II
Příspěvky: 64
Registrován: 13. 12. 2004 19:46
Typ studia: Informatika Bc.
Bydliště: VŠK 17. Listopadu
Kontaktovat uživatele:

Příspěvek od zapo »

Almer píše:A neni to kvuli tomu ze to muze prirazovat do predka? jako ze kdyby to bylo neco jako

class U {
/*...*/
}

class T: public U {
/*...*/
}

T x,y
U& z

z = x + y
ach...
1) U& z musi byt nainicializovana
2) to co = v tomto pripade vrati nema sa aj tka zahodi, takze mu jedno co to je
3) to co vrati nema ziaden vplyv na to, co dostane... ;)
@#$%!
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:

Příspěvek od Almer »

OK...uz mlcim....osvetli to nekdo jiny:(
Zakládající člen klubu Ortodoxních Matfyzáků :-D

Jsem LAMER ale neumim se ani podepsat ]:-)
Polik
Matfyz(ák|ačka) level I
Příspěvky: 12
Registrován: 31. 1. 2006 13:10

Příspěvek od Polik »

+= vraci referenci proste proto, ze _muze_. Vzdy je lepsi vratit referenci. Nemusi kvuli tomu vznikat a zanikat tucet objektu.

Samotne + vratit referenci nemuze - vytvorilo novy objekt (sve argumenty zmenit jaksi nesmi), ktery po opusteni funkce zanikne (ci hur - zustane viset nekde v pameti a nikdo se o nej uz nepostara), takze musime kopirovat a kopirovat.

Kdezto += muze vratit samo sebe, protoze ho naalokoval nekdo venku, tudiz vi, ze po opusteni funkce +=() bude dal existovat.
Polik
Matfyz(ák|ačka) level I
Příspěvky: 12
Registrován: 31. 1. 2006 13:10

Příspěvek od Polik »

A odpoved na otazku "Kdy se inicializuji nestaticke promenne ve funkci?" jsem si trochu lepe vybavil: "Pri pruchodu rizeni pres jeji deklaraci" (tohle uz snad plusminus odpovida tomu co tam bylo napsane).
Odpovědět

Zpět na „2005“