Folytatjuk a korábbi, hasonló témájú leckét. Újabb feladatokat oldunk meg, amelyek az összegzés (a sorozatszámítás leggyakoribb esete), eldöntés, kiválasztás, keresés, megszámolás, maximumkiválasztás algoritmusmintákkal oldhatók meg. Majd természetesen ezeket implementáljuk is C++ nyelven.
Az animáció áttekinti a programozási tételeket és használatukat:
Írjunk programot, amely egy szabászat személyi nyilvántartása (személyi számok) alapján eldönti, hogy dolgozik-e férfi ezen a munkahelyen!
Eldöntés
Bemenet
Db: Egész
Szszk: Tömb[1..Db:Szöveg]
Kimenet
VanFfi: Logikai
Előfeltétel
Db≥0 és ∀i∈[1..Db]: Hossz(Szszk[i])=11 és Jele(Szszk[i],1)∈{’1’,’2’} és …
Utófeltétel
VanFfi=∃i∈[1..Db]: Jele(Szszk[i],1)=’1’

Határozzuk meg az első 1-re végződő N-jegyű prímszámot!
Kiválasztás
Bemenet
N: Egész
Kimenet
PrímN: Egész
Előfeltétel
N>1 [ilyen garantáltan létezik, ha N<???]
Utófeltétel
PrímN∈[10N-1+1.. 10N-1] és (PrímN Mod 10)=1 és Prím?(PrímN) és
∀pm∈[10N-1+1.. 10N-1]: (pm Mod 10)=1 és Prím?(pm)→pm≥PrímN
Definíció
Prím?:Egész→Logikai és
Prím?(x)=∀i∈[2..gyök(x)]: nem(i|x) [eldöntés tétel]


Nyelvvizsgán a nyelvtani tesztek pontszámait (0..maxP, maxP>0) ülési sorrendben jegyezték föl. Keressünk olyan vizsgázót, aki ugyanannyi pontot kapott, mint valamelyik szomszédja!
Keresés
Bemenet
VDb: Egész
Tesztek: Tömb[1..VDb:Egész]
MaxP: Egész
Kimenet
Van: Logikai
Sorsz: Egész
Előfeltétel
VDb≥0 és MaxP>0 és ∀i∈ [1..VDb]: tesztek[i]∈[0..maxP]
Utófeltétel
Van=∃i∈[1..VDb−1]: tesztek[i]=tesztek[i+1] és
Van → Sorsz∈[1..VDb−1] és tesztek[Sorsz]=tesztek[Sorsz+1]

#include <iostream>
#include <windows.h>
using namespace std;
int main()
{
int VDb;
const int MaxVDb=10;
int Tesztek[MaxVDb];
int MaxP;
bool Van;
int Sorsz;
//ellenőrzött beolvasás
do
{
cout<<"Hany pontot lehetett elerni osszesen?";
cin>>MaxP;
if (MaxP<=0)
{
cout<<"Rossz adat!"<<endl;
}
}
while (MaxP<=0);
do
{
cout<<"Hanyan irtak tesztet (1-"<<MaxVDb<<")?";
cin>>VDb;
if ((VDb<0) || (VDb>MaxVDb))
{
cout<<"Rossz adat!"<<endl;
}
}
while ((VDb<0) || (VDb>MaxVDb));
for (int i=0; i<VDb; ++i)
{
do
{
cout<<endl<<"Hany pontot ert el a(z) "<<i+1<<". vizsgazo?";
cin>>Tesztek[i];
if (Tesztek[i]<0 || Tesztek[i]>MaxP)
{
cout<<"Rossz adat!"<<endl;
}
}
while (Tesztek[i]<0 || Tesztek[i]>MaxP);
}
//megoldás
int i=0;
while (i<VDb-1 && Tesztek[i]!=Tesztek[i+1])
{
i++;
}
Van=i<VDb-1;
if (Van)
{
Sorsz=i;
}
//kiírás
if (Van)
{
cout<<endl<<"A(z) "<<i+1
<<". vizsgazo es szomszedja ugyanannyi pontot kapott."<<endl;
}
else
{
cout<<endl<<"Nincs olyan vizsgazo, aki ugyanannyi pontot kapott,
mint valamelyik szomszedja!"<<endl;
}
system("pause");
return 0;
}
Adott egy hőmérsékletsorozat. Állapítsuk meg, hogy szigorúan monoton növekvő-e!
Eldöntés
Bemenet
Db: Egész
H: Tömb[1..Db:Valós]
Kimenet
SzigMonNo: Logikai
Előfeltétel
Db≥1
Utófeltétel
SzigMonNo=∀i∈[1..Db-1]: H[i]<H[i+1]

#include <iostream>
#include <windows.h>
using namespace std;
int main()
{
int Db;
const int MaxDb=10;
double H[MaxDb];
bool SzigMonNo;
//ellenőrzött beolvasás
do
{
cout<<"Hany homerseklet van megadva (1-"<<MaxDb<<")?";
cin>>Db;
if ((Db<2) || (Db>MaxDb))
{
cout<<"Rossz adat!"<<endl;
}
}
while ((Db<2) || (Db>MaxDb));
for (int i=0; i<Db; ++i)
{
cout<<endl<<"A(z) "<<i+1<<". homerseklet?";
cin>>H[i];
}
//megoldás
int i=0;
while (i<Db-1 && H[i]<H[i+1])
{
i++;
}
SzigMonNo=i==Db-1;
//kiírás
if (SzigMonNo)
{
cout<<endl<<"A sorozat szigoruan monotonon novekvo."<<endl;
}
else
{
cout<<endl<<"A sorozat nem szigoruan monotonon novekvo."<<endl;
}
system("pause");
return 0;
}
Írjunk programot, amely egy fizetési kimutatás alapján eldönti, hogy volt-e olyan munkavállaló, aki 100.000Ft alatti összeget kapott!
![]() ![]() |
![]() |
![]() |