szerző - eötvös loránd universityloveipeter.web.elte.hu/progalap/beadando/pdf/bead.pdf ·...

12
1 Szerző Név: Lővei Péter ETR-azonosító: LOPSAAI.ELTE Drótposta-cím: [email protected] Kurzuskód: IP-08PAEG/25 Gyakorlatvezető neve: Daiki Tennó Feladatsorszám: 11

Upload: others

Post on 02-Feb-2020

2 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Szerző - Eötvös Loránd Universityloveipeter.web.elte.hu/progalap/beadando/pdf/bead.pdf · Felhasználói dokumentáció 3 Egy lehetséges kimenet Példa a beadando.exe képernyő-outputjára

1

Szerző

Név: Lővei Péter

ETR-azonosító: LOPSAAI.ELTE

Drótposta-cím: [email protected]

Kurzuskód: IP-08PAEG/25

Gyakorlatvezető neve: Daiki Tennó

Feladatsorszám: 11

Page 2: Szerző - Eötvös Loránd Universityloveipeter.web.elte.hu/progalap/beadando/pdf/bead.pdf · Felhasználói dokumentáció 3 Egy lehetséges kimenet Példa a beadando.exe képernyő-outputjára

2

Tartalom

Szerző ........................................................................................................ 1

Tartalom ..................................................................................................... 2

Felhasználói dokumentáció ........................................................................ 1

Feladat ...................................................................................................................... 1

Környezet ................................................................................................................. 1

Használat .................................................................................................................. 1

A program indítása ...........................................................................................................1 A program bemenete ........................................................................................................2 Egy lehetséges párbeszéd ..................................................................................................2 A program eredménye ......................................................................................................2 Egy lehetséges kimenet .....................................................................................................3 Hibalehetőségek ...............................................................................................................3 Egy lehetséges párbeszéd ..................................................................................................3

Fejlesztői dokumentáció ............................................................................. 1

Feladat ...................................................................................................................... 1

Specifikáció ......................................................................................................................1

Környezet ................................................................................................................. 1

Forráskód .................................................................................................................. 1

Megoldás .................................................................................................................. 1 Fontos típusok, változók ...................................................................................................1 Programfelépítés ...............................................................................................................1 Algoritmus .......................................................................................................................2

C++ kód .................................................................................................................... 3

Tesztelés ................................................................................................................... 3

Érvényes tesztesetek .........................................................................................................5 Érvénytelen tesztesetek .....................................................................................................6

Fejlesztési lehetőségek .............................................................................................. 6

Page 3: Szerző - Eötvös Loránd Universityloveipeter.web.elte.hu/progalap/beadando/pdf/bead.pdf · Felhasználói dokumentáció 3 Egy lehetséges kimenet Példa a beadando.exe képernyő-outputjára

1

Felhasználói dokumentáció

Feladat

Az ország N helységében végeztünk madármegfigyeléseket. Mindegyikben megadtuk,

hogy milyen fajú madárból hányat láttunk. A madárfajok száma összesen M. Készíts

programot, amely eldönti, hogy volt-e olyan madár, amely csak 1 helyen fordul elő!

Környezet

IBM PC, exe futtatására alkalmas operációs rendszer (pl. Windows 7).

Nem igényel egeret.

Használat

A program indítása

A program

LOPSAAI_11\bin\Release\BEADANDO.EXE

néven található a telepítő anyagban.

A beadando.exe program indítása.

Page 4: Szerző - Eötvös Loránd Universityloveipeter.web.elte.hu/progalap/beadando/pdf/bead.pdf · Felhasználói dokumentáció 3 Egy lehetséges kimenet Példa a beadando.exe képernyő-outputjára

Felhasználói dokumentáció

2

Fájlos input/output esetén az előbbi könyvtárból –a fentihez hasonló módon– a fájlparaméterek megadásával így indítható:

BEADANDO.EXE >eredmeny.ki <bemenet.be

vagy

BEADANDO.EXE >>eredmeny.ki <bemenet.be

Megjegyzések:

1. Ha az output fájlparamétert elhagyjuk, akkor az eredmény a képernyőn fog

megjelenni.

2. A bemeneti tesztadat-fájlok az EXE mellett találhatók.

3. Az utóbbi híváskor minden indítás eredménye az eredmeny.ki fájlba, folytató-lag kerül beírásra, míg az első esetben a beleírás előtt a fájl tartalma törlődik.

A program bemenete

A program először megkérdezi a helységek számát (N), majd megkérdezi a ma-

dárfajok számát (M).

Ezután N][M-szer megkérdezi az adott helységben az adott madárfajból látott ma-

darak számát.

Sorindex Adat Magyarázat

1. N, M A helységek száma (N), a madárfajok száma (M)

2. MAD1,1 Az első helység első madárfajából látott mada-rak száma

… … …

i+1. MADi,j Az i. helység j. madárfajából látott madarak száma

… … …

N][M+1 MADN,M Az N. helység M. madárfajából látott madarak

száma

Egy lehetséges párbeszéd

Példa a beadando.exe klaviatúra-inputjára.

A program eredménye

A program kiírja, hogy melyek voltak azok a madárfajok, melyek csak egy helységben

fordultak elő.

Page 5: Szerző - Eötvös Loránd Universityloveipeter.web.elte.hu/progalap/beadando/pdf/bead.pdf · Felhasználói dokumentáció 3 Egy lehetséges kimenet Példa a beadando.exe képernyő-outputjára

Felhasználói dokumentáció

3

Egy lehetséges kimenet

Példa a beadando.exe képernyő-outputjára.

Hibalehetőségek

A helységek száma és a madárfajok száma nem lehet kisebb 0-nál. Ha a felhasználó 0-

nál kevesebbet ad meg, akkor a program az adatot újra kérdezi. (Figyelem, ezért is a fáj-

los input különleges gondosságot igényel, hiszen ekkor teljességgel hiába való a prog-

ram újrakérdezése: az adatok elcsúszása a program rendellenes viselkedéséhez vezet.)

Egy lehetséges párbeszéd

Példa a beadando.exe hibás klaviatúra-inputjára.

Page 6: Szerző - Eötvös Loránd Universityloveipeter.web.elte.hu/progalap/beadando/pdf/bead.pdf · Felhasználói dokumentáció 3 Egy lehetséges kimenet Példa a beadando.exe képernyő-outputjára
Page 7: Szerző - Eötvös Loránd Universityloveipeter.web.elte.hu/progalap/beadando/pdf/bead.pdf · Felhasználói dokumentáció 3 Egy lehetséges kimenet Példa a beadando.exe képernyő-outputjára

1

Fejlesztői dokumentáció

Feladat

Az ország N helységében végeztünk madármegfigyeléseket. Mindegyikben megadtuk,

hogy milyen fajú madárból hányat láttunk. A madárfajok száma összesen M. Készíts

programot, amely eldönti, hogy volt-e olyan madár, amely csak 1 helyen fordul elő!

Specifikáció

Bemenet: N:Egész [helységek száma]

M:Egész [madárfajok száma]

Mad:Tömb[1..N][1..M] [a madarak számát tartalmazó tömb] Kimenet: EGY(i):Egész [a madárfaj(ok) sorszáma, amelyik csak egy helyen

fordul elő]

Előfeltétel: 0N,M

Utófeltétel: 0EGY(i)M

Környezet

IBM PC, exe futtatására alkalmas operációs rendszer (pl. Windows 7).

C++ fordítóprogram (pl. gcc), Code::Blocks fejlesztői környezet.

Forráskód

A teljes fejlesztői anyag a LOPSAAI_11 nevű könyvtárban található meg.

A fejlesztés során használt könyvtár-struktúra (LOPSAAI_11-relatív):

\bin\Debug\beadando.exe – nyomkövethető állapotú futtatható kód

\bin\Release\beadando.exe – végleges futtatható kód

\mad1.be – 1. tesztadat fájl

\mad2.be – 2. tesztadat fájl

\mad3.be – 3. tesztadat fájl

\mad4.be – 4. tesztadat fájl

\obj\Debug\beadando.o – nyomkövethető állapotú, féliglefordított

(object-) kód

\obj\Release\beadando.o – végleges, féliglefordított (object-) kód

\beadando.cbp – projektfájl,

\beadando.cpp – C++ forrás.

Megoldás

Fontos típusok, változók

Változó

N,M:Egész

MAD:Tömb[N:Egész][M:Egész]

SZ:Tömb[M:Egész]

Programfelépítés

A program által használt modulok (és helye):

beadando – beadando.cpp

iostream – a C++ rendszer része

Page 8: Szerző - Eötvös Loránd Universityloveipeter.web.elte.hu/progalap/beadando/pdf/bead.pdf · Felhasználói dokumentáció 3 Egy lehetséges kimenet Példa a beadando.exe képernyő-outputjára

Fejlesztői dokumentáció

2

stdio.h - a C++ rendszer része

stdlib.h - a C++ rendszer része

A skalar.cpp függvénystruktúrája az alábbi:

A beadando.cpp felépülése függvényekből.

Algoritmus

Az algoritmizálás szempontjából két függvény mondható érdekesnek: a

vizsgalat. Ennek algoritmusa az alábbi:

A másik függvény a kiiras:

main

beolvasas vizsgalat kiiras billentyureVar

Page 9: Szerző - Eötvös Loránd Universityloveipeter.web.elte.hu/progalap/beadando/pdf/bead.pdf · Felhasználói dokumentáció 3 Egy lehetséges kimenet Példa a beadando.exe képernyő-outputjára

Fejlesztői dokumentáció

3

C++ kód

//Szerzõ: Lõvei Péter

//ETR-azonosító: LOPSAAI.ELTE

//Drótposta-cím: [email protected]

//

//Feladat:

// Madármegfigyelés 11.feladat

//Specifikáció

//Bemenet: N:Egész [helységek száma]

// M:Egész [madárfajok száma]

// Mad:Tömb[1..N][1..M] [a madarak számát tartalmazó tömb]

//Kimenet:EGY:Egész [a madárfaj(ok) sorszáma, amelyik csak egy helyen fordul elõ]

//Elõfeltétel: 0<N,M

//Utófeltétel: 0<EGY<=M

#include <iostream>

using namespace std;

int z,n,m;

int **tomb;

void beolvasas(int &n, int &m, int** &mad);

void vizsgalat(int n, int m, int** mad, float sz[]);

void kiiras(int m, const float sz[]);

void billentyureVar();

int main(){

int **mad;

float sz[m+1];

beolvasas(n,m,mad);

vizsgalat(n,m,mad,sz);

Page 10: Szerző - Eötvös Loránd Universityloveipeter.web.elte.hu/progalap/beadando/pdf/bead.pdf · Felhasználói dokumentáció 3 Egy lehetséges kimenet Példa a beadando.exe képernyő-outputjára

Fejlesztői dokumentáció

4

kiiras(m,sz);

billentyureVar();

return 0;

}

void beolvasas(int &n, int &m,int** &mad){

do { //ez a rész felelős a beolvasá-

sért

cout<<"n: ";

cin>>n;} while (n<0);

do {

cout<<"m: ";

cin>>m;} while (m<0);

mad=new int*[n+1];

for (int i=1;i<=n;++i){mad[i]=new int[m+1];}

for (int i=1; i<=n; i++) {

cout<<i<<". helyseg: "<<endl;

for (int j=1; j<=m; j++){

cout<<j<<". madarfaj: ";

cin>>mad[i][j];}

}}

void vizsgalat(int n, int m, int** mad, float sz[]){

for (int k=1; k<=m; k++) {sz[k]=0;}

for (int j=1; j<=m; j++) { //ebben a részben

megszamlaljuk hany telepulesben fordultak elo a madarfajok

for (int i=1; i<=n; i++) {

if (mad[i][j]>0){

sz[j]=sz[j]++;

} }

}}

void kiiras(int m, const float sz[]){

Page 11: Szerző - Eötvös Loránd Universityloveipeter.web.elte.hu/progalap/beadando/pdf/bead.pdf · Felhasználói dokumentáció 3 Egy lehetséges kimenet Példa a beadando.exe képernyő-outputjára

Fejlesztői dokumentáció

5

cout<<"A kovetkezo madarfajok fordultak elo csak egy

helyen:"<<endl; //ebben a reszben iratjuk ki azokat a

madarfajokat, amik

z=0;

//csak egy helyen fordulnak elő, itt is döntjük ezt el

for (int i=1; i<=m; i++) {

if (sz[i]==1) {

cout<<i<<" ";}

else {

z=z+1;}}

if (z==m) {cout<<"Nem volt olyan madarfaj, ami csak egy

helyen fordult volna elo.";}

cout<<endl;}

void billentyureVar(){system("pause");}

Tesztelés

Érvényes tesztesetek

Bemenet Kimenet Bemeneti fájl

N=1 M=1 MAD[1][1]>0 1 –

N=2, M=3

MAD[1][1]=0, MAD[1][2]=3, MAD[1][3]=5

MAD[2][1]=1, MAD[2][2]=8, MAD[2][3]=3

1 mad1.be

N=2, M=3

MAD[1][1]=0, MAD[1][2]=5, MAD[1][3]=5

MAD[2][1]=1, MAD[2][2]=0, MAD[2][3]=3

1, 2 mad2.be

N=3, M=1

MAD[1][1]=0 MAD[1][2]=3 MAD[1][3]=1

Nem volt

olyan…

mad3.be

N=5, M=2

MAD[1][1]=0, MAD[1][2]=1

MAD[2][1]=1, MAD[2][2]=0

MAD[3][1]=0, MAD[3][2]=1

MAD[4][1]=0, MAD[4][2]=1

MAD[5][1]=0, MAD[5][2]=1

1 mad4.be

Page 12: Szerző - Eötvös Loránd Universityloveipeter.web.elte.hu/progalap/beadando/pdf/bead.pdf · Felhasználói dokumentáció 3 Egy lehetséges kimenet Példa a beadando.exe képernyő-outputjára

Fejlesztői dokumentáció

6

Érvénytelen tesztesetek

Bemenet Kimenet

N≤0; M≤0; MAD[i][j]≤0 hibaüzenet

Fejlesztési lehetőségek

A beolvasás szigorúbb kontroljának megoldása.

A teszteseteket generálhatná a program, így sokkal véletlenebb eredményt elérve.