-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathtask4.py
More file actions
130 lines (107 loc) · 4.23 KB
/
task4.py
File metadata and controls
130 lines (107 loc) · 4.23 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
# -*- coding: utf-8 -*-
"""
Created on Fri Jan 4 14:36:36 2019
@author: Ola
Python challenge by kodolamacz.pl
Task 4: Object-oriented programming
"""
class FunkcjaKwadratowa:
def __init__(self, a, b, c):
self.a = a
self.b = b
self.c = c
def Rozwiaz(self):
# Przypadek gdy podana funkcja jest liniowa(a=0)
if self.a == 0:
# Podana funkcja jest liniowa o stalej wartosci(a=0 i b=0)
if self.b == 0:
if self.c == 0:
print(f"Podana funkcja jest liniowa o stalej wartosci 0.")
rozwiazanie = "Istnieje nieskonczenie wiele miejsc zerowych"
else:
# Szczegolny przypadek funkcji liniowej stalej przyjmujacej w calej dziedzinie wartosc 0
print(f"Podana funkcja jest liniowa o stalej wartosci {self.c}.")
rozwiazanie = "Brak miejsc zerowych"
# Z uwagi na a=0 i pozostale wspolcznniki rozne od zera, jest to funkcja liniowa postaci bx+c=0
else:
x=-self.c/self.b
print(f"Podana funkcja jest funkcja liniowa o rozwiazaniu {x}")
rozwiazanie = x
# Wspolczynnik a rozny od zera gwarantuje ze podana funkcja zawsze bedzie kwadratowa
else:
delta = self.b ** 2 - 4 * self.a * self.c
if delta < 0:
print("Miejsca zerowe nie istnieja.")
rozwiazanie = "Brak miejsc zerowych"
elif delta == 0:
x0 = (-self.b + (delta ** (1 / 2))) / (2 * self.a)
print(f"Istnieje jedno miejsce zerowe x0 rowne {x0}.")
rozwiazanie = x0
else:
x1 = (-self.b + (delta ** (1 / 2))) / (2 * self.a)
x2 = (-self.b - (delta ** (1 / 2))) / (2 * self.a)
print(f"Istnieja pierwiastki podanej funkcji: w x1 rownym {x1} oraz x2 rownym {x2}.")
rozwiazanie = (x1, x2)
return rozwiazanie
class Zespolona:
def __init__(self, re, im):
self.re = re
self.im = im
def __repr__(self):
if self.im < 0:
return f'{self.re}{self.im}i'
else:
return f'{self.re}+{self.im}i'
def modul(self):
return (self.re**2+self.im**2)**(1/2)
@staticmethod
def dodaj(liczba1, liczba2):
return Zespolona(liczba1.re+liczba2.re, liczba1.im+liczba2.im)
@staticmethod
def mnoz(liczba1, liczba2):
return Zespolona(liczba1.re*liczba2.re-liczba1.im*liczba2.im, liczba1.re*liczba2.im+liczba2.re*liczba1.im)
class Ulamek:
def __init__(self, licznik, mianownik):
self.licznik = licznik
self.mianownik = mianownik
def __repr__(self):
return f'{self.licznik}/{self.mianownik}'
def skroc(self):
#Poszukiwanie najwiekszego wspolnego mianownika metoda Euklidesa
a = max(self.licznik, self.mianownik)
b = min(self.licznik, self.mianownik)
c = a - b
lista = [a, b, c]
while c!=0:
lista.sort()
c = lista[1]-lista[0]
lista.append(c)
nwd = lista[0]
self.licznik //= nwd
self.mianownik //= nwd
return self
@staticmethod
def dodaj(ulamek1, ulamek2):
return Ulamek(ulamek1.licznik * ulamek2.mianownik + ulamek2.licznik*ulamek1.mianownik, ulamek1.mianownik*ulamek2.mianownik)
@staticmethod
def odejmij(ulamek1, ulamek2):
return Ulamek(ulamek1.licznik * ulamek2.mianownik - ulamek2.licznik*ulamek1.mianownik, ulamek1.mianownik*ulamek2.mianownik)
@staticmethod
def mnoz(ulamek1, ulamek2):
return Ulamek(ulamek1.licznik*ulamek2.licznik, ulamek1.mianownik*ulamek2.mianownik)
@staticmethod
def dziel(ulamek1, ulamek2):
return Ulamek(ulamek1.licznik*ulamek2.mianownik, ulamek1.mianownik*ulamek2.licznik)
def test():
ulamek1 = Ulamek(1, 2)
ulamek2 = Ulamek(3, 4)
dodawanie = Ulamek.dodaj(ulamek1, ulamek2)
print(dodawanie)
odejmowanie = Ulamek.odejmij(ulamek2, ulamek1)
print(odejmowanie)
mnozenie = Ulamek.mnoz(ulamek1, ulamek2)
print(mnozenie)
dzielenie = Ulamek.dziel(ulamek1, ulamek2)
print(dzielenie)
if __name__ == "__main__":
test()