Program za izračunavanje površine prostorije

Ovaj Python program, na osnovu instrukcija koje su date u obliku smerova (levo “<“, desno “>”, gore “^”, dole “v”) i dužine zida (npr. ^5.33, <2.95, v1.79, >0.45, v0.41, <0.61, ^0.45, <1.5, v3.5, >4.61), prvo interpretira smer u kojem se prostire svaki zid, a zatim dužinu tog zida, i na kraju izračuna površinu plafona ili prostorije na osnovu tih podataka.

Šta treba program sve da uradi:

  1. Parsirati komande u obliku (smer, dužina).
  2. Konstruisati putanju zidova.
  3. Izračunati površinu prostorije koristeći algoritam za računanje površine poligona (npr. Shoelace formula).

Evo kako može izgledati Python program koji će primati interaktivne komande i izračunavati površinu prostorije na osnovu tih komandi. Program koristi Shoelace metodu za izračunavanje površine poligona (koji predstavlja prostoriju). Krenućemo sa unosom komandi koje definišu zidove prostorije:

# The MIT License (MIT)
# Copyright (c) 2025 Aleksandar Maričić
# 
# Ovim se omogućava bilo kome da koristi, kopira, menja, spaja, objavljuje, 
# distribuira, daje podlicencu i/ili prodaje kopije ovog softverskog programa, 
# uz uslov da u svim kopijama ili značajnim delovima softverskog programa bude 
# uključena sledeća obavest:
# 
# Copyright (c) 2025 Aleksandar Maričić
# 
# Ovaj softverski program je pružen "takav kakav jeste", bez bilo kakvih garancija, 
# izričitih ili impliciranih, uključujući, ali ne ograničavajući se na, garancije o 
# prikladnosti za prodaju ili pogodnosti za određenu svrhu. U svakom slučaju, autori 
# ili nosioci prava nisu odgovorni za bilo kakvu štetu ili druge obaveze koje mogu nastati 
# usled upotrebe ovog softverskog programa.


def calculate_area(coordinates):
    # Shoelace formula (Gauss's area formula)
    n = len(coordinates)
    area = 0
    for i in range(n):
        j = (i + 1) % n
        area += coordinates[i][0] * coordinates[j][1]
        area -= coordinates[j][0] * coordinates[i][1]
    area = abs(area) / 2.0
    return area

def parse_instructions(instructions):
    # Početna tačka je (0, 0)
    x, y = 0, 0
    coordinates = [(x, y)]
    
    # Parsiranje instrukcija i praćenje koordinata
    for instruction in instructions:
        direction, length = instruction[0], float(instruction[1:])
        
        if direction == '^':  # Gore
            y += length
        elif direction == 'v':  # Dole
            y -= length
        elif direction == '<':  # Levo
            x -= length
        elif direction == '>':  # Desno
            x += length
        
        coordinates.append((x, y))
    
    return coordinates

def main():
    print("Unesi komande u obliku: <, >, ^, v + dužina zida (npr. ^5.33).")
    print("Unesi 'kraj' za završetak.")
    
    instructions = []
    while True:
        command = input("Unesi komandu: ")
        if command.lower() == 'kraj':
            break
        instructions.append(command)
    
    coordinates = parse_instructions(instructions)
    area = calculate_area(coordinates)
    
    print(f"Površina prostorije (plafona) je: {area:.2f} kvadratnih jedinica.")

if __name__ == "__main__":
    main()

Kako funkcioniše:

  1. parse_instructions: Ova funkcija parsira komande u formatu (smer, dužina), započinje u (0, 0) i prati koordinate dok ne prođe kroz sve zidove.
  2. calculate_area: Koristi Shoelace formulu da izračuna površinu zatvorene oblasti.
  3. Interaktivni unos: Korisnik unosi komande u obliku (smer, dužina) dok ne unese “kraj”.

Primer:

Ako korisnik unese:

iMac-od-user:Desktop user$ python3 povrsina.py
Unesi komande u obliku: <, >, ^, v + dužina zida (npr. ^5.33).
Unesi 'kraj' za završetak.
Unesi komandu: ^5.53
Unesi komandu: <2.95
Unesi komandu: v1.86
Unesi komandu: >0.5
Unesi komandu: v0.41
Unesi komandu: <0.66
Unesi komandu: ^0.25
Unesi komandu: <1.5
Unesi komandu: v3.5
Unesi komandu: >4.61
Unesi komandu: kraj
Površina prostorije (plafona) je: 21.85 kvadratnih jedinica.
iMac-od-user:Desktop user$ 

Program će pratiti putanju zidova, izračunati površinu i ispisati rezultat.

By Abel

Leave a Reply

Your email address will not be published. Required fields are marked *