Lukion matematiikkaa ja fysiikkaa ohjelmoimalla

Johdanto

  • Luvuissa 1 -5 on esitetty lukion pitkän matematiikan tehtävien ratkaisussa tarvittavat python-ohjelmoinnin rakenteet. Lukujen 1 - 5 aineistossa on valmiiksi ohjelmoituja esimerkkilaskuja.
  • Luvussa 6 on lisää valmiiksi ohjelmituja laskuesimerkkejä.
  • Tehtävät on valittu pääosin lukion kurssin MAA11 (OPS2019) sisällöistä.
  • Materiaali on tarkoitettu itseopiskeluun ja ohjelmointitaitojen ylläpitoon ja kertaukseen.
  • Lue teoria ja ohjelmaesimerkit sekä koodin keskellä olevat kommentit
  • Tämän materiaalin esimerkit on kirjoitettu Jupyterillä, mutta tehtäviä voi tehdä millä tahansa ohjelmointiympäristöllä.

1 Python-ohjelmoinnin perusteet

  • tulostaminen print-komennolla ja ilman print-komentoa Jupyter Notebookissa.
  • muuttujat, muuttujien tyypit ja muunnokset tyyppien välillä.
  • peruslaskutoimitukset

Tulostaminen

In [11]:
# Tämä rivi on kommentti. Ohjelmointi alkaa tästä, kirjoita koodi alle.
print(10 + 10)
20

Muuttujat

Muuttujat on ohjelmointikielissä tapa tallentaa tietoa tietokoneen muistiin. Jokaisella muuttujalla on pythonissa nimi, tyyppi ja arvo. Pythonissa ei voi määrittää muuttujan tyyppiä suoraan, vaan se tapahtuu antamalla sille tietyn tyyppinen arvo.

Pythonissa on 4 alkeellista tietotyyppiä:

  1. integer Kokonaisluku
  2. float Liukuluku eli desimaaliluku
  3. string Merkkijono
  4. boolean Totuusarvo. Ainoat mahdolliset arvot ovat True ja False. Minkä tahansa nollasta poikkeavan luvun voi muuntaa True:ksi ja nollan Falseksi. Tyhjä merkkijono "" muuntuu myös False:ksi.

Muut tyypit on yleensä määritelty näillä neljällä alkeellisella tyypillä.

Tyyppien lyhenteet on tummennettu. Lyhenteiden nimiset funktiot ottavat parametrikseen arvon ja yrittävät palauttaa funktiota vastaavan arvon ja tyypin.

In [15]:
x = 2
In [19]:
print(x)
4

Lisää muuttujista

Muuttujan nimi voi olla melkein mikä tahansa merkki- tai kirjainyhdistelmä, mutta ota huomioon seuraavat asiat:

  1. Nimi ei saa alkaa numerolla
  2. Nimessä ei saa olla välilyöntejä
  3. Ainoa erikoismerkki, jota saa käyttää nimissä, on alaviiva _
  4. Kirjainkoolla on väliä. Kameli ja kameli ovat eri muuttujia
  5. Yritä tehdä muuttujien nimistä järkeviä ja käyttöä vastaavia. Esimerkiksi username on paljon järkevämpi nimi muuttujalle kuin asdf

Muuttujan voi luoda käyttämällä merkintää muuttuja = "arvo", jossa yhtäsuuruusmerkin vasemmalla puolella on muuttujan nimi ja oikealla siihen tallennettava arvo. Esimerkiksi allaoleva ohjelma tulostaa Hello world!:

In [26]:
eka = "Hello"
toka = "world!"


print(eka,toka)
Hello world!

Operaattorit ja vertailu

Pythonissa voidaan käyttää matemaattisia operaattoreita lukujen käsittelyyn.

Esimerkkejä peruslaskutoimituksista

In [2]:
# Kirjoita esimerkkejä tähän
print(3 + 3)
print(2 - 5)
print(6 / 4)
print(2 * 7)
# Potenssi
print(2**3)
6
-3
1.5
14
8

Jos int ja float ovat samassa laskussa, tulos on tyyppiä float

In [4]:
10 + 0.2
Out[4]:
10.2

Normaali jakolasku: antaa luvun aina float-muodossa

In [17]:
10/5
Out[17]:
2.0

Alaspäin pyöristävä jakolasku: antaa luvun aina int-muodossa

In [5]:
11//5
Out[5]:
2

Potenssi

In [6]:
# Neliöjuuri
2**0.5
Out[6]:
1.4142135623730951

Jakojäännös

In [39]:
13 % 2
Out[39]:
1

Laskujärjestystä voi tarvittaessa muuttaa suluilla: (4+10)*4 on 56.

Usein on tarpeellista muuttaa muuttujan arvoa, esimerkiksi lisäämällä siihen jotain:

In [40]:
(3 + 4)*2
Out[40]:
14
In [4]:
# Matematiikan vakioita ja funktioita
# Tuodaan kirjasto käyttöön
import math
print(math.pi)

# Neperin luku
print(math.e)

# Neliöjuuri
print('Luvun 144 neliöjuuri:', math.sqrt(144))

# trigonometriset funktiot on määritelty radiaaneissa
print(math.sin(math.pi/2))

# tulostetaan yhtälön sin(x)= 0.6 ratkaisu eli x=arcsin(0.6)
print('x=',math.asin(0.6)*180/math.pi)
# käänteisfunktiot ovat muotoa: atan(x), asin(x) ja acos(x)

# Määritellään kulma asteina ja muutetaan se radiaaneiksi ja lasketaan kulman kosini
angle_degrees = 45
angle_radians = 45*math.pi/180
print(math.cos(angle_radians))
3.141592653589793
2.718281828459045
Luvun 144 neliöjuuri: 12.0
1.0
x= 36.86989764584402
0.7071067811865476
In [27]:
 
In [28]:
x
Out[28]:
1681

Tehtävä 1.1

Tee ohjelma, jossa määritellään kolme muuttujaa, joiden arvot ovat lukuja. Ohjelma laskee ja tulostaa lukujen summan ja keskiarvon.

In [48]:
muuttuja_1 = 10
muuttuja_2 = 8
muuttuja_3 = 9

summa = muuttuja_1 + muuttuja_2 + muuttuja_3

print(summa)

keskiarvo = summa/3

print(keskiarvo)
27
9.0

Tehtävä 1.2

Tee ohjelma, jossa määritellään pallon säde, ja ohjelma tulostaa pallon tilavuuden ja pinta-alan. Pallon pinta-ala ja tilavuus lasketaan kaavoilla

$$ A=4\pi\cdot r^2 \ \text{ja} \ V=\frac{4}{3}\pi r^3 $$
In [8]:
import math

r = 10.0

A = 4 * math.pi * r ** 2

V = 4/3 * math.pi * r**3

print("Pinta-ala:", A)
print("Tilavuus:", V)
Pinta-ala: 1256.6370614359173
Tilavuus: 4188.790204786391

Tehtävä 1.3

Tee ohjelma, joka laskee tunnetusta pallon pinta-alasta pallon säteen ja pallon tilavuuden.

In [7]:
import math

A = 100

r = math.sqrt(A / (4 * math.pi))

V = 4/3 * math.pi * r**3

print("Säde:", r)
print("Tilavuus:", V)
Säde: 2.8209479177387813
Tilavuus: 94.03159725795935

Tehtävä 1.4

Suorakulmion sivujen pituus on 50 cm ja 30 cm. Tee ohjelma, joka tulostaa suorakulmion piirin ja pinta-alan.

In [17]:
# Kirjoita koodi tähän
kanta = 50
korkeus = 30
print("suorakulmion pinta-ala on", kanta*korkeus, "cm^2")
suorakulmion pinta-ala on 1500 cm^2

Tehtävä 1.5

Kuution tilavuus on 500 litraa. Mikä on tahkojen yhteispinta-ala? $V=a^3$, eli $a = \sqrt[3]{V}$= $V^{1/3}$

In [25]:
# Tuodaan kirjasto käyttöön
import math

V = 500 # yksikkö on l eli dm^3

# Lasketaan kuution sivun pituus a
a = V ** (1/3)
print("Sivun pituus:", a)
# Lasketaan pinta-ala
A = 6 * a ** 2
print("Tahkojen pinta-ala", A)
Sivun pituus: 7.937005259840997
Tahkojen pinta-ala 377.9763149684619

Tehtävä 1.6

Puhelinliittymän A kuukausimaksu on 6 euroa ja minuuttitaksa 0.15 eur/min. Tee ohjelma, jonka avulla voi tutkia puhelinlaskua erilaisilla puheajoilla. Puhelinliittymän B kiinteä kuukausimaksu on 15 euroa. Etsi kokeilemalla eli haarukoi kuinka paljon pitää puhua, että liittymä B tulee halvemmaksi?

In [1]:
# Kirjoita vastaus tähän
# Syötä aika minuutteina, voit vaihtaa muuttujan t arvoa
time = 60
value = 6 + 0.15 * time
print("Kun on puhuttu ", time, " minuuttia, rahaa on kulunut ", value, " euroa.")
Kun on puhuttu  60  minuuttia, rahaa on kulunut  15.0  euroa.

Tehtävä 1.7

Jaettava on luku 145 ja jakaja on luku 6. Tee ohjelma, joka tulostaa jakolaskun osamäärän ja jakojäännöksen.

In [5]:
jaettava = 145
jakaja = 6
print(jaettava, " jaettuna ", jakaja, " on ", jaettava // jakaja, " ja jakojäännös on ", jaettava % jakaja)
145  jaettuna  6  on  24  ja jakojäännös on  1

Tehtäviä 1.8

  1. Luo kaksi muuttujaa: tallenna toiseen merkkijono Hei, ja toiseen joku nimi. Tulosta ne niin, että tuloste on esimerkiksi Hei, Maria
  2. Luo neljä muuttujaa, joiden tyypit ovat int, float, str ja bool. Tarkista ja tulosta tyypit type-funktiolla.
In [21]:
tervehdys = "Hei, "
nimi = "Herbert"
print(tervehdys, nimi)
Hei,  Herbert

Lisätietoa muuttujien tyypeistä pythonissa

Muuttujan tyypin voi selvittää funktiolla type:

In [22]:
# Suorita alla oleva koodi
numero = 2
type(numero)
Out[22]:
int
In [23]:
# Suorita alla oleva koodi
merkki = "2"
type(merkki)
Out[23]:
str
In [ ]:
# Suorita 
liukuluku = 2.345
type(liukuluku)