Avatar
Richard
Člen
Avatar
Richard :

Ahoj, dostal jsem zadání na pohovoru, viz přílohy. Moje otázka zní co bylo špatně? Jsem začínající programátor a nedává mi to logiku. Soubor vždy obsahuje zadání a moje řešení.
Vše dle mně funkční. Zdorjové kody u profilu: 1 - 3

 
Odpovědět 25. května 14:39
Avatar
Odpovídá na Richard
Michael Škrášek:

To co jsem pochopil jsem se snažil opravit (tak jak bych to udělal já).

1. Vůbec ti nepřijde divný, že převádíš na string a potom zase na int (2x) ...

//return int.Parse(o.ToString());
return (int)o;

2. Na to se dá použít funkce Join

public string Concat(string[] lines)
{
    /*
    string result;
    for(int i = 0; i < lines.Length; i++)
    {
        result += lines[i];
    }
    return result;
    */
    return string.Join("", lines);
}
Nahoru Odpovědět 25. května 16:48
Proč to dělat složitě, když to jde jednoduše.
Avatar
Odpovídá na Michael Škrášek
Ondřej Štorc:

Ta dvojka by šla jeste vylepšit takto:

If(o is int) return (int)o;
return 0;

A vyhnes se tím try catchi.

Nahoru Odpovědět  +2 25. května 19:34
Život je příliš krátký na to, abychom bezpečně odebírali USB z počítače..
Avatar
Jan Vargovský
Redaktor
Avatar
Odpovídá na Richard
Jan Vargovský:

1.
Neodpověděl jsi na druhou část otázky. Nechce se mi momentálně uvažovat jak je to s pravděpodobnostmi těch čísel.

2.
Měl napsat seznám problémů - napsal jsi tam problémy akorát u svého "zrefaktorovaného" kódu.
U concatu si nemůžu všimnou co jsi tam vůbec upravil. null + string je vždycky string. Ve skutečnosti po tobě chtěli asi optimalizaci na StringBuilder.

Michael Škrášek ten string.Join je overkill na tohle, když bys přičítal "" n-1 krát.

3.
Faktorial je na přirozených číslech, není potřeba používat jakékoliv FP. Nemáš ošetřené ani všechny vstupy.

Obecně se mi nelíbí vůbec tvůj styl jakým píšeš. Nedodržuješ konvence. Píšeš tam konstrukce, které jsou zbytečné. Chce to ještě pár stovek hodin něco naprogramovat, pak se můžeš podívat zpětně, jestli najdeš nějaké chyby.

Editováno 25. května 20:27
 
Nahoru Odpovědět  +1 25. května 20:26
Avatar
Petr Čech (czubehead):

3.
Nemáš ošetřená záporná čísla, ideálně by měla házet vyjímku
U faktoriálu není double ani int vhodný návratový typ. Double ne, protože vždy vrací přirozené číslo a int ne, protože může snadno dojít k přetečení. Lepší je použití BigInt.
pozn.: použití rekurze je v tomto případě docela elegantní řešení.

Nahoru Odpovědět  -1 26. května 19:01
Why so serious? -Joker
Avatar
Jan Vargovský
Redaktor
Avatar
Odpovídá na Petr Čech (czubehead)
Jan Vargovský:

Faktoriál rekurzí je elegantní možná tak při ukazování co to rekurze je.

 
Nahoru Odpovědět  +1 26. května 23:30
Avatar
Taskkill
Redaktor
Avatar
Odpovídá na Jan Vargovský
Taskkill:

Takže tazateli vzkazuješ, aby příště použil cyklus že ano?

 
Nahoru Odpovědět 27. května 0:49
Avatar
Jan Vargovský
Redaktor
Avatar
Odpovídá na Taskkill
Jan Vargovský:

Vždyť on ho použil, tak co mas za problem?

 
Nahoru Odpovědět 27. května 6:38
Avatar
Taskkill
Redaktor
Avatar
Odpovídá na Jan Vargovský
Taskkill:

Problém? :-) To jsme se nepochopili, reagoval jsem na to jak jsi tvaroval svou odpověď, tedy, že rekurze se na faktoriál computaci nehodí... souhlasím, ale když si to přečte nějaký začátečník (jakože určitě přečte) jak bude vědět co tedy použít? No tak jsem to zmínil jako reakci ... teď už je to naprosto jasný každýmu kdo si to přečte... btw v C# neprogramuju, takže jsem jeho zdrojáky vůbec neviděl ... je to čistě algoritmický problém, takže mi to vůbec nevadí.

Jen jsem tím přišel o informaci, že OP cyklus použil, trochu to z předešlé konverzace vyznělo že použil rekurzi.

Takže žádný problém :-)

 
Nahoru Odpovědět 29. května 5:06
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.