Partnerzy

Astro-Miejsca


URANIA

astroturystyka

100 lat IAU

IAU

Comet

Centrum Nauki Kepler

Planetarium Wenus

ERC

Centrum Nauk Przyrodniczych

Orion,serwis,astronomii,PTA

POLSA

Astronomia Nova

Astronarium

forum astronomiczne

IPCN

Portal AstroNet

Puls Kosmosu

Forum Meteorytowe

kosmosnautaNET

kosmosnautaNET

Nauka w Polsce

astropolis

astromaniak

PTMA

PTR

heweliusz

heweliusz

ESA

Astronomers Without Borders

Hubble ESA

Space.com

Space Place

Instructables

Tu pełno nauki

Konkursy

Olimpiady Astronomiczne
Olimpiada Astronomiczna przebiega w trzech etapach.
Zadania zawodów I stopnia są rozwiązywane w warunkach pracy domowej. Zadania zawodów II i III stopnia mają charakter pracy samodzielnej. Zawody finałowe odbywają się w Planetarium Śląskim. Tematyka olimpiady wiąże ze sobą astronomię, fizykę i astronomiczne aspekty geografii. Olimpiady Astronomiczne


Urania Postępy Astronomii - konkurs dla szkół


astrolabium

Organizatorem konkursu astronomicznego jest Fundacja dla Uniwersytetu Jagiellońskiego a patronat nad akcją sprawuje Obserwatorium Astronomiczne im. Mikołaja Kopernika będące instytutem Wydziału Fizyki, Astronomii i Informatyki Stosowanej Uniwersytetu Jagiellońskiego w Krakowie.
Zobacz szczegóły »

astrolabium

konkurs, astronomiczny

AstroSklepy

Serwis Astro - 30 lat AstroDoświadczenia!

Astro Schopy
 Firma ScopeDome

Planeta Oczu

Astrocentrum

Jeśłi coś ma być zrobione dobrze, zrób to sam

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:

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()
Brak komentarzy. Może czas dodać swój?

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ć.

Brak ocen. Może czas dodać swoją?
31,505,029 unikalne wizyty