Guest User

Untitled

a guest
Jan 17th, 2019
102
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 12.27 KB | None | 0 0
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5.  
  6. namespace zh_gyakorlas
  7. {
  8.     class Program
  9.     {
  10.         static int[] NapiKilometer;
  11.         static int[] KilometerPerHet;
  12.         static string[] Megjegyzesek;
  13.  
  14.         // ADATOK //
  15.         /*  Hétfő       Kedd        Szerda      Csütörtök   Péntek      Szombat     Vasárnap
  16.             5 – 15 km   8 – 18 km   10 – 20 km  8 – 18 km   10 – 20 km  5 – 15 km   30 – 40 km  */
  17.  
  18.         //------- 1. FELADAT -------//
  19.         // Egy 42 elemű tömbben tárolja el, hogy a vizsgált 6 hét melyik napján mekkora távot futott a maratonista. Tudjuk, hogy minden nap az adott hosszintervallumokon belül véletlenszerűen alakult a futás mennyisége. Azt persze tudjuk, hogy az utolsó vasárnapon 42 km-et teljesített a futónk.
  20.         static void tomb_feltoltese_fiktiv_adatokkal()
  21.         {
  22.             Random veletlenszeru_szam = new Random();
  23.             for (int i = 0; i < NapiKilometer.Length; i++)
  24.             {
  25.                 // Döntsük el, hogy a hét melyik napja van
  26.                 switch ((i + 1) % 7) // Az aktuális elemhez hozzáadunk egyet, mert a tömb indexe 0-val kezdődik, majd megvizsgáljuk a 7-el történő osztás maradékát
  27.                 {
  28.                     case 1: // HÉTFŐ
  29.                     case 6: // SZOMBAT
  30.                         NapiKilometer[i] = veletlenszeru_szam.Next(5, 16);
  31.                         break;
  32.                     case 2: // KEDD
  33.                     case 4: // CSÜTÖRTÖK
  34.                         NapiKilometer[i] = veletlenszeru_szam.Next(10, 21);
  35.                         break;
  36.                     case 3: // SZERDA
  37.                     case 5: // PÉNTEK
  38.                         NapiKilometer[i] = veletlenszeru_szam.Next(8, 19);
  39.                         break;
  40.                     case 0: // VASÁRNAP
  41.                         NapiKilometer[i] = veletlenszeru_szam.Next(30, 41);
  42.                         break;
  43.                 }
  44.             }
  45.             // Miután feltöltöttük a tömb összes elemét, a verseny napját (utolsó vasárnap) módosítjuk 42-re!
  46.             NapiKilometer[NapiKilometer.Length - 1] = 42;
  47.         }
  48.  
  49.         //------- 2. FELADAT -------//
  50.         // Egy 6 elemű tömbben tárolja el, hogy melyik héten összesen hány kilométert teljesített a futónk. Ennek a tömbnek az elemeit írja is ki a konzolra.
  51.         static void hany_kilometert_tett_meg_egy_adott_heten()
  52.         {
  53.             int aktualis_het = 0; // Az aktuális hetet, amit vizsgálunk, lenullázzuk
  54.             for (int i = 0; i < NapiKilometer.Length; i++)
  55.             {
  56.                 KilometerPerHet[aktualis_het] += NapiKilometer[i]; // Az aktuális héthez hozzáadjuk az ahhoz a héthez tartozó napokon megtett kilómétereket
  57.                 if (((i + 1) % 7) == 0) // Ha eltelt egy hét, akkor az aktuális hetet megnöveljük 1-el
  58.                 {
  59.                     aktualis_het++;
  60.                 }
  61.             }
  62.  
  63.             // Kiíratjuk az összesítést
  64.             for (int i = 0; i < KilometerPerHet.Length; i++)
  65.             {
  66.                 Console.WriteLine("A(z) " + (i+1) + ". héten " + KilometerPerHet[i] + " kilómétert tett meg!");
  67.             }
  68.         }
  69.  
  70.         //------- 3. FELADAT -------//
  71.         // Döntse el, hogy a heti lefutott kilométer adagok folyamatosan növekedtek-e.
  72.         static bool folyamatosan_novekedett_e()
  73.         {
  74.             // Tehát a kérdés, hogy folyamatosan növekedett-e a heti lefutott kilóméter. Amennyiben nem, felesleges tovább vizsgálni!
  75.             int i = 0;
  76.             while ((i < (KilometerPerHet.Length - 1)) && (KilometerPerHet[i] < KilometerPerHet[i + 1])) { i++; } // Ha kisebb az aktuális elem, mint a következő, tovább haladunk
  77.             return (i == (KilometerPerHet.Length - 1)); // Amennyiben minden elem kisebb volt, az i értéke megegyezik az utolsó elem indexével
  78.         }
  79.  
  80.         // Kiíratjuk a választ
  81.         static void folyamatosan_novekedett_e_kiiras()
  82.         {
  83.             Console.Write("Minden héten többet futott? -> ");
  84.             Console.Write(folyamatosan_novekedett_e() ? "Igen!\n" : "Nem!\n");
  85.         }
  86.  
  87.         //------- 4. FELADAT -------//
  88.         // Határozza meg, hogy versenyzőnk melyik napon teljesítette a legrövidebb távot.
  89.         static int legrovidebb_tav()
  90.         {
  91.             int legrovidebb_tavu_nap = 0; // Ebben a változóban tároljuk az eddigi legrövidebb távú nap INDEXÉT
  92.             int aktualis_nap = 0; // Ebben a változóban tároljuk az éppen vizsgált nap INDEXÉT
  93.             while (aktualis_nap < NapiKilometer.Length)
  94.             {
  95.                 if (NapiKilometer[aktualis_nap] < NapiKilometer[legrovidebb_tavu_nap])
  96.                 {
  97.                     legrovidebb_tavu_nap = aktualis_nap; // Amennyiben az aktuális napon rövidebb távot tett meg, mint az eddigi legrövidebb távú nap, az aktuális nap lesz a legrövidebb távú nap
  98.                 }
  99.                 aktualis_nap++;
  100.             }
  101.             return legrovidebb_tavu_nap; // CSAK AZ INDEXEL TÉR VISSZA!!
  102.         }
  103.  
  104.         // Kiíratjuk a napot
  105.         static void legrovidebb_tavu_nap_kiiras()
  106.         {
  107.             Console.WriteLine("A " + (legrovidebb_tav() + 1) + ". napon teljesítette a legrövidebb távot!"); // Mivel az indexelés 0-tól kezdődik, így a nap sorszámát akkor kapjuk meg, ha hozzáadunk egyet
  108.         }
  109.  
  110.         //------- 5. FELADAT -------//
  111.         // Tegye lehetővé, hogy a program felhasználója az egyes napokhoz megjegyzéseket is fűzzön. (Pl. „verseny”, „terep”, „laza”, „fartlek”, „résztáv”, stb.) Egy naphoz több megjegyzés is hozzáfűzhető, ebben az esetben a megjegyzések egymástól vesszővel és szóközzel vannak elválasztva (pl. „terep, fartlek”). (A program kérdezze meg, hogy hány futáshoz akarunk megjegyzést fűzni, majd kérdezze meg az adott edzés sorszámát és a hozzáfűzendő megjegyzést. A program figyeljen arra, hogy a megjegyzés a megfelelő formátumban legyen megadva.)
  112.         static void megjegyzesek_a_futashoz()
  113.         {
  114.             Console.Write("Hány megjegyzést akar tenni? (0-" + NapiKilometer.Length + "): ");
  115.             int megjegyzesek_szama = 0; // Itt tároljuk, hogy a felhasználó, hány bejegyzéshez szeretne hozzászólni
  116.             while ((megjegyzesek_szama <= 0) || (megjegyzesek_szama > NapiKilometer.Length)) // Amíg nem elfogadható az érték, addig újra bekérjük
  117.             {
  118.                 try // Számot kért-e be
  119.                 {
  120.                     megjegyzesek_szama = int.Parse(Console.ReadLine());
  121.                 }
  122.                 catch (Exception) // Ha nem, akkor beállítunk egy hibás értéket
  123.                 {
  124.                     megjegyzesek_szama = 0;
  125.                 }
  126.                 if ((megjegyzesek_szama <= 0) || (megjegyzesek_szama > NapiKilometer.Length)) // Erre azért van szükség, hogy a felhasználót értesíteni tudjuk a hibás értékadásról
  127.                 {
  128.                     Console.Write("Nem megfelelő értéket adott meg! (0-" + NapiKilometer.Length + "): ");
  129.                 }
  130.             }
  131.             // Amennyiben tudjuk, hogy hány megjegyzést szeretne tenni, kérjük be a sorszámot és a megjegyzést
  132.  
  133.             int nap_amihez_hozza_szeretne_szolni = 0; // Ez a változó tárolja, hogy éppen melyik naphoz szeretne hozzászólni a felhasználó. NEM INDEX!
  134.             for (int i = 0; i < megjegyzesek_szama; i++)
  135.             {
  136.                 Console.Write("Melyik naphoz szeretne hozzászólni? (0-" + NapiKilometer.Length + "): ");
  137.                 while ((nap_amihez_hozza_szeretne_szolni <= 0) || (nap_amihez_hozza_szeretne_szolni > NapiKilometer.Length)) // Amíg nem elfogadható az érték, addig újra bekérjük
  138.                 {
  139.                     try // Számot kért-e be
  140.                     {
  141.                         nap_amihez_hozza_szeretne_szolni = int.Parse(Console.ReadLine());
  142.                     }
  143.                     catch (Exception) // Ha nem, akkor beállítunk egy hibás értéket
  144.                     {
  145.                         nap_amihez_hozza_szeretne_szolni = 0;
  146.                     }
  147.                     if ((nap_amihez_hozza_szeretne_szolni <= 0) || (nap_amihez_hozza_szeretne_szolni > NapiKilometer.Length)) // Erre azért van szükség, hogy a felhasználót értesíteni tudjuk a hibás értékadásról
  148.                     {
  149.                         Console.Write("Nem megfelelő értéket adott meg! (0-" + NapiKilometer.Length + "): ");
  150.                     }
  151.                 }
  152.                 // Most már tudjuk a napot és azt is, hogy létezik ilyen eleme a tömbnek; bekérhetjük a megjegyzést
  153.                 bool tobb_megjegyzes = true; // Ha több megjegyzést akarna adni egy elemhez
  154.                 Console.Write(" -- A " + nap_amihez_hozza_szeretne_szolni + ". nap megjegyzése: ");
  155.                 Megjegyzesek[nap_amihez_hozza_szeretne_szolni - 1] = Convert.ToString(Console.ReadLine()); // Megadja a megjegyzést
  156.                 while (tobb_megjegyzes)
  157.                 {
  158.                     Console.Write(" -- Szeretne ehhez további megjegyzést tenni? (I/N): ");
  159.                     if (Convert.ToString(Console.ReadLine()).ToUpper() == "I") // Ha a válasz "I" akkor bekér az aktuális naphoz még megjegyzést
  160.                     {
  161.                         Console.Write(" -- További megjegyzés a " + nap_amihez_hozza_szeretne_szolni + ". naphoz: ");
  162.                         Megjegyzesek[nap_amihez_hozza_szeretne_szolni - 1] += ", " + Console.ReadLine(); // Hozzáfűzi ", " karakterekkel az előző értékhez
  163.                     }
  164.                     else
  165.                     {
  166.                         tobb_megjegyzes = false;
  167.                     }
  168.                 }
  169.                 nap_amihez_hozza_szeretne_szolni = 0; // Lenullázzuk a változót, így bekérhetjük a következő nap sorszámát
  170.             }
  171.         }
  172.  
  173.         //------- 6. FELADAT -------//
  174.         // Írja ki a konzolra, hogy volt-e olyan nap, amikor a futó „résztáv”-os edzést végzett, amelynek hossza legalább 15 km volt. Ha volt ilyen nap, akkor annak sorszáma is kerüljön kiírásra.
  175.         static void volt_e_15kmes_resztav()
  176.         {
  177.             int i = 0; bool talalt = false;
  178.             while (i < NapiKilometer.Length && !talalt)
  179.             {
  180.                 if (NapiKilometer[i] >= 15 && tartalmazza_e_a_kifejezest(Megjegyzesek[i], "résztáv"))
  181.                 {
  182.                     talalt = true;
  183.                 }
  184.                 i++;
  185.             }
  186.  
  187.             // Kiírja a találatot
  188.             Console.WriteLine(talalt ? "Igen, a " + i + ". nap!" : "Nem talált!");
  189.         }
  190.  
  191.         static bool tartalmazza_e_a_kifejezest(string vizsgalando, string kifejezes)
  192.         {
  193.             if (vizsgalando != null) // Erre azért van szükség, mert a tömb "üres" elemei null értéket kapnak, így a Contains elszáll
  194.             {
  195.                 return vizsgalando.Contains(kifejezes); // Ha tartalmazza, igaz értékkel tér vissza
  196.             }
  197.             else
  198.             {
  199.                 return false;
  200.             }
  201.         }
  202.  
  203.  
  204.         //------- FŐ METÓDUS -------//
  205.         static void Main(string[] args)
  206.         {
  207.             NapiKilometer = new int[42];
  208.             KilometerPerHet = new int[6];
  209.             Megjegyzesek = new string[42];
  210.  
  211.             Console.WriteLine("***************** 1. FELADAT *****************");
  212.             tomb_feltoltese_fiktiv_adatokkal();
  213.             Console.WriteLine("Adatok felvétele megtörtént!");
  214.  
  215.             Console.WriteLine("\n***************** 2. FELADAT *****************");
  216.             hany_kilometert_tett_meg_egy_adott_heten();
  217.  
  218.             Console.WriteLine("\n***************** 3. FELADAT *****************");
  219.             folyamatosan_novekedett_e_kiiras();
  220.  
  221.             Console.WriteLine("\n***************** 4. FELADAT *****************");
  222.             legrovidebb_tavu_nap_kiiras();
  223.  
  224.             Console.WriteLine("\n***************** 5. FELADAT *****************");
  225.             megjegyzesek_a_futashoz();
  226.  
  227.             Console.WriteLine("\n***************** 6. FELADAT *****************");
  228.             volt_e_15kmes_resztav();
  229.             Console.ReadKey();
  230.         }
  231.     }
  232. }
Add Comment
Please, Sign In to add comment