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 deler

Del 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
# 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
# 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
# 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()

 

 

  • No labels