# data[].attributes.attachment_link.readable_text
# coding: utf-8

# In[66]:


#rozwiązywanie równań
from sympy import *

x = Symbol('x')

rownanie = x**2+3*x+1

rozw = solve(rownanie, x)
print( rozw )

for r in rozw:
    print(r, '=', N(r, 4) )


# In[67]:


print( N(pi, 100) )


# In[45]:


#Rozwiązywanie układów równań
from sympy import *

x = Symbol('x')
y = Symbol('y')

r1 = 2*x + 3*y - 2
r2 = -3*x + 5*y + 4

#symbolicznie
rozw = solve((r1,r2), (x,y))
print('Wynik w postaci listy asocjacyjnej:', rozw )
print('x =', rozw[x], 'y =', rozw[y])

#numerycznie
rozw = nsolve((r1,r2), (x,y), (0,0) ) #(0,0) - wektor startowy
print('\nWynik w posatci macierzy:', rozw )

print('x =', rozw[0], 'y =', rozw[1])


# In[59]:


#Rzwiązywanie nierówności
from sympy.solvers.inequalities import reduce_rational_inequalities

reduce_rational_inequalities([[x**2 - 2 < 0]], x)


# In[42]:


#Zwijanie i rozwijanie wielomianów
from sympy import *

x = Symbol('x')

rownanie = x**3+3*x**2-x

print(expand(rownanie))
print(factor(rownanie))


# In[71]:


#Upraszczanie wyrażeń
w = (x**3 + x**2 - x - 1)/(x**2 + 2*x + 1)
print(w)
#init_printing()
print('\nWyrażemnie po uproszczeniu:', simplify(w))
w


# In[48]:


#Obliczanie granic
P = x**3+3*x**2-x
Q = 2*x**3-x**2
print( limit(P/Q, x, oo) )


# In[49]:


#Obliczanie pochodnych
P = x**3+3*x**2-x
Q = 2*x**3-x**2
print( diff(P/Q, x) )


# In[51]:


#Całkowanie
P = x**3+3*x**2-x
Q = 2*x**3-x**2
print( integrate(P/Q, x) )
print( integrate(P/Q, (x,1,exp(1))) )

# data[].attributes.attachment_link.readable_text
# coding: utf-8

# In[73]:


import numpy as np

a = np.array([[1,2,3,4], [5,6,7,8], [9,10,11,12]])

print(a, '\n\nLiczba wierszy macierzy a:', len(a))

#wyświetlmy wiersze 
for i in range( len(a) ):
    print('wiersz',i,':', a[i, :] )


# In[74]:


print('Liczba kolumn macierzy a:', len(a[0]))

#wyświetlmy kolumny 
for i in range( len(a[0]) ):
    print('kolumna',i,':', a[:, i] )


# In[71]:


print('Elementy macierzy a większe niż 5')
print(a[a > 5]) 
    


# In[70]:


print('Wygenerowana losowo macierz b:')
b = np.random.randint(1,11, size=(3,4))
print(b)


# In[69]:


print('Suma macierzy a+b =\n', a+b)
print('\nIloczyn macierzy a*b =\n', a*b)
print('\nIloraz macierzy a/b =\n', a/b)



# In[68]:


x = np.random.randint(1,11, size=4)
print('Wektor x =', x)

print('\nIloczyn macierzowy a*x =\n', a.dot(x))


# In[67]:


print('Transpozycja macierzy a: \n', a.T)


# In[66]:


print('Pusta macierz o wymiarach takich jak macierz a:')
c = np.empty_like(a)
print(c)

print('\nDodajmy do każdego wiersza macierzy a wektor x i zapamiętajmy w macierzy c:')
for i in range(3):
    c[i, :] = a[i, :] + x
print(c)

print('\nPodobny efekt da nam a+x\n', a+x)

# data[].attributes.attachment_link.readable_text
# coding: utf-8

# In[7]:


import matplotlib.pyplot as plt
import numpy as np

x = np.arange(-2.0, 3.0, 0.01)
y = x**3 - 2*x**2 + 1
plt.plot(x, y)

plt.xlabel('$OX$')
plt.ylabel('$OY$')
plt.title('Wykres funkcji $x^3-2x^2+1$')
plt.grid(True)
plt.savefig("/home/marcin/Pulpit/wykres.png")
plt.show()


# In[10]:


import matplotlib.pyplot as plt
import numpy as np

x = np.arange(0, 2 * np.pi, 0.01)
y_sin = np.sin(x)
y_cos = np.cos(x)

plt.plot(x, y_sin, color='green')
plt.plot(x, y_cos)

plt.xlabel('$x$')
plt.ylabel('$y$')
plt.title('Wykres funcji $\sin(x)$ oraz $\cos(x)$')
plt.legend(['$\sin(x)$', '$\cos(x)$'])
plt.show()


# In[16]:


import matplotlib.pyplot as plt
import numpy as np

x = np.arange(0, 2 * np.pi, 0.01)
y_sin = np.sin(x)
y_cos = np.cos(x)

# Ustawiamy siatkę na 2 wiersze i 1 kolumnę,
# pierwsza będzie funkcja sinus.
plt.subplot(2, 1, 1)
plt.plot(x, y_sin, color='green')
plt.title('$\sin(x)$')

#druga (poniżej) będzie cosinus
plt.subplot(2, 1, 2)
plt.plot(x, y_cos)
plt.title('$\cos(x)$')

plt.show()


# In[35]:


import numpy as np
import matplotlib.pyplot as plt


x1 = np.linspace(0.0, 5.0)
x2 = np.linspace(0.0, 2.0)

y1 = np.cos(2 * np.pi * x1) * np.exp(-x1)
y2 = np.cos(2 * np.pi * x2)

plt.subplot(2, 1, 1)
plt.plot(x1, y1, 'o-')
plt.title('Dwa wykresy pod sobą')
plt.ylabel('$\cos(x)e^{-x}$')

plt.subplot(2, 1, 2)
plt.plot(x2, y2, '.-')
plt.xlabel('Czas (s)')
plt.ylabel('$\cos(x)$')

plt.show()


# In[38]:


import matplotlib.pyplot as plt
import numpy as np

# https://matplotlib.org/api/pyplot_api.html#matplotlib.pyplot.plot

plt.plot([1,1,3,3,1], [1,2,2,1,1], label='Punkty', linewidth=2, color='green', linestyle='dashed', marker='o',
     markerfacecolor='blue', markersize=6)
plt.legend()
plt.show()

# data[].attributes.attachment_link.readable_text
# coding: utf-8

# In[9]:


from tkinter import *

okno = Tk()

ramka_gorna = Frame(okno)
ramka_gorna.pack()

ramka_dolna = Frame(okno)
ramka_dolna.pack(side=BOTTOM)

etykieta = Label(okno, text="Hello, world!")
etykieta.pack()

p1 = Button(ramka_gorna, text='P1', fg='blue')
p2 = Button(ramka_gorna, text='P2', fg='blue')
p3 = Button(ramka_dolna, text='P3', fg='blue')
p4 = Button(ramka_dolna, text='P4', fg='blue')

p1.pack(side=LEFT)
p2.pack(side=RIGHT)
p3.pack(side=LEFT)
p4.pack(side=RIGHT)

okno.mainloop()


# In[54]:


from tkinter import *

okno = Tk()

def fp1():
    print('Naciśnięto przycisk P1')
        
def fp2():
    print('Naciśnięto przycisk P2')
    
def fp3():
    print('Naciśnięto przycisk P3')

def fp4():
    print('Naciśnięto przycisk P4')
    
p1 = Button(okno, text='1', fg='blue', height=3, width=5, command=fp1)
p2 = Button(okno, text='2', fg='blue', height=3, width=5, command=fp2)
p3 = Button(okno, text='3', fg='blue', height=3, width=5, command=fp3)
p4 = Button(okno, text='4', fg='blue', height=3, width=5, command=fp4)

p1.grid(row=0,column=0)
p2.grid(row=0,column=1)
p3.grid(row=1,column=0)
p4.grid(row=1,column=1)

okno.geometry("200x200+450+250") #szerokość x wysokość + odl. od lewej + odl. od góry
okno.mainloop()


# In[53]:


from tkinter import *
import tkinter.messagebox

okno = Tk()

L1 = Label(okno, text="Podaj swoje imię")
L1.grid(row=0,column=0)
E1 = Entry(okno, bd=3)
E1.grid(row=0,column=1)

P1 = Button(okno, text='Uruchom', fg='blue', height=3, width=5, command=fp1)
P1.grid(row=1,column=1)

def fp1():
    imie = E1.get()
    print('Witaj', imie)
    messagebox.showinfo("Powitanie", 'Witaj ' + imie)
    

okno.geometry("400x200+450+250") #szerokość x wysokość + odl. od lewej + odl. od góry
okno.mainloop()

# data[].attributes.attachment_link.readable_text
# coding: utf-8

# In[3]:


import turtle

zolw = turtle.Turtle()

for i in range(4):
    zolw.forward(100)
    zolw.right(90)

turtle.done()


# In[1]:


import turtle

zolw = turtle.Turtle()

for i in range(5):
    zolw.forward(200)
    zolw.right(144)

turtle.done()


# In[1]:


import turtle 

zolw = turtle.Turtle()

odleglosc = 25
szerokosc = 5
wysokosc = 7

zolw.penup()

for y in range(wysokosc):
    for i in range(szerokosc):
        zolw.dot()
        zolw.forward(odleglosc)
    zolw.backward(odleglosc * szerokosc)
    zolw.right(90)
    zolw.forward(odleglosc)
    zolw.left(90)
    
turtle.done()


# In[ ]:


import turtle 

zolw = turtle.Turtle()

odleglosc = 25

zolw.forward(100)
zolw.penup()
zolw.forward(100)
zolw.pendown()
zolw.forward(100)

turtle.done()

# data[].attributes.attachment_link.readable_text
# coding: utf-8

# In[1]:


n = int( input('Podaj liczbę całkowitą: ') )

s = 0
while n != 0:
    c = n % 10
    n = n // 10
    s = s + c
    
print('Suma cyfr wynosi', s)


# In[2]:


n = int( input('Podaj liczbę całkowitą: ') )

s = 0
while n != 0:
    c = n % 10
    print('n =', n, ' s =', s, ' c =', c)
    n = n // 10
    s = s + c
    
print('Suma cyfr wynosi', s)


# In[3]:


n = int( input('Podaj liczbę całkowitą: ') )

s = 0
while n != 0:
    s = s + n % 10
    n = n // 10
    
print('Suma cyfr wynosi', s)


# In[8]:


#konwersja liczby dziesiętnej na binarną
n = int( input('Podaj liczbę całkowitą: ') )
m = n

binarna = ''
while n != 0:
    binarna = str(n % 2) + binarna
    n = n // 2

print('Postać binarna liczby', m, 'to', binarna)    


# In[11]:


#Definicja funkcji
#konwersja liczby dziesiętnej na binarną
def dec2bin(n):
    binarna = ''
    while n != 0:
        binarna = str(n % 2) + binarna
        n = n // 2
    return binarna


for n in range(1,21):
    print(n, '==>', dec2bin(n))

print(123, '==>', dec2bin(123))


# In[12]:


def srednia_ocen(imie, nazwisko, oceny):
    s = 0
    for o in oceny:
        s = s + o
    srednia = s / len(oceny)
    print(imie, nazwisko, 'ma średnią ocen', srednia)
    

srednia_ocen('Adam', 'Nowakowski', [4, 5, 4, 6, 4.5, 5])    


# In[18]:


lista_uczniów = [
    ['Adam', 'Nowakowski', [4, 5, 4, 6, 4.5, 5]],
    ['Jan', 'Kowalski', [3, 4, 3.5, 5, 4.5, 3]]
]

nr = 1
for uczen in lista_uczniów:
    print(str(nr)+'.', uczen[0], uczen[1], uczen[2])
    nr += 1


# In[19]:


for uczen in lista_uczniów:
    srednia_ocen(uczen[0], uczen[1], uczen[2])


# In[31]:


def szukaj(element, lista):
    for u in lista:
        if u == element:
            return lista.index(u)
    return -1

def szukaj2(element, lista):
    indeksy = []
    for i in range(len(lista)):
        if lista[i] == element:
            indeksy.append( i )
    return indeksy


# In[32]:


lista = ['Adam Nowak', 'Jan Kowalski', 'Adam Nowak']
print(szukaj('Adam Nowak', lista))
print(szukaj('Jan Kowalski', lista))
print(szukaj('Jan Kowal', lista))

print(szukaj2('Adam Nowak', lista))
print(szukaj2('Jan Kowalski', lista))
print(szukaj2('Jan Kowal', lista))

# data[].attributes.attachment_link.readable_text
# coding: utf-8

# In[4]:


indeksy = range(10)
print(indeksy)
for i in indeksy:
    print(i)

ind = [i for i in range(10)]
print(ind)


# In[3]:


for a in range(3, 100, 7):
    print(a)


# In[9]:


lista = [23, 43, 43.2, 13.5, 23.8, 54]
for i in range( len(lista) ):
    print( lista[i] )


# In[10]:


#instrukcja warunkowa
x = 7
y = 4

if x > y:
    mini = y
else:
    mini = x

print('El. mniejszy, to', mini)
    


# In[11]:


print(lista)
mini = lista[0]
for x in lista:
    if x < mini:
        mini = x

print('El. najmniejszy, to', mini)


# In[12]:


i_min = 0
mini = lista[0]
for i in range( len(lista) ):
    if lista[i] < mini:
        mini = lista[i]
        i_min = i

print('El. min =', mini, 'na poz.', i_min)

# data[].attributes.attachment_link.readable_text
# coding: utf-8

# In[4]:


#Pierwszy program w Python-ie
'''
Autor: Marcin Kowalewski
Data: 09.04.2018 r.
'''
print('Witaj w świecie Pythona')


# In[5]:


#Podstawowe operatory arytmetyczne
#+, -, *, /
a = 2
b = 3.14
wynik = (a + b * 5) / b
print(wynik)


# In[3]:


imię = "Marcin"
wzrost = 186
print(imię, 'ma', wzrost, 'cm wzrostu')
print(imię, 'ma', wzrost/2.5, 'cali wzrostu')


# In[4]:


#Dodatkowe operatory arytmetyczne

#reszta z dzielenia - modulo - %
print('reszta z dzielenia 23 przez 7 wynosi', 23 % 7)

#potęgowanie
print('4 do potęgi 7 =', 4 ** 7)

#dzielenie całkowite
print('część całkowita z dzielenia 12 przez 5 wynosi', 12//5)


# In[5]:


#Wprowadzanie danych do programu
n = int( input('Podaj liczbę całkowitą: ') )
print(n/3)

x = float( input('Podaj liczbę rzeczywistą: ') )
print(x/3)

m = eval( input('Podaj liczbę: ') )
print(m/3)


# In[6]:


#Definiowanie tablic
tablica = [2, 34, 45, 12, 23, 56, 'ala']
print(tablica)


# In[10]:


lista = [23, 34, 5.5, 23, 34.6]
for x in lista:
    print(x)
    print(x**2)

print(lista)


# In[15]:


lista = [23, 34, 5.5, 23, 34.6]
print(lista)
tmp = []; tmp2 = []

suma = 0

for x in lista:
    tmp.append(x**2)     #dodajemy kolejny element do listy
    tmp2 = tmp2 + [x**2] #dodajemy kolejny element do listy
    suma = suma + x

print(tmp)
print(tmp2)
print('Suma elementów listy =', suma)
n = len(lista)
print('Liczba elementów listy =', n)
print('Średnia =', suma/n)


# In[16]:


szesciany = [x**3 for x in lista]
print(szesciany)