NOVINKA: Získej 40 hodin praktických dovedností s AI – ZDARMA ke každému akreditovanému kurzu!

Diskuze – Lekce 6 - Podmínky (větvení) v C# .NET

Zpět

Upozorňujeme, že diskuze pod našimi online kurzy jsou nemoderované a primárně slouží k získávání zpětné vazby pro budoucí vylepšení kurzů. Pro studenty našich rekvalifikačních kurzů nabízíme možnost přímého kontaktu s lektory a studijním referentem pro osobní konzultace a podporu v rámci jejich studia. Toto je exkluzivní služba, která zajišťuje kvalitní a cílenou pomoc v případě jakýchkoli dotazů nebo projektů.

Komentáře
Avatar
Martin
Člen
Avatar
Odpovídá na pocitac770
Martin:3.4.2017 16:49

Ahoj. A co teda goto?
nepouzivat? neni to vhode?
jaka je vhodna nahrada za goto?
Dekuji

 
Odpovědět
3.4.2017 16:49
Avatar
pocitac770
Tvůrce
Avatar
Odpovídá na Martin
pocitac770:3.4.2017 17:32

Takhle, úplně do hloubky nejsem zrovna vhodný člověk na objasňování tohoto "jevu", nikdy jsem v Céčku pořádně nedělal, to yb musel odpovědět někdo v této oblasti zkušenější.
Každopádně z doslechu to mám "naposloucháno" tak, že nás vyšší jazyky odstiňují od těchto nízkoúrovňových příkazů, protože v nich vznikaly dosti chyby, a samy nastiňují mnohem jednodušší cesty. Například já, který jsem tento příkaz nikdy nepoužíval si ani jeho použití představit nedokážu. Jsem již naučen na psychologii Objektově orientavaného programování, ti, co programovali strukturovaně (Nebo ještě níže? Goto je zrovna věc, která myslím sahá až do dob Assembleru, co si teď vzpomínám) zase vidí celý kód z poněkud jiného úhlu pohledu.
Například co já bych viděl, takové to "vracení se na určitou část kódu" jde docílit while cykly "místo" ifů, pokud jde o spouštění určitých samostatných kusů kódů, tak se jedná o metody.... Jak říkám, já konkrétní příklady popsat neumím :D

 
Odpovědět
3.4.2017 17:32
Avatar
Martin
Člen
Avatar
Martin:3.4.2017 19:13

;-)
dekuji

 
Odpovědět
3.4.2017 19:13
Avatar
Odpovídá na Martin
Michal Štěpánek:4.4.2017 10:47

Příkaz "goto" jsem naposledy použil někdy v roce 1988, když jsme na střední škole "programovali" v BASICu na počítačích "IQ151". Abych pravdu řekl ani nevím, že (jestli) se při současném OOP dá použít a nenapadá mě (při mém "pseudoprogra­mování") k čemu by se mi takový příkaz hodil, když, jak psal pocitac770 se dá nahradit různými jinými způsoby...

Odpovědět
4.4.2017 10:47
Nikdy neříkej nahlas, že to nejde. Vždycky se totiž najde blbec, který to neví a udělá to...
Avatar
Jan Mareš
Člen
Avatar
Jan Mareš:3.5.2017 22:39

Ahoj prosím o radu při psaní aplikace jsem narazil na pár chyb a nevím si rady s napsáním aplikace za pomocí if a else:

zkoušel jsem psát tuto aplikaci s uživatelským vstupem za pomocí podmínek:

Console.Title = "náhrada řetězce";
           string text = "Jsem skvělý programátor";
           text = text.Replace("skvělý", "špatný");
           Console.WriteLine(text);
           Console.ReadKey();

Pokud to napíši takto vše funguje:

Console.Title = "Záměna";
           Console.WriteLine("Napiš kde jsi.");
           string text = Console.ReadLine();
           switch (text)
           {
               case "jsem doma":
                   Console.WriteLine("Jsem venku");

                   break;
               case "jsem venku":
                   Console.WriteLine("Jsem doma");

                   break;

               default:
                   Console.WriteLine(text);

                   break;
           }

           Console.ReadKey();

Když jsem se to snažil napsat takto ukazuje mi to chybu u poslední složené závorky před else,zajímá mne co píši špatně:

Console.Title = "Záměna";
           Console.WriteLine("Napiš kde jsi.");
           string text = Console.ReadLine();
           switch (text)
           {
               case "jsem doma":
                   Console.WriteLine("Jsem venku");

                   break;
               case "jsem venku":
                   Console.WriteLine("Jsem doma");

                   break;
           }

           else
           Console.WriteLine(text);
           Console.ReadKey();

a za pomocí podmínek if a else se mi to nedaří napsat,zkoušel jsem různé varianty a úpravy ale stále mi to ukazuje tutéž chybu,Zajímalo by mne jak to napsat a co dělám špatně děkuji za rady.

Console.Title = "Záměna";
Console.WriteLine("Napiš kde jsi.");
string text = Console.ReadLine();
    if "jsem doma":
    {
    Console.WriteLine("Jsem venku");
}

    if "jsem venku":

        {
        Console.WriteLine("Jsem doma");
}

else
Console.WriteLine(text);
Console.ReadKey();
 
Odpovědět
3.5.2017 22:39
Avatar
pocitac770
Tvůrce
Avatar
Odpovídá na Jan Mareš
pocitac770:3.5.2017 23:22

To proto že else patří k if, nikoliv ke switch, u něj se jako nenalezení vhodné možnosti používá možnost default (viz poslední normální odstavec lekce)

Editováno 3.5.2017 23:22
 
Odpovědět
3.5.2017 23:22
Avatar
pocitac770
Tvůrce
Avatar
Odpovídá na Jan Mareš
pocitac770:3.5.2017 23:26

K poslednímu kódu, je to absolutní patlanina, jako by jsi nikdy nečetl seriál, if se používá spolu s boolean podmínkou v závorce, nikoliv s nějakým textem odnikud, taktéž se tam nepíše dvojtečka, a pokud by jsi přesto ten kód napsal správně, tak by ti nefungoval, protože při splnění první podmínky by se následně splnila i druhá, používej if - if else - else. Radši si přečti tuto lekci celou ještě jednou nebo radši dvakrát...

 
Odpovědět
3.5.2017 23:26
Avatar
Jan Mareš
Člen
Avatar
Odpovídá na pocitac770
Jan Mareš:4.5.2017 9:20

Toto mi zatím dělá problém,vím že ke switch patří default ale když se podívám na tu kalkulačku za pomocí switche tak tam má také else,ale když na to zpětně koukám tak už to vidím,to else tam nepatří ke switch ale k tomu if,nevšiml jsem si. A k tomu poslednímu kodu,když jsem ho psal tak jsem k přehledu používal tu kalkulačku a tam má také psané if-else if,zatím to použít neumím.To že se to používá společně s booleanem,mi nějak uniklo,moc děkuji,možná už vím jak to napsat,snad to půjde.

 
Odpovědět
4.5.2017 9:20
Avatar
OpenGL
Člen
Avatar
OpenGL:3.10.2017 21:17

Ahoj, vysvětlil by mi někdo pls., proč to nechce fungovat? Hlásí to chybu na 44 řádku kvůli proměnné "a", viz. komentář v kódu. Chtěl bych to takto se switch, ale nechci zbytečně vypočítávat kód pro výpočet a výpis výsledku v každém case, tam chci jen dosadit a to mi nejde.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace VypocetRozmeruObrazovky
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Zadejte úhlopříčku obrazovky v palcích: ");
            int Up = int.Parse(Console.ReadLine());
            double Ucm = Up * 2.54;
            // Vychází se ze soustavy:  c^2 = a^2 + b^2
            //                          Ucm^2 = Acm^2 + Bcm^2
            int a,b = 1;
            double c, Acm, Bcm = 0;
            double CastUhlopricky = 1;
            Console.WriteLine(@"Zvolte poměr stran obrazovky: 1 pro 4:3
                              2 pro 16:10
                              3 pro 16:9");
            int volba = int.Parse(Console.ReadLine());
            switch (volba)
            {
                case 1:
                    a = 4;      //4:3
                    b = 3;
                    break;
                case 2:
                    a = 16;      //16:10
                    b = 10;
                    break;
                case 3:
                    a = 16;      //16:9
                    b = 9;
                    break;
                default:
                    Console.WriteLine("Byla zadána neplatná volba!");
                break;
            }
            if ((volba == 1) || (volba == 2) || (volba == 3))
            {
                c = Math.Sqrt((a * a) + (b * b)); // Tady to háže chybu, kvůli proměnné a, že je lokální či co, proč?
                CastUhlopricky = Ucm / c;
                Acm = a * Ucm / c;
                Bcm = b * Ucm / c;
                Console.WriteLine("Obrazovka o úhlopříčce " + Up + " palců má úhlopříčku " + Ucm + " cm a délky stran " + Acm + " x " + Bcm + " cm");
            }
            Console.ReadKey();
        }
    }
}
 
Odpovědět
3.10.2017 21:17
Avatar
gcx11
Tvůrce
Avatar
Odpovídá na OpenGL
gcx11:3.10.2017 21:31

Protože toto

int a, b = 1;

znamená, hodnotu a přiřadím později a hodnota b je jedna.

A když kód prochází switchem, tak pokud jde přes default, tak a nemá přiřazenou hodnotu.

 
Odpovědět
3.10.2017 21:31
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 172.