--A fájl ezen verziója saját osztály megvalósítást használ , ami nem támogatja a dinamikus viselkedést, --csak a felüldefiniálást, azonban a feladat így is megoldható --Készítő: Hack János --Feladat:Töltsön fel egy tömböt különféle szabályos (kör, szabályos háromszög, négyzet, szabályos hatszög) síkidomokkal! --Határozza meg a legkisebb téglalapot, amely lefedi az összes síkidomot és oldalai párhuzamosak a tengelyekkel! --Minden síkidom reprezentálható a középpontjával és az oldalhosszal, illetve a sugárral, ha feltesszük, --hogy a sokszögek esetében az egyik oldal párhuzamos a koordináta rendszer vízszintes tengelyével, és a többi --csúcs ezen oldalra fektetett egyenes felett helyezkedik el. A síkidomokat szövegfájlból töltse be! A fájl első sorában --szerepeljen a síkidomok száma, majd ez egyes síkidomok. Az első szám(kör = -1, szabályos háromszög = -2, --négyzet = -3, szabályos hatszög = -4) azonosítja a síkidom fajtáját, amit követnek a középpont koordinátái és --a szükséges hosszúság. A feladatokban a beolvasáson kívül a síkidomokat egységesen kezelje, ennek érdekében --a síkidomokat leíró osztályokat egy közös ősosztályból származtas PI=3.14 --Shape baseclass Shape = {x,y,r} --definiáljuk az új osztályt Shape_mt = { __index = Shape } -- létrehozunk neki egy metatáblát function Shape:create(x_,y_,r_) local inst = {x=x_,y=y_,r=r_} --létrehozzuk az új objektumot setmetatable( inst, Shape_mt ) --beállítjuk a metatáblába az új objektumot return inst end --function Shape:maxTav() -- print( "not implemented here!!!") --end -- Create a new class that inherits from shape function subclassof( baseClass ) local new_class = {x,y,r} --definiáljuk az új osztályt local class_mt = { __index = new_class } -- létrehozunk neki egy metatáblát function new_class:create(x_,y_,r_) local inst = {x=x_,y=y_,r=r_} --létrehozzuk az új objektumot setmetatable( inst, class_mt ) --beállítjuk a metatáblába az új objektumot return inst end if baseClass then setmetatable( new_class, { __index = baseClass } ) -- beállítjuk az új osztálynak az ős metatábláját end return new_class end --Circle class Circle = subclassof(Shape) function Circle:maxTav() --kiszámolja a befoglaló kör sugarát return self.r end --Triangle class Triangle = subclassof(Shape) function Triangle:maxTav() --kiszámolja a befoglaló kör sugarát return abs((sqrt(3)*self.r)/3) end --Square class Square = subclassof(Shape) function Square:maxTav() --kiszámolja a befoglaló kör sugarát return abs((self.r*(1/tan(PI/4)))/2) end --Hexagon class Hexagon = subclassof(Shape) function Hexagon:maxTav() --kiszámolja a befoglaló kör sugarát return abs((self.r*(1/tan(PI/6)))/2) end function maxPoint(shapeList_,size_,direction_) --direction_ = u = up ,d =down ,l= left ,r = right local maxX = shapeList[1].x local maxY = shapeList[1].y for i=1, size_ do if direction_ == 'l' then local tmp=shapeList[i].x-shapeList[i]:maxTav() if maxX > tmp then maxX=tmp end elseif direction_ == 'r' then local tmp=shapeList[i].x+shapeList[i]:maxTav() if maxX < tmp then maxX=tmp end elseif direction_ == 'u' then local tmp=shapeList[i].y+shapeList[i]:maxTav() if maxY < tmp then maxY=tmp end elseif direction_ == 'd' then local tmp=shapeList[i].y-shapeList[i]:maxTav() if maxY > tmp then maxY=tmp end end end return maxX,maxY end --fájl beolvasás io.write("Kerem a bemeneti fajl nevet:") io.flush() fileName=io.read() --print(fileName) io.input(fileName) numberOfShapes=io.read("*number") if numberOfShapes == nil or numberOfShapes == 0 then print ("hiba a fajl ures vagy 0-az elemek szama") do return end end --print(numberOfShapes) shapeList = {} --alakzatok beolvasása for i=1, numberOfShapes do local shapeType,x,y,r=io.read("*number","*number","*number","*number") --print(shapeType,x,y,r) if r == nil or r <= 0 then print ("hiba a sugar/oldal hossz nagyobb kell legyen mint 0-a") do return end end if shapeType==-1 then shapeList[i]=Circle:create(x,y,r) elseif shapeType==-2 then shapeList[i]=Triangle:create(x,y,r) elseif shapeType==-3 then shapeList[i]=Square:create(x,y,r) elseif shapeType==-4 then shapeList[i]=Hexagon:create(x,y,r) else print ("ilyen shape nincs!!!") do return end end end lX,lY = maxPoint(shapeList,numberOfShapes,'l') rX,rY = maxPoint(shapeList,numberOfShapes,'r') uX,uY = maxPoint(shapeList,numberOfShapes,'u') dX,dY = maxPoint(shapeList,numberOfShapes,'d') print("A befoglalo teglalap sarok koordinatai:") print("bal oldal: x=",lX," , y=",lY) print("jobb oldal: x=",rX," , y=",rY) print("felso: x=",uX," , y=",uY) print("also: x=",dX," , y=",dY)