Vissza az előzőleg látogatott oldalra (nem elérhető funkció)Vissza a modul kezdőlapjáraUgrás a tananyag előző oldalára (9)Ugrás a tananyag következő oldalára (teszt)Fogalom 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 elágazás és a ciklus algoritmikus elemeket gyakoroljuk és alkalmazzuk a feladatok megoldásához. Programokat implementálunk struktogram alapján.

Követelmény

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.

Önállóan megoldható feladatok

Egyszerű elágazást vagy ciklust igénylő feladatok megoldása tervezéssel

Feladat: „Elágazások” feladatsor/11. – Osztás

Feladat

Vizsgáljuk meg, hogy A adott egész szám osztható-e B adott egész számmal!

Vissza a tartalomjegyzékhez

Megoldás

Megjegyzés

A feladat kétféleképpen oldható meg:

  • elágazással az egészosztás maradékának megfelelően;
  • értékadással

Lentebb az értékadásos megoldás látható.

Specifikáció

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

Algoritmus

Az elágazásos feladatsor Osztás feladatának algoritmusa, struktogrammal.

Kód

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

Vissza a tartalomjegyzékhez

Feladat: „Elágazások” feladatsor/2. – Szignumfüggvény

Feladat

Határozzuk egy valós szám szignum– (előjel-) függvényét!

Vissza a tartalomjegyzékhez

Megoldás

Specifikáció

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

Algoritmus

Az elágazásos feladatsor Szignum feladatának algoritmusa, struktogrammal.

Kód

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

Vissza a tartalomjegyzékhez

Feladat: „Elágazások” feladatsor/3. – Pont

Feladat

Adott egy tetszőleges pont a koordinátáival, határozzuk meg, hogy melyik síknegyedben van!

Vissza a tartalomjegyzékhez

Megoldás

Specifikáció

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) )

Algoritmus1

Az elágazásos feladatsor Pont feladatának algoritmusa, struktogrammal, többirányú elágazással megvalósítva.

Algoritmus2

Az elágazásos feladatsor Pont feladatának algoritmusa, struktogrammal, egymásba ágyazott kétirányú elágazásokkal megvalósítva

Kód (a 2. verzió alapján)

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

Vissza a tartalomjegyzékhez

Feladat: „Ciklusok” feladatsor/1. – Faktoriális

Feladat

Határozzuk meg n! értékét!

Vissza a tartalomjegyzékhez

Megoldás

Specifikáció

Bemenet

N: Egész

Kimenet

Fakt: Egész

Előfeltétel

N≥0

Utófeltétel

Fakt=N!

Algoritmus

A ciklusos feladatsor Faktoriális feladatának algoritmusa, struktogrammal.

Kód

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

Vissza a tartalomjegyzékhez

Feladat: „Ciklusok” feladatsor/2. – Osztás

Feladat

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!

Vissza a tartalomjegyzékhez

Megoldás

Specifikáció

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

Algoritmus

A ciklusos feladatsor Osztás feladatának algoritmusa, struktogrammal.

Kód

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

Vissza a tartalomjegyzékhez

Feladat: „Elágazások” feladatsor/4. – Egyenlet1

Feladat

Határozzuk meg az együtthatóival megadott, ax+b=0 alakú elsőfokú egyenlet megoldását!

Vissza a tartalomjegyzékhez

Megoldás

Specifikáció

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)

Algoritmus

A ciklusos feladatsor Elsőfokú egyenlet feladatának algoritmusa, struktogrammal.

Kód

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

Vissza a tartalomjegyzékhez

Feladat: „Ciklusok” feladatsor/6. – LNKO

Feladat

Határozzuk meg két pozitív egész szám legnagyobb közös osztóját! (Euklideszi algoritmus)

Vissza a tartalomjegyzékhez

Megoldás

Specifikáció

Bemenet

A, B: Egész

Kimenet

LNKO: Egész

Előfeltétel

A>0 és B>0

Utófeltétel

LNKO=(A,B)

Algoritmus

A ciklusos feladatsor Legnagyobb közös osztó feladatának algoritmusa, struktogrammal.

Kód

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

Vissza a tartalomjegyzékhez

Feladat: „Ciklusok” feladatsor/8. – Páratlan

Feladat

Írjuk ki az N-nél nem nagyobb pozitív páratlan számok összegét!

Vissza a tartalomjegyzékhez

Megoldás

Specifikáció

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

Algoritmus

A ciklusos feladatsor Páratlan feladatának algoritmusa, struktogrammal.

Kód

#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:

Az animációban bemutatjuk az alapvető programozási, kódolási ismereteket.

Flash lejátszó letöltése

Programozási alapismeretek

Vissza a tartalomjegyzékhez

1. házi feladat: „Elágazások” feladatsor/5. – Egyenlet2

Feladat

Határozzuk meg az együtthatóival megadott, ax2+bx+c=0 alakú másodfokú egyenlet megoldásait!

Vissza a tartalomjegyzékhez

2. házi feladat: „Ciklusok” feladatsor/12. – Barkóba

Feladat

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.

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.