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

Összegzés (mint a sorozatszámítás leggyakoribb változata), eldöntés, kiválasztás, keresés, megszámolás, maximumkiválasztás algoritmusmintákkal tervezett programok (újra)implementálása (paraméterekkel, globális programváltozókkal).

Követelmény

Önállóan megoldható feladatok

Sorozatszámítás, eldöntés, kiválasztás, keresés, megszámolás, maximumkiválasztás algoritmusmintákkal tervezett programok (újra)implementálása (paraméterekkel, globális programváltozókkal)

Feladat: „Programozási tételek 1.” feladatsor/2.

Feladat

Adott egy hőmérsékletsorozat. Állapítsuk meg, hogy szigorúan monoton növekvő-e!

Vissza a tartalomjegyzékhez

Megoldás

Alkalmazott tétel

Eldöntés

Specifikáció

Lásd korábbi gyakorlatok.

Algoritmus

Lásd korábbi gyakorlatok.

Kód

Függvények használata globális változókkal

Induljunk ki a korábbi gyakorlat házi feladat példájának kódjából, és azt alakítsuk át.

#include <iostream>
#include <windows.h>
using namespace std;
int Db;
const int MaxDb=10;
double H[MaxDb];
bool SzigMonNo;
void beolvasdarab();
void beolvashomersekletek();
void megoldas();
void kiiras();
void billrevar();
int main()
{
   beolvasdarab();
    beolvashomersekletek();
    megoldas();
    kiiras();
    billrevar();
    return 0;
}
//ellenőrzött darab_beolvasás
void beolvasdarab()
{
    do
    {
        cout<<"Hany homerseklet van megadva (2-"<<MaxDb<<")?";
        cin>>Db;
        if ((Db<2) || (Db>MaxDb))
        {
            cout<<"Rossz adat!"<<endl;
        }
    }
    while ((Db<2) || (Db>MaxDb));
}
// hőmérsékletek beolvasása
void beolvashomersekletek()
{
    for (int i=0; i<Db; ++i)
    {
        cout<<endl<<"A(z) "<<i+1<<". homerseklet?";
        cin>>H[i];
    }
}
//megoldás
void megoldas()
{
    int i=0;
    while (i<Db-1 && H[i]<H[i+1])
    {
        i++;
    }
    SzigMonNo=i==Db-1;
}
//kiírás
void kiiras()
{
    if (SzigMonNo)
    {
        cout<<endl<<"A sorozat szigoruan monoton novekvo."<<endl;
    }
    else
    {
        cout<<endl<<"A sorozat nem szigoruan monoton novekvo."<<endl;
    }
}
//billrevár
void billrevar()
{
    system("pause");
}

Függvények használata paraméterekkel

Induljunk ki a korábbi gyakorlat házi feladat példájának kódjából, és azt alakítsuk át.

#include <iostream>
#include <windows.h>
using namespace std;
//beolvassa a minN..maxN közötti egész számot (maxN<minN => végtelen)
void be_int(string kerdes, int &n, int minN, int maxN, string uzenet);
void beolvashomersekletek(int n, double H[]);
void megoldas(int n, const double H[], bool &SzigMonNo);
void kiiras(bool SzigMonNo);
void billrevar();
int main()
{
    int Db;
    bool SzigMonNo;
    be_int("Meresek szama:",Db,2,-1,"Hibas szam");
    double H[Db];
    beolvashomersekletek(Db,H);
    megoldas(Db,H,SzigMonNo);
    kiiras(SzigMonNo);
    billrevar();
    return 0;
}
//beolvassa a minN..maxN közötti egész számot (maxN<minN => végtelen)
void be_int(string kerdes, int &n, int minN, int maxN, string uzenet)
{
    bool hiba;
    string tmp;
    do
    {
        if (maxN>=minN)
        {
           cout << kerdes << " (" << minN << ".." << maxN << "):";
           cin >> n;
           hiba=cin.fail() || n<minN || n>maxN;
        }
        else
        {
           cout << kerdes << " (" << minN << "..):"; cin >> n;
           hiba=cin.fail() || n<minN;
        }
        if (hiba)
        {
           cout << uzenet << endl;
           cin.clear(); getline(cin,tmp,'\n');
        }
    }
    while(hiba);
}
// hőmérsékletek beolvasása
void beolvashomersekletek(int n, double H[])
{
    for (int i=0; i<n; ++i)
    {
        cout<<endl<<"A(z) "<<i+1<<". homerseklet?";
        cin>>H[i];
    }
}
//megoldás
void megoldas(int n, const double H[], bool &SzigMonNo)
{
    int i=0;
    while (i<n-1 && H[i]<H[i+1])
    {
        i++;
    }
    SzigMonNo=i==n-1;
}
//kiírás
void kiiras(bool SzigMonNo)
{
    if (SzigMonNo)
    {
        cout<<endl<<"A sorozat szigoruan monoton novekvo."<<endl;
    }
    else
    {
        cout<<endl<<"A sorozat nem szigoruan monoton novekvo."<<endl;
    }
}
//billrevár
void billrevar()
{
    system("pause");
}

Vissza a tartalomjegyzékhez

Feladat: „Programozási tételek 2” feladatsor/12.

Feladat

Egy N szóból álló szövegből keressük ki a leghosszabb szót!

Vissza a tartalomjegyzékhez

Megoldás

Alkalmazott tétel

Maximumkiválasztás

Specifikáció

Bemenet

N:Egész

Szavak:Tömb[1..N:Szöveg]

Kimenet

Lhsz:Szöveg

Előfeltétel

N≥1 és ∀i∈[1..N]: Hossz(Szavak[i])>0

Utófeltétel

∃i∈[1..N]: Lhsz=Szavak[i] és ∀i∈[1..N]: Hossz(Lhsz)≥Hossz(Szavak[i])

Algoritmus

A 2. feladat algoritmusa, struktogrammal.

Kód

#include <iostream>
#include <windows.h>
using namespace std;
//sz[0..n-1] szövegtömb beolvasása -- minN<=n<=maxN
void be_string_tomb(string kerd, int &n, string sz[], int minN, int maxN);
//leghosszabb szó kiválasztása:
void leghosszabbSzo(int n, string sz[], string &lhsz);
//eredménykiírás:
void kiiras(string lhsz);
//beolvassa a minN..maxN közötti egész számot (maxN<minN => végtelen)
void be_int(string kerdes, int &n, int minN, int maxN, string uzenet);
//konvertálás: int -> string
string intToStr(int x);
void billentyureVar();
int main()
{
    //Bemenet:
    int N;//a szavak darabszáma
    const int maxN=100;//a maximális darabszám
    string szavak[maxN];//a szósorozat
    //Kimenet:
    string lhsz;//a leghosszabb szó
    cout << "\nKerem a szósorozatot!" << endl;
    be_string_tomb("Szo",N,szavak,1,maxN);
    leghosszabbSzo(N,szavak,lhsz);
    kiiras(lhsz);
    billentyureVar();
    return 0;
}
//sz[0..n-1] szövegtömb beolvasása -- minN<=n<=maxN
void be_string_tomb(string kerd, int &n, string sz[], int minN, int maxN)
{
    //tömb-elemszám beolvasása:
    be_int("\n"+kerd+"-sorozat hossza:",n,minN,maxN,"Hibas a darabszam!");
    //a tömb beolvasása:
    cout << "\n"+kerd+"-elemek:" << endl;
    for (int i=0;i<n;++i)
    {
        do
        {
           string kerd="\n"+intToStr(i+1)+". ";
           cout << kerd; cin >> sz[i];
           if (sz[i].length()==0)
           {
               cout << "Ures szo nem lehet!";
           }
        }
        while (sz[i].length()==0);
    }
}
//leghosszabb szó kiválasztás:
void leghosszabbSzo(int n, string sz[], string &lhsz)
{
    int max=sz[0].length(),maxi=0;
    for (int i=1; i<n; ++i)
    {
       if (sz[i].length()>max)
       {
           max=sz[i].length(); maxi=i;
       }
    }
    lhsz=sz[maxi];
}
//eredménykiírás:
void kiiras(string lhsz)
{
    cout << "\nA leghosszabb szo: " << lhsz << ","
         << lhsz.length() << " hosszal." << endl;
}
//beolvassa a minN..maxN közötti egész számot (maxN<minN => végtelen)
void be_int(string kerdes, int &n, int minN, int maxN, string uzenet)
{
    bool hiba;
    string tmp;
    do
    {
        if (maxN>=minN)
        {
           cout << kerdes << " (" << minN << ".." << maxN << "):";
           cin >> n;
           hiba=cin.fail() || n<minN || n>maxN;
        }
        else
        {
           cout << kerdes << " (" << minN << "..):";
           cin >> n;
           hiba=cin.fail() || n<minN;
        }
        if (hiba)
        {
           cout << uzenet << endl;
           cin.clear(); getline(cin,tmp,'\n');
        }
    }
    while(hiba);
}
//konvertálás: int -> string
string intToStr(int x)
{
    string s="";
    bool neg=x<0;
    //előjel letagadása:
    if (neg) x=-x;
    while (x>0)
    {
        char c=char(x%10+48);//utolsó számjegy
        x=x/10;//utolsó számjegy nélkül
        s=c+s;
    }
    //x=0 esete:
    if (s.length()==0) s="0";
    //a negatív előjel hozzáragasztása:
    if (neg) s="-"+s;
    return s;
}
void billentyureVar()
{
    system("pause");
}

Vissza a tartalomjegyzékhez

Feladat: „Programozási tételek 2” feladatsor/8.

Feladat

Adott egy természetes számokból álló N-es. Határozzuk meg az inverziók számát, azaz hány pár van benne fordított sorrendben?

Vissza a tartalomjegyzékhez

Megoldás

Alkalmazott tétel

Megszámolás

Specifikáció

Bemenet

Db:Egész

Sz:Tömb[1..Db: Egész]

Kimenet

InvDb:Egész

Előfeltétel

Db≥0 és ∀i∈[1..Db]: Sz[i]>0

Utófeltétel

InvDb=SZUM(i=1..Db-1) SZUM(j=i+1..Db;Sz[i]>Sz[j]) 1

Algoritmus

A 3. feladat algoritmusa, struktogrammal.

Kód

#include <iostream>
#include <windows.h>
using namespace std;
//int tömb beolvasása, elemszáma -- n (<=maxN)
//elemei minE és maxE közöttiek
void be_int_tomb(string kerd, int &n,int t[],int maxN, int minE,int maxE);
//inverziószámlálás:
int inverzioSzam(int n, int v[]);
//eredménykiírás:
void kiiras(int db);
//beolvassa a minN..maxN közötti egész számot (maxN<minN => végtelen)
void be_int(string kerdes, int &n, int minN, int maxN, string uzenet);
//konvertálás: int -> string
string intToStr(int x);
void billentyureVar();
int main()
{
    //Bemenet:
    int N;//a számok darabszáma
    const int maxN=100;//a maximális darabszám
    int sz[maxN];//a számsorozat
    //Kimenet:
    int invDb;//az inverziók száma
    cout << "\nKérem a sorozatot!" << endl;
    be_int_tomb("Sorozat",N,sz,maxN,0,-1);
    invDb=inverzioSzam(N,sz);
    kiiras(invDb);
    billentyureVar();
    return 0;
}
//int tömb beolvasása, elemszáma -- n (<=maxN)
//elemei minE és maxE közöttiek
void be_int_tomb(string kerd, int &n,int t[],int maxN, int minE,int maxE)
{
    //tömb-elemszám beolvasása:
    be_int("\n"+kerd+"-elemek szama:",n,0,maxN,"Hibás a darabszam!");
    //a tömb beolvasása:
    cout << "\n"+kerd+"-elemek:" << endl;
    for (int i=0;i<n;++i)
    {
      string kerd="\n"+intToStr(i+1)+". :";
      be_int(kerd,t[i],minE,maxE,"Hibas ertek!");
    }
}
//inverziószámlálás:
int inverzioSzam(int n, int v[])
{
    int db=0;
    for (int i=0; i<n-1; ++i)
    {
       for (int j=i+1; j<n; ++j)
       {
           if (v[i]>v[j])
           {
               ++db;
           }
       }
    }
    return db;
}
//eredménykiírás:
void kiiras(int db)
{
    cout << endl<<"Az inverziok szama:" << db << "." << endl;
}
//beolvassa a minN..maxN közötti egész számot (maxN<minN => végtelen)
void be_int(string kerdes, int &n, int minN, int maxN, string uzenet)
{
    bool hiba;
    string tmp;
    do
    {
        if (maxN>=minN)
        {
           cout << kerdes << " (" << minN << ".." << maxN << "):";
           cin >> n;
           hiba=cin.fail() || n<minN || n>maxN;
        }
        else
        {
            cout << kerdes << " (" << minN << "..):";
            cin >> n;
            hiba=cin.fail() || n<minN;
        }
        if (hiba)
        {
            cout << uzenet << endl;
            cin.clear(); getline(cin,tmp,'\n');
        }
    }
    while(hiba);
}
//konvertálás: int -> string
string intToStr(int x)
{
    string s="";
    bool neg=x<0;
    //előjel letagadása:
    if (neg) x=-x;
    while (x>0)
    {
        char c=char(x%10+48);//utolsó számjegy
        x=x/10;//utolsó számjegy nélkül
        s=c+s;
    }
    //x=0 esete:
    if (s.length()==0) s="0";
    //a negatív előjel hozzáragasztása:
    if (neg) s="-"+s;
    return s;
}
void billentyureVar()
{
    system("pause");
}

Vissza a tartalomjegyzékhez

Házi feladatok

„Tömbök és ciklusok” feladatsor 5. feladata, függvényekkel

Feladat

Egy T fős baráti társaság egy nyaralás minden napján feljegyezte, hogy aznap mennyit költöttek. Készíts programot, ami meghatározza, hogy hány olyan nap volt, amikor fejenként 100 eurónál is többet költöttek.

„Tömbök és ciklusok” feladatsor 6. feladata, függvényekkel

Feladat

Egy fesztivál minden napján feljegyezték, hogy hány belépőt adtak el aznap. Készíts programot, ami meghatározza, hogy melyik napon voltak a legtöbben a fesztiválon!

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.