2023. április 25., kedd

2023.04.26. Alap algoritmusok – gyakorlati példák

Alap algoritmusok – gyakorlati példák

A kiválasztás tétele

Adjuk meg, hogy hányadik a tömbben az 55, és írjuk ki a sorszámát!
Ha több is van, csak az elsőt írjuk ki.
Ha nincs ilyen szám, írjunk ki hibaüzenetet!

int i = 0;
while (i < szamok.Length && szamok[i] != 55)
{
    i++;
}
if (i != szamok.Length)
    Console.WriteLine("A keresett szám (55) a {0}. indexű elem.", i);
else
    Console.WriteLine("A keresett szám (55) nincs a tömbben!");

A megszámlálás tétele

Számoljuk meg egy tömbben az 50 alatti elemeket!
Írjuk ki a végeredményt. (For ciklussal is jó.)
int i = 0;
int db = 0;
while (i < szamok.Length)
{
    if (szamok[i] < 50)
    {
          db++;
    }
    i++;
}
Console.WriteLine("{0} db 50 alatti szám van a tömbben.", db);

Az eldöntés tétele

Döntsük el, hogy van-e a tömbben 10-nél nagyobb szám.
Amennyiben találtunk egyet, a ciklus álljon meg,
és írjuk ki a képernyőre a megtalált elemet.
(Nem kell a többit is megkeresni.)
Ha végigmentünk a tömbön, és nem találtunk egyet sem, azt is írjuk ki.

int i = 0;
bool van = false;
while (i < szamok.Length && !van)
{
    if (szamok[i] > 10)
    {
        van = true;
    }
    i++;
}
if (van)
    Console.WriteLine("Van a tömbben 10-nél nagyobb elem: {0}", szamok[i-1]);
else
    Console.WriteLine("Nincs a tömbben 10-nél nagyobb elem.");

A kiválogatás tétele

Adott két azonos elemszámú tömb.
Másoljuk át az első tömbből a másodikba a páros elemeket.
(While ciklussal is jó.)
int j = 0;
for (int i = 0; i < szamok1.Length; i++)
{
    if (szamok1[i] % 2 == 0)
    {
        szamok2[j] = szamok1[i];
        j++;
    }
}

Az összegzés tétele

Egy tömbben add össze az elemeket.
Írd ki a végeredményt. (While ciklussal is jó.)
int osszeg = 0;
for (int i = 0; i < egeszSzamok.Length; i++)
{
    osszeg = osszeg + egeszSzamok[i];
}
Console.WriteLine("A tömbelemek összege: {0}", osszeg);

Változat: Add össze a páros elemeket. Írd ki a végeredményt.
int parosOsszeg = 0;
for (int i = 0; i < egeszSzamok.Length; i++)
{
    if (egeszSzamok[i] % 2 == 0)
    {
        parosOsszeg = parosOsszeg + egeszSzamok[i];
     }
}
Console.WriteLine("A páros elemek összege: {0}", parosOsszeg);

Változat: Szorozd össze az 50-nel osztható elemeket. Írd ki a végeredményt.
int szorzat = 1;
for (int i = 0; i < egeszSzamok.Length; i++)
{
    if (egeszSzamok[i] % 50 == 0)
    {
        szorzat = szorzat * egeszSzamok[i];
     }
}
if (szorzat != 1)
{
    Console.WriteLine("Az 50-nel osztható elemek szorzata: {0}", szorzat);
}
else
{
    Console.WriteLine("Nem voltak 50-nel osztható elemek!");
}

A minimumkeresés tétele

Egy tömbben keresd meg a legkisebb elemet,
és add meg az indexét. (While ciklussal is jó.)
int min = tomb[0];
int index = 0;
for (int i = 1; i < tomb.Length; i++)
{
    if (tomb[i] < min)
    {
        min = tomb[i];
        index = i;
    }
}
Console.WriteLine("A legkisebb elem a {0}. indexű helyen van, értéke: {1}", index, min);

A maximumkeresés tétele

Egy tömbben keresd meg a legnagyobb elemet,
és add meg az indexét. (While ciklussal is jó.)
int max = tomb[0];
int index = 0;
for (int i = 1; i < tomb.Length; i++)
{
    if (tomb[i] > max)
    {
        max = tomb[i];
        index = i;
    }
}
Console.WriteLine("A legnagyobb elem a {0}. indexű helyen van, értéke: {1}", index, max);

2023.04.26. WPF alkalmazás az alap algoritmusoknak

 megszámlálás

összegzés

minimumkeresés

maximumkeresés

kiválasztás (break-kel és anélkül)

eldöntés

kiválogatás

Ezeket az algoritmusokat kell beépíteni az ablakos alkalmazásba.

A következő órára legyen készen az egész, és elkezdjük bemutatni.

2023.04.25. Hatoslottó, Színészek megoldás

 

 Hatoslottó

3.feladat

Készítsen lekérdezést, amely megadja, hogy az előző évszázadban (2001. január 1. előtti évszázad) mikor volt 5+1 találatos szelvény!

A húzáshoz tartozó évet és hetet, illetve a nyeremény értékét jelenítse meg időrendben (év, azon belül hét szerint)!

SELECT huzas.ev, huzas.het, nyeremeny.ertek

0,5

FROM huzas

1

INNER JOIN nyeremeny ON nyeremeny.huzasid = huzas.id

WHERE huzas.ev >= 1901 AND

0,5

huzas.ev <= 2000 AND

0,5

nyeremeny.talalat = 7

1

ORDER BY 1,2;

1

 

4.feladat

Készítsen lekérdezést, amely megmutatja a 2012-es heti nyeremények összesített értékét

(tehát hetente kell összesíteni).

Az összesítés mező neve „Heti össznyeremény” legyen.

 

SELECT huzas.het, SUM(nyeremeny.darab * nyeremeny.ertek)

1

 as 'Heti össznyeremény'

 

FROM huzas

1

 INNER JOIN nyeremeny ON nyeremeny.huzasid = huzas.id

WHERE huzas.ev like 2012

1

GROUP by huzas.het;

1

5.feladat

Készítsen lekérdezést, amely megadja: mikor fordult elő,

hogy a 45 a húzott számok között volt!

Az évszámot és a hét sorszámát adja meg!

SELECT ev, het

0,5

  FROM huzas

1

INNER JOIN huzott ON huzas.id = huzott.huzasid

where szam = 45;

1

6. feladat

Készítsen lekérdezést, amely megadja, hogy mely években volt számhúzás minden héten,

azaz évente legalább 52 alkalommal!

 

SELECT ev FROM huzas

0,5

GROUP by ev

1

HAVING COUNT(het) >= 52;

1

7. feladat:

Készítsen lekérdezést, amely megadja: mikor fordult elő, hogy az 1 és a 45 is a húzott számok között volt!

Az évszámot és a hét sorszámát adja meg!

 

select huzas.ev, huzas.het FROM huzas

0,5

    LEFT JOIN huzott ON huzott.huzasid = huzas.id

1

  where huzott.szam = 1 and

1

huzasid in

1

 (select huzasid FROM huzas

1

    INNER JOIN huzott ON huzott.huzasid = huzas.id

1

 where szam = 45);

1

8.feladat

Készítsen lekérdezést, amely megadja, hogy a XXI. század első évtizedében

(2001. január 1. – 2010. december 31.) évente mennyit fizettek ki nyereményként!

 Az évszámot és a kifizetett összeget jelenítse meg!

 

SELECT huzas.ev, SUM(nyeremeny.darab * nyeremeny.ertek)

1

as 'Éves össznyeremény'

 

  FROM huzas

1

INNER JOIN nyeremeny ON nyeremeny.huzasid = huzas.id

  WHERE huzas.ev > 2000

1

AND huzas.ev <= 2010

1

  GROUP BY huzas.ev;

1




Színészek

1.     Készítsen lekérdezést, amely kilistázza azokat a színészeket, akik elsőként, azaz 2000. augusztus 22-én kapták meg a Nemzet Színésze címet! Csak a neveket jelenítse meg – ábécérendben!

SELECT nev FROM szinesz

0,5

 WHERE valasztas = "2000.08.22."

1

 ORDER BY 1;

1

 

2.     Több színész nem a születési nevén lett ismert. Készítsen lekérdezést, amely megadja azokat, akiket nem a születési nevükön ismerünk! Mindkét nevet jelenítse meg!

SELECT nev, szuletesinev FROM szinesz

0,5

 WHERE szuletesinev NOT LIKE "";

1

 

3.     Készítsen lekérdezést, amely kilistázza, hogy melyik színész milyen elismerésben részesült! Az elismeréseket színészenként csoportosítva, azon belül időrendben jelenítse meg.

 

SELECT szinesz.nev, elismeres.megnevezes

0,5

FROM kapott

1

INNER JOIN szinesz

ON kapott.szineszid = szinesz.id

INNER JOIN elismeres

 ON kapott.elismeresid = elismeres.id

ORDER BY szinesz.nev,

1

kapott.ev;

1

 

4.     Készítsen lekérdezést, amely megadja, hogy mely kitüntetéseket nyert el egy-egy színész többször is! A színész nevét és az elismerés megnevezését jelenítse meg az elismerés megnevezése, azon belül a színész neve szerint!

SELECT szinesz.nev, elismeres.megnevezes

0,5

FROM kapott

1

 INNER JOIN szinesz

 ON kapott.szineszid = szinesz.id

INNER JOIN elismeres

 ON kapott.elismeresid = elismeres.id

GROUP BY szinesz.nev,elismeres.megnevezes

1

HAVING COUNT(kapott.elismeresid)>1;

1

order by megnevezes, nev

1

vagy:

HAVING COUNT(elismeres.megnevezes)>1;

5.     Készítsen lekérdezést, amely kilistázza az összes, adatbázisban szereplő színész nevét, és mindegyiküknél megadja, hogy mely évtől (csak az év) mely évig (csak az év) viselték a Nemzet Színésze címet! (Hiányzó dátum esetén utóbbi mező üres maradhat.) A megjelenítés sorrendjét a cím elnyerésének dátuma határozza meg!

SELECT nev, YEAR(valasztas),

1

 YEAR(elhunyt)

1

FROM szinesz

0,5 (select nev-vel együtt)

ORDER BY valasztas;

1

6.     Készítsen lekérdezést, amely megadja azoknak a színészeknek a nevét, akik 2011. január 1-jén viselték a Nemzet Színésze címet! Ha valakit éppen azon a napon választottak meg, vagy akkor hunyt el, szintén szerepeljen a listában! (Ügyeljen az elhunyt mező üres értékeinek jelentésére!)

SELECT nev  FROM szinesz

0,5

 WHERE szinesz.valasztas <= "2011.01.01." AND

1

(szinesz.elhunyt >= "2011.01.01."

1

OR

1

elhunyt is NULL);

1