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 – 2. diel - Prvá objektová aplikácia v C# - Hello object world

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
Odpovedá na Alesh
Werner Yuyong:29.3.2022 17:14

@Alesh dekuji,
porad mi to bohuzel zlobi.

Vlozil jsem

using HelloObjects

Ale jde mi to vlozit pouze do TELA/

Neumim v tom VS 2022 zobrazit / rozbalit ty zakladni zavorky, (zatim to ani nebylo potreba.)

Posilam screenshot.

Avatar
Alesh
Tvůrce
Avatar
Odpovedá na Werner Yuyong
Alesh:29.3.2022 17:17

no, ještě středník na konec příkazu, ten jsem neuvedl...

using HelloObjects;
Editované
Avatar
Werner Yuyong:29.3.2022 17:35

takze

using HelloObjects;

uz funguje :D
diky

Avatar
Jan Prokop
Člen
Avatar
Jan Prokop:6.5.2022 18:35

"Za úkol máte předělat si naši konzolovou kalkulačku do objektů." - Tady bych teda vážně potřeboval trochu navést. Jinak se musím poradit v rámci konzultace u kamaráda programátora.

Avatar
Alesh
Tvůrce
Avatar
Odpovedá na Jan Prokop
Alesh:6.5.2022 23:51

Však na konzultaci u kamaráda není nic špatného, klidně to s ním prober. ;-)
V podstatě jde o toto:
Ta původní kalkulačka je prostě jen kód nablitý do Main. Předělání do objektové podoby vlastně znamená to, že uděláš třídu Kalkulacka a v Main vytvoříš její instanci. Pak to může vypadat třeba tak, že kalkulačka bude mít metodu Spustit, ta ti vypíše takové to Vítej atd., vyzve k zadání čísel a operace. Posbíráš ty vstupy dovnitř objektu kalkulačky, zpracuje je, a nakonec ti vypíše výsledek. Můžeš udělat i ten dotaz, zda pokračovat dalším zadáním.
Prostě jde o to, že tu kalkulačku uděláš jako ten objekt, se kterým komunikuješ z toho hlavního programu. Čili nejdřív ji vytvoříš, ona ti něco vypíše, ty ji něco zadáš, ona něco spočítá, zeptá se, zda chceš zadat další. Je to jasnější?
Hele, já byl z toho taky zmatenej v této fázi výuky, ale až dojdeš dál, tak to pochopíš. Klidně se na tu kalkulačky v tuto chvíli vyprdni, pak se k ní třeba vrátíš, až se ti to v hlavě pospojuje, jak to vlastně funguje, resp. má fungovat. ;-)

Avatar
Jan Prokop
Člen
Avatar
Odpovedá na Alesh
Jan Prokop:7.5.2022 0:01

Ahoj, Aleši, díky za koment. Konzultace je za mne samozřejmě ideální stav a nebyla by první ani poslední, akorát mě to občas zdržuje od dalšího postupu. Tady naštěstí pomohlo jít zatím dál a hned v Praktickém cvičení na prvním příkladu jsem pochopil, co by se dalo s Kalkulačkou udělat.:) Baví mne to čím dál víc, jak se postupně zorientovávám.

Avatar
Vašek Slunčík:10.5.2022 23:48

Nepodařilo se mi podle textu zprovonit ani Zdraviče. VS hlásil, že Zdravič je mimo kontext. Musel jsem ručně doplnit - omluvte laický popis - všechna using a namespace. Na jednu stran mám radost, že jsem na to ke zdárnému výsledku přišel, na druhé straně ale mám pocit, že to jen nějak patlám a nechápu podstatu ovládání VS.

Odpovedať
Já na to přijdu!
Avatar
Vašek Slunčík:11.5.2022 0:24

Jako jo, je to zbytečné volání metod, když vše by šlo udělat v jednom switchi, ale zkusil jsem si to zobecnit jak jen to šlo. Trochu vždy bojuji s tím co kde mít. Má kalkulačka jen počítat? Nebo i zobrazit text? Má řešit vstupy? Nebo to bude dělat jiný objekt?
Je to mé první programování objektů v C#, trochu jsem večer nadával, ale k půlnoci to dal a hrál si s tím :)

PROGRAM

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

namespace ObjektovaKalkulacka;

    class Program
    {
        static void Main(string[] args)
        {
            Vstup vstup = new Vstup();
            Kalkulacka kalkulacka = new Kalkulacka();

            bool pokracovat = true;

            while (pokracovat)
            {
                int a = vstup.ZadejHodnotu("a", -999, 999);
                int b = vstup.ZadejHodnotu("b", -999, 999);
                int operace = vstup.ZadejHodnotu(kalkulacka.text, kalkulacka.operaceMin, kalkulacka.operaceMax);

                double vysledek = kalkulacka.Spocti(a, b, operace);
                Console.WriteLine("{0} {1} {2} = {3}", a, kalkulacka.vyraz, b, vysledek);

                if (vstup.ZadejHodnotu("Přeješ si pokračovat? 1 - ano, 2 ne", 1, 2) == 2)
                    pokracovat = false;
            }
        }
    }

VSTUP

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

namespace ObjektovaKalkulacka
{
    internal class Vstup
    {
        public int ZadejHodnotu(string nazevPrvku, int min, int max)
        {
            string text = String.Format("Zadej {0}:", nazevPrvku);
            int zadanaHodnota = 0;
            bool zadaniOK = false;
            Console.WriteLine(text);

            while (!zadaniOK)
            {
                while (!int.TryParse(Console.ReadLine(), out zadanaHodnota))
                    Console.WriteLine("Chybné zadání, zkus znovu. " + text);

                if (zadanaHodnota >= min && zadanaHodnota <= max)
                    zadaniOK = true;
                else
                    Console.WriteLine("Zadání mimo rozsah {0} - {1}, zkus znovu. " + text, min, max);

            }
            return zadanaHodnota;
        }
    }
}
KALKULACKA
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ObjektovaKalkulacka;

internal class Kalkulacka
{
    public string text = "Vyber operaci: 1 - sečíst, 2 - odečíst, 3 - násobit, 4 dělit";
    public int operaceMin = 1;
    public int operaceMax = 4;
    public string vyraz = "";

    public double Spocti(int a, int b, int operace)
    {
        double vysledek = 0;
        switch(operace)
        {
            case 1:
                vysledek = this.Secist(a, b);
                break;
            case 2:
                vysledek = this.Odecist(a, b);
                break;
            case 3:
                vysledek = this.Nasobit(a, b);
                break;
            case 4:
                vysledek = this.Delit(a, b);
                break;
            default:
                // náhoda v budoucnu je blbec
                break;
        }
        return vysledek;
    }

    private double Secist(int a, int b)
    {
        vyraz = "+";
        return a + b;
    }

    private double Odecist(int a, int b)
    {
        vyraz = "-";
        return a - b;
    }

    private double Nasobit(int a, int b)
    {
        vyraz = "x";
        return a * b;
    }

    private double Delit(int a, int b)
    {
        double c = 0;
        vyraz = "nelze dělit";
        if (b != 0)
        {
            vyraz = "/";
            double aa = a;
            c = aa / b;
        }

        return c;
    }
}
Odpovedať
Já na to přijdu!
Avatar
Pavel Rössner:10.6.2022 21:50

Musel jsem si text přečíst opakovaně a plně jsem ho pochopil až po pročtení několika následujících lekcí. Lekce je jinak pěkná, ale pro úplné začátečníky by místy potřebovala detailnější vysvětlení.

Avatar
Antonín Pohl:9.7.2022 14:41

Tak přispěju taky svým prvním OOP výtvorem :)
CALCULATOR:

namespace Kalkulacka_s_while
{
    internal class Calculator
    {
        public float a;
        public float b;
        public string Pokracovat;
        public void Pozdrav()
        {
            Console.WriteLine("Vítejte v kalkulačce!");
        }
        public void ZadejCisla()
        {
            Console.WriteLine("Zadej první číslo:");
            float a = float.Parse(Console.ReadLine());
            Console.WriteLine("Zadej druhé číslo:");
            float b = float.Parse(Console.ReadLine());
        }
        public void ZvolOperaci()
        {
            Console.WriteLine("Zvol si operaci:");
        }
        public void Scitani()
        {
            Console.WriteLine("Součet: {0}", a + b);
        }
        public void Odcitani()
        {
            Console.WriteLine("Rozdíl: {0}", a - b);
        }
        public void Nasobeni()
        {
            Console.WriteLine("Součin: {0}", a * b);
        }
        public void Deleni()
        {
            Console.WriteLine("Podíl: {0}", a / b);
        }
        public void Podekuj()
        {
            Console.WriteLine("Děkuji za použití kalkulačky!");
        }
    }
}

PROGRAM:

namespace Kalkulacka_s_while
{
    class Program
    {
        static void Main(string[] args)
        {

            Calculator calculator = new Calculator();
            calculator.Pozdrav();
            calculator.Pokracovat = "ano";
            while (calculator.Pokracovat == "ano")
            {
                Console.WriteLine("Zadej první číslo:");
                calculator.a = float.Parse(Console.ReadLine());
                Console.WriteLine("Zadej druhé číslo:");
                calculator.b = float.Parse(Console.ReadLine());
                calculator.ZvolOperaci();
                Console.WriteLine("1 - sčítání");
                Console.WriteLine("2 - odčítání");
                Console.WriteLine("3 - násobení");
                Console.WriteLine("4 - dělení");
                int volba = int.Parse(Console.ReadLine());
                if (volba == 1)
                    calculator.Scitani();
                if (volba == 2)
                    calculator.Odcitani();
                if (volba == 3)
                    calculator.Nasobeni();
                if (volba == 4)
                    calculator.Deleni();
                Console.WriteLine("Přejete si pokračovat? ano/ne");
                calculator.Pokracovat = Console.ReadLine();
             }
            calculator.Podekuj();
            Console.ReadKey();
        }
    }
}

Za jakoukoliv zpětnou vazbu budu rád :)

Odpovedať
Každý problém má řešení.
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 218.