Mikuláš je tu! Získaj 90 % extra kreditov ZADARMO s promo kódom CERTIK90 pri nákupe od 1 199 kreditov. Len do nedele 7. 12. 2025! Zisti viac:
NOVINKA: Najžiadanejšie rekvalifikačné kurzy teraz s 50% zľavou + kurz AI ZADARMO. Nečakaj, táto ponuka dlho nevydrží! Zisti viac:

Diskusia – 6. diel - Podmienky (vetvenia) v C# .NET

Späť

Upozorňujeme, že diskusie pod našimi online kurzami sú nemoderované a primárne slúžia na získavanie spätnej väzby pre budúce vylepšenie kurzov. Pre študentov našich rekvalifikačných kurzov ponúkame možnosť priameho kontaktu s lektormi a študijným referentom pre osobné konzultácie a podporu v rámci ich štúdia. Toto je exkluzívna služba, ktorá zaisťuje kvalitnú a cielenú pomoc v prípade akýchkoľvek otázok alebo projektov.

Komentáre
Posledné komentáre sú na spodnej časti poslednej stránky.
Avatar
Martin
Člen
Avatar
Odpovedá na pocitac770
Martin:3.4.2017 16:49

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

Avatar
pocitac770
Tvůrce
Avatar
Odpovedá 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

Avatar
Martin
Člen
Avatar
Martin:3.4.2017 19:13

;-)
dekuji

Avatar
Odpovedá 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...

Odpovedať
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();
Avatar
pocitac770
Tvůrce
Avatar
Odpovedá 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)

Editované
Avatar
pocitac770
Tvůrce
Avatar
Odpovedá 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...

Avatar
Jan Mareš
Člen
Avatar
Odpovedá 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.

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();
        }
    }
}
Avatar
gcx11
Tvůrce
Avatar
Odpovedá 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.

Posledné komentáre sú na spodnej časti poslednej stránky.
Robíme čo je v našich silách, aby bola tunajšia diskusia čo najkvalitnejšia. Preto do nej tiež môžu prispievať len registrovaní členovia. Pre zapojenie sa do diskusie sa zaloguj. Ak ešte nemáš účet, zaregistruj sa, je to zadarmo.

Zobrazené 10 správy z 173.