Ülesanned

//Ülesanne 1: Kalorite kalkulaator klassidega
        static void KaloriteKalkulaator()
        {
            Console.Clear();
            Console.WriteLine("Kalorite kalkulaator");

            // Loome nimekiri toodetest (manuaalselt, aga hiljem saab lugeda failist)
            List<Toode> tooted = new List<Toode>
            {
                new Toode("Õun", 52),
                new Toode("Kartul", 77),
                new Toode("Riis", 130),
                new Toode("Kana", 165),
                new Toode("Šokolaad", 546)
            };

            // Küsimine kasutajalt tema andmed
            Console.Write("Sisesta nimi: ");
            string nimi = Console.ReadLine();
            Console.Write("Vanus: ");
            int vanus = int.Parse(Console.ReadLine());
            Console.Write("Sugu (M/N): ");
            string sugu = Console.ReadLine();
            Console.Write("Pikkus (cm): ");
            double pikkus = double.Parse(Console.ReadLine());
            Console.Write("Kaal (kg): ");
            double kaal = double.Parse(Console.ReadLine());
            Console.Write("Aktiivsustase (1.2 - 1.9): ");
            double aktiivsus = double.Parse(Console.ReadLine());

            // Loome objekti ja arvutame energiavajaduse
            Inimene inimene = new Inimene(nimi, vanus, sugu, pikkus, kaal, aktiivsus);
            double vajadus = inimene.ArvutaKalorivajadus();

            Console.WriteLine($"\n{inimene.Nimi} päevane energiavajadus: {vajadus:F0} kcal\n");

            // Arvutame iga toote puhul, mitu grammi võib süüa
            foreach (var toode in tooted)
            {
                double grammid = (vajadus / toode.Kalorid100g) * 100;
                Console.WriteLine($"{toode.Nimi,-10} → {grammid:F0} g");
            }

            Console.WriteLine("\nVajuta Enter, et jätkata...");
            Console.ReadLine();
        }

//Ülesanne 2: Maakonnad ja pealinnad
        static void MaakonnadJaPealinnad()
        {
            Console.Clear();
            Console.WriteLine("Maakonnad ja pealinnad");

            Dictionary<string, string> maakonnad = new Dictionary<string, string>()
            {
                {"Harjumaa", "Tallinn"},
                {"Tartumaa", "Tartu"},
                {"Pärnumaa", "Pärnu"}
            };

            Console.WriteLine("1 - Leia pealinn maakonna järgi");
            Console.WriteLine("2 - Leia maakond pealinna järgi");
            Console.WriteLine("3 - Mängurežiim");
            Console.Write("Vali: ");
            string valik = Console.ReadLine();

            if (valik == "1")
            {
                Console.Write("Sisesta maakond: ");
                string mk = Console.ReadLine();
                if (maakonnad.ContainsKey(mk))
                    Console.WriteLine("Pealinn: " + maakonnad[mk]);
                else
                {
                    Console.Write("Ei leitud. Lisa pealinn: ");
                    string pl = Console.ReadLine();
                    maakonnad[mk] = pl;
                }
            }
            else if (valik == "2")
            {
                Console.Write("Sisesta pealinn: ");
                string pl = Console.ReadLine();
                bool leitud = false;
                foreach (var kvp in maakonnad)
                {
                    if (kvp.Value == pl)
                    {
                        Console.WriteLine("Maakond: " + kvp.Key);
                        leitud = true;
                        break;
                    }
                }
                if (!leitud)
                {
                    Console.Write("Ei leitud. Lisa maakond: ");
                    string mk = Console.ReadLine();
                    maakonnad[mk] = pl;
                }
            }
            else if (valik == "3")
            {
                Random rnd = new Random();
                List<string> keys = new List<string>(maakonnad.Keys);
                string mk = keys[rnd.Next(keys.Count)];

                Console.Write($"Mis on {mk} pealinn? ");
                string vastus = Console.ReadLine();

                if (vastus == maakonnad[mk])
                    Console.WriteLine("Õige!");
                else
                    Console.WriteLine("Vale! Õige vastus: " + maakonnad[mk]);
            }

            Console.WriteLine("\nVajuta Enter, et jätkata...");
            Console.ReadLine();
        }

//Ül 3 Õpilased ja hinnete analüüs
        static void ÕpilasedAnalüüs()
        {
            Console.Clear();
            Console.WriteLine("Õpilased ja hinnete analüüs");

            List<Õpilane> õpilased = new List<Õpilane>()
            {
                new Õpilane("Mari", new List<int>{5, 4, 3}),
                new Õpilane("Juhan", new List<int>{4, 5, 5, 4}),
                new Õpilane("Kati", new List<int>{3, 2, 4, 5})
            };

            Console.WriteLine("\nÕpilaste keskmised hinded:");
            foreach (var õp in õpilased)
            {
                Console.WriteLine($"{õp.Nimi}: {õp.Keskmine():F2}");
            }

            var parim = õpilased.OrderByDescending(o => o.Keskmine()).First();
            Console.WriteLine($"\nParima keskmisega õpilane: {parim.Nimi}, keskmine {parim.Keskmine():F2}");

            Console.WriteLine("\nÕpilased sorteeritud keskmise järgi:");
            var sorteeritud = õpilased.OrderByDescending(o => o.Keskmine()).ToList();
            foreach (var õp in sorteeritud)
            {
                Console.WriteLine($"{õp.Nimi}: {õp.Keskmine():F2}");
            }

            Console.WriteLine("\nVajuta Enter, et jätkata...");
            Console.ReadLine();
        }

//Ül 4 Filmide kogu
        static void FilmideKogu()
        {
            Console.Clear();
            Console.WriteLine("Filmide kogu\n");

            // Loome filmide listi
            List<Film> filmid = new List<Film>
            {
                new Film("Inception", 2010, "Sci-Fi"),
                new Film("The Dark Knight", 2008, "Action"),
                new Film("Interstellar", 2014, "Sci-Fi"),
                new Film("The Godfather", 1972, "Drama"),
                new Film("Avengers: Endgame", 2019, "Action")
            };

            // 1) Leia kõik Sci-Fi filmid
            Console.WriteLine("=== Sci-Fi filmid ===");
            var scifi = filmid.Where(f => f.Zanr == "Sci-Fi").ToList();
            foreach (var f in scifi)
                Console.WriteLine($"{f.Pealkiri} ({f.Aasta})");

            // 2) Leia uusim film
            Console.WriteLine("\n=== Uusim film ===");
            var uusim = filmid.OrderByDescending(f => f.Aasta).First();
            Console.WriteLine($"{uusim.Pealkiri} ({uusim.Aasta})");

            // 3) Grupeerime žanri järgi
            Console.WriteLine("\n=== Filmid žanrite kaupa ===");
            var grupp = filmid.GroupBy(f => f.Zanr);
            foreach (var g in grupp)
            {
                Console.WriteLine($"\nŽanr: {g.Key}");
                foreach (var f in g)
                    Console.WriteLine($" - {f.Pealkiri} ({f.Aasta})");
            }

            Console.WriteLine("\nVajuta Enter, et jätkata...");
            Console.ReadLine();
        }

//ül5 Arvude massiivi statistika
        static void Arvude_massiivi_statistika()
        {
            Console.Clear();
            Console.WriteLine("Arvude massiivi statistika\n");

            // Küsi kasutajalt arvud
            double[] arvud = Tekstist_arvud();

            // Arvuta maksimum, miinimum, summa, keskmine
            double max = arvud.Max();
            double min = arvud.Min();
            double sum = arvud.Sum();
            double avg = arvud.Average();

            // Loeme, mitu arvu on suuremad kui keskmine
            int rohkemKuinKeskmine = arvud.Count(a => a > avg);

            // Väljasta tulemused
            Console.WriteLine($"\nMaksimaalne arv: {max}");
            Console.WriteLine($"Minimaalne arv: {min}");
            Console.WriteLine($"Arvude summa: {sum}");
            Console.WriteLine($"Keskmine: {avg:F2}");
            Console.WriteLine($"Arve suuremaid kui keskmine: {rohkemKuinKeskmine}");

            // Boonus: järjestatud massiiv
            Array.Sort(arvud);
            Console.WriteLine("\nArvud järjestatuna:");
            foreach (double a in arvud)
            {
                Console.Write(a + " ");
            }
            Console.WriteLine("\n\nVajuta Enter, et jätkata...");
            Console.ReadLine();
        }

//ül6 Lemmikloomade register
        static void Lemmikloomade_register()
        {
            Console.Clear();
            Console.WriteLine("Arvude massiivi statistika\n");

            Console.Clear();
            Console.WriteLine("=== Lemmikloomade register ===\n");

            List<Lemmikloom> lemmikud = new List<Lemmikloom>();

            // Küsi vähemalt 5 lemmiklooma andmed
            for (int i = 0; i < 5; i++)
            {
                Console.WriteLine($"Sisesta {i + 1}. lemmiklooma andmed:");
                Console.Write("Nimi: ");
                string nimi = Console.ReadLine();
                Console.Write("Liik (nt kass, koer): ");
                string liik = Console.ReadLine();
                Console.Write("Vanus: ");
                int vanus = int.Parse(Console.ReadLine());

                lemmikud.Add(new Lemmikloom(nimi, liik, vanus));
                Console.WriteLine();
            }

            // Lisa valik veel andmeid lisada
            while (true)
            {
                Console.Write("Kas soovid lisada veel lemmikloomi? (jah/ei): ");
                string vastus = Console.ReadLine().ToLower();
                if (vastus == "jah")
                {
                    Console.WriteLine($"Sisesta lemmiklooma andmed:");
                    Console.Write("Nimi: ");
                    string nimi = Console.ReadLine();
                    Console.Write("Liik: ");
                    string liik = Console.ReadLine();
                    Console.Write("Vanus: ");
                    int vanus = int.Parse(Console.ReadLine());

                    lemmikud.Add(new Lemmikloom(nimi, liik, vanus));
                    Console.WriteLine();
                }
                else
                    break;
            }

            // Kuvab kõik kassid
            Console.WriteLine("\n=== Kõik kassid ===");
            var kassid = lemmikud.Where(l => l.Liik.ToLower() == "kass").ToList();
            if (kassid.Count > 0)
            {
                foreach (var kass in kassid)
                    Console.WriteLine($"{kass.Nimi}, {kass.Vanus} aastat");
            }
            else
                Console.WriteLine("Ei leitud ühtegi kassi.");

            // Arvuta keskmine vanus
            double keskmineVanus = lemmikud.Average(l => l.Vanus);
            Console.WriteLine($"\nKeskmine vanus: {keskmineVanus:F2} aastat");

            // Leia vanim lemmikloom
            var vanim = lemmikud.OrderByDescending(l => l.Vanus).First();
            Console.WriteLine($"Vanim lemmikloom: {vanim.Nimi} ({vanim.Liik}), {vanim.Vanus} aastat");

            // Boonus: otsing nime järgi
            Console.Write("\nOtsi looma nime järgi: ");
            string otsiNimi = Console.ReadLine().ToLower();
            var leitud = lemmikud.Where(l => l.Nimi.ToLower().Contains(otsiNimi)).ToList();
            if (leitud.Count > 0)
            {
                Console.WriteLine("Leitud lemmikloomad:");
                foreach (var l in leitud)
                    Console.WriteLine($"{l.Nimi}, {l.Liik}, {l.Vanus} aastat");
            }
            else
                Console.WriteLine("Ei leitud ühtegi looma selle nimega.");

            Console.WriteLine("\nVajuta Enter, et tagasi menüüsse...");
            Console.ReadLine();
        }

//ül7 Valuutakalkulaator
        static void Valuutakalkulaator()
        {
            Console.Clear();
            Console.WriteLine("Arvude massiivi statistika\n");

            // Loome valuutad
            List<Valuuta> valuutad = new List<Valuuta>
            {
                new Valuuta("USD", 1.05),   // 1 EUR = 1.05 USD
                new Valuuta("GBP", 0.87),   // 1 EUR = 0.87 GBP
                new Valuuta("JPY", 145.0),  // 1 EUR = 145 JPY
                new Valuuta("CHF", 0.97),   // 1 EUR = 0.97 CHF
                new Valuuta("EUR", 1.0)
            };

            // Boonus: mugavam otsing Dictionary abil
            Dictionary<string, Valuuta> valuutaDict = valuutad.ToDictionary(v => v.Nimetus.ToUpper(), v => v);

            Console.WriteLine("Valuutad: " + string.Join(", ", valuutad.Select(v => v.Nimetus)));

            // Küsi kasutajalt summa ja valuutanimi
            Console.Write("\nSisesta summa: ");
            double summa = double.Parse(Console.ReadLine());
            Console.Write("Sisesta valuutanimi (nt USD): ");
            string nimetus = Console.ReadLine().ToUpper();

            if (!valuutaDict.ContainsKey(nimetus))
            {
                Console.WriteLine("Sellist valuutat ei leitud!");
                Console.WriteLine("\nVajuta Enter, et tagasi menüüsse...");
                Console.ReadLine();
                return;
            }

            Valuuta val = valuutaDict[nimetus];

            // Arvuta mitu EUR-i see summa on
            double eurid = summa / val.KurssEurSuhte;
            Console.WriteLine($"\n{summa} {val.Nimetus} = {eurid:F2} EUR");

            // Arvuta vastupidi: mitu USD saab EUR-i eest
            if (valuutaDict.ContainsKey("USD"))
            {
                double usd = eurid * valuutaDict["USD"].KurssEurSuhte;
                Console.WriteLine($"{eurid:F2} EUR = {usd:F2} USD");
            }

            Console.WriteLine("\nVajuta Enter, et tagasi menüüsse...");
            Console.ReadLine();
        }
        
//Klassid
// Lemmikloom klass
        class Lemmikloom
        {
            public string Nimi { get; set; }
            public string Liik { get; set; }
            public int Vanus { get; set; }

            public Lemmikloom(string nimi, string liik, int vanus)
            {
                Nimi = nimi;
                Liik = liik;
                Vanus = vanus;
            }
        }

// Klass Film
        class Film
        {
            public string Pealkiri { get; set; }
            public int Aasta { get; set; }
            public string Zanr { get; set; }

            public Film(string pealkiri, int aasta, string zanr)
            {
                Pealkiri = pealkiri;
                Aasta = aasta;
                Zanr = zanr;
            }
        }

// Klass Õpilane (jääb samaks)
        class Õpilane
        {
            public string Nimi { get; set; }
            public List<int> Hinded { get; set; }

            public Õpilane(string nimi, List<int> hinded)
            {
                Nimi = nimi;
                Hinded = hinded;
            }

            public double Keskmine()
            {
                return Hinded.Average();
            }
        }

// Valuuta klass
        class Valuuta
        {
            public string Nimetus { get; set; }
            public double KurssEurSuhte { get; set; } // 1 EUR = x valuutat

            public Valuuta(string nimetus, double kurssEurSuhte)
            {
                Nimetus = nimetus;
                KurssEurSuhte = kurssEurSuhte;
            }
        }
  1. Projekti loomine, ikooni lisamine ja arvutamine. Teoria+Praaktika
  1. Ava Visual Studio 2019Create a new Project → vali Console App (.NET Framework).
  2. Määra projekti nimi (näiteks: Kordamine).
  3. Loo fail StartClass.cs.

Lihtsaim C# programm:

class StartClass
{
    public static void Main(string[] args)
    {
        Console.WriteLine("Tere tulemast!");
    }
}

  • Main on programmi stardikoht.
  • Console.WriteLine() kuvab teksti ekraanile.

2. Käivituskirje ja ikooni määramine

  • Menüü: Project → Properties
  • Startup object: valime StartClass.cs
  • Icon: valime sobiva .ico faili.

3. Tekstisisendi kasutamine

  • Muutujate abil saab talletada kasutaja sisestust.
  • Näide:
class StartClass
{
    public static void Main(string[] args)
    {
        Console.WriteLine("Tere tulemast!");
        string eesnimi = Console.ReadLine(); // kasutaja sisend
        Console.WriteLine("Tere, " + eesnimi);
        Console.ReadLine(); // peatab programmi ekraanil
    }
}

  • Console.ReadLine() loeb teksti sisendi.
  • Teksti ühendamiseks stringiga kasutatakse +.

4. Arvutamine

  • Näide kahe arvu korrutamiseks:
class StartClass
{
    public static void Main(string[] args)
    {
        Console.WriteLine("Tere tulemast!");
        string eesnimi = Console.ReadLine();
        Console.WriteLine("Tere, " + eesnimi);

        Console.Write("Sisesta esimene arv: ");
        int arv1 = int.Parse(Console.ReadLine());

        Console.Write("Sisesta teine arv: ");
        int arv2 = int.Parse(Console.ReadLine());

        int korrutis = arv1 * arv2;
        Console.WriteLine("Arvude {0} ja {1} korrutis on            {2}", arv1, arv2, korrutis);

        Console.ReadLine();
    }
}

  • int.Parse() teisendab stringi täisarvuks.
  • Console.WriteLine võimaldab kasutada formaaditud stringe {0}, {1}, {2}.

5. Täiendused ja head praktikad

  • Tüüpide teisendamine: double arv = double.Parse(Console.ReadLine());
  • Töö kasutaja valikuga (menüü või tsükkel): while(true) { Console.WriteLine("Vali tegevus: 1-Korrutamine, 0-Lõpeta"); string valik = Console.ReadLine(); if(valik == "0") break; }
  • Muutujate nimed peaksid olema kirjeldavad (eesnimi, vanus, summa).
  • Kommentaarid aitavad koodi selgitada: // ühe rea kommentaar, /* ... */ mitme rea.

6. Boonusidee

  • Sisse- ja väljundfunktsioonide eraldamine: static int LoeArv(string tekst) { Console.Write(tekst); return int.Parse(Console.ReadLine()); }
  • Võimaldab koodi modulaarsemaks muuta ja vähendab korduvat koodi.



2. osa C# Valikute konstruktsionid

1. Valikute mõiste

  • Valikud võimaldavad programmil käituda erinevalt sõltuvalt tingimustest.
  • Peamised konstruktsioonid:
    • if / else if / else
    • switch

2. If / Else näide

public static void Main(string[] args)
{
    Console.WriteLine("Tere tulemast!");
    string eesnimi = Console.ReadLine();
    Console.WriteLine("Tere, " + eesnimi);

    if (eesnimi.ToLower() == "juku") // tingimus
    {
        Console.WriteLine("Tule minu juurde külla!");
    }
    else
    {
        Console.WriteLine("Täna mind kodus pole!");
    }

    int arv1 = int.Parse(Console.ReadLine());
    int arv2 = int.Parse(Console.ReadLine());
    Console.WriteLine("Arvude {0} ja {1} korrutis võrdub {2}", arv1, arv2, arv1 * arv2);
    Console.ReadLine();
}

Selgitus:

  • .ToLower() teisendab teksti väikesteks tähtedeks, et tingimus ei sõltuks kasutaja sisestusest (Juku = juku).
  • if kontrollib tingimust, else käivitub, kui tingimus pole tõene.
  • Võib kasutada ka else if mitme tingimuse jaoks.

3. Switch näide: kuu nimetuse dekodeerimine

public static string Kuu_nimetus(int kuu_nr)
{
    string kuu = "";
    switch (kuu_nr)
    {
        case 1: kuu = "Jaanuar"; break;
        case 2: kuu = "Veebruar"; break;
        case 3: kuu = "Märts"; break;
        case 4: kuu = "Aprill"; break;
        case 5: kuu = "Mai"; break;
        case 6: kuu = "Juuni"; break;
        case 7: kuu = "Juuli"; break;
        case 8: kuu = "August"; break;
        case 9: kuu = "September"; break;
        case 10: kuu = "Oktoober"; break;
        case 11: kuu = "November"; break;
        case 12: kuu = "Detsember"; break;
        default: kuu = "???"; break; // vigane sisend
    }
    return kuu;
}

Selgitus:

  • switch valib ühe konkreetse väärtuse põhjal.
  • break lõpetab iga case’i täitmise.
  • default käsitleb kõiki teisi väärtusi.

4. If/Else näide: hooaja määramine

public static string Hooaeg(int kuu_nr)
{
    string hoo = "";

    if (kuu_nr == 12 || kuu_nr == 1 || kuu_nr == 2) // Talv
    {
        hoo = "Talv";
    }
    else if (kuu_nr &gt;= 3 &amp;&amp; kuu_nr &lt;= 5) // Kevad
    {
        hoo = "Kevad";
    }
    else if (kuu_nr &gt;= 6 &amp;&amp; kuu_nr &lt;= 8) // Suvi
    {
        hoo = "Suvi";
    }
    else if (kuu_nr &gt;= 9 &amp;&amp; kuu_nr &lt;= 11) // Sügis
    {
        hoo = "Sügis";
    }
    else
    {
        hoo = "???"; // Vigane kuu
    }

    return hoo;
}

Selgitus:

  • || tähendab või (or)
  • && tähendab ja (and)
  • Tingimusi saab kombineerida ja järjestada, et katta kõik võimalikud olukorrad.

5. Täiendused ja head praktikad

  1. Sisendi kontrollimine:
bool ok = int.TryParse(Console.ReadLine(), out int kuu_nr);
if (!ok) Console.WriteLine("Vale sisend!");

  1. If/Else vs Switch:
    • if sobib keerukate tingimuste jaoks.
    • switch sobib ühe muutuja konkreetsete väärtuste kontrolliks.
  2. Koodi selgus:
    • Kasuta selgeid muutujanimesid (kuu_nr, hoo, eesnimi).
    • Kommentaarid aitavad mõista, millist tingimust kontrollitakse.



3. osa C# Kordused, massiivid ja klassid

1.1 while – tingimus kontrollitakse enne ploki täitmist

int nr = 1;
while (nr &lt;= 5)
{
    Console.WriteLine("Tere, {0}. matkaja!", nr);
    nr = nr + 1; // või nr++
}

  • Kasutatakse, kui korduste arvu ei pruugi ette teada.
  • Tingimus nr <= 5 määrab, mitu korda plokk täidetakse.

1.2 for – lühike kordusformaad

for (int nr = 1; nr &lt;= 5; nr++)
{
    Console.WriteLine("Tere, {0}. matkaja!", nr);
}

  • Algväärtus → nr=1
  • Tingimus → nr <= 5
  • Iteratsioon → nr++

1.3 do…while – plokk täidetakse vähemalt üks kord

int nr = 0;
do
{
    Console.WriteLine("Tere, {0}. matkaja!", nr);
    nr++;
} while (nr != 5);

  • Tingimus kontrollitakse pärast ploki täitmist.
  • Sobib, kui soovitakse vähemalt ühte läbimist (näiteks sisendkontroll).

2. Massiivid (Arrays)

string[] nimed = new string[8] {"A","B","C","D","E","F","G","H"};
nimed[2] = "Anna";

Massiivi läbimine

int nr = 0;
while (nr &lt; nimed.Length)
{
    Console.WriteLine("Tere, {0} õpilane", nimed[nr]);
    nr++;
}

for (int i = 0; i &lt; nimed.Length; i++)
{
    Console.WriteLine("Tere, {0} õpilane", nimed[i]);
}

foreach (var nimi in nimed)
{
    Console.WriteLine("Tere, {0} õpilane", nimi);
}

nr = 0;
do
{
    Console.WriteLine("Tere, {0} õpilane", nimed[nr]);
    nr++;
} while (nr != nimed.Length);

Selgitus:

  • nimed.Length annab massiivi pikkuse.
  • foreach on mugav lugemiseks ja lihtsustab koodi.

3. Klassid ja objektid

class Isik
{
    public string Nimi;
    public int Vanus;

    public void Tervita()
    {
        Console.WriteLine("Tere, minu nimi on " + Nimi);
    }
}

static void Main()
{
    List&lt;Isik&gt; inimesed = new List&lt;Isik&gt;();

    for (int i = 0; i &lt; 3; i++)
    {
        Console.Write("Sisesta nimi: ");
        string nimi = Console.ReadLine();

        Console.Write("Sisesta vanus: ");
        int vanus = int.Parse(Console.ReadLine());

        Isik uusIsik = new Isik();
        uusIsik.Nimi = nimi;
        uusIsik.Vanus = vanus;

        inimesed.Add(uusIsik);
    }

    Console.WriteLine("\nKõik inimesed tervitavad:\n");
    foreach (Isik isik in inimesed)
    {
        isik.Tervita();
    }
}

  • Klassid sisaldavad andmeid (väljad) ja meetodeid (funktsioonid).
  • Objekte saab talletada List või massiividesse.

4. Tuples – mitme väärtuse talletamine ilma klassita

Tuple&lt;float, char, string&gt; minuTuple = new Tuple&lt;float, char, string&gt;(3.14f, 'A', "Programmeerimine");

Console.WriteLine("Esimene: " + minuTuple.Item1); // 3.14
Console.WriteLine("Teine: " + minuTuple.Item2);   // A
Console.WriteLine("Kolmas: " + minuTuple.Item3);  // Programmeerimine

  • Sobib väikeste andmehulkade jaoks, kui eraldi klassi loomine oleks liiga mahukas.
  • Item1, Item2, Item3 viitavad vastavatele väärtustele.

5. Head praktikad

  1. Korduste konstruktsioonide valik sõltub korduste arvust ja tingimustest:
    • while – tundmatu korduste arv
    • for – teadaolev korduste arv
    • do…while – vähemalt üks kord peab läbima
  2. Muutujate selged nimed (nr, nimi, vanus) parandavad koodi loetavust.
  3. Massiive ja List-e saab kombineerida klassidega mugavamaks andmete haldamiseks.
  4. Tuple sobib väikesteks andmekogumiks, ilma et peaks klassi looma.



4. osa C# Failitöötlus

1. Faili kirjutamine (StreamWriter)

try
{
    string path = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Kuud.txt");
    
    // Faili kirjutamine, lisades sisu lõppu (true)
    using (StreamWriter sw = new StreamWriter(path, true))
    {
        Console.WriteLine("Sisesta mingi tekst:");
        string lause = Console.ReadLine();
        sw.WriteLine(lause);
    } // Fail suletakse automaatselt
}
catch (Exception)
{
    Console.WriteLine("Mingi viga failiga!");
}

Selgitus:

  • true → lisab faili lõppu, ei kirjutata üle.
  • using plokis fail suletakse automaatselt.
  • Fail salvestatakse projektikausta.

2. Faili lugemine (StreamReader)

try
{
    string path = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Kuud.txt");

    using (StreamReader sr = new StreamReader(path))
    {
        string sisu = sr.ReadToEnd();
        Console.WriteLine(sisu);
    }
}
catch (Exception)
{
    Console.WriteLine("Viga failiga, ei saa lugeda!");
}

  • ReadToEnd() loeb kogu faili korraga.
  • Fail tuleb alati sulgeda või kasutada using.

3. Ridade lugemine List<string> abil

List&lt;string&gt; kuude_list = new List&lt;string&gt;();
try
{
    string path = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Kuud.txt");
    foreach (string rida in File.ReadAllLines(path))
    {
        kuude_list.Add(rida);
    }
}
catch (Exception)
{
    Console.WriteLine("Viga failiga!");
}


4. Listi muutmine ja kuvamine

foreach (string kuu in kuude_list)
{
    Console.WriteLine(kuu);
}

// Eemalda "Juuni"
kuude_list.Remove("Juuni");

// Muuda esimest elementi
if (kuude_list.Count &gt; 0)
    kuude_list[0] = "Veeel kuuu";

Console.WriteLine("--------------Kustutasime juuni-----------");
foreach (string kuu in kuude_list)
{
    Console.WriteLine(kuu);
}


5. Otsing nimekirjast

Console.WriteLine("Sisesta kuu nimi, mida otsida:");
string otsitav = Console.ReadLine();

if (kuude_list.Contains(otsitav))
    Console.WriteLine("Kuu " + otsitav + " on olemas.");
else
    Console.WriteLine("Sellist kuud pole.");


6. Listi salvestamine tagasi faili

string path = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Kuud.txt");
File.WriteAllLines(path, kuude_list);
Console.WriteLine("Andmed on salvestatud.");


7. Faili olemasolu kontroll

if (!File.Exists(path))
{
    File.WriteAllLines(path, new string[] { "Jaanuar", "Veebruar", "Märts" });
}

  • Kasuta Path.Combine failitee koostamiseks – töötab igal süsteemil.
  • Failid alati sulgeda või kasutada using.

✅ Kokkuvõte – oskused

OskusÕpitud tegevus
FailikirjutusStreamWriter, WriteLine()
FaililugemineStreamReader, ReadToEnd(), File.ReadAllLines()
Vigade käsitleminetry-catch
AndmestruktuuridList<string>, lisamine, muutmine, kustutamine
Failitee kasutaminePath.Combine, AppDomain.CurrentDomain.BaseDirectory
Otsing ja salvestusContains(), WriteAllLines()



5. osa C# Kollektsioonid. Listid ja sõnastikud. Meetodid ja näidised

1. ArrayList (System.Collections)

  • Dünaamiline kogumik, mille suurust ei pea ette määrama.
  • Elementide tüüp ei ole piiratud (ei ole tugevalt tüübistatav).

Peamised meetodid:

MeetodSelgitus
Add(item)Lisa element lõppu
Contains(item)Kontrolli, kas element on olemas
CountTagastab elementide arvu
Insert(index, item)Lisa element kindlasse kohta
IndexOf(item)Leiab indeksi
Sort()Järjestab elemendid kasvavalt

Näide:

ArrayList nimed = new ArrayList();
nimed.Add("Kati");
nimed.Add("Mati");
nimed.Add("Juku");

if (nimed.Contains("Mati"))
    Console.WriteLine("Mati olemas");

nimed.Insert(1, "Sass");
Console.WriteLine("Mati indeks: " + nimed.IndexOf("Mati"));

foreach (string nimi in nimed)
    Console.WriteLine(nimi);

Märkus: ArrayList on vanem struktuur, tänapäeval eelistatakse List<T>.


2. Tuple

  • Kindla suuruse ja tüübitüübiga andmestruktuur.
  • Elemendid võivad olla erinevat tüüpi.

Näide:

Tuple&lt;float, char&gt; route = new Tuple&lt;float, char&gt;(2.5f, 'N');
Console.WriteLine($"Vahemaa: {route.Item1}, Suund: {route.Item2}");

  • Item1, Item2 … viitavad elementidele.
  • Sobib ajutiseks mitme väärtuse salvestamiseks ilma klassita.

3. List<T> (System.Collections.Generic)

  • Tugevalt tüübistatav geneeriline kogumik.
  • Kõige sagedamini kasutatav andmestruktuur igapäevases arenduses.

Peamised meetodid:

MeetodSelgitus
Add(item)Lisa üks element
AddRange(collection)Lisa mitu elementi korraga
IndexOf(item)Leia element
Remove(item)Eemalda element
RemoveAt(index)Eemalda element kindlast kohast
Insert(index, item)Lisa kindlasse kohta
Sort()Järjesta
BinarySearch(item)Kiire otsing (peab olema sorteeritud)

Näide:

class Person { public string Name { get; set; } }

List&lt;Person&gt; people = new List&lt;Person&gt;();
people.Add(new Person() { Name = "Kadi" });
people.Add(new Person() { Name = "Mirje" });

foreach (Person p in people)
    Console.WriteLine(p.Name);


4. LinkedList<T> (System.Collections.Generic)

  • Jada (linked list), kus iga element viitab järgmisele.
  • Sobib hästi, kui on vaja sageli lisada või eemaldada elemente keskel või alguses.

Peamised meetodid:

MeetodSelgitus
AddFirst(value)Lisa alguses
AddLast(value)Lisa lõppu
AddBefore(node, value)Lisa enne sõlme
AddAfter(node, value)Lisa pärast sõlme
RemoveFirst()Eemalda esimene
RemoveLast()Eemalda viimane
Remove(value)Eemalda konkreetne element

Näide:

LinkedList&lt;int&gt; loetelu = new LinkedList&lt;int&gt;();
loetelu.AddLast(5);
loetelu.AddLast(3);
loetelu.AddFirst(0);

foreach (int arv in loetelu)
    Console.WriteLine(arv);

loetelu.RemoveFirst();
loetelu.RemoveLast();
loetelu.AddLast(555);
loetelu.Remove(555);


5. Dictionary<TKey, TValue> – Sõnastik

  • Võtme-väärtuse paaride hoidmiseks.
  • Kiire otsing võtme alusel.

Peamised meetodid:

MeetodSelgitus
Add(key, value)Lisa paar
Remove(key)Eemalda paar võtme alusel
ContainsKey(key)Kontrolli võtme olemasolu
ContainsValue(value)Kontrolli väärtuse olemasolu
Keys, ValuesVõtmete ja väärtuste kogum
dictionary[key] = newValueMuuda väärtust võtme alusel

Näide:

Dictionary&lt;int, string&gt; riigid = new Dictionary&lt;int, string&gt;();
riigid.Add(1, "Hiina");
riigid.Add(2, "Eesti");
riigid.Add(3, "Itaalia");

foreach (var paar in riigid)
    Console.WriteLine($"{paar.Key} - {paar.Value}");

string pealinn = riigid[2]; // "Eesti"
riigid[2] = "Eestimaa";
riigid.Remove(3);

Klasside näide:

Dictionary&lt;char, Person&gt; inimesed = new Dictionary&lt;char, Person&gt;();
inimesed.Add('k', new Person() { Name = "Kadi" });
inimesed.Add('m', new Person() { Name = "Mait" });

foreach (var entry in inimesed)
    Console.WriteLine($"{entry.Key} - {entry.Value.Name}");




Kokkuvõte – millal millist kasutada

AndmetüüpMillal kasutada
ArrayListLihtsaks prototüüpimiseks (vanem kood, mitte soovitatav)
List<T>Enamiku tavaliste andmekogumite jaoks
LinkedList<T>Kui vaja palju lisada või muuta elemente jada keskel või alguses
Dictionary<K,V>Kiire võtme alusel andmete leidmine
Tuple<T1,T2,…>Ajutiselt mitme eri tüübi väärtuse salvestamiseks

18.09 OOP

Näide:

  1. Loome klassi Inimene
namespace TARpv24_Ckeel
{
    
    public class StartClassOOP
    {
        public ctatic void Main(string[] args)
        {
            Inimene inimenel = new Inimene();
            inimenel.Nimi = "Juku";
            inimenel.Vanus = 12;
            inimenel.Tervita();

            inimenel inimene2 = new inimene("kati", 28);

            Töötaja töötajal = new Töötaja();
            töötajal.Nimi = "Mati";
            töötajal.Vanus = 45;
            töötajal.Ametikoht = "Autojuht";
            töötajal.Tervita();
            töötajal.Töötan();
            //3 Tee ise vähemalt 2 alamklassi ja kasuta neid siin
            //4-5 Tee enda põhiklass ja 2 alamklass ning kasuta neid siin

            Ehitaja ehitajal = new Ehitaja();
            ehitajal.Nimi = "Andor";
            ehitajal.Vanus = 52;
            ehitajal.Tervita();
            ehitajal.objektiAsukoht = "Ehitaja tee 48";
            ehitajal.Töötan();
            ehitajal.tööandja = "Mati";
        }
    }
}
using System;

public class Inimene
{
	public string Nimi;
	public int vanus;

	public Inimene(string nimi, int vanus)
	{
		Nimi = nimi;
		Vanus = vanus;
		public Inimene()
		{
			Nimi = "Mati"
			Vanus = 20
		}
	}
	public void Tervita()
	{

	}
}

2.

3. Abstraktsioon

Mis on abstraktsioon?

Peidab keeruline loogika ja näitab ainult vajalikku infot.

using System;
namespace TARpv24_Ckeel
{
	public class Õpilane : Inimene
	{
		public string Rühm_Klass;
		public string Kool;
		public override void Mida_teeb()
		{
			Console.WriteLine($"{Nimi} õpib koolis."
		}
	}
}
using System;

public abstract class Inimene
{
    public string Nimi;
    public int vanus;

    public Inimene(string nimi, int vanus)
    {
        Nimi = nimi;
        Vanus = vanus;

        public Inimene()
        {
        Nimi = "Mati"

            Vanus = 20

        }

        public void Tervita()
        {
            Console.WriteLine("Tere! Mina olen " + Nimi);
        }
        public abstract void Mida_teeb();
        
    }
}

4. Kapseldamine