Předvánoční Black Friday Předvánoční Black Friday
Až 80% zdarma! Předvánoční BLACK FRIDAY akce. Více informací

Cvičení k 1.-2. lekci OOP v C# .NET

C# .NET Objektově orientované programování Cvičení k 1.-2. lekci OOP v C# .NET American English version English version

Unicorn College ONEbit hosting Tento obsah je dostupný zdarma v rámci projektu IT lidem. Vydávání, hosting a aktualizace umožňují jeho sponzoři.

Následující 3 cvičení vám pomohou procvičit znalosti objektově orientovaného programování v C# .NET z minulé lekce. Ve vlastním zájmu se je pokuste vyřešit sami. Pod článkem máte pro kontrolu řešení ke stažení. Ale pozor, jakmile se na něj podíváte bez vyřešení příkladů, ztrácí pro vás cvičení smysl a nic se nenaučíte :)

Pokud si opravdu nebudete vědět rady, podívejte se raději znovu do minulého tutoriálu a pokuste se na to přijít.

Jednoduchý příklad

Vytvořte třídu kalkulačka, jejíž atributy jsou dvě čísla. Třídě vytvořte metody pro základní početní operace (sčítání, odčítání, násobení, dělení), které vracejí vždy výsledek dané operace s atributy třídy. V praxi by metody samozřejmě dělaly nějaké složitější výpočty, ale nám to takto stačí. Nechte uživatele zadat oba atributy, vytvořte instanci kalkulačky, nastavte jí atributy od uživatele a vypište výsledky jednotlivých operací.

Ukázka obrazovky programu:

Konzolová aplikace
Zadej 1. číslo: 15,2
Zadej 2. číslo: 22,7
Součet: 37,9
Rozdíl: -7,5
Součin: 345,04
Podíl: 0,669603524229075

    class Kalkulacka
    {
    }

Středně pokročilý příklad

S použitím objektově orientovaného programování vytvořte aplikaci, ve které figuruje nákladní auto, které převáží písek. Toto auto má nosnost 3 tuny a jeho náklad je zpočátku prázdný.

Nechte auto postupně:

  • naložit 10 tun
  • naložit 500 kg
  • vyložit 300 kg
  • vyložit 1 tunu

Jak asi tušíte, naložení a vyložení nákladu bude probíhat pomocí metod, které si před změnou váhy nákladu nejprve ověří, zda je v autě dost místa nebo zda nevykládáme více, než je naloženo. V případě chyby se náklad nevloží/nevyloží.

Po dokončení nakládání a vykládání nechte vypsat kolik je v autě kg nákladu, mělo by vám vyjít 200 kg.

Ukázka obrazovky programu:

Konzolová aplikace
V nákladním autě je naloženo 200 kg

    class NakladniAuto
    {
    }

Pokročilý příklad

Vytvořte aplikaci, evidující dva lidi. Každý člověk má jméno, věk a přítele. Každý člověk se také umí představit a to tak, že vypíše své jméno, věk a jméno svého kamaráda. Vytvořte v aplikaci následující 2 lidi:

  • "Karel Novák", 33 let
  • "Josef Nový", 27 let

Nechte je se skamarádit a představit se.

Ukázka obrazovky programu:

Konzolová aplikace
Ahoj, já jsem Karel Novák, je mi 33 let a můj kamarád je Josef Nový
Ahoj, já jsem Josef Nový, je mi 27 let a můj kamarád je Karel Novák

    class Clovek
    {
    }

 

Stáhnout

Staženo 1398x (122.52 kB)
Aplikace je včetně zdrojových kódů v jazyce C#

 

 

Článek pro vás napsal David Čápka
Avatar
Jak se ti líbí článek?
11 hlasů
Autor pracuje jako softwarový architekt a pedagog na projektu ITnetwork.cz (a jeho zahraničních verzích). Velmi si váží svobody podnikání v naší zemi a věří, že když se člověk neštítí práce, tak dokáže úplně cokoli.
Unicorn College Autor sítě se informační technologie naučil na Unicorn College - prestižní soukromé vysoké škole IT a ekonomie.
Aktivity (12)

 

 

Komentáře
Zobrazit starší komentáře (60)

Avatar
Pavel
Člen
Avatar
Pavel:20.5.2017 10:28

Když jsem byl u "Základních konstrukcích síšarpu", myslel jsem, že bych mohl něco programovat. Čím dále to studuji, tím mě moje přesvědčení opouští. U této kapitoly si připadám, jako totální kretén. Měl taky někdo takový pocit nebo to mám raději vzdát?
Pozn. Jen tak pro ucelení - v devadesátých letech jsem programoval v databázovém jazyku Foxpro (dnes mrtvý jazyk) a tam jsem celkem chápal. Tak proč je mi OOP tak nějak "proti srsti"?

 
Odpovědět 20.5.2017 10:28
Avatar
jersei
Člen
Avatar
jersei:19.7.2017 8:47

Je to o zvyku, ale OOP je vlastne daleko vic logice normalniho zivote, coz mi vyhovuje vic. Nevzdavej to a jed dal! Ja jsem byl v koncich uz pri zakladech :) Vsechno se da naucit, akorat kazdymu to bude trvat jinak dlouho. Keep goin.

 
Odpovědět 19.7.2017 8:47
Avatar
david zach
Člen
Avatar
david zach:26.7.2017 15:46

Dovoluji si nabidnout svoje reseni prikladu 2 (Auto):


Class:
namespace OOP3_NakladniAuto
{
class Auto
{
double aktualniStav = 0;
int nosnost = 3000;

public void Naklad(double vstupVystup)
{
bool prekrocenaNosnost = true;
prekrocenaNosnost = (vstupVystup > nosnost) || ((aktualniStav + vstupVystup) > nosnost );

if (prekrocenaNosnost == false && aktualniStav >= 0 && ((-aktualniStav -(+vstupVystup) < 0)))
{
aktualniStav = (aktualniStav + vstupVystup);
}
else
{
Console.Write­Line("Byla prekrocena nosnost.");
}
Console.Write­Line("Aktualni stav nakladu je {0}Kg", aktualniStav);
}
}
}

Program.cs
namespace OOP3_NakladniAuto
{
class Program
{
static void Main(string[] args)
{
Auto auto = new Auto();
string pokracovat = "";
do
{
Console.Write­Line("Zadejte hodnotu nakladu v kg: ");
double naklad = int.Parse(Con­sole.ReadLine());
auto.Naklad(na­klad);
Console.Write­Line("Chcete zadat dalsi vstup? A/N");
pokracovat = Console.ReadLine();
}
while (pokracovat == "A");
}
}
}

 
Odpovědět 26.7.2017 15:46
Avatar
Tibor Gallos
Člen
Avatar
Tibor Gallos:30. března 22:46

Cvicenie 2
Main

class Program
    {
        static void Main(string[] args)
        {
            NakladneAuto liaz = new NakladneAuto();
            liaz.Naloz(10000);
            liaz.Naloz(500);
            liaz.Vyloz(300);
            liaz.Vyloz(1000);
            Console.WriteLine(liaz.nalozenyNaklad);
            Console.ReadKey();
        }
    }

a Trieda Nakladne Auto

class NakladneAuto
    {

        public int maxNosnost = 3000;
        public int nalozenyNaklad;

        public int Naloz(int naklad)
        {
            if ((naklad + nalozenyNaklad) > maxNosnost)
            {
                return 0;
            }

            nalozenyNaklad += naklad;
            return nalozenyNaklad;
        }

        public int Vyloz(int naklad)
        {
            if (nalozenyNaklad <= naklad)
            {
                return 0;
            }

            nalozenyNaklad -= naklad;
            return nalozenyNaklad;
        }
    }
 
Odpovědět 30. března 22:46
Avatar
Dušan Kovářík:13. června 0:11

Ha! Když jsem vytvořil atribut pritel ve třídě Clovek jakožto instanci téže třídy, tak to fungovalo, ale musel jsem se chvíli zamyslet, co to vlastně znamená :) Nikdy předtím mě nenapadlo, že atribut nějaké třídy může odkazovat na sebe samu a měl jsem obavu, jestli nedojde k nějakému rekurzivnímu zacyklení...ale jo, může a nedojde, protože v instanci třídy netvořím novou instanci, ale pouze odkazuji na jinou již existující... Teda s tím OOP se dají dělat věci! :) A to jsem teprve na začátku...

class Clovek
{
    /// <summary>
    /// Jmého a příjmení
    /// </summary>
    public string celeJmeno;

    /// <summary>
    /// Věk
    /// </summary>
    public int vek;

    /// <summary>
    /// Přítel - jiná instance této třídy
    /// </summary>
    public Clovek pritel;

    /// <summary>
    /// Vypíše do konzole celé jméno, věk a jméno přítele
    /// </summary>
    public void PredstavSe()
    {
        Console.WriteLine("Ahoj, já jsem {0}, je mi {1} let a můj kamarád je {2}", celeJmeno, vek, pritel.celeJmeno);
    }
}
class Program
{
    static void Main(string[] args)
    {
        Clovek karel = new Clovek();
        karel.celeJmeno = "Karel Novák";
        karel.vek = 33;

        Clovek josef = new Clovek();
        josef.celeJmeno = "Josef Nový";
        josef.vek = 27;

        karel.pritel = josef;
        josef.pritel = karel;

        karel.PredstavSe();
        josef.PredstavSe();

        Console.ReadKey();
    }
}
 
Odpovědět 13. června 0:11
Avatar
Martin McDermot:22. listopadu 2:31

Tak tu Kalkulačku jsem udělal ani nevím jak ale funguje je to... sice to je asi na hlavu postavené ale funguje to..

Program

// ZAČÁTEK PROGRAMU

            // Úvodní textová hlavička
            Console.WriteLine("--- === KALKULATOR === ---");
            Console.WriteLine("Zadejte postupně 2 hosnoty pro výpočet");

            // definice proměnných a vstpupy do aplikace

            // nevyužita kontrola vstupu uzivatele
            Console.WriteLine("Zadej první čislo:");
            float hodnota1 = float.Parse(Console.ReadLine());

            Console.WriteLine("Zadej druhé číslo:");
            float hodnota2 = float.Parse(Console.ReadLine());


            // zavedení scriptu objektového programování
            // proměnná kalkulator z třídy Kalkulator
            Kalkulacka kalkulacka = new Kalkulacka();

            // zaslání zadaných hodnot uživatele a výpis výsledků
            Console.WriteLine(kalkulacka.Propocet(hodnota1, hodnota2));



            // KONEC PROGRAMU

a kod třídy

public string Propocet(float hodnota1, float hodnota2)
        {

            // script karkuliho přístroje

            // definice početních operací
            float soucet = hodnota1 + hodnota2;
            float rozdil = hodnota1 - hodnota2;
            float soucin = hodnota1 * hodnota2;
            float podil = hodnota1 / hodnota2;

            return String.Format("Součet = {0} \n" +
                                 "Rozdil = {1} \n" +
                                 "Součin = {2} \n" +
                                 "Podíl = {3}",
                                 soucet, rozdil, soucin, podil);

         }

Sice mi to aplikačný okýnko nevzalo jako vždy.. ale už jsem si zvykl.. :)

 
Odpovědět 22. listopadu 2:31
Avatar
Tomáš Vrána:22. listopadu 18:27

Nákladní automobil jsem si poupravil na variantu, že poveze únosnou část z nákladu, který převyšuje nosnost nákladního automobilu, protože jsem si blbě přečetl zadání :-) Zbytek přesouvám na místo ve skladě. Podobný princip uplatňuji i při výkladu. Příklad mi i v této variantě prošel testem.

class NakladniAuto
    {

        public int Nalozeno;
        public int sklad;

        public int Naloz(int naklad)
        {
            Nalozeno =  naklad + Nalozeno;
            while (Nalozeno > 3000)
            {
                Nalozeno = Nalozeno - 3000;
                sklad += 3000;
            }
            return Nalozeno;
        }
        public int Vyloz(int vyklad)
        {
            Nalozeno = Nalozeno - vyklad;
            if (Nalozeno < 0)
            {
                Nalozeno = 0;
                sklad -= vyklad - Nalozeno;
            }
            return Nalozeno;

        }
Editováno 22. listopadu 18:29
Odpovědět 22. listopadu 18:27
Každý svého štěstí strůjcem.
Avatar
Jan Křížek:24. listopadu 18:46

Druhý příklad mi přišel těžší než ten třetí, ale to proto, že jsem zadání třetího příkladu pochopil úplně jinak, než jak byl myšlen :/

 
Odpovědět 24. listopadu 18:46
Avatar
Pavla Sklenářová:24. listopadu 22:25

Musím poděkovat za pěkná cvičení, ale pište prosím na konci ukázkových výstupů tečky. Mě to pak mate, když mi odeslané cvičení neprojde :-D (Ano, jsem gramatickej nácek ;-) )

Odpovědět 24. listopadu 22:25
Nepropadejte panice.
Avatar
Vít Vohralík:3. prosince 18:24

Kód mám správně a nevezme mi ho! Ve Visual Studiu funguje jak má. Už nevím co udělat, tak jsem si stáhnul řešení a mám to úplně správně.

 
Odpovědět 3. prosince 18:24
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 70. Zobrazit vše