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
{
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. Mi a lehetséges hiba?
Válasz: Mindkét megoldá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 regiszrá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 ez volt a feladat. Nem a tárolt értéket, hanem a vele kiszámolt akciós árat kellett volna kiírni.
//Í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?
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).
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. 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: Egy akciosar változó kell, és a switch után egy 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