IT rekvalifikace s garancí práce. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.
Avatar
Energy
Člen
Avatar
Energy:12.6.2012 18:35

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:12.6.2012 18:37

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 Hartinger
Vlastník
Avatar
Nahoru Odpovědět
12.6.2012 19:01
New kid back on the block with a R.I.P
Avatar
Energy
Člen
Avatar
Energy:12.6.2012 19:58

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:12.6.2012 20:03

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
David Jančík
Vlastník
Avatar
Odpovídá na Energy
David Jančík:12.6.2012 20:22

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
Zapomeň, že je to nemožné a udělej to ;)
Avatar
David Hartinger
Vlastník
Avatar
Odpovídá na Energy
David Hartinger:12.6.2012 20:28

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
New kid back on the block with a R.I.P
Avatar
David Hartinger
Vlastník
Avatar
Odpovídá na David Jančík
David Hartinger:12.6.2012 20:28

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
New kid back on the block with a R.I.P
Avatar
David Jančík
Vlastník
Avatar
Odpovídá na David Hartinger
David Jančík:12.6.2012 20:37

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
Zapomeň, že je to nemožné a udělej to ;)
Avatar
Kit
Tvůrce
Avatar
Odpovídá na David Jančík
Kit:12.6.2012 20:44

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
David Jančík
Vlastník
Avatar
Odpovídá na Kit
David Jančík:12.6.2012 20:56

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
Zapomeň, že je to nemožné a udělej to ;)
Avatar
David Hartinger
Vlastník
Avatar
Odpovídá na David Jančík
David Hartinger:12.6.2012 21:00

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
New kid back on the block with a R.I.P
Avatar
Kit
Tvůrce
Avatar
Odpovídá na David Jančík
Kit:12.6.2012 21:08

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:12.6.2012 21:08

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
David Jančík
Vlastník
Avatar
Odpovídá na David Hartinger
David Jančík:12.6.2012 21:09

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
Zapomeň, že je to nemožné a udělej to ;)
Avatar
Energy
Člen
Avatar
Energy:12.6.2012 21:10

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

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

V tom případě.

while (odpoved != "")

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

Nahoru Odpovědět
12.6.2012 21:10
Zapomeň, že je to nemožné a udělej to ;)
Avatar
Kit
Tvůrce
Avatar
Odpovídá na Energy
Kit:12.6.2012 21:19

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
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:12.6.2012 21:21

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
Tvůrce
Avatar
Odpovídá na Energy
Kit:12.6.2012 21:28
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:12.6.2012 22:02

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
David Jančík
Vlastník
Avatar
Odpovídá na Energy
David Jančík:12.6.2012 22:06

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
Zapomeň, že je to nemožné a udělej to ;)
Avatar
Kit
Tvůrce
Avatar
Odpovídá na Energy
Kit:12.6.2012 22:11

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
Tvůrce
Avatar
Odpovídá na David Jančík
Kit:12.6.2012 22:16

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
12.6.2012 22:16
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
David Jančík
Vlastník
Avatar
Odpovídá na Kit
David Jančík:12.6.2012 22:21

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
Zapomeň, že je to nemožné a udělej to ;)
Avatar
Kit
Tvůrce
Avatar
Odpovídá na David Jančík
Kit:13.6.2012 23:35

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 Hartinger
Vlastník
Avatar
Odpovídá na Kit
David Hartinger:14.6.2012 13:00

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
New kid back on the block with a R.I.P
Avatar
Kit
Tvůrce
Avatar
Odpovídá na David Hartinger
Kit:15.6.2012 15:14

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.