Elakadtam az emelt informatika érettségi 2016. májusi feladat sorral, nem tudom elkezdeni? (c# 5. b feladatban)
5. Határozza meg, hogy a bekért árucikkből
a. melyik vásárláskor vettek először, és melyiknél utoljára!
b. összesen hány alkalommal vásároltak!
Az a részt azt sikerült kiszenvednem de a b nem jött össze.
(Youtubeon van egy megoldás csak azt nem értem)
5.a résznek a megoldását leírom hát ha segít a gondolat menetemre rá hangolódni :)
int eloszor = 0;
int masodszor = 0;
i = 0;
while (adat[i] != b)
{
if (adat[i] == "F")
{
eloszor++;
}
i++;
}
while (adat[i] != "F")
{
i++;
}
if (adat[i] == "F")
{
eloszor++;
}
Console.WriteLine("Az első vásárlás sorszáma: {0} ",eloszor);
// string[] adatvissza = adat.Reverse().ToArray();
int szamlalo = 0;
for ( i = 0; i < db; i++)
{
if (adat[i] == b)
{
szamlalo++;
}
}
i = 0;
int n = 0;
while (n != szamlalo)
{
if (adat[i] == b)
{
n++;
}
if (adat[i] == "F")
{
masodszor++;
}
i++;
}
while (adat[i] != "F")
{
i++;
}
if (adat[i] == "F")
{
masodszor++;
}
Console.WriteLine("Az utolsó vásárlás sorszáma: {0} ", masodszor);
A 5.b feladathoz szeretnék egy kis segítséget.
Csak én nem értem mi akar ez lenni?
Ez a kód hogyan oldja meg az egyes feladatot?
A nyilvántartó változókat ne nullával hanem -1-gyel inicializáld, mert a 0. index is lehet az első elfordulás.
Csak egy ciklus kell.
Ciklusmagban: ha az adott áru, akkor:
-Ha még nincs meg az első elem: ez az első elem és az utolsó is.
-Ha már megvan az első: ez az utolsó.
-Előfordulásszámláló növelése.
Ennyi lenne.
Ha már OOP van a kezünkben, sokkal könnyebb dolgod lesz azt használni.
1) Először is meghatározod, hogy a feladat "világában" milyen tárgyaid, fogalmaid vannak. Jelen esetben van a Vásárlás, a Kosár, az Árucikk, a Vásárolt mennyiség és a Termék ára. Agyaljunk egy kicsit.
A Vásárolt mennyiség és a Termék ára egyszerűen csak egy egész szám.
Az Árucikk esetében ami fontos, az annak a neve, arra elég egy string.
A Kosárról azt kell tudnunk, hogy egy adott Árucikkből hány darabot vett a vásárló (azaz mennyi a Vásárolt mennyiség). Erre jó lesz egy Dictionary<string, int>. Természetesen azokat a termékeket nem tároljuk a kosárban, amiből a vásárló nem vett. Továbbá tudnunk kell berakni egy terméket.
A Vásárlás, mint fogalom számunkra azt jelenti, hogy mi van a Kosárban, illetve ki kell tudnunk számolni, hogy mennyi fizetendő összeg.
class Kosar {
.. private readonly Dictionary<string, int> kosar = new Dictionary<string, int>();
.. public ReadOnlyDictionary<string, int> Kosar {
.. .. get {
.. .. .. return new ReadOnlyDictionary(this.kosar);
.. .. }
.. }
.. public void KosarbaTesz(string Arucikk) {
.. .. if (!this.kosar.ContainsKey(Arucikk))
.. .. .. this.kosar.Add(Arucikk, 1);
.. .. else
.. .. .. this.kosar[Arucikk]++;
.. }
}
class Vasarlas {
.. public readonly Kosar Kosar = new Kosar();
.. public int Vegosszeg {
.. .. get {
.. .. .. //Itt kiszámolod a Kosar alapján, hogy mennyi a végösszeg.
.. .. }
.. }
}
A Main(string[]) pedig így fog kinézni:
public static void Main(string[] args) {
.. List<Vasarlas> Vasarlasok = new List<Vasarlas>();
.. //Felolvasod a fájlt
.. try {
.. .. using (StreamReader sr = new StreamReader(File.OpenRead(...)) {
.. .. .. Vasarlas v = new Vasarlas();
.. .. .. //Feldolgozod a fájlban lévő vásárlásokat.
.. .. .. Vasarlasok.Add(v);
.. .. }
.. }
.. catch (IOException ex) {
.. .. Console.Error.WriteLine($"Nem sikerült beolvasni a fájlt: {ex.Message}");
.. .. Environment.Exit(1);
.. }
.. //Tudod, hogy melyik Árucikkről van szó:
.. string KeresettArucikk = ...;
.. //Most jön a kérdésedre a válasz.
.. int VasarlasokSzama = Vasarlasok.Count(Vasarlas => Vasarlas.Kosar.ContainsKey(KeresettArucikk));
}
Lustáknak itt a feladatsor:
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!