You are viewing an old version of this page. View the current version.
Compare with Current
View Page History
« Previous
Version 3
Next »
Oppgave i Python-Java-oversetting i to delerDel 1 - rects.py
Dette Python-programmet holder rede på (koordinatene til) to rektangler, og brukeren kan endre rektanglene og spørre om de overlapper. Programmet bygger på et eksempel på Guttorm Sindre sin YouTube-kanal.
Oversett programmet til Rects.java, basert på rpncalc1.py oversatt til Java.
# rects.py
r1x1 = 0
r1y1 = 0
r1x2 = 0
r1y2 = 0
r2x1 = 0
r2y1 = 0
r2x2 = 0
r2y2 = 0
def intervalsOverlap(n1, n2, m1, m2):
return not (n1 > m2 or n2 < m1)
def rectanglesOverlap():
return intervalsOverlap(r1x1, r1x2, r2x1, r2x2) and intervalsOverlap(r1y1, r1y2, r2y1, r2y2)
def rectangle2String(x1, y1, x2, y2):
return "(" + str(x1) + "," + str(y1) + ")" + "," + "(" + str(x2) + "," + str(y2) + ")"
def main():
while (True):
print("Rect1: " + rectangle2String(r1x1, r1y1, r1x2, r1y2))
print("Rect2: " + rectangle2String(r2x1, r2y1, r2x2, r2y2))
token = raw_input(" > ")
if token == "overlaps?":
print(rectanglesOverlap())
elif token == "exit":
break
else:
pos = token.find("=")
if pos >= 4:
val = float(token[pos + 1 :])
if token.startswith("r1x1"):
r1x1 = val
elif token.startswith("r1y1"):
r1y1 = val
elif token.startswith("r1x2"):
r1x2 = val
elif token.startswith("r1y2"):
r1y2 = val
elif token.startswith("r2x1"):
r2x1 = val
elif token.startswith("r2y1"):
r2y1 = val
elif token.startswith("r2x2"):
r2x2 = val
elif token.startswith("r2y2"):
r2y2 = val
Del 2 - rectscore.py og rectsui.py
Programmet er her delt i to moduler, ett for interaksjon med brukeren og ett for rektangel-logikken.
Oversett programmet til RectsCore.java og RectsUI.java, basert på rpncalc4core.py og rpncalc4ui.py oversatt til Java.
# rectscore.py
r1x1 = 0
r1y1 = 0
r1x2 = 0
r1y2 = 0
r2x1 = 0
r2y1 = 0
r2x2 = 0
r2y2 = 0
def intervalsOverlap(n1, n2, m1, m2):
return not (n1 > m2 or m2 < n1)
def rectanglesOverlap():
return intervalsOverlap(r1x1, r1x2, r2x1, r2x2) and intervalsOverlap(r1y1, r1y2, r2y1, r2y2)
def rectangle2String(x1, y1, x2, y2):
return "(" + str(x1) + "," + str(y1) + ")" + "," + "(" + str(x2) + "," + str(y2) + ")"
|
# rectsui.py
import rectscore
def main():
while (True):
print("Rect1: " + rectscore.rectangle2String(rectscore.r1x1, rectscore.r1y1, rectscore.r1x2, rectscore.r1y2))
print("Rect2: " + rectscore.rectangle2String(rectscore.r2x1, rectscore.r2y1, rectscore.r2x2, rectscore.r2y2))
token = raw_input(" > ")
if token == "overlaps?":
print(rectscore.rectanglesOverlap())
elif token == "exit":
break
else:
pos = token.find("=")
if pos >= 4:
val = float(token[pos + 1 :])
if token.startswith("r1x1"):
rectscore.r1x1 = val
elif token.startswith("r1y1"):
rectscore.r1y1 = val
elif token.startswith("r1x2"):
rectscore.r1x2 = val
elif token.startswith("r1y2"):
rectscore.r1y2 = val
elif token.startswith("r2x1"):
rectscore.r2x1 = val
elif token.startswith("r2y1"):
rectscore.r2y1 = val
elif token.startswith("r2x2"):
rectscore.r2x2 = val
elif token.startswith("r2y2"):
rectscore.r2y2 = val
main()
|