0932 - Aria Poligon Simplu
Cerinţa[edit | edit source]
Se dau coordonatele în plan pentru n puncte. Să se afișeze valoarea ariei poligonului pe care acestea îl formează.
Date de intrare[edit | edit source]
Fișierul de intrare ariapoligonsimpluin.txt conține pe prima linie numărul de vârfuri ale poligonului, notat cu n. Pe următoarele n linii se găsesc câte două numere separate printr-un spațiu, reprezentând abscisa respectiv ordonata câte unui vârf. Acestea sunt date într-un sens de parcurgere a laturilor poligonului.
Date de ieșire[edit | edit source]
Fișierul de ieșire ariapoligonsimpluout.txt va conține pe prima linie un număr real, cu exact o zecimală, reprezentând valoarea cerută.
Restricţii şi precizări[edit | edit source]
- Numerele din fișierul de intrare sunt întregi cuprinse între -1001 și 1001.
- Poligonul nu este neapărat convex dar nu se autointersectează.
Exemplu 1[edit | edit source]
- ariapoligonsimpluin.txt
4 0 0 1 0 1 1 0 1
- ariapoligonsimpluout.txt
Datele de intrare corespund restrictiilor impuse 1.0
Exemplu 2[edit | edit source]
- ariapoligonsimpluin.txt
4 0 0 1 0 1 5000 0 1
- ariapoligonsimpluout.txt
Datele de intrare nu corespund restrictiilor impuse
Rezolvare[edit | edit source]
<syntaxhighlight lang="python" line> def calculeaza_arie(puncte):
# Calculează aria unui poligon dat prin coordonatele punctelor sale.
n = len(puncte) arie = 0.0 for i in range(n): j = (i + 1) % n arie += puncte[i][0] * puncte[j][1] arie -= puncte[j][0] * puncte[i][1] arie = abs(arie) / 2.0 return arie
def main():
with open('ariapoligonsimpluin.txt', 'r') as fin, open('ariapoligonsimpluout.txt', 'w') as fout: n = int(fin.readline().strip()) puncte = [] for _ in range(n): x, y = map(int, fin.readline().split()) puncte.append((x, y))
# Verifică dacă datele de intrare respectă restricțiile if not all(-1001 <= x <= 1001 and -1001 <= y <= 1001 for x, y in puncte): fout.write("Datele de intrare nu corespund restrictiilor impuse\n") return
fout.write("Datele de intrare corespund restrictiilor impuse\n")
arie = calculeaza_arie(puncte) fout.write(f"{arie:.1f}\n")
if __name__ == "__main__":
main()
</syntaxhighlight>