Vissza az előzőleg látogatott oldalra (nem elérhető funkció)Vissza a modul kezdőlapjáraUgrás a tananyag előző oldaláraUgrás a tananyag következő oldaláraFogalom megjelenítés (nem elérhető funckió)Fogalmak listája (nem elérhető funkció)Oldal nyomtatása (nem elérhető funkció)Oldaltérkép megtekintéseSúgó megtekintése

Tanulási útmutató

Összefoglalás

A leckében az ellenőrzött beolvasás C++-os mikéntjével ismerkedünk meg, valamint a konstans tömbök tipikus felhasználásával foglalkozunk.

Követelmény

A lecke végére a hallgatónak ismernie kell (konstans) tömbök specifikációbeli, algoritmikus és C++ nyelvi megfelelőit, használatát, fel kell tudnia ismernie, mikor használja ezt a struktúrát.

Önállóan megoldható feladatok

Adatellenőrzés do-while ciklussal; C++ ciklusok; konstans tömbök használata

Az animáció segítséget nyújthat a feladatok megoldásában a specifikálástól a kódolásig:

Az animáció feladatokon keresztül mutatja be a feladatmegoldás lépéseit a specifikációtól a kódolásig.

Flash lejátszó letöltése

Programozás, kódolás feladatokon keresztül

Feladat: „Konstans tömbök” feladatsor/1. – Hét napja

Feladat

Írjunk programot, amely egy 1 és 7 közötti számhoz megadja, hogy az a hét melyik napja!

Vissza a tartalomjegyzékhez

Megoldás

Megjegyzés

A feladat két célnak felel meg:

  • megismerkedni az ellenőrzött beolvasás filozófiájával és C++ megoldásával
  • megismerkedni a konstans tömbök definiálásával és egyszerű használatával

Specifikáció

Bemenet

N: Egész

Konstansok

MaxNap: Egész = 7

Nap: Tömb[1..MaxNap:Szöveg] = („Hétfő”, „Kedd”,…, „Vasárnap”)

Kimenet

HétNapja: Szöveg

Előfeltétel

N∈[1..7]

Utófeltétel

HétNapja=Nap[N]

Algoritmus

A Hét napja feladat algoritmusa, struktogrammal.

Kód

#include <iostream>
using namespace std;
int main()
{
    const int MaxNap=7;
    const string Nap[MaxNap]= {"hétfő","kedd","szerda","csütörtök", 
                               "péntek","szombat","vasárnap"};
    int N;
    string HetNapja;
    //ellenőrzött beolvasás
    bool rossz;
    do
    {
        cout << "A het hanyadik napjara kivancsi: ";
        cin >> N;
        rossz=(N>MaxNap || N<1);
        if (rossz)
        {
            cout << "A napnak 1 es " << MaxNap << " koze kell esnie!"
                 << endl;
        }
    }
    while (rossz);
    //megoldás
    HetNapja=Nap[N-1];
    //kiírás
    cout << "A megadott nap:" << HetNapja << endl;
    return 0;
}

Vissza a tartalomjegyzékhez

Feladat: „Konstans tömbök” feladatsor/2. – Kártya

Feladat

Írjunk programot, ami megadja, hogy egy magyar kártya mennyit ér a 21-es játékban!

Vissza a tartalomjegyzékhez

Megoldás

Megjegyzés

Célszerű a feladat megoldását az alábbi lépésekre bontani:

  • hogyan nézne ki a specifikáció és algoritmus tömb bevezetése nélkül?
  • specifikáció és algoritmus tömb segítségével
  • kódolás során

először előfeltétel nélkül oldjuk meg a feladatot

ügyeljünk a 0-tól való indexelésre

valósítsuk meg az ellenőrzött beolvasást

hatékonyság: a megoldásból kivehető az a rész, mely újra meghatározza a kártya sorszámát (ciklus), hiszen az ellenőrzött beolvasás során ez már megvalósult melléktermékként

Specifikáció

Bemenet

K: Szöveg

Konstansok

MaxKártya: Egész = 8

Kártya: Tömb[1..MaxKártya:Szöveg] = („VII”, „VIII”,…, „Ász”)

Érték: Tömb[1..MaxKártya:Egész] = (7, 8, 9, 10, 2, 3, 4, 11)

Kimenet

É: Egész

Előfeltétel

K∈Kártya

Utófeltétel

i∈[1..MaxKártya]: K=Kártya[i] és É=Érték[i]

Algoritmus

A Kártya feladat algoritmusa, struktogrammal.

Kód

#include <iostream>
using namespace std;
int main()
{
    const int MaxKartya=8;
    const string Kartya[MaxKartya]= {"VII","VIII","IX","X","Alsó","Felső",
                                     "Király","Ász"};
    const int Ertek[MaxKartya]= {7,8,9,10,2,3,4,11};
    string K;
    int E;
    //ellenőrzött beolvasás
    bool rossz;
    do
    {
        cout << "Add meg a kártyát: ";
        cin >> K;
        int i=0;
        while (i<MaxKartya && Kartya[i]!=K)
        {
            i=i+1;
        }
        rossz=i>=MaxKartya;
        if (rossz)
        {
            cout << "Ez nem kártya!" << endl;
        }
    }
    while (rossz);
    //megoldás
    int i=0;
    while (Kartya[i]!=K)
    {
        i=i+1;
    }
    E=Ertek[i];
    //kiírás
    cout << "Az értéke:" << E << endl;
    return 0;
}

Vissza a tartalomjegyzékhez

Feladat: „Konstans tömbök” feladatsor/4. – Napok

Feladat

Határozzuk meg, hogy ha egy tábor a hét adott napján kezdődött és adott hosszú volt, akkor milyen napon fejeződött be? (Például ha kedden kezdődött és 10 napos volt, akkor csütörtökön fejeződött be.)

Vissza a tartalomjegyzékhez

Megoldás

Specifikáció

Bemenet

KezdőNap: Szöveg

Hossz: Egész

Konstansok

MaxNap: Egész = 7

Nap: Tömb[1..MaxNap:Szöveg] = („Hétfő”, „Kedd”,…, „Vasárnap”)

Kimenet

VégNap: Szöveg

Előfeltétel

KezdőNap∈Nap és Hossz>0

Utófeltétel

VégNap∈Nap és

Sorszám(VégNap)=((Sorszám(KezdőNap)+(Hossz-1)-1) mod 7)+1

Definíció

Sorszám:Szöveg→Egész

Sorszám(p):=(j∈[1..MaxNap]: Nap[j]=p)

Algoritmus

A Napok feladat algoritmusa, struktogrammal.

Kód

#include <iostream>
using namespace std;
int main()
{
    const int MaxNap=7;
    const string Nap[MaxNap]= {"hétfő","kedd","szerda","csütörtök", 
                               "péntek","szombat","vasárnap"};
    string KezdoNap, VegNap;
    int hossz;
    //ellenőrzött beolvasás
    bool rossz;
    do
    {
        cout << "Milyen nap kezdődik a tábor:";
        cin >> KezdoNap;
        int i=0;
        while (i<MaxNap && Nap[i]!=KezdoNap)
        {
            i=i+1;
        }
        rossz=i>=MaxNap;
        if (rossz)
        {
            cout << "Ez nem lehet!" << endl;
        }
    }
    while (rossz);
    do
    {
        cout << "Hány napig tart:";
        cin >> hossz;
        rossz=hossz<=0;
        if (rossz)
        {
            cout << "Legalabb egynek kell lennie!" << endl;
        }
    }
    while (rossz);
    //megoldás
    int i=0;
    while (Nap[i]!=KezdoNap)
    {
        i=i+1;
    }
    VegNap=Nap[(i+(hossz-1)) % 7];
    //kiírás
    cout << "A tábor zárónapja:" << VegNap << endl;
    return 0;
}

Vissza a tartalomjegyzékhez

Feladat: „Konstans tömbök” feladatsor/5. – Hónap

Feladat

Írjunk programot, amely egy hónapnévhez a sorszámát rendeli!

Vissza a tartalomjegyzékhez

Megoldás

Megjegyzés

A feladat specifikációja és algoritmusa szerepelt előadáson. A házi feladat célja a konstans tömbökhöz tartozó kódolás gyakoroltatása.

Specifikáció

Bemenet

H: Szöveg

Konstansok

MaxHónap: Egész = 12

HóNév: Tömb[1..MaxHónap:Szöveg] = („január”, „február”,…, „december”)

Kimenet

S: Egész

Előfeltétel

H∈HóNév

Utófeltétel

1≤S≤MaxHónap és HóNév[S]=H

Algoritmus

A Hónap feladat algoritmusa, struktogrammal.

Kód

#include <iostream>
using namespace std;
int main()
{
    const int MaxHonap=12;
    const string HoNev[MaxHonap]= {"január","február","március","április",
                                   "május","június","július","augusztus",
                                   "szeptember","október","november",
                                   "december"
                                  };
    string H;
    int S;
    //ellenőrzött beolvasás
    bool rossz;
    do
    {
        cout << "Melyik hónapnak akarja tudni a sorszámát:";
        cin >> H;
        int i=0;
        while (i<MaxHonap && HoNev[i]!=H)
        {
            i=i+1;
        }
        rossz=i>=MaxHonap;
        if (rossz)
        {
            cout << "Ez nem lehet!" << endl;
        }
    }
    while (rossz);
    //megoldás
    int i=0;
    while (HoNev[i]!=H)
    {
        i=i+1;
    }
    S=i+1;
    //kiírás
    cout << "A hónap sorszáma: " << S << endl;
    return 0;
}

Vissza a tartalomjegyzékhez

Feladat: „Konstans tömbök” feladatsor/6. – Évszak

Feladat

Írjunk programot, amely megadja egy hónapról, hogy melyik évszakba tartozik!

Vissza a tartalomjegyzékhez

Megoldás

Specifikáció

Bemenet

H: Szöveg

Konstansok

MaxHónap: Egész = 12

MaxÉvszak: Egész = 4

HóNév: Tömb[1..MaxHónap:Szöveg] = („január”, „február”,…, „december”)

ÉvszakNév: Tömb[1..MaxÉvszak:Szöveg] =(„tél”, „tavasz”, „nyár”, „ősz”)

Kimenet

Évszak: Szöveg

Előfeltétel

H∈HóNév

Utófeltétel

Évszak∈ÉvszakNév és

Évszak=ÉvszakNév[((Sorszám(H) div 3) mod 4)+1]

Definíció

Sorszám:Szöveg→Egész

Sorszám(p):=(j∈[1..MaxHónap]: HóNév[j]=p)

Algoritmus

Az Évszak feladat algoritmusa, struktogrammal.

Kód

#include <iostream>
using namespace std;
int main()
{
    const int MaxHonap=12;
    const int MaxEvszak=4;
    const string HoNev[MaxHonap]= {"január","február","március","április",
                                   "május","június","július","augusztus",
                                   "szeptember","október","november", 
                                   "december"
                                  };
    const string EvszakNev[MaxEvszak]= {"tél","tavasz","nyár","ősz"};
    string H,Evszak;
    //ellenőrzött beolvasás
    bool rossz;
    do
    {
        cout << "Melyik hónapról akarja tudni, hogy melyik évszakban van:";
        cin >> H;
        int i=0;
        while (i<MaxHonap && HoNev[i]!=H)
        {
            i=i+1;
        }
        rossz=i>=MaxHonap;
        if (rossz)
        {
            cout << "Ez nem lehet!" << endl;
        }
    }
    while (rossz);
    //megoldás
    int i=0;
    while (HoNev[i]!=H)
    {
        i=i+1;
    }
    Evszak=EvszakNev[((i+1) / 3) % 4];
    //kiírás
    cout << "Az évszak: " << Evszak << endl;
    return 0;
}

Vissza a tartalomjegyzékhez

1. házi feladat: „Konstans tömbök” feladatsor/8. – Szám

Feladat

Írjunk programot, amely egy 1 és 99 közötti számot betűkkel ír ki!

Vissza a tartalomjegyzékhez

2. házi feladat: „Konstans tömbök” feladatsor/9. – Szöveg

Feladat

Írjunk programot, amely egy 1 és 99 közötti számot szövegként olvas be, és átalakítja számmá!

Vissza a tartalomjegyzékhez

Fel a lap tetejére
Új Széchenyi terv
A projekt az Európai Unió támogatásával, az Európai Szociális Alap társfinanszirozásával valósul meg.