A leckében az elágazás és a ciklus algoritmikus elemeket gyakoroljuk és alkalmazzuk a feladatok megoldásához. Programokat implementálunk struktogram alapján.
A lecke végére a hallgatónak ismernie kell a különböző elágazások és ciklusok fajtáit, azok struktogrammbeli és C++-beli megfelelőiket.
Vizsgáljuk meg, hogy A adott egész szám osztható-e B adott egész számmal!
A feladat kétféleképpen oldható meg:
Lentebb az értékadásos megoldás látható.
Bemenet
A,B: Egész
Kimenet
Osztható: Logikai
Előfeltétel
B≠0
Utófeltétel1
Osztható=B|A
Utófeltétel2
B|A → Osztható=igaz és nem B|A → Osztható=hamis

#include <iostream>
#include <cstdlib>
using namespace std;
int main()
{
int A,B;
bool Oszthato;
//ellenorzott beolvasas
cout << "Add meg az egyik szamot: ";
cin >> A;
cout << "Add meg a masik szamot: ";
cin >> B;
if (B==0)
{
cout << "B nem lehet 0!" << endl;
exit(1);
}
//megoldas
Oszthato=(A % B == 0);
//kiiras
if (Oszthato)
{
cout << "Oszthato." << endl;
}
else
{
cout << "Nem oszthato." << endl;
}
return 0;
}
Határozzuk egy valós szám szignum– (előjel-) függvényét!
Bemenet
X: Valós
Kimenet
Y: Egész
Előfeltétel
–
Utófeltétel
Y=sgn(X)
Utófeltétel2
X<0 → Y=-1 és
X>0 → Y=1 és
X=0 → Y=0

#include <iostream>
using namespace std;
int main()
{
double X;
int Y;
//beolvasas
cout << "Adj meg egy valos szamot: ";
cin >> X;
//megoldas
if (X>0)
{
Y = 1;
}
else if (X<0)
{
Y = -1;
}
else
{
Y = 0;
}
//kiiras
cout << "A szignum: " << Y << endl;
return(0);
}
Adott egy tetszőleges pont a koordinátáival, határozzuk meg, hogy melyik síknegyedben van!
Bemenet
X, Y: Valós
Kimenet
Síknegyed: Egész
Előfeltétel
–
Utófeltétel1
(X≥0 és Y≥0 → Síknegyed=1) és
(X≥0 és Y<0 → Síknegyed=4) és
(X<0 és Y≥0 → Síknegyed=2) és
(X<0 és Y<0 → Síknegyed=3)
Utófeltétel2
X≥0 → ( (Y≥0 → Síknegyed=1) és (Y<0 → Síknegyed=4) ) és
X<0 → ( (Y≥0 → Síknegyed=2) és (Y<0 → Síknegyed=3) )


#include <iostream>
using namespace std;
int main()
{
double X, Y;
int Siknegyed;
//beolvasas
cout << "Add meg az egyik koordinatat!";
cin >> X;
cout << "Add meg a masik koordinatat!";
cin >> Y;
//megoldas
if (X>=0)
{
if (Y>=0)
{
Siknegyed = 1;
}
else
{
Siknegyed = 4;
}
}
else
{
if (Y>=0)
{
Siknegyed = 2;
}
else
{
Siknegyed = 3;
}
}
//kiiras
cout << Siknegyed << ". siknegyed" << endl;
return 0;
}
Határozzuk meg n! értékét!
Bemenet
N: Egész
Kimenet
Fakt: Egész
Előfeltétel
N≥0
Utófeltétel
Fakt=N!

#include <iostream>
#include <cstdlib>
using namespace std;
int main()
{
int N;
int Fakt;
//ellenorzott beolvasas
cout << "Minek a faktorialisat szamoljuk: ";
cin >> N;
if (N<0)
{
cout << "A szam nem lehet negativ!" << endl;
exit(1);
}
//megoldas
Fakt = 1;
for (int i=1; i<=N; i++)
{
Fakt = Fakt * i;
}
//kiiras
cout << N << " faktorialisa: " << Fakt << endl;
cout << "Hello world!" << endl;
return 0;
}
Határozzuk meg egy természetes számnak egy természetes számmal való osztásakor keletkező maradékot úgy, hogy a szorzás és osztás műveleteit nem használjuk!
Bemenet
A, B: Egész
Kimenet
Maradék: Egész
Előfeltétel
A≥0 és B>0
Utófeltétel
Maradék=A mod B

#include <iostream>
#include <cstdlib>
using namespace std;
int main()
{
int A, B;
int Maradek;
//ellenorzott beolvasas
cout << "Kerem az osztandot: ";
cin >> A;
if (A<0)
{
cout << "Az osztando nem lehet negativ!" << endl;
exit(1);
}
cout << "Kerem az osztot: ";
cin >> B;
if (B<0)
{
cout << "Az oszto csak pozitiv lehet!" << endl;
exit(1);
}
//megoldas
Maradek=A;
while (Maradek>=B)
{
Maradek=Maradek-B;
}
//kiiras
cout << "Az osztas maradeka: " << Maradek << endl;
return 0;
}
Határozzuk meg az együtthatóival megadott, ax+b=0 alakú elsőfokú egyenlet megoldását!
Bemenet
A, B: Valós
Kimenet
X: Valós
Szöv: Szöveg
Előfeltétel
–
Utófeltétel
(A=0 és B=0 → Szöv=AZONOSSÁG) és
(A=0 és B≠0 → Szöv=NINCS MEGOLDÁS) és
(A≠0 → x=-B/A)

#include <iostream>
using namespace std;
int main()
{
double A,B;
//beolvasas
cout << "Add meg A erteket!";
cin >> A;
cout << "Add meg B erteket!";
cin >> B;
//megoldas es kiiras
if (A==0)
{
if (B==0)
{
cout << "Azonossag." << endl;
}
else
{
cout << "Nincs megoldas." << endl;
}
}
else
{
cout << "A megoldas:" << -B/A << endl;
}
return 0;
}
Határozzuk meg két pozitív egész szám legnagyobb közös osztóját! (Euklideszi algoritmus)
Bemenet
A, B: Egész
Kimenet
LNKO: Egész
Előfeltétel
A>0 és B>0
Utófeltétel
LNKO=(A,B)

#include <iostream>
#include <cstdlib>
using namespace std;
int main()
{
int A,B;
int LNKO;
int Seged, Maradek;
//ellenorzott beolvasas
cout << "A=";
cin >> A;
if (A<=0)
{
cout << "A csak pozitiv lehet!" << endl;
exit(1);
}
cout << "B=";
cin >> B;
if (B<=0)
{
cout << "B csak pozitiv lehet!" << endl;
exit(1);
}
cout << "(" << A << "," << B << ")=";
//megoldas
if (A<B)
{
Seged=A;
A=B;
B=Seged;
}
Maradek=A % B;
while (Maradek>0)
{
A=B;
B=Maradek;
Maradek=A % B;
}
LNKO = B;
//kiiras
cout << LNKO << endl;
return 0;
}
Írjuk ki az N-nél nem nagyobb pozitív páratlan számok összegét!
Bemenet
N: Egész
Kimenet
Összeg: Egész
Előfeltétel
N≥0
Utófeltétel
Összeg=SZUM(i=1..N, i páratlan) i

#include <iostream>
#include <cstdlib>
using namespace std;
int main()
{
int N;
int Osszeg;
//ellenorzott beolvasas
cout << "N= ";
cin >> N;
if (N<0)
{
cout << "A szam nem lehet negativ!" << endl;
exit(1);
}
//megoldas
Osszeg=0;
int i=1;
while (i<=N)
{
Osszeg=Osszeg+i;
cout << i << " ";
i=i+2;
}
//kiiras
cout << endl << "szamok osszege: " << Osszeg << endl;
return 0;
}
Az animációban feladatokon keresztül mutatjuk be az alapvető programozási, kódolási ismereteket:
Határozzuk meg az együtthatóival megadott, ax2+bx+c=0 alakú másodfokú egyenlet megoldásait!
Készítsünk programot, amiben ki kell találni egy 1 es 100 közötti egész számot! A felhasználó addig tippelhet, amíg ki nem találja a program által gondolt számot.
![]() ![]() |
![]() |
![]() |