Részösszefoglalás
Számítógép/Nyomtatók feladatsorok részletei
1. Mi a lehetséges hiba?
Válasz: Az ar és a kedvezmeny
osztást is tartalmazó kifejezésben fog szerepelni, ezért legyen double típusú.
public struct szamitogep
{
public
string gyarto;
public
string fantazianev;
public
string kod;
public
int ar;
public
int kedvezmeny;
}
2. Mi a hiba?
Válasz: A struktúra
definícióját ne akarjuk adattárolásra használni!
//Figyelem! Ez nagyon rossz megoldás!
public struct szamitogep
{
//Figyelem! Ez nagyon rossz megoldás!
public string megnevezes1;
public int ar1;
public int akcio1;
//Figyelem! Ez nagyon rossz megoldás!
public string
megnevezes2;
public int ar2;
public int akcio2;
//Figyelem! Ez nagyon rossz megoldás!
public string
megnevezes3;
public int ar3;
public int akcio3;
}
//Figyelem! Ez nagyon rossz megoldás!
3. Melyik a jó megoldás?
Válasz: Mindkét megoldás jó
és teljes értékű.
//1.
verzió:
Console.WriteLine("A számítógép akciós ára: {0} ft",
orion.ar - (orion.ar / 100) * orion.kedvezmeny);
Console.Write("Válasszon a lehetőségekből: regisztrált / nem
regisztrált");
string
szavazas2 = Console.ReadLine();
switch
(szavazas2)
{
case
"regisztrált":
if (orion.ar
> 150000)
Console.WriteLine("A
regisztráltság miatt 1000 ft bónuszt fog kapni!");
else
Console.WriteLine("A nettó
érték nincs 150k felett, ezért nem jár az 1000 ft bónusz");
break;
case
"nem regisztrált":
Console.WriteLine("Ha regiszrált volna, kapna 1000 ft bónuszt 150 ezer
fölött.");
break;
default:
Console.WriteLine("Ilyen lehetoseg nincs, a fent lathato
lehetosegekbol valasszon");
break;
}
//2.
verzió:
Console.WriteLine("A számítógép akciós ára: {0} ft",
orion.ar - (orion.ar / 100) * orion.kedvezmeny);
Console.Write("Válasszon a lehetőségekből: regisztrált / nem
regisztrált");
szavazas2 = Console.ReadLine();
if
(szavazas2 == "regisztrált")
{
if
(orion.ar > 150000)
Console.WriteLine("A regisztráltság miatt 1000 ft bónuszt fog
kapni!");
else
Console.WriteLine("A nettó érték nincs 150k felett, ezért nem jár az
1000 ft bónusz");
}
else
{
if
(szavazas2 == "nem regisztrált")
{
Console.WriteLine("Ha regisztrált volna, kapna 1000 ft bónuszt 150
ezer fölött.");
}
else
Console.WriteLine("Ilyen lehetoseg nincs, a fent lathato
lehetosegekbol valasszon");
}
4. Mi ebben a „csúnya”?
Válasz: Redundáns, tehát
fölöslegesen sok kódot írtunk. Megoldás: az első szelekció ágaiban tároljuk le
az árat, és utána legyen egy újabb szelekció, ahol azt felhasználjuk.
Console.Write("Melyik gépet választja (1,2,3): ");
int
szavazas = Console.ReadLine();
switch
(szavazas)
{
case
1:
Console.WriteLine("A számítógép akciós ára: {0} ft",
orion.ar - (orion.ar / 100) * orion.kedvezmeny);
Console.Write("Válasszon a lehetőségekből: regisztrált / nem
regisztrált");
string
szavazas2 = Console.ReadLine();
switch
(szavazas2)
{
case "regisztrált":
if (orion.ar > 150000)
Console.WriteLine("A
regisztráltság miatt 1000 ft bónuszt fog kapni!");
else
Console.WriteLine("A
nettó érték nincs 150k felett, ezért nem jár az 1000 ft bónusz");
break;
case "nem regisztrált":
Console.WriteLine("Ha
regiszrált volna, kapna 1000 ft bónuszt 150 ezer fölött.");
break;
default:
Console.WriteLine("Ilyen
lehetoseg nincs, a fent lathato lehetosegekbol valasszon");
break;
}
break;
case
2:
Console.WriteLine("A számítógép akciós ára: {0} ft",
predator.ar - (predator.ar / 100) * predator.kedvezmeny);
Console.Write("Válasszon a lehetőségekből: regisztrált / nem
regisztrált");
string
szavazas3 = Console.ReadLine();
switch
(szavazas3)
{
case "regisztrált":
if (predator.ar > 150000)
Console.WriteLine("A
regisztráltság miatt 1000 ft bónuszt fog kapni!");
else
Console.WriteLine("A
nettó érték nincs 150k felett, ezért nem jár az 1000 ft bónusz");
break;
case "nem regisztrált":
Console.WriteLine("Ha
regiszrált volna, kapna 1000 ft bónuszt 150 ezer fölött.");
break;
default:
Console.WriteLine("Ilyen
lehetoseg nincs, a fent lathato lehetosegekbol valasszon");
break;
}
break;
case
3:
Console.WriteLine("A számítógép akciós ára: {0} ft",
asus.ar - (asus.ar / 100) * asus.kedvezmeny);
Console.Write("Válasszon a lehetőségekből: regisztrált / nem
regisztrált");
string
szavazas4 = Console.ReadLine();
switch
(szavazas4)
{
case "regisztrált":
if (asus.ar > 150000)
Console.WriteLine("A regisztráltság
miatt 1000 ft bónuszt fog kapni!");
else
Console.WriteLine("A nettó érték nincs
150k felett, ezért nem jár az 1000 ft bónusz");
break;
case "nem regisztrált":
Console.WriteLine("Ha regiszrált volna, kapna 1000 ft bónuszt 150 ezer
fölött.");
break;
default:
Console.WriteLine("Ilyen lehetoseg nincs, a fent lathato
lehetosegekbol valasszon");
break;
}
break;
default:
Console.WriteLine("Ilyen lehetoseg nem szerepel a listan.");
break;
}
5. Mi a hiba?
Válasz: Nem ez volt a
feladat. A 15-öt kellett volna tárolni.
//Tárold struktúrákban
a 3 nyomtató gyártóját (ezek legyenek: HP, CANON, SAMSUNG);
//számát (pl. 500);
típusát (lézer, vagy tintasugaras);
//árát;
//és a rá vonatkozó akció
értékét (pl. 15, ami 15%-ot jelent).
...
elsonyomtato.ara = 19000;
elsonyomtato.akcioertek = 19000 *
15 / 100;
...
vagy:
...
szamitogep1.kedvezmeny
= 0.15;
...
6. Mi a hiba?
Válasz: nem írta ki a
gyártót, a nyomtató számát, és nem számolta ki és nem is írta ki az akciós
árat.
//Írd ki a
választásától függően a képernyőre a nyomtató gyártóját,
//számát, ezen kívül
az akciós árát.
Console.WriteLine("Ez az akció mértéke: {0}", ASUS.akcio);
7. Mi a szokatlan? Ez hiba?
Válasz: Az 5.0 értékmegadás.
Nem szükséges törtként megadni a double típusú változóba kerülő egész számot,
ugyanakkor nem hiba.
public struct
nyomtato
{
public string gyarto;
public int szam;
public string tipus;
public int ar;
public double akcio;
}
. . .
nyomtato
nyomtato1 = new nyomtato();
nyomtato1.gyarto = "HP";
nyomtato1.szam = 650;
nyomtato1.tipus = "lézer";
nyomtato1.ar = 80500;
nyomtato1.akcio = 5.0;
8. Ez hibás?
Válasz: Nem! Zseniális!
Felhasználta az előző többágú szelekció szelektorát (van egy kis redundancia
ugyan az első megoldásnál).
Console.WriteLine("Festéket vagy papírt szeretne ajándékba kapni?
(festék | papír): ");
string ajandek = Console.ReadLine();
ajandek = ajandek.ToLower();
switch (ajandek)
{
case "festék":
switch
(valasztas)
{
case
"h": //ez
egy fajta nyomtató
Console.WriteLine("Ön ajándékba festéktonert kap.");
break;
case
"c":
Console.WriteLine("Ön ajándékba festékpatront kap.");
break;
case
"s":
Console.WriteLine("Ön ajándékba festéktonert kap.");
break;
}
break;
case "papír":
Console.WriteLine("Ön ajándékba egy csomag nyomtatópapírt kap.");
break;
default:
Console.WriteLine("Helytelen válasz.");
break;
}
Ugyanez kétágú szelekciókkal:
if (ajandek == "festék")
{
if (valaszt == "s")
{
Console.WriteLine("Akkor kapni fog egy festéktonert.");
}
else
{
if
(valaszt == "h" || valaszt == "c")
{
Console.WriteLine("Akkor kapni fog egy festékpatront.");
}
}
}
else
{
if (ajandek == "papír")
{
Console.WriteLine("Akkor egy csomag nyomtatópapírt fog kapni.");
}
}
9. Ez a módszer jó lesz hosszú távon?
Válasz: Nem. Ha háromnál
jóval több nyomtatónk van, nagyon mély egymásba ágyazás lesz, holott látjuk,
hogy csak kétfelé kellett volna bontani az egészet (lézeres, tintasugaras).
Legjobb lett volna megjegyezni az előző szelekcióban a típust egy változóban.
. . .
switch
(ajandek)
{
case
"festéket":
if
(HP.tipusa == "Lézeres")
{
Console.WriteLine("Kap egy
festéktonert");
}
else
{
if
(Canon.tipusa == "Tintasugaras")
{
Console.WriteLine("Oké
akkor festéket kap");
}
else
{
if (Samsung.tipusa == "Lézeres")
{
Console.WriteLine("Kap
egy festéktonert");
}
}
}
break;
. . .
10. Ezt hogyan lehetne továbbfejleszteni?
Válasz: Egyetlen akciosar
változó kell, és a switch után egyetlen kiírás.
switch (valaszt)
{
case '1':
double
akciosar1 = gep1.ar - (gep1.ar * gep1.akcio) / 100;
Console.WriteLine("Ennek a gépnek az akciós ára: {0}",
akciosar1);
ar = gep1.ar;
break;
case '2':
double
akciosar2 = gep2.ar - (gep2.ar * gep2.akcio) / 100;
Console.WriteLine("Ennek a gépnek az akciós ára: {0}",
akciosar2);
ar = gep2.ar;
break;
case '3':
double
akciosar3 = gep3.ar - (gep3.ar * gep3.akcio) / 100;
Console.WriteLine("Ennek a gépnek az akciós ára: {0}",
akciosar3);
ar = gep3.ar;
break;
default:
Console.WriteLine("Rossz számot írt be!!");
break;
}
11. Ez pedig mi fán terem?
Válasz: Ez egy ciklus. Addig
nem enged tovább, amíg jó számot nem ütünk be. Zseniális! Bárki
megpróbálhatja...
Console.Write("Válasszon egy számítógépet (1 ; 2 ; 3): ");
int
valasztas = Convert.ToInt32(Console.ReadLine());
while
(!(valasztas == 1 || valasztas == 2 || valasztas == 3))
{
Console.WriteLine("Rossz érték. Adja meg újra: ");
valasztas = Convert.ToInt32(Console.ReadLine());
Nincsenek megjegyzések:
Megjegyzés küldése