Jeśłi coś ma być zrobione dobrze, zrób to sam
-
jacek
30/05/2016
- Programowanie
- 1641 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ą?