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.
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.
Az animáció segítséget nyújthat a feladatok megoldásában a specifikálástól a kódolásig:
Írjunk programot, amely egy 1 és 7 közötti számhoz megadja, hogy az a hét melyik napja!
A feladat két célnak felel meg:
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]

#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;
}
Írjunk programot, ami megadja, hogy egy magyar kártya mennyit ér a 21-es játékban!
Célszerű a feladat megoldását az alábbi lépésekre bontani:
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
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]

#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;
}
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.)
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)

#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;
}
Írjunk programot, amely egy hónapnévhez a sorszámát rendeli!
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.
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

#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;
}
Írjunk programot, amely megadja egy hónapról, hogy melyik évszakba tartozik!
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)

#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;
}
Írjunk programot, amely egy 1 és 99 közötti számot betűkkel ír ki!
Írjunk programot, amely egy 1 és 99 közötti számot szövegként olvas be, és átalakítja számmá!
![]() ![]() |
![]() |
![]() |