Keresés


Toplista

Toplista
  • betöltés...

Magántanár kereső

Ha szívesen korrepetálnál, hozd létre magántanár profilodat itt.
Ha diák vagy és korrepetálásra van szükséged, akkor regisztrálj be és írd meg itt, hogy milyen tantárgyban!

C# programozás

315
A parkolóban 1,5 óra parkolás ingyen van. Minden további óra 300 Ft.-ba kerül

a. Kérjük be a parkolás kezdeti idejét, és határozzuk meg az ingyenesség végének az idejét

b. Kérjük be a parkolás végét is , és határozzuk meg a fizetendő összeget.
Előre is köszönöm a megoldást!
Jelenleg 1 felhasználó nézi ezt a kérdést.
sos, programozás, c#, Csharp, T1C
0
Középiskola / Informatika

Válaszok

2
Helló!
Sajnos C#-ban nem vagyok jártas szóval így konkrét kóddal nem tudlak kisegíteni.
Ötletet esetleg adhatok, hogy hogy gondolkozz. Én például úgy kezdenék neki, hogy bekérem a felhasználótól az időt, majd ezt átalakítom percre. Pl ha azt írja be hogy 16:30, akkor azt átalakítom 16*60+30-ra, ami 990 perc. Innentől egyszerű az "ingyenesség" kiszámolása. 1,5, azaz 1 óra 30 perc, ami 90 perc ingyen van. Tehát 990 + 90 = 1080 perc. Kiszámoltatom hány egésszer van meg ebben a 60, az lesz az óra és a maradék a perc (ha van maradék). Itt ez 18:00 lesz.

Ha a parkolás kezdetét és végét is bekérjük, pl: kezdete: 12:34, vége 17:23, akkor a 17:23 percben 1043 perc ebből kivonjuk a 12:34-et percbent 754-et. Így az eltelt idő 289, amiből ugye 90 (a másfél óra) ingyenes, tehát tovább a 199-el számolunk.
199-ben a 60 3 egésszer van meg, tehát 3*300-at fizetünk, azaz 900 Ft-ot.

(Persze itt figyelni kell olyan esetekre, mint pl ha a kezdet 22:23 a vége 03:12. Ebben az esetben az előző nem jó, de ezt is kezelni kell. Ilyenkor elmegyünk először 00:00-ig és ahhoz adjuk hozzá a 03:12-t.)
0

Szia :)

Először is szeretnék reagálni az első válaszra, ami a kérdéshez érkezett. Mivel az első válaszoló nem jártas C#-ban, emiatt nem ismerhet bizonyos lehetőségeket, viszont ettől függetlenül is lényeges bizonyos dolgokra oda kell figyelni, legalábbis szerintem. Egy ilyen fontos dolog az, hogy a parkolás időtartama lehet több nap is, így figyelembe kell venni a dátumot is. Az ő példájában egyik napról a másikra még jól működik, de ha én 3,5 napot parkolok ott, akkor nem jó a számolás hozzá. A másik fontos dolog, hogy a megkezdett órákért is szokás fizetni, így ha én 5 órát parkolok és abból 1,5 ingyenes, akkor 3,5 az ott töltött idő, de mivel a 3 óra után egy új órát már megkezdtem, így nekem 4 óráért kell fizetnem.

A megoldásom a fentiek alapján a következő:

Console.WriteLine("Kérlek add meg a parkolás kezdetének időpontját éééé-hh-nn HH:mm formában, pl. 2021-02-04 08:00");
var Kezdes = Convert.ToDateTime(Console.ReadLine());

Console.WriteLine("Kérlek add meg a parkolás végének időpontját éééé-hh-nn HH:mm formában, pl. 2021-02-04 14:30");
var Vege = Convert.ToDateTime(Console.ReadLine());

var ElteltOrak = (Vege-Kezdes).TotalHours;
var FizetendoOrak = Math.Ceiling(ElteltOrak-1.5) >= 0 ? Math.Ceiling(ElteltOrak-1.5) : 0;

Console.WriteLine("A fizetendő összeg {0} forint.", FizetendoOrak*300);


A korábbiakhoz hasonlóan igyekszem most is részletezni, hogy mit miért, és hogyan használtam a megoldás során.
Először is a Console.ReadLine() segítségével beolvasunk egy sort, ami tartalmazza a megadott formában a dátumot időponttal. Ezt az értéket a Convert.ToDateTime függvénnyel dátummá alakítjuk, ez lesz a kezdő dátum. Ugyanezt megtesszük a parkolás végét jelentő dátummal.

Ezután kiszámoljuk az eltelt órákat úgy, hogy a későbbi dátumból kivonjuk a korábbi dátumot. Ez egy TimeSpan típusú változót ad, ami lényegében egy időtartam. Van egy olyan tulajdonsága (property), hogy TotalHours, ami a két dátum között eltelt órák számát adja meg.

Miután ezzel megvagyunk, bevezetünk egy változót, ami a fizetendő órákat fogja tárolni. Ezt úgy kapjuk meg, hogy az eltelt órákból kivonjuk az ingyenes 1,5 órát, majd ezután felfele kerekítünk. Azért kell felfele kerekíteni a Math.Ceiling() függvénnyel, mert ha tört számot kapunk, akkor biztosan van megkezdett óránk, amit ki kell fizetni.

Itt egyébként használom a ? : (kérdőjel-kettőspont) operátort, ami úgy néz ki, hogy:
logikai kifejezés ? igaz ág : hamis ág
Ez azt jelenti, hogy írok egy logikai kifejezést, jelen esetben azt, hogy az eltelt órák minusz a 1,5 ingyenes óra felfele kerekítve nagyobb vagy egyenlő-e, mint 0. Ha nagyobb vagy egyenlő mint 0, akkor az igaz ágra beírom azt az értéket, hogy: az eltelt órák minusz a 1,5 ingyenes óra felfele kerekítve. Ha pedig kisebb mint 0, akkor 0-át írok oda. Hisz ha csak 1 órát parkolok, és abból kivonok 1,5 órát, akkor -0.5 órát kapok. -0.5 órát nem tudok parkolni, így azt 0-ra cserélem.
(Gyakorlatilag mintha Excelben használnék egy HA függvényt.)

Végül pedig a kiírás során az összeget úgy számolom ki, hogy a fizetendő órákat beszorzom 300-zal.

Remélem tudtam segíteni, és sikerült kicsit megérteni azt, hogy mit miért kell csinálni.
Ha megfelelő a válaszom, kérlek jelöld megoldásnak. Köszi :)
0