Szerző Név: Varga Péter ETR azonosító: VAPQAAI.ELTE Email cím: vp.05@hotmail.com Kurzuskód: IP-08PAEG/27 Gyakorlatvezető neve: Kőhegyi János Feladatsorszám: 20 1
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
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
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
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
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. \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 6
\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 iostream - main.cpp - a C++ rendszer része. Algoritmus Igaz: szmsz!=0 Igaz: sziget+=1; ta[sziget]=magas/szmsz; szmsz=0; magas=0; be: msz i=1..msz be t[i] 1..msz Hamis: t[i] = 0 Hamis: szmsz+=1; magas+=t[i]; 7
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 sziget>1 Igaz: Igaz: novekvo Hamis: novekvo=false Hamis: Hamis: C++ kód // Szerzo: Varga Péter // ETR azonosító: VAPQAAI.ELTE // Email cím: vp.05@hotmail.com // // 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. // sziget>1 & novekvo=false : A szigetek atlag magassaga NEM novekszik. // sziget<=1 : Nincs egynel tobb sziget! 8
#include <iostream> 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 "<<i+1<<". pont meresi erteket meterben!"<<endl; do cin>>t[i]; 9
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
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 Bemenet msz=5; t[i]=5;0;5;5;0; sziget>1 && novekvo msz=5; t[i]=5;0;0;6;0; sziget>1 && novekvo msz=5; t[i]=5;0;5;0;0; sziget>1 && novekvo=false msz=5; t[i]=5;0;5;1;0; sziget>1 && novekvo=false msz=5; t[i]=0;0;5;0;0 ;sziget<=1 msz=5; t[i]=0;0;0;0;0 ;sziget<=1 msz=-1 Kimenet A szigetek átlag magassága növekszik. A szigetek átlag magassága növekszik. A szigetek átlag magassága NEM növekszik. A szigetek átlag magassága NEM növekszik. Nincs egynél több sziget! Nincs egynél több sziget! Rossz számot adtál meg, próbáld újra! A számnak 0-tol nagyobbnak kell lennie. 11
Érvénytelen tesztesetek Bemenet msz=2147483647 Kimenet É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