• 4 hét telt el az utolsó módosítás óta
  • 7perc
  • 1825szó
  • 39olvasás

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 osszes fü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

Hogyan értékeli a posztot?

Kattins a megfelelő csillagra!

Átlagpontszám 0 / 5. Értkelés 0

Még nem értékeltél!

Vélemény, hozzászólás?