Varga Péter (VAPQAAI.ELTE)
Szerző Név: ETR azonosító: Email cím: Kurzuskód: Gyakorlatvezető neve: Feladatsorszám:
1
Varga Péter VAPQAAI.ELTE
[email protected] IP-08PAEG/27 Kőhegyi János 20
Varga Péter (VAPQAAI.ELTE)
Tartalom
Szerző ............................................................................................................................................................ 1 Felhasználói dokumentáció .......................................................................................................................... 3 Feladat .......................................................................................................................................................... 3 Környezet ...................................................................................................................................................... 3 Használat ................................................................................................................................................... 3 A program indítása ................................................................................................................................ 3 A program bemente .............................................................................................................................. 3 Egy lehetséges párbeszéd ..................................................................................................................... 4 A program eredménye .......................................................................................................................... 4 Egy lehetséges kimenet ........................................................................................................................ 4 Hibalehetőségek ................................................................................................................................... 5 Fejlesztői dokumentáció ............................................................................................................................... 6 Feladat ...................................................................................................................................................... 6 Specifikáció ........................................................................................................................................... 6 Környezet .................................................................................................................................................. 6 Forráskód .................................................................................................................................................. 6 Megoldás................................................................................................................................................... 7 Fontos típusok, változók ....................................................................................................................... 7 Programfelépítés................................................................................................................................... 7 Algoritmus ............................................................................................................................................. 7 C++ kód ..................................................................................................................................................... 8 Tesztelés .................................................................................................................................................... 8 Érvényes tesztesetek........................................................................................................................... 11 Érvénytelen tesztesetek ...................................................................................................................... 12 Fejlesztési lehetőségek ........................................................................................................................... 12
2
Varga Péter (VAPQAAI.ELTE)
Felhasználói dokumentáció Feladat 20. Egy repülőgéppel Európából Amerikába repültünk. Az út során X kilométerenként mértük a felszín tengerszint feletti magasságát. Feltételezésünk szerint ez a magasság mindenhol ≥0. 0 magasságot ott mértünk, ahol tenger van, >0-t pedig ott, ahol szárazföld. Készíts programot, amely meghatározza, hogy a szigetek átlagmagassága növekszik-e!
Környezet IBM PC, EXE fájl futtatására alkalmas operációs rendszer (pl. Windows XP, Windows Vista, Windows 7). Egeret nem igényel.
Használat
A program indítása A program
1beadando.b\bin\Release\1beadando.b.exe néven található a telepít anyagban. A Start menü Futtatás menüpontjában a fenti fájl kiválasztásával (beírásával) indítható. A program bemente A program először a magasságmérések számát kérdezi meg, majd egyesével bekéri a mért adatokat. Tenger feletti mérés esetén nullát kell beírni.
3
Varga Péter (VAPQAAI.ELTE)
Egy lehetséges párbeszéd
A program eredménye A program kiszámítja és kiírj, hogy a szigetek átlagmagassága növekszik-e.Egy lehetséges kimenet
4
Varga Péter (VAPQAAI.ELTE)
Hibalehetőségek A mérések száma nem lehet nulla, vagy annál kisebb, valamint nem lehet nagyobb az int típusú változó maximális értékénél (2.147.483.647). A mért értékek bekérésénél az esetleges negatív szám megadásakor a program figyelmeztet a rossz adatbevitelre és mindaddig kéri az aktuális mérés eredményét, amíg nem nullát, vagy pozitív számot adunk meg.
5
Varga Péter (VAPQAAI.ELTE)
Fejlesztői dokumentáció Feladat 20. Egy repülőgéppel Európából Amerikába repültünk. Az út során X kilométerenként mértük a felszín tengerszint feletti magasságát. Feltételezésünk szerint ez a magasság mindenhol ≥0. 0 magasságot ott mértünk, ahol tenger van, >0-t pedig ott, ahol szárazföld. Készíts programot, amely meghatározza, hogy a szigetek átlagmagassága növekszik-e!
Specifikáció Bemenet:
msz : Egész [a mérések elemszáma] t : Tömb[1..msz:Egész] [a mérések értékeit tartalmazó tömb]
Kimenet:
novekvo : Logikai [a szigetek átlagmagassága növekszik-e]
Előfeltétel: 1<msz<2147483647 Utófeltétel: t[i:i=1..msz:Egész]>=0 Utófeltétel: ta[i:i=1..msz:Valós]>=0 Definíció:
sziget>1 & novekvo=true : A szigetek átlag magassága növekszik. sziget>1 & novekvo=false : A szigetek átlag magassága NEM növekszik. sziget<=1 : Nincs egynél több sziget!
Környezet IBM PC, EXE fájl futtatására alkalmas operációs rendszer (pl. Windows XP, Windows Vista, Windows 7). Nem igényel egeret. C++ fordítóprogram (pl. gcc), Code::Blocks fejlesztői környezet.
Forráskód A teljes fejlesztői anyag "1beadando" nevű könyvtárban található meg.
6
\bin\Debug\ 1beadando.exe
- nyomkövethető állapotú, futtatható kód
\obj\Debug\main.o
- nyomkövethető állapotú, félig lefordított(object-) kód
\bin\Release\1beadando.exe
- végleges, futtatható kód
\obj\Release\ main.o
- végleges, félig lefordított (object-) kód
Varga Péter (VAPQAAI.ELTE)
\main.???
- C++ forrás fájl
\ 1beadando.b.???
- code:Blocks projekt fájl
\ 1beadando.b.???
- code:Blocks depend fájl
\ 1beadando..b???
- code:Blocks layout fájl
Megoldás Fontos típusok, változók Változó msz: Egész i: Egész szmsz: Egész magas: Egész sziget: Egész atlag: Valós novekvo: logikai t: Tömb [msz] : Egész ta: Tömb [msz] : Valós
Programfelépítés A program által használt modulok (és helye)5: • main
- main.cpp
• iostream
- a C++ rendszer része.
Algoritmus be: msz i=1..msz be t[i] 1..msz t[i] = 0 Igaz: szmsz!=0 Igaz: sziget+=1; ta[sziget]=magas/szmsz; szmsz=0; magas=0;
7
Hamis: szmsz+=1; magas+=t[i]; Hamis:
Varga Péter (VAPQAAI.ELTE)
t[i-1]!=0 Igaz: sziget+=1; atlag= (double) magas/szmsz; ta[sziget]=atlag;
Hamis:
i=2…sziget Igaz: novekvo && ta[i]<=ta[i-1] novekvo=false
Hamis: sziget>1
Igaz: novekvo
Igaz: Hamis: novekvo=false
Hamis:
C++ kód // Szerzo: Varga Péter // ETR azonosító: VAPQAAI.ELTE // Email cím:
[email protected] // // Feladat: // 20. feladat // Egy repülõgéppel Európából Amerikába repültünk. Az út során X kilométerenként mértük a felszín tengerszint feletti magasságát. // Feltételezésünk szerint ez a magasság mindenhol =0. 0 magasságot ott mértünk, ahol tenger van, >0-t pedig ott, ahol szárazföld. // Készíts programot, amely meghatározza,hogy a szigetek átlagmagassága növekszik-e! // // Specifikáció: // Be: msz : Egész [a mérések elemszáma] //
t : Tömb[1..msz:Egész] [a mérések értékeit tartalmazó tömb]
// Ki: novekvo : Logikai [a szigetek átlagmagassága növekszik-e] // Ef: 1<msz<2147483647 // Uf: t[i:i=1..msz:Egész]>=0 // Uf: ta[i:i=1..msz:Valós]>=0 // Def: sziget>1 & novekvo=true : A szigetek atlag magassaga novekszik.
8
//
sziget>1 & novekvo=false : A szigetek atlag magassaga NEM novekszik.
//
sziget<=1 : Nincs egynel tobb sziget!
Varga Péter (VAPQAAI.ELTE)
#include
using namespace std; int main() { int i,msz,szmsz,magas,sziget; double atlag=0; bool novekvo=true; int* t; double* ta;
cout <<"Add meg a meresek szamat!"<<endl; do { cin>>msz; if (msz<1) cout <<"Rossz szamot adtal meg, probald ujra! A szamnak 0-tol nagyobbnak kell lennie."<<endl; } while (msz<1); szmsz=0;magas=0;sziget=0; t= new int [msz]; ta= new double [msz]; for (i=0;i<msz;i++) { cout<<"Add meg az "<>t[i]; 9
Varga Péter (VAPQAAI.ELTE)
if (t[i]<0) cout<<"Rossz szamot adtal meg, probald ujra! A szamnak 0-tol nagyobbnak kell lennie."<<endl; } while (t[i]<0); if (t[i]==0) { if(szmsz!=0) { sziget+=1; atlag= (double) magas/szmsz; ta[sziget]=atlag; szmsz=0; magas=0; } } else { szmsz+=1; magas+=t[i]; } } if(t[i-1]!=0) { sziget+=1; atlag= (double) magas/szmsz; ta[sziget]=atlag; } for (i=2;i<=sziget;i++) if ((novekvo) && (ta[i]<=ta[i-1]))
10
Varga Péter (VAPQAAI.ELTE)
{ novekvo= false; break; }
if (sziget>1) { if (novekvo) cout<<"A szigetek atlag magassaga novekszik."<<endl; else cout<<"A szigetek atlag magassaga NEM novekszik."<<endl; } else cout <<"Nincs egynel tobb sziget!"<<endl; return 0; }
Tesztelés Érvényes tesztesetek
11
Bemenet
Kimenet
msz=5; t[i]={5;0;5;5;0}; sziget>1 && novekvo
A szigetek átlag magassága növekszik.
msz=5; t[i]={5;0;0;6;0}; sziget>1 && novekvo
A szigetek átlag magassága növekszik.
msz=5; t[i]={5;0;5;0;0}; sziget>1 && novekvo=false
A szigetek átlag magassága NEM növekszik.
msz=5; t[i]={5;0;5;1;0}; sziget>1 && novekvo=false
A szigetek átlag magassága NEM növekszik.
msz=5; t[i]={0;0;5;0;0} ;sziget<=1
Nincs egynél több sziget!
msz=5; t[i]={0;0;0;0;0} ;sziget<=1
Nincs egynél több sziget!
msz=-1
Rossz számot adtál meg, próbáld újra! A számnak 0-tol nagyobbnak kell lennie.
Varga Péter (VAPQAAI.ELTE)
Érvénytelen tesztesetek Bemenet
Kimenet
msz=2147483647
Érvénytelen működéshez vezet
Fejlesztési lehetőségek A cin függvény módosítása, maximumnál nagyobb és a minimumnál kisebb érték megadása esetén hibaüzenet küldése.
12