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