Diskuze: Opakování

C# .NET .NET (C# a Visual Basic) Opakování American English version English version

Avatar
Energy
Člen
Avatar
Energy:

Zdravím mám problém s tímto:

if (odpoved == "1")
{
                string dotaz = Console.ReadLine();



              if (dotaz == "otazka")
                {
                    Console.WriteLine("odpoved");
                }

              if (dotaz == "otazka1")
                {
                    Console.WriteLine("odpoved1");
                }

}

V kodu problém není, ale chci aby se při zodpovězení otázky přehodilo zpátky na příkaz. Vím jak to udělat jen přes cyklus do kterého ješte musíte něco napsat. Díky za odpověď.

 
Odpovědět 12.6.2012 18:35
Avatar
Energy
Člen
Avatar
Energy:

Zapomněl jsem dodat že chci přehodit zpět na dotaz hned jak bude dotaz zadán.

 
Nahoru Odpovědět 12.6.2012 18:37
Avatar
David Čápka
Tým ITnetwork
Avatar
Nahoru Odpovědět 12.6.2012 19:01
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
Avatar
Energy
Člen
Avatar
Energy:

Pročetl jsem to znovu ale myslím že s toho tutorialu nedokážu pochopit jak to udělat. V kalkulačce je while cysklus ale s proměnnou kterou musíte potvrdit "Přejete si zadat další příklad? [ano/ne]". Potřebuji to udělat bez toho. A nevím jak na to.

 
Nahoru Odpovědět 12.6.2012 19:58
Avatar
Energy
Člen
Avatar
Energy:

Jen co zadáte string dotaz se vypise a současně vrátí k proměnne dotaz.

 
Nahoru Odpovědět 12.6.2012 20:03
Avatar
Odpovídá na Energy
David Jančík [sczdavos]:

Cyklus se provádí dokud je platná podmínka. Pokud chceš infinity použij while (true). Z cyklu pak můžeš vyskočit pomocí break;

Nahoru Odpovědět 12.6.2012 20:22
Čím více času dostaneš, tím méně ho máš.
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na Energy
David Čápka:

Moc nerozumím, čemu nerozumíš, tutoriál vše jasně vysvětluješ. Pokud chceš něco opakovat, vlož to do cyklu. Pokud ti nevyhovuje podmínka v kalkulačce, dej si tam jinou podmínku. Četl jsi předešlé tutoriály? Samozřejmě na sebe navazují.

Nahoru Odpovědět 12.6.2012 20:28
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na David Jančík [sczdavos]
David Čápka:

Tohle bych tu vůbec nevytahoval, ještě to někdo bude používat. While true je spíše vtip.

Nahoru Odpovědět 12.6.2012 20:28
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
Avatar
Odpovídá na David Čápka
David Jančík [sczdavos]:

Proč? Někdy se to hodí. Když něco testuješ třeba máš vlákno a chceš něco pořád opakovat po určitých intervalech. Thread.Sleep(1000);

Používá se více než for (;;). Možná kvůli definici, že for má být cyklus s předem daným počtem opakováním.

http://stackoverflow.com/…nfinite-loop

Ikdyž není vhodné toto používat v programech nebo ukázkových kódech určitě si to najde využití pro testovací účeli, práci s vlákny a nevím kde ještě.

Neviděl bych jako problém to použít.

Nahoru Odpovědět 12.6.2012 20:37
Čím více času dostaneš, tím méně ho máš.
Avatar
Kit
Redaktor
Avatar
Odpovídá na David Jančík [sczdavos]
Kit:

Nekonečné cykly nejsou dobrou vizitkou programátora. Svědčí o tom, že uvažuje příliš imperativně s nízkou úrovní abstrakce.

Nahoru Odpovědět 12.6.2012 20:44
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Odpovídá na Kit
David Jančík [sczdavos]:

Nikdy jsem nekonečný cyklus nepoužil. Ani jsem jej nepotřeboval. Jak jsem již zmínil, ve výsledném programu či ukázkovém kódě se tohoto vyvarovat.

Chápu, že jsem to nevhodně sdělil a vyznělo to, že lze touto cestou jít. To ne. Jen si stojím za názorem, že pokud chci něco rychle otestovat toto použít pro svůj účel mohu.

Uvedu příklad. Chci na vlákně spustit v určitém intervalu nějakou metodu a dívat se na její výstup. Prioritní pro mě je odladit metodu a pak až se věnovat jejímu použití.

Tak si vytvořím vlákno, na něm si dám cyklus a v něm budu volat metodu a Thread.Pause(x);
A nemusím hledat a nastavovat timer.

Nahoru Odpovědět 12.6.2012 20:56
Čím více času dostaneš, tím méně ho máš.
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na David Jančík [sczdavos]
David Čápka:

Psát dobře bys měl vždy, i když testuješ, i když píšeš jen utilitku na jedno použití, i když píšeš pro sebe nebo pro zaměstnavatele. Nikdy nevíš, kdy to tam zapomeneš.

Nahoru Odpovědět 12.6.2012 21:00
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
Avatar
Kit
Redaktor
Avatar
Odpovídá na David Jančík [sczdavos]
Kit:

Při vývoji metodou TDD je v testech povoleno vše, tedy i nečisté praktiky.

Ovšem správně napsaný kód nebývá delší, než "nečistý". Je dobré dodržovat stále stejnou kulturu programování, i když na ní v daném případě moc nezáleží. Je to spíš otázkou duševní hygieny než nějakého dogmatu.

Nahoru Odpovědět 12.6.2012 21:08
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Energy
Člen
Avatar
Odpovídá na Energy
Energy:

Ale já bych chtěl, aby se to hned po zadání proměnné dotaz zase přesunulo zpátky na dotaz. Nevím jakou podmínku tak mám dát.

 
Nahoru Odpovědět 12.6.2012 21:08
Avatar
Odpovídá na David Čápka
David Jančík [sczdavos]:

To je pravda. Ovšem nechápu, proč na tolika fórech přímo o C# jsou uváděny ukázky s nekonečnými cykly. Osobně jsem je nikdy neměl potřebu použít ani pro testovací účely. Ovšem myslel jsem, že to není problém. Teď již chápu, že ta tuna balastu na internetu z programátorů dělá prasata.

Nahoru Odpovědět 12.6.2012 21:09
Čím více času dostaneš, tím méně ho máš.
Avatar
Energy
Člen
Avatar
Energy:

Cyklus od sczdavose true mi nejspíš nepomůže.

 
Nahoru Odpovědět 12.6.2012 21:10
Avatar
Odpovídá na Energy
David Jančík [sczdavos]:

V tom případě.

while (odpoved != "")

Dokud uživatel nezadá prázdný řetězec.

Nahoru Odpovědět 12.6.2012 21:10
Čím více času dostaneš, tím méně ho máš.
Avatar
Kit
Redaktor
Avatar
Odpovídá na Energy
Kit:

Zamysli se nad tím, jak chceš ten cyklus ukončit. Nulou, novým řádkem, Ctrl-D,... To budeš testovat ve funkci, která čte vstup a kterou vložíš do podmínky while. Najednou to bude vypadat hezky: Dokud mám vstupní data, provádím cyklus.

Nahoru Odpovědět  +1 12.6.2012 21:19
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Energy
Člen
Avatar
Energy:

No ale odpoved je to co se uživateli vypíše. Má to být takový jednoduchý chatbot. Mám tam otazku kterou položí uživatel a odpoved kterou předloží aplikace. A po zadani a vypsní se má přesunou zase na

string dotaz = Console.ReadLine();
 
Nahoru Odpovědět 12.6.2012 21:21
Avatar
Kit
Redaktor
Avatar
Odpovídá na Energy
Kit:
while ((string dotaz = getDotaz()) != "konec")
{
   odpovez(dotaz);
}
Nahoru Odpovědět 12.6.2012 21:28
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Energy
Člen
Avatar
Odpovídá na Kit
Energy:

Tohle mám dat místo if? Omlouvám se ale ty cykly mi nějak nesedly.

 
Nahoru Odpovědět 12.6.2012 22:02
Avatar
Odpovídá na Energy
David Jančík [sczdavos]:

Myslím, že by jsi měl začít s tím C# pěkně popořadě. Číst a zkoušet ;)

Nahoru Odpovědět 12.6.2012 22:06
Čím více času dostaneš, tím méně ho máš.
Avatar
Kit
Redaktor
Avatar
Odpovídá na Energy
Kit:

V podstatě ano. A nezapomeň si k tomu dopsat metodu getDotaz(). Pokud bych zůstal u prvního příkladu, tak by to mohlo vypadat třeba takto:

while((dotaz=Console.ReadLine())!=""){
   if (dotaz=="otazka")
      ...
}

Budeš psát Elizu?

Nahoru Odpovědět 12.6.2012 22:11
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Kit
Redaktor
Avatar
Odpovídá na David Jančík [sczdavos]
Kit:

Mně cykly také moc nesedí. Zejména počítané se často používají i tam, kde být nemají.

Dnešní programovací jazyky obsahují dostatek syntaktického cukru na to, aby se cykly nepoužívaly skoro vůbec.

Nahoru Odpovědět  +1 12.6.2012 22:16
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Odpovídá na Kit
David Jančík [sczdavos]:

Když o tom tak přemýšlím, pokud píši aplikaci úhledně a dodržuji oop standardy, nemám potřebu je použít. Ostatně ani nepamatuji, kdy jsem nějaký naposledy použil. Jak říkáš, syntaktického cukru je již opravdu dostatek. Když chci například něco provést při určité události, využiji event. Událost se klidně může opakovat.
Pokud chci například naplnit pole také nemusím použít cyklus. Vytvořím kolekci položek a tu pak předám jako celek.
Vlastně bych řekl, že když program obsahuje více cyklů, že to není moc ok, nemluvě o vnořených cyklech.

Typuji, že většinou jsou používány pro neznalost jazyka. Kdo jej zná, použije optimalizovanou metodu.

Nahoru Odpovědět 12.6.2012 22:21
Čím více času dostaneš, tím méně ho máš.
Avatar
Kit
Redaktor
Avatar
Odpovídá na David Jančík [sczdavos]
Kit:

Odvyknutí od cyklů má ještě jeden docela pádný důvod. Když před 10 lety bylo obvyklé, že procesor měl jen jedno jádro, tak to bylo vcelku jedno. Dokonce cykly byly efektivnější, než jiné konstrukce. Dnes, kdy i mobilní zařízení mívá vícejádrové procesory, se situace dost mění.

Počítaný cyklus se totiž nedá paralelizovat - není možné vnitřek cyklu spustit na více jádrech současně, protože jednotlivá vlákna jsou svázána řídící proměnnou. Nemohou tedy běžet nezávisle na sobě. Proto všechny moderní jazyky nabízí alternativy ve formě map/filter/reduce, které tímto neduhem netrpí. Zatím se to v aplikacích sice moc nevyužívá k výpočtu ve více vláknech, ale s vývojem HW směrem k multijádrovým procesorům je jen otázkou času, kdy využití výkonu všech dostupných jader jedním procesem bude nutností. A to je možné pouze bez počítaných cyklů.

Nahoru Odpovědět 13.6.2012 23:35
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na Kit
David Čápka:

V C# cykly poměrně vyřadil LINQ, což je integrovaný SQL jazyk přímo do syntaxe. Můžu tedy volat ten samý dotaz a je mi úplně jedno, jestli je kolekce pole nebo XML soubor. Přijde mi to dost šikovné, stále to optimalizovávají a má to taky paralelní běh.

Cykly však IMHO své postavení v programování neztratí, stále je mnoho případu, kdy je jednodušší a přehlednější je použít. Určitě bych je nevnímal jako něco špatného.

Nahoru Odpovědět 14.6.2012 13:00
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
Avatar
Kit
Redaktor
Avatar
Odpovídá na David Čápka
Kit:

Cykly se používají na procházení polem. Jenže ne každé pole je polem podle definice. Velmi často jsou to seznamy, na kterých by se neměly používat cykly, ale funkce pro práci se seznamy.

Takže místo obvyklého

for i in 0..size(pole)-1
   if(pole[i]%2==1)
      print pole[i]

raději

print reduce(filter(pole,licha))," ")

Nehledejte v tom syntaxi konkrétního jazyka.

Nahoru Odpovědět 15.6.2012 15:14
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
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 28 zpráv z 28.