NOVINKA! E-learningové kurzy umělé inteligence. Nyní AI za nejlepší ceny. Zjisti více:
NOVINKA – Víkendový online kurz Software tester, který tě posune dál. Zjisti, jak na to!

Diskuze: Prosím o kontrolu otázek a odpovědí

V předchozím kvízu, Online test znalostí C++, jsme si ověřili nabyté zkušenosti z kurzu.

Aktivity
Avatar
Jirka
Člen
Avatar
Jirka:1.1.2018 11:21

Ahoj,
chtěl bych poprosit, zda by se tu našel někdo, kdo by mi pomohl zkontrolovat následující otázky. V rámci zkoušky máme do školy udělat ještě pár testů, ale u některých odpovědí si nejsem zcela jist. V testu se odečítají body za špatné odpovědi, což je troch kámen úrazu :(. Své odpovědi jsem zapsal vždy za položenou otázku.

  1. Které funkce jsou syntakticky správně? - zaškrtl jsem všechny
  1. int fce(int a) { }
  2. int fce(int a) { return; }
  3. int fce(int a) { return 0;}
  4. void fce(int a) { }
  5. void fce(int a) { return 0;}
  6. void fce(int a) { return; }
  1. Které zápisy jsou syntakticky správně? - zaškrtl jsem a, f, e (tady si nejsem jist zda mám za syntaktickou chybu považovat nenadeklarovanou hodnotu b neboť tam kód není vypsán celý, ale možná je to právě chyba)
  1. int a; int b; // středník
  2. int a=b=5;
  3. int a;b; // středník
  4. int a; int b; a=b=5; // středník
  5. int a;b=4; // středník
  6. int a,b; // čárka
  7. int a,b=4; // čárka
  1. While - zde si nejsem jist dvěma tečkami. Vybral jsem b.

int a = 2; int b = 3;
switch (a) {
case 1..4: b = 2;
case 5: b = 5;
}

  1. vypsat hodnotu proměnné b
  2. případně tam může být syntaktická chyba
  3. hodnotu nelze určit
  1. Parametry programu - Zde jsem vybral, že hodnotu nelze určit. Příkazy jsem zatím nijak nestudoval, takže s nimi nemám žádné zkušenosti. Tady fakt nevím.

Program je volán z příkaz. řádky: program.exe -n 15 -s soubor.txt

kus kódu:
int a = 0; a = argc;

  1. urči hodnotu a
  2. hodnotu nelze učit
  3. syntaktická chyba
  1. Jak se nazývá tato typová konstrukce? - Zde jsem vybral a. Mělo by to být pole 10ti ukazatelů na int, je to tak?

int * a[10];

  1. žádná z uvedených
  2. pole ukazatelů na funkci
  3. pole ukazatelů
  4. funkce vracející ukazatel
  5. ukazatel na funkci

Otázek je tam ve finále asi 50x tolik, většinou se příliš neliší. Psát je sem nebudu, poprat se s tím musím primárně sám, ale toto mi přišlo vybrat jako nejvhodnější. Testy se mi daří dělat na přes 50% bodů (včetně toho že se mi špatné odpovědi bodově odečítají), ale chtěl bych se dostat alespoň přes 60% k 70%.
Něco se dá vygooglit, k něčemu jsem došel logicky, ale taky se mi nedaří najít úplně vše.
Kdyby se tu našel někdo hodnej kdo by mi toto zkontroloval, tak budu moc rád :).
Děkuju.

 
Odpovědět
1.1.2018 11:21
Avatar
Petr Čech
Tvůrce
Avatar
Odpovídá na Jirka
Petr Čech:1.1.2018 12:05

A proč si nenapíšeš ty otázky na syntaxi do nějakého IDE, co ti řekne, jestli to je validní syntaxe (něco, co to skutečně analyzuje, ne třeba Netbeans :-` ) ? ;)
Co si budeme povídat, syntaxe C (především tedy deklarace typů a proměnných) je přinejlepším dost nešťastná a nejlepší je to zkusit :D

Editováno 1.1.2018 12:07
Nahoru Odpovědět
1.1.2018 12:05
the cake is a lie
Avatar
David Novák
Tvůrce
Avatar
David Novák:1.1.2018 12:15

1 - pouze c, d, f
2 - a, d, f, g
3 - AFAIK C nezná 1..4 (to je pascalovská konstrukce), takže je to syntax chyba.. Kromě toho tam chybí break, takže b ani nemůže být 2, protože se hned následně vykoná b = 5
4 - hodnota a je 5 (argc = argument count).. záleží ovšem na tom, jestli tam je napsána i definice fce main, kde to musí být uvedeno jako argument - main(int argc, char **argv), jinak je argc samozřejmě nedefinován.
5 - a by mělo být správně.. Jinak na deklarace se docela hodí https://cdecl.org/ ;)

Zkus do odpovědi rozepsat všechny kódy v otázkách - co dělají.. Zřejmě některé věci nevíš nebo jsi je špatně pochopil :)

Nahoru Odpovědět
1.1.2018 12:15
Chyba je mezi klávesnicí a židlí.
Avatar
Jirka
Člen
Avatar
Odpovídá na Petr Čech
Jirka:1.1.2018 12:15

Ahoj, taky jsem to zkoušel :). Já si třeba nejsem jist u toho příkladu č. 2. Ono to zapsat do VS pomůže, ale pořád jsou tam otázky, kde mi VS moc nepomůže :(

 
Nahoru Odpovědět
1.1.2018 12:15
Avatar
David Novák
Tvůrce
Avatar
David Novák:1.1.2018 12:18

Jinak předpokládám, že "syntakticky správně" == odpovídá normě... Některé překladače ti některé syntaktické chyby hodí jako warning (třeba chybějící return ve funkci co něco vrací.. tu také záleží jaký standard - dřívější tuším vrátily nějakou default hodnotu, takže return nebyl vyžadován, od C99 nebo C11 je to ale AFAIK povinné).

Nahoru Odpovědět
1.1.2018 12:18
Chyba je mezi klávesnicí a židlí.
Avatar
Jirka
Člen
Avatar
Odpovídá na David Novák
Jirka:1.1.2018 12:23

Děkuju moc za odpovědi. Zkusím to ještě trochu vypilovat a kdyžtak bych se ozval :-).

 
Nahoru Odpovědět
1.1.2018 12:23
Avatar
DarkCoder
Člen
Avatar
Odpovídá na Jirka
DarkCoder:1.1.2018 14:34

Špatně, ty musíš chtít dělat testy na 100%.
Dále musíš být schopen své odpovědi vždy obhájit a vysvětlit.
Znění některých otázek je neúplně a ty musíš vysvětlit pro co to platí a pro co ne.

Odpovědi.
1a) špatně - funkce musí vracet hodnotu
1b) špatně - návratová hodnota není definována (varování)
1c) správně
1d) správně
1e) špatně - void nesmí vracet hodnotu
1f) správně

2a) správně
2b) špatně
2c) špatně
2d) špatně - vně funkce, správně - uvnitř funkce (a=b=5; je brán jako přiřazovací příkaz nikoli definice)
2e) špatně - (neúplná deklarace)
2f) správně
2g) správně

3b) špatně - neplatný zápis case
PS: příkaz break není povinný ve switch. Avšak je třeba myslet na to že je-li vynechán, pokračuje zpracování programu do dalšího case nebo default (pokuď existují).

  1. dle parametru funkce main()

    4a) pokud int main(int argc, char *argv[])

    4c) v ostatních případech (neznámý idetifikátor)

5c) a je deklarováno jako desetiprvkové pole ukazatelů na typ int

Překladače bývají občas velmi horlivé v případě výpisu chybových hlášek (dle úrovně). :-)

Nahoru Odpovědět
1.1.2018 14:34
"I ta nejlepší poučka postrádá na významu, není-li patřičně předána." - DarkCoder
Avatar
Jirka
Člen
Avatar
Jirka:1.1.2018 16:11

Ahoj, děkuju za vysvětlení.
Ještě mi trochu dala zabrat otázka na označení pravdivých tvrzení. Myslím že jsem tam napoprvé nasekal chyby a strhlo mi to dost bodů - Podruhé jsem vybral C, D, E, F, G, H.

  1. Žádné tvrzení není pravdivé
  2. Proměnná se může jmenovat stejně, jako je název nějaké funkce. Výjimku tvoří pouze název fce, ve které je proměnná deklarována a také fce main.
  3. Lokální proměnná se může jmenovat stejně jako formální parametr fce, ve které je deklarována.
  4. Lokální proměnná má vždy počáteční hodnotu 0, pokud při deklaraci neuvedeme jinak.
  5. Lokální proměnná se může jmenovat stejně jako nějaká globální proměnná.
  6. Lokální proměnná funkce se může jmenovat stejně jako skutečný parametr fce, ve které je deklarována.
  7. Dvě různé fce mohou mít lokální proměnnou stejného jména.
  8. Globální proměnná má vždy počáteční hodnotu 0, pokud při deklaraci neuvedeme jinak.

Zkoušel jsem to vše kompilovat a vyšlo mi to takto. Googlení tohohle v mém případě bohužel moc úspěšné nebylo, tak jsem to nasimuloval a nevyhazovalo mi to chyby, tak snad to bylo správně.

 
Nahoru Odpovědět
1.1.2018 16:11
Avatar
DarkCoder
Člen
Avatar
Odpovídá na Jirka
DarkCoder:1.1.2018 18:50
  1. NE
  2. NE - dochází k duplicitě jmen, program se nepřeloží.
  3. NE - formální parametr je jistý druh lokální proměnné kde její funkce je převzít hodnotu argumentu předávaného funkci, dochází k duplicitě jmen, program se nepřeloží
  4. NE - některé překladače to dělají, ale nedá se to zaručit. Neinicializovaná lokální proměnná obsahuje náhodnou hodnotu.
  5. ANO - Pokud existuje lokální proměnná téhož jména jako globální, použije překladač vždy lokální proměnnou. Nedochází ke kolizi jmen.
  6. ANO - skutečný parametr nemá žádný vztah k lokální proměnné uvnitř funkce. Nedochází ke kolizi jmen.
  7. ANO - lokální proměnná existuje pouze v čase vykonávání funkce a není známá vně funkce ve které je definována, tudíž nedochází ke kolizi jmen.
  8. ANO - neinicializovaná globální proměnná je překladačem vždy nastavena na 0.
Akceptované řešení
+20 Zkušeností
+2,50 Kč
Řešení problému
Nahoru Odpovědět
1.1.2018 18:50
"I ta nejlepší poučka postrádá na významu, není-li patřičně předána." - DarkCoder
Avatar
Jirka
Člen
Avatar
Jirka:10.1.2018 21:32

Ahoj, díky všem za pomoc :-)

 
Nahoru Odpovědět
10.1.2018 21:32
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 10 zpráv z 10.