Jeśłi coś ma być zrobione dobrze, zrób to sam
-
jacek
30/05/2016
- Programowanie
- 1921 czytań 0 komentarzy
Tradycyjnie do naszych celów wykorzystamy język programowania Python. Kompilatory oraz edytory do pisania programów są łatwo dostępne i bezpłatne na platformę Windows jaki i Linux.
Na początek kilka słów o funkcjach. Są to takie ciekawe obiekty, które zawierają szereg instrukcji wykonujących pewne działania, które im przewidzieliśmy. Np. wypisywanie tekstry na ekran lub obliczanie jakiegoś działania. Możemy napisać taką funkcję, która będzie liczyła pierwiastki równania kwadratowego. Przypomnijmy, że ich wartość zależny od parametrów a,b i c tegoż równania. możemy za każdym razem pisać cały blok instrukcji i każdorazowo podawać inne parametry, ale możemy też napisać właśnie funkcję, którą nazwiemy np.: def pierwiastki(a,b,c). W ciele funkcji znajdą się wszystkie warunki określające jak należy je liczyć ze słynną Deltą włącznie. Teraz wystarczy wywołać jej uruchomienie podając jej nazwę a w nawiasie same parametry równania np.: pierwiastki(1,3,5).
Oto taka funkcja i cały program:
A teraz kilka słów o rekurencji. Otóż funkcja może wywołać sama siebie. Oto przykład:
Jak działa? Jeśli n jest ujemne lub równe 0, to wyświetla ona słowo 'Odpalamy!'. W przeciwnym wypadku wyświetla n i wywołuje funkcję o nazwie odlicz (samą siebie) przekazując jej n - 1 jako argument.
Otóż problem rozwiązany w powyższym zadaniu polegał na napisaniu programu odliczającego do startu rakiety. Oczywiście możemy to zrobić inaczej, ale skrypt będzie wtedy znacznie dłuższy. A co za tym idzie będzie działał dłużej.
Różnicę zobaczymy, gdy zadanie będzie bardziej złożone. Np. przy tworzeniu płatka Kocha lub innego fraktala.
A oto kilka przykładów z naszych zajęć programowania.
Na początek kilka słów o funkcjach. Są to takie ciekawe obiekty, które zawierają szereg instrukcji wykonujących pewne działania, które im przewidzieliśmy. Np. wypisywanie tekstry na ekran lub obliczanie jakiegoś działania. Możemy napisać taką funkcję, która będzie liczyła pierwiastki równania kwadratowego. Przypomnijmy, że ich wartość zależny od parametrów a,b i c tegoż równania. możemy za każdym razem pisać cały blok instrukcji i każdorazowo podawać inne parametry, ale możemy też napisać właśnie funkcję, którą nazwiemy np.: def pierwiastki(a,b,c). W ciele funkcji znajdą się wszystkie warunki określające jak należy je liczyć ze słynną Deltą włącznie. Teraz wystarczy wywołać jej uruchomienie podając jej nazwę a w nawiasie same parametry równania np.: pierwiastki(1,3,5).
Oto taka funkcja i cały program:
import math
print("Podaj współczynniki równania kwadratowego (a,b i c): ")
a = int(input("Podaj a: "))
b = int(input("Podaj b: "))
c = int(input("Podaj c: "))
def wypisz_pierwiastki(a, b, c):
delta = b * b - 4 * a * c
if delta > 0:
print("Równanie ma dwa pierwiastki")
print("x1 =", (-b - math.sqrt(delta)) / (2 * a))
print("x2 =", (-b + math.sqrt(delta)) / (2 * a))
elif delta == 0:
print("Równanie ma podwójny pierwiastek")
print("x1 = x2 = ", -b / (2 * a))
else:
print("Równanie nie ma pierwiastków")
wypisz_pierwiastki(a,b,c)
A teraz kilka słów o rekurencji. Otóż funkcja może wywołać sama siebie. Oto przykład:
def odlicz(n):
if n <= 0:
print('Odpalamy!')
else:
print(n)
odlicz(n - 1)
Powyższa funkcja nazywa się odlicz i w jej treści wywołuje sama siebie przez tekst skryptu w ostatnim wierszu odlicz(n-1)
Jak działa? Jeśli n jest ujemne lub równe 0, to wyświetla ona słowo 'Odpalamy!'. W przeciwnym wypadku wyświetla n i wywołuje funkcję o nazwie odlicz (samą siebie) przekazując jej n - 1 jako argument.
Otóż problem rozwiązany w powyższym zadaniu polegał na napisaniu programu odliczającego do startu rakiety. Oczywiście możemy to zrobić inaczej, ale skrypt będzie wtedy znacznie dłuższy. A co za tym idzie będzie działał dłużej.
Różnicę zobaczymy, gdy zadanie będzie bardziej złożone. Np. przy tworzeniu płatka Kocha lub innego fraktala.
def schody(bok, n):
if (n==1):
kwadrat(bok)
return
else:
schody(bok/2, n-1)
pu(); fd(bok/2); rt(90); fd(bok/4); lt(90); pd()
schody(bok/2, n-1)
pu(); bk(bok/2); rt(90); fd(bok/4); lt(90); pd()
schody(bok/2, n-1)
pu(); lt(90); fd(bok/2);rt (90); pd()
A oto kilka przykładów z naszych zajęć programowania.
#fraktal Platek Sniegu - Platek Kocha
from turtle import *
pu()
setpos(-300,200)
pos()
pd()
def f(length, depth):
if depth == 0:
forward(length)
else:
f(length/3, depth-1)
right(60)
f(length/3, depth-1)
left(120)
f(length/3, depth-1)
right(60)
f(length/3, depth-1)
f(500, 4)
# fraktal - drzewo
import turtle
def tree(f_lenght, min_lenght=10):
"""
Draws a tree with 2 branches using recursion
"""
turtle.forward(f_lenght)
if f_lenght > min_lenght:
turtle.left(45)
tree(0.6*f_lenght, min_lenght)
turtle.right(90)
tree(0.6*f_lenght, min_lenght)
turtle.left(45)
turtle.back(f_lenght)
turtle.left(90)
tree(100)
turtle.exitonclick()
import turtle
PROGNAME = 'Sierpinski Triangle'
#Credits: This code was written by editing the code from http://www.lpb-riannetrujillo.com/blog/python-fractal/
myPen = turtle.Turtle()
myPen.ht()
myPen.speed(5)
myPen.pencolor('orange')
points = [[-175,-125],[0,175],[175,-125]] #size of triangle
def getMid(p1,p2):
return ( (p1[0]+p2[0]) / 2, (p1[1] + p2[1]) / 2) #find midpoint
def triangle(points,depth):
myPen.up()
myPen.goto(points[0][0],points[0][1])
myPen.down()
myPen.goto(points[1][0],points[1][1])
myPen.goto(points[2][0],points[2][1])
myPen.goto(points[0][0],points[0][1])
if depth>0:
triangle([points[0],
getMid(points[0], points[1]),
getMid(points[0], points[2])],
depth-1)
triangle([points[1],
getMid(points[0], points[1]),
getMid(points[1], points[2])],
depth-1)
triangle([points[2],
getMid(points[2], points[1]),
getMid(points[0], points[2])],
depth-1)
triangle(points,4)
#rysowanie mozaiki - posadzki
from turtle import *
from math import sqrt
hideturtle()
#pomocnicza funkcja przemieszczania żółwia po ekranie
def skok (x,y=0):
pu()
fd(x); lt(90); fd(y); rt(90)
pd()
#rysowanie kwadratu
def kwadrat(bok):
color("red")
begin_fill()
for i in range(4):
fd(bok); lt(90)
end_fill()
#rysowanie niebieskiego elementu
def gwiazdka(a):
color("darkblue")
begin_fill()
for i in range(4):
fd(a); rt(45)
fd(a*sqrt(2)); lt(90)
fd(a*sqrt(2)); rt(45)
fd(a); lt(90)
end_fill()
#rysowanie żółtego elementu
def iks(a):
color("yellow")
begin_fill()
for i in range(4):
fd(a); lt(45)
fd(a*sqrt(2)); rt(90)
fd(a*sqrt(2)); lt(45)
fd(a); lt(90)
end_fill()
#rysowanie jednego kafelka
def kafelek(a):
for i in range(2):
gwiazdka(a)
skok(4*a)
iks(a)
skok(4*a,8*a); rt(180)
#funkcja główna
def posadzka(n):
bok=300
a=bok/(8*n+2)
skok(-bok/2,-bok/2)
kwadrat(bok)
skok(a,a)
for i in range(n):
for i in range(n):
kafelek(a)
skok(8*a)
skok(-8*n*a,8*a)
tracer(0)
posadzka(3)
update()
Dodaj komentarz
Zaloguj się, aby móc dodać komentarz.
Oceny
Tylko zarejestrowani użytkownicy mogą oceniać zawartość strony
Zaloguj się , żeby móc zagłosować.
Zaloguj się , żeby móc zagłosować.
Brak ocen. Może czas dodać swoją?



















































