CCCPaste

8f13e91dd4863

1. zadatak:

import math

class Kompleks:
    def __init__(self, a=0.0, b=0.0):
        self.a = float(a)
        self.b = float(b)

    def __repr__(self):
        if self.b >= 0:
            return f"{self.a}+{self.b}i"
        else:
            return f"{self.a}{self.b}i"

    def __add__(self, other):
        return Kompleks(self.a + other.a, self.b + other.b)

    def __sub__(self, other):
        return Kompleks(self.a - other.a, self.b - other.b)

    def __mul__(self, other):
        real = self.a * other.a - self.b * other.b
        imag = self.a * other.b + self.b * other.a
        return Kompleks(real, imag)

    def modul(self):
        return math.sqrt(self.a ** 2 + self.b ** 2)


# primjer za testiranje 
z1 = Kompleks(3, 4)
z2 = Kompleks(1, -2)

print("z1 =", z1)
print("z2 =", z2)
print("z1 + z2 =", z1 + z2)
print("z1 - z2 =", z1 - z2)
print("z1 * z2 =", z1 * z2)
print("|z1| =", z1.modul())


# 2. zadatak:
class Matrica:
    def __init__(self, m, n, vrijednost=0):
        if m <= 0 or n <= 0:
            raise ValueError("Dimenzije moraju biti pozitivne cijele vrijednosti!")
        self.m = m
        self.n = n
        self.podaci = [[vrijednost for _ in range(n)] for _ in range(m)]

    def get(self, i, j):
        if not (0 <= i < self.m and 0 <= j < self.n):
            raise IndexError("Indeksi izvan granica matrice!")
        return self.podaci[i][j]

    def set(self, i, j, v):
        if not (0 <= i < self.m and 0 <= j < self.n):
            raise IndexError("Indeksi izvan granica matrice!")
        self.podaci[i][j] = v

    def transponiraj(self):
        nova = Matrica(self.n, self.m)
        for i in range(self.m):
            for j in range(self.n):
                nova.podaci[j][i] = self.podaci[i][j]
        return nova

    def __repr__(self):
        s = ""
        for red in self.podaci:
            s += " ".join(f"{x:6}" for x in red) + "\n"
        return s

# primjer za testiranje
A = Matrica(2, 3)
A.set(0, 0, 1)
A.set(0, 1, 2)
A.set(1, 2, 5)

print("Matrica A:")
print(A)

print("Transponirana matrica At:")
print(A.transponiraj())


# 3. zadatak:
class Vrijeme:
    def __init__(self, h=0, m=0):
        total = h * 60 + m
        total %= 24 * 60
        self.h = total // 60
        self.m = total % 60

    def __repr__(self):
        return f"{self.h:02d}:{self.m:02d}"

    def __add__(self, minute):
        if not isinstance(minute, int):
            raise TypeError("Vrijeme se može zbrajati samo s brojem minuta (int)!")
        total = (self.h * 60 + self.m + minute) % (24 * 60)
        return Vrijeme(total // 60, total % 60)

    def __sub__(self, minute):
        if not isinstance(minute, int):
            raise TypeError("Vrijeme se može oduzimati samo s brojem minuta (int)!")
        total = (self.h * 60 + self.m - minute) % (24 * 60)
        return Vrijeme(total // 60, total % 60)

    def __iadd__(self, minute):
        if not isinstance(minute, int):
            raise TypeError("Vrijeme se može uvećati samo za broj minuta (int)!")
        total = (self.h * 60 + self.m + minute) % (24 * 60)
        self.h, self.m = total // 60, total % 60
        return self

    def __isub__(self, minute):
        if not isinstance(minute, int):
            raise TypeError("Vrijeme se može smanjiti samo za broj minuta (int)!")
        total = (self.h * 60 + self.m - minute) % (24 * 60)
        self.h, self.m = total // 60, total % 60
        return self

# primjer za testiranje
v = Vrijeme(23, 50)
print("Početno:", v)
print("v + 30 =", v + 30)
print("v - 90 =", v - 90)
v += 80
print("Nakon += 80:", v)
v -= 200
print("Nakon -= 200:", v)
print("Normalizirano:", Vrijeme(25, 70))


# 4. zadatak:
import math

class Tocka:
    def __init__(self, x=0.0, y=0.0):
        self.x = float(x)
        self.y = float(y)

    def udaljenost(self, t):
        return math.sqrt((self.x - t.x)**2 + (self.y - t.y)**2)

    def __repr__(self):
        return f"({self.x}, {self.y})"


class Trokut:
    def __init__(self, A, B, C):
        self.A = A
        self.B = B
        self.C = C

    def _stranice(self):
        a = self.B.udaljenost(self.C)
        b = self.A.udaljenost(self.C)
        c = self.A.udaljenost(self.B)
        return a, b, c

    def opseg(self):
        a, b, c = self._stranice()
        return a + b + c

    def povrsina(self):
        a, b, c = self._stranice()
        s = (a + b + c) / 2
        return math.sqrt(s * (s - a) * (s - b) * (s - c))

    def tip(self):
        a, b, c = self._stranice()
        eps = 1e-9
        if abs(a - b) < eps and abs(b - c) < eps:
            return "jednakostraničan"
        elif abs(a - b) < eps or abs(b - c) < eps or abs(a - c) < eps:
            return "jednakokračan"
        else:
            return "raznostraničan"

    def __repr__(self):
        return f"Trokut: A={self.A}, B={self.B}, C={self.C}"

# podaci za testiranje
A = Tocka(0, 0)
B = Tocka(3, 0)
C = Tocka(0, 4)

t = Trokut(A, B, C)

print(t)
print("Stranice:", t._stranice())
print("Opseg:", t.opseg())
print("Površina:", t.povrsina())
print("Tip trokuta:", t.tip())