--ez az implementáció a https://github.com/jpatte/yaci.lua oldalon --található yaci-1.2.0.lua fáljal készült 2013.05.29-én --Készítő: Hack János --a futtatáshoz szükség van a yaci-x.lua-ra amit a fájl mellé kell helyeznünk --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 = newclass("Shape") function Shape:init(x_,y_,r_) --konstuktor definíció self.x = x_ self.y = y_ self.r = r_ end function Shape:maxTav() print("Not implemented here!!!") end Shape:virtual("maxTav") --az adott függvény virtuálissá tétele --Circle class Circle = newclass("Circle",Shape) --új osztály létrehozása , ami leszármazottja lesz a Shape-nek function Circle:init(x_,y_,r_) --konstuktor definíció self.super:init(x_,y_,r_) end function Circle:maxTav() --kiszámolja a befoglaló kör sugarát return self.r end --Triangle class Triangle = newclass("Triangle",Shape) --új osztály létrehozása , ami leszármazottja lesz a Shape-nek function Triangle:init(x_,y_,r_) --konstuktor definíció self.super:init(x_,y_,r_) end function Triangle:maxTav() --kiszámolja a befoglaló kör sugarát return abs((sqrt(3)*self.r)/3) end --Square class Square = newclass("Square",Shape) --új osztály létrehozása , ami leszármazottja lesz a Shape-nek function Square:init(x_,y_,r_) --konstuktor definíció self.super:init(x_,y_,r_) end function Square:maxTav() --kiszámolja a befoglaló kör sugarát return abs((self.r*(1/tan(PI/4)))/2) end --Hexagon class Hexagon = newclass("Hexagon",Shape) --új osztály létrehozása , ami leszármazottja lesz a Shape-nek function Hexagon:init(x_,y_,r_) --konstuktor definíció self.super:init(x_,y_,r_) end 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 = {} tmp = nil --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 tmp=Circle(x,y,r) shapeList[i]=Shape:cast(tmp) elseif shapeType==-2 then tmp=Triangle(x,y,r) shapeList[i]=Shape:cast(tmp) elseif shapeType==-3 then tmp=Square(x,y,r) shapeList[i]=Shape:cast(tmp) elseif shapeType==-4 then tmp=Hexagon(x,y,r) shapeList[i]=Shape:cast(tmp) 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)