Reklámok
2023. október – emelt szint – Digitális kultúra
Milyen programozási eszközöket találhatunk a feladatban?
| Tétel | Feladat | Cél |
|---|---|---|
| Beolvasás | 1. | Adatok tömbökbe töltése |
| Megszámlálás | 2., 3., 8. | Feltételnek megfelelő elemek számának meghatározása |
| Eldöntés | 4. | Van-e olyan elem, ami a feltételnek megfelel |
| Maximumkeresés | 5. | Legnagyobb érték + hozzá tartozó egyéb adat meghatározása |
| Összegzés | 6., 7. | Feltételes összegképzés használata |
| Szétválogatás | 8. | Elemek csoportosítása |
A fentieken kívül a következő programozási eszközök jelennek még meg (az itt lévő mintamegoldásban):
- Párhuzamos tömbök: 3 tömb (nap, varos, darab) együttes kezelése
- Függvény alkalmazása: Osszes() – paraméterezett összegzés
- Egymásba ágyazott ciklusok: 4. feladatnál (napok × rendelések)
- Fájlkezelés: beolvasás + kiírás (rendel.txt és kampany.txt)
Konkrét javaslatok a feladat megoldásához
-
Az adatbeolvasás után célszerű az adatokat nap, város és darabszám szerint elkülönítve kezelni, mert a legtöbb kérdés ezekre épül.
-
Mivel több feladat is napokra bontva kérdez rá (pl. adott nap, kampány előtti–alatti–utáni időszak), érdemes már az elején végiggondolni, hogyan lehet naponként összesíteni az adatokat.
-
A „nem volt rendelés az NR városból” feladatnál fontos felismerni, hogy nem a rendelések számát, hanem a napok számát kell vizsgálni, ezért napokra bontott logika szükséges.
-
A legnagyobb darabszám keresésénél nem elég csak a maximumot eltárolni, hanem azt is, hogy melyik napon fordult elő először, ezért a sorrendiség megtartása lényeges.
-
Az
osszesfüggvény megírása előtt érdemes átgondolni, hogy mely adatokra lesz később még szükség, mert a függvényt több részfeladatban is fel lehet használni. -
A 21. nap vizsgálatánál figyelni kell arra, hogy csak egyetlen nap adatait kell feldolgozni, viszont városonként külön-külön kell az összegeket meghatározni.
-
A táblázatos összesítésnél (1–10, 11–20, 21–30) kulcsfontosságú a nap intervallumok pontos kezelése, mert itt könnyű határhibát véteni.
-
A fájlba írásnál különösen fontos, hogy a formátum pontosan egyezzen a mintával, mivel ezt az automatikus vagy részletes javítás is figyeli.
-
A megoldás során célszerű mindig ellenőrizni, hogy egy részfeladat nem egy korábbi eredményre épül-e, mert így elkerülhető az újraszámolás.
Tipikus buktatók – 4. feladat
-
❌ Rendelések számolása napok helyett
Nem az a kérdés, hány NR rendelés hiányzik, hanem hogy hány NAPON nem volt NR rendelés. -
❌ Csak azokat a napokat vizsgálja, ahol volt valamilyen rendelés
A feladat szerint minden nap volt rendelés valamelyik városból, de NR-ből nem feltétlenül. -
❌ Nem napokra bontott logika
Ha nem különíted el napokra az adatokat, könnyű ugyanazt a napot többször számolni. -
❌ Elfelejtett speciális szöveges kimenet
Ha 0 ilyen nap van, nem számot kell kiírni, hanem a megadott mondatot.
Jó gondolkodási irány – 4. feladat
-
Napról napra végignézni, hogy azon a napon szerepel-e NR.
-
Ha nem szerepel, az a nap egyszer számít.
Tipikus buktatók – 5. feladat
-
❌ Napi összesítés helyett egy rendelés adatait kell nézni
Nem az adott nap összes darabszáma számít, hanem egyetlen rendelés darabszáma. -
❌ Nem az első előfordulást menti el
Ha ugyanaz a maximum később újra előjön, nem szabad felülírni a napot. -
❌ Nap helyett sorszám mentése
A nap értéke az első oszlopból jön, nem a beolvasás indexéből. -
❌ Hibás kezdeti maximum
Rosszul választott kezdőérték miatt a maximum nem frissül megfelelően.
Jó gondolkodási irány – 5. feladat
-
Beolvasás közben figyelni az egyes rendelések darabszámát.
-
Ha szigorúan nagyobb, akkor frissíteni a maximumot és a napot.
-
Ha egyenlő, nem kell csinálni semmit.
Tipikus buktatók – 6. feladat
-
❌ Rendelések számát adja vissza, nem a darabszámok összegét
Itt nem az számít, hány sor van, hanem az, hogy összesen hány terméket rendeltek. -
❌ Nem szűr egyszerre napra ÉS városra
Ha csak az egyik feltétel teljesül, az eredmény hibás lesz. -
❌ A függvény nem általánosítható
Ha a függvény csak egy konkrét napra vagy városra működik, a későbbi feladatoknál nem lesz újra felhasználható. -
❌ Külső változókra támaszkodik átgondolatlanul
Ez könnyen félreérthetővé és hibássá teszi a működést.
Jó gondolkodási irány – 6. feladat
-
A függvény minden rendelést végignéz, és csak azokat adja össze, ahol mindkét feltétel teljesül.
Tipikus buktatók – 7. feladat
-
❌ Több nap adatait is beleszámolja
Itt kizárólag a 21. nap számít. -
❌ Nem városonként külön számol
Egy összeg nem elég, három külön érték kell. -
❌ Összekeveri a városkódokat
PL, TV, NR – mindháromnak külön eredménye van. -
❌ Kimeneti formátum eltérése a mintától
A sorrend és a szöveg számít a javításnál.
Jó gondolkodási irány – 7. feladat
-
Vagy külön számolni városonként,
-
vagy a 6. feladatban elkészített függvényt újra felhasználni.
Tipikus buktatók – 8. feladat
-
❌ Darabszámot számol rendelés helyett
Itt rendelések száma kell, nem a rendelt termékeké. -
❌ Rosszul kezelt intervallumhatárok
Például a 10., 20. nap kimarad vagy kétszer számolódik. -
❌ Eltérő kimenet képernyőn és fájlban
A feladat szerint azonos formátum kell. -
❌ Hiányzó fejléc vagy tabulátorok
A javításnál ez tipikus pontvesztés.
Jó gondolkodási irány – 8. feladat
-
Először megszámolni,
-
utána egységesen kiírni,
-
végül ugyanazt a formátumot fájlba menteni.
using System;
using System.IO;
class Program
{
static int[] nap = new int[1000];
static string[] varos = new string[1000];
static int[] darab = new int[1000];
static int db = 0;
static void Main()
{
// 1. feladat: Beolvasás
string[] sorok = File.ReadAllLines("D://rendel.txt");
for (int i = 0; i < sorok.Length; i++)
{
string[] s = sorok[i].Split(' ');
nap[db] = int.Parse(s[0]);
varos[db] = s[1];
darab[db] = int.Parse(s[2]);
db++;
}
// 2. feladat
Console.WriteLine("2. feladat:");
Console.WriteLine("A rendelesek szama: " + db);
// 3. feladat
Console.WriteLine("\n3. feladat:");
Console.Write("Kerem, adjon meg egy napot: ");
int bekertNap = int.Parse(Console.ReadLine());
int szam = 0;
for (int i = 0; i < db; i++)
{
if (nap[i] == bekertNap) szam++;
}
Console.WriteLine("A rendelesek szama az adott napon: " + szam);
// 4. feladat
Console.WriteLine("\n4. feladat:");
int napokNelkul = 0;
for (int n = 1; n <= 30; n++)
{
bool volt = false;
for (int i = 0; i < db; i++)
{
if (nap[i] == n && varos[i] == "NR")
{
volt = true;
break;
}
}
if (!volt) napokNelkul++;
}
if (napokNelkul == 0)
Console.WriteLine("Minden nap volt rendeles a reklamban nem erintett varosbol");
else
Console.WriteLine(napokNelkul + " nap nem volt a reklamban nem erintett varosbol rendeles");
// 5. feladat
Console.WriteLine("\n5. feladat:");
int max = 0;
int maxNap = 0;
for (int i = 0; i < db; i++) { if (darab[i] > max)
{
max = darab[i];
maxNap = nap[i];
}
}
Console.WriteLine("A legnagyobb darabszam: " + max + ", a rendeles napja: " + maxNap);
// 7. feladat
Console.WriteLine("\n7. feladat:");
Console.Write("A rendelt termekek darabszama a 21. napon ");
Console.Write("PL: " + Osszes("PL", 21) + " ");
Console.Write("TV: " + Osszes("TV", 21) + " ");
Console.WriteLine("NR: " + Osszes("NR", 21));
// 8. feladat
Console.WriteLine("\n8. feladat:");
int pl1 = 0, pl2 = 0, pl3 = 0;
int tv1 = 0, tv2 = 0, tv3 = 0;
int nr1 = 0, nr2 = 0, nr3 = 0;
for (int i = 0; i < db; i++)
{
if (varos[i] == "PL")
{
if (nap[i] <= 10) pl1++;
else if (nap[i] <= 20) pl2++;
else pl3++;
}
else if (varos[i] == "TV")
{
if (nap[i] <= 10) tv1++;
else if (nap[i] <= 20) tv2++;
else tv3++;
}
else
{
if (nap[i] <= 10) nr1++;
else if (nap[i] <= 20) nr2++;
else nr3++;
}
}
string kimenet = "Napok\t1..10\t11..20\t21..30\n";
kimenet += "PL\t" + pl1 + "\t" + pl2 + "\t" + pl3 + "\n";
kimenet += "TV\t" + tv1 + "\t" + tv2 + "\t" + tv3 + "\n";
kimenet += "NR\t" + nr1 + "\t" + nr2 + "\t" + nr3;
Console.WriteLine(kimenet);
File.WriteAllText("D://kampany.txt", kimenet);
}
// 6. feladat: Osszes fuggveny
static int Osszes(string v, int n)
{
int ossz = 0;
for (int i = 0; i < db; i++)
{
if (varos[i] == v && nap[i] == n)
ossz += darab[i];
}
return ossz;
}
}
A fenti kódban statikus változókat használtunk, amely miatt „kiléptünk” a főprogramból. Ha szeretnénk a statikus változókat elhagyni, akkor megváltozik valamelyest a programunk, s az adatok egy részét paraméterként fogja megkapni.
A három legfontosabb változás ennek alapján:
// A Main()-ben lokális változók lennének
int[] nap = new int[1000];
string[] varos = new string[1000];
int[] darab = new int[1000];
int db = 0;
// A függvény hívása hosszabb lenne
Console.Write("PL: " + Osszes("PL", 21, varos, nap, darab, db) + " ");
Console.Write("TV: " + Osszes("TV", 21, varos, nap, darab, db) + " ");
Console.WriteLine("NR: " + Osszes("NR", 21, varos, nap, darab, db));
//A függvény fejrésze is megváltozna
static int Osszes(string v, int n, string[] varos, int[] nap, int[] darab, int db)
{
// Paraméterként kapja az adatokat
}
Melyiket válasszam az érettségin?
✅ Statikus verzió ajánlott, mert:
- Egyszerűbb, rövidebb
- Kevesebb esély a hibára
- Gyorsabban megírható
- Az érettségi feladatok ilyen egyszerű programokra készülnek
A paraméterekkel való átadás csak akkor jobb, ha:
- Nagyobb, összetettebb programot írsz
- Több függvényed van
- A programot később fejleszteni kell
- Szakmai szempontból tisztább kódot szeretnél