NOVINKA - Online rekvalifikační kurz Python programátor. Oblíbená a studenty ověřená rekvalifikace - nyní i online.
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í.

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
Odpovídá na Alesh
Soňa Malířová:4.4.2021 20:08

Ajo, chápu... Do lekce, kde se učí pole, jsem ještě nedošla. Takže to tím pádem nechám na později a zkusím se k tomu vrátit, až budu umět pole. I tak moc děkuju za rady. :)

 
Odpovědět
4.4.2021 20:08
Avatar
Alesh
Tvůrce
Avatar
Odpovídá na Soňa Malířová
Alesh:4.4.2021 20:56

Bez těch polí a jiných pokročilejších technik bych to asi udělal tak, že bych v tom prvním switchy, v těch jednotlivých větvích načetl i nějakou proměnnou či proměnné, ve kterých bych uložil to omezení pro ta písmena voleb. A pak bych ten druhý switch celý dal do podmínky, ve které bych nejprve otestoval, zda ta písmenná volba splňuje to omezení, pokud ano, pak bych prošel ten switch a pokud ne, tak vypisuji hlášku neplatná volba.

 
Odpovědět
4.4.2021 20:56
Avatar
Šimon Sahaj
Člen
Avatar
Šimon Sahaj:9.5.2021 12:23

Ahoj, měl bych otázku. Mám přednačtený soubor kde je asi 4k jmen a ke každému je email, adresa, psč atd.. Mám udělanou tabulku kde si chci vybrat co vypsat. Jestli jméno, přijmení, adresu,... Bohužel mi po výběru nefunguje vypsání té dané věci. Pomohl byste mi někdo prosím co napsat do dané case?

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO;
using System.Diagnostics;

namespace CSV_0._2
{
    public class peep
    {

        public string jmeno
        { get; set; }
        public string prijmeni
        { get; set; }
        public string pohlavi
        { get; set; }
        public string adresa
        { get; set; }
        public string mesto
        { get; set; }
        public string zip
        { get; set; }
        public string email
        { get; set; }
        public string telefon
        { get; set; }
        public string CCtyp
        { get; set; }
        public string CCcislo
        { get; set; }
        public string CVV2
        { get; set; }
        public string CCkonec
        { get; set; }

        public peep(string jmeno, string prijmeni, string pohlavi, string adresa, string mesto, string zip, string email, string telefon, string CCtyp, string CCcislo, string CVV2, string CCkonec)
        {
            this.jmeno = jmeno;
            this.prijmeni = prijmeni;
            this.pohlavi = pohlavi;
            this.adresa = adresa;
            this.mesto = mesto;
            this.zip = zip;
            this.email = email;
            this.telefon = telefon;
            this.CCtyp = CCtyp;
            this.CCcislo = CCcislo;
            this.CVV2 = CVV2;
            this.CCkonec = CCkonec;
        }

    }
    class Program
    {
        static void Main(string[] args)
        {
            string cesta, radek;
            var stopky = new Stopwatch();
            StreamReader ctecka = null;
            List<peep> lide = new List<peep>();

            Console.WriteLine("Program pro zpracovani zaznamu typu .csv\n");
            Console.Write("Umisteni .csv: ");
            cesta = Console.ReadLine();

            try
            {
                ctecka = new StreamReader(cesta);
            }
            catch (Exception e)
            {
                Console.WriteLine("Ehhh... " + e.Message + " ENTER pro zavreni programu");
                Console.ReadLine();
                Environment.Exit(0);
            }

            stopky.Start();

            radek = ctecka.ReadLine();
            string[] pole;
            while ((radek = ctecka.ReadLine()) != null)
            {
                pole = radek.Split(',');
                lide.Add(new peep(pole[0], pole[1], pole[6]));
            }
            stopky.Stop();

            Console.WriteLine("Soubor " + cesta + " nacten za " + stopky.ElapsedMilliseconds + "ms\n");
            Console.WriteLine("Pro pokracovani stiskni \"ENTER\"");
            Console.ReadLine();
            Console.Clear();


                Console.WriteLine("Vyber analýzu:");
                Console.WriteLine("1 - e-mailove domeny");
                Console.WriteLine("2 - jmena");
                Console.WriteLine("3 - prijmeni");
                Console.WriteLine("4 - telefony");
                Console.WriteLine("5 - adresa");
                Console.WriteLine("6 - ulice");
                Console.WriteLine("7 - mesto");
                Console.WriteLine("8 - PSC");
                Console.WriteLine("9 - Typ CC");
                Console.WriteLine("10 - CVV2");
                Console.WriteLine("11 - platnost CC");
                Console.WriteLine("12 - platnost CC mesic");
                Console.WriteLine("13 - platnost CC den");
                Console.WriteLine("14 - EXIT");

                int volba = int.Parse(Console.ReadLine());
                Console.WriteLine("Vybrano: " + volba);
                switch (volba)
                {
                    case 1:
                        stopky.Start();
                        foreach (peep domena in lide)
                        {
                            Console.WriteLine(domena.email);
                        }
                        stopky.Stop();
                        Console.WriteLine("Vypis trval " + stopky.ElapsedMilliseconds + "ms");
                        Console.WriteLine("Pro pokracovani napis \"again\"");
                        Console.ReadLine();
                        break;
                    case 2:
                        stopky.Start();
                        foreach (peep jmeno in lide)
                        {
                            Console.WriteLine(jmeno.jmeno);
                        }
                        stopky.Stop();
                        Console.WriteLine("Vypis trval " + stopky.ElapsedMilliseconds + "ms");
                        Console.WriteLine("Pro pokracovani napis \"again\"");
                        Console.ReadLine();
                        break;
                    default:
                        Console.WriteLine("Neplatná volba!");
                        break;
                }
        }
    }
}
 
Odpovědět
9.5.2021 12:23
Avatar
Jiří Pivec
Člen
Avatar
Jiří Pivec:3.10.2021 14:07

Ahoj Šimone, tohle je trochu složitější než problematika SWITCHe. Jde o práci se třídami .Zásadní problém máš na řádku 87, kde do Listu lide načítáš nové instance třídy peep. Konstruktor této třídy čeká na 12 parametrů.

public peep(string jmeno, string prijmeni, string pohlavi, string adresa, string mesto, string zip, string email, string telefon, string CCtyp, string CCcislo, string CVV2, string CCkonec)

To znamená, že nové objekty třídy peep musíš instancovat právě s tímto počtem parametrů.

lide.Add(new Klient(pole[0], pole[1], pole[2], pole[3], pole[4], pole[5], pole[6], pole[7], pole[8], pole[9],pole[10],pole[11]));

Potom Tvůj program funguje.
Nicméně si dovolím několik připomínek. Pokud používáš objektové programování, tak programuj objektově a se všemi pravidly, které k tomu patří. Např. třídu peep bych nazval např. Klient. Properties (public string jmeno{get;set;}) mají mít jména s velkým počátečním písmenem, takže: public string Jmeno {get; set;}.
Většina programu v Mainu by šla také samozřejmě pěkně zabalit do tříd (a metod).

Odpovědět
3.10.2021 14:07
„Kdo se umí smát sám sobě, má právo se smát všemu ostatnímu, co mu k smíchu připadá.“ J.W.
Avatar
Richard Leško:23.10.2021 15:41

Hojte borci. Učím sa zatiaľ programovať, a minule o kamaráta som si vydrankal dajakú úlohu aby mi dal aby som skúsil vyriešiť. Rozmýšľam už druhý deň, nad tým ale som z toho bezmocný. Dokonca ani len neviem to slovami popísať že čo mám robiť a nie to naprogramovať....

Ide o úlohu ktorá sa volá cestovný poriadok:

Z autobusovej zástavky chodia 3linky autobusov od 06:00 do 22:00.
Konzola sa má spýtať koľko je hodín a minút a podľa toho má napísať, ktorá linka(autobusový spoj) mi ide najbližšie.
Linka č1 ide každé 3min
Linka č2 ide každých 10min
Linka č3 ide každých 17min
Vedeli by sme mi poradiť? Ďakujem pekne :)

 
Odpovědět
23.10.2021 15:41
Avatar
Alesh
Tvůrce
Avatar
Odpovídá na Richard Leško
Alesh:24.10.2021 11:53

Nevím, proč jsi to dal do diskuse zrovna pod tuto lekci. správně sis měl vytvořit vlákno v diskuzním fóru .NET.
Ze zadání není jasné několik věcí:

  • Kdy poprvé vyjíždějí linky? Všechny vyjedou poprvé v 6:00?
  • Co se má vypsat, pokud nejbližší je více než jeden spoj (za minutu jede linka 1 i linka 2)?
  • Co se má vypisovat pokud ten den již nic nepojede?
  • Má se ošetřit i chybný vstup ze strany uživatele?
  • Pak taky není jasné, s jakou úrovní znalostí řešitele se počítá, tzn. má/může být aplikace řešená pomocí OOP? S tím časem se má pracovat jako s časem (TimeSpan) nebo jen s dvěma čísly (int)

Každopádně ten princip je jasný. Každá z linek vyjede poprvé v určitý čas (t0), uživatel se v určitý čas (tx) zeptá na nejbližší spoj. Jelikož víš, kdy daná linka vyjela poprvé a jak často jezdí, pak přes modulo dokážeš snadno spočítat, kdy linka jela naposled ((tx - t0) % četnost_linky), např. linka 1 vyjela poprvé v 6:00, pak situace v 6:20 bude 6:20 - 6:00 = 20 min, 20 % 3 = 2 (linka jela před 2 minutami). Další spoj jede za četnost - kdy_jela_naposledy, tj. 3 - 2 = 1 min. Linka pojede znovu za 1 minutu. Pak už je to jen o nalezení minima a ošetření různých situací, kdy např. je zadán čas mimo rozsah 6 - 22 hod. apod.

Editováno 24.10.2021 11:55
 
Odpovědět
24.10.2021 11:53
Avatar
Odpovídá na Alesh
Richard Leško:25.10.2021 9:44

Hm. moja chyba z novým vláknom. Aby som pravdu povedal, nečítal som si pravidlá zakladania nových vláknam a ani diskusie. To napravím.

A čo sa samotnej úlohy týka, nechcel som dávať všetky údaje. Chcel som len vedieť, ako sa nad tým logicky zamyslieť a vyriešiť túto úlohu, lebo som nemal ani len páru o tom ako to spraviť. Teda viem o jednej, kedy by som všetky linky vypísal ktorá o koľkej odchádza a zobraziť tú ktorá bude najbližšie. Ale to by bolo sakra na dlho a strašne nepriehľadné. Ešte sa ta chcem teda spýtať, či sú tuna v lekciach aj tie modulo vysvetlené, ako to vlastne funguje. ďakujem pekne :)

 
Odpovědět
25.10.2021 9:44
Avatar
Jiří Pivec
Člen
Avatar
Jiří Pivec:15.11.2021 20:31

Ahoj, v testu C# .NET pokročilé podmínky a cykly jsem narazil na otázku ohledně SWITCHe.
A podle výsledku testu následující tvrzení není chybné:

"Výraz, který má switch v kulatých závorkách, musí být celočíselný, char nebo string".

Nevím, jestli něco chápu špatně, ale výraz v kulatých závorkách přece může obsahovat například také číslo s desetinnou čárkou nebo boolean.

Odpovědět
15.11.2021 20:31
„Kdo se umí smát sám sobě, má právo se smát všemu ostatnímu, co mu k smíchu připadá.“ J.W.
Avatar
Michal Harvan:24.11.2021 17:11

Jsem rád, že se zde ukazují i moderní způsoby. Pouze mě aktuálně mrzí, že mé aktuální nastavení Visual studio Community nepodporuje tyto moderní zápisy, které jsou možné až od verze 8.0 a zatím netuším, jak mohu verzi zvýšit. Net 6 nainstalovaný mám, ale uplatnit v projektu mi zatím nejde. Nejlépe na C# 10

 
Odpovědět
24.11.2021 17:11
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.