Gólya Péter 2.beadandó / 10. fel 2011.05.18.
GOPSAAI.ELTE gopsaai@inf.elte.hu 2.csoport(szerda)
Feladat
Valósítsa meg a prímszámokat tartalmazó halmazok típusát! Egy ilyen halmazt a halmazbeli prímszámok szorzatával, azaz egy egész számmal lehet
reprezentálni. Ügyeljen arra, hogy ennek a számnak a prímtényezős
felbontásában ugyanaz a prímszám legfeljebb egyszer szerepeljen! Az üres halmazt az 1 szám helyettesíti. Valósítsa meg egy prímszámnak a halmazba való betételét, abból történő kivételét, annak vizsgálatát, hogy üres-e a halmaz, vagy hogy egy adott prímszám benne van-e. A főprogram ilyen halmazra próbálja ki a fenti műveleteket!
Prím típus Prím
h:=1 (-üres halmaz) h:=h U {e}
h:= h /{e}
Int × Int
Implementáció
A prímek osztálya
A halmazt a bevitt prímszámok szorzatával reprezentálja a program. A prím halmaz típus kezdetben létrehoz egy üres halmazt (a létrehozást egy
konstruktor végzi). Kezeli, ha nem prímet akarunk a halmazhoz adni. Majd adhatunk hozzá prím elemeket, illetve vehetünk el belőle. Egy prímet csak egyszer tartalmazhat. Lekérdezhető, hogy üres-e a halmaz, illetve, hogy egy adott elem benne van-e már a halmazban.
class Prim {
public:
enum Hibak{ E_NOTPRIME }; // Hiba: nem prímet adtunk meg.
Prim();
~Prim();
void Add(int NewElement);
void Remove(int Element);
bool IsEmpty();
bool IsInSet(int Element);
private:
int product;
bool IsPrime(int Number);
void AssertPrime(int Number);
bool IsFactorOfProduct(int Number);
};
Függvények kapcsolódási szerkezete
Program váz
A program több állományból áll: main.cpp, prim.h, prim.cpp, modul.h, modul.cpp.
main.cpp prim.cpp – prim.h modul.cpp – modul.h
main() Prim()
~Prim() Add() Remove() IsEmpty() IsInSet() IsPrime() IsEven() AssertPrime()
IsFactorOfProduct()
menu() ReadInt() RemoveInt()
main()
menu()
Add()
ReadInt()
AssertPrime() IsPrime()
IsFactorOfProduct
Remove()
RemoveInt()
IsPrime()
IsFactorOfProduct()
IsInset()
ReadInt()
IsFactorOfProduct()
IsPrime() IsEven()
IsEmpty()
Tesztelési terv
Tesztesetek a prim komponenshez
Konstruktor teszt.
Elem hozzáadása és kivétele a halmazból tesztje. Ekkor teszteljük az
’IsInSet’ – ’benne van-e a halmazban egy elem függvényt is.
Üres halmaz tesztje.
Tesztesetek a feladat specifikációja alapján Szempontok:
Szélsőséges adatok (negatív számok, 0, betűk)
Menü:
1.Add - elem hozzáadása 2.Remove - elem törlése 3.Is in? – benne van-e?
4.Is empty? – üres-e?
5.Exit – kilépés
Teszt1:
1.Add: 0
out: „Not prime”
Teszt2:
1.Add: 3 2.Remove: 3 3.Is in?: 3
out: „It’s not inside”
4.Is empty?
out: „It’s empty!”
Teszt3:
4. Is empty?
„It’s empty!”
Teszt4:
1.Add: -10
out: „Not prime!”
Teszt5:
1.Add: adujsadsa out: „Wrong input”
Teszt6(menü):
in: 6
out: ”Incorrect! Please choose from 1-5.”