Algoritmen: Oefeningen


Home 4BSW1 4BSW2 4MTLAT/4LAT 4MWW1 4MWW2 4NWE2 5BWE 5EWI/5LWI/5WWI1 5WWI2 About

1. OPDRACHTEN:

  • implementeer de functies beneden.
  • schrijf er ook telkens testgevallen om te achterhalen of je functie zo werkt als je verwacht.
  • probeer het eerst alleen > kijk in de cursus > zoek online een oplossing > vraag je buur > of vraag je leerkracht.
pi = 3.1415926535897932384626433832795028841971  # waarde van de constante "pi"

2. hoekenconversie

  • schrijf een functie “deg” die hoekwaarden omzet van graden naar radialen.
  • maak er de omgekeerde functie “rad” aan en formuleer de algoritme!

3. faculteit

(achtergrond)

  • maak een functie “faculteit” die een natuurlijk getal “n” krijgt voor invoer
    • indien het getal 0 of 1 is, geef 1 terug (basisconditie)
    • anders:
    • bereken de “faculteit” van n-1
    • vermenigvuldig het resultaat met n
    • geef de uitkomst terug.

4. hoekberekening

De volgende functie berekent de hoek tussen twee lijnen. Lees de functie en begrijp de stappen: probeer eerst met je eigen symbolen de wiskundige formules op te schrijven.

Formuleer dan de algoritme!

def LineAngle(p1, p2, p3, p4):

    dx1 = p2[0]-p1[0]
    dy1 = p2[1]-p1[1]

    dx2 = p4[0]-p3[0]
    dy2 = p4[1]-p3[1]

    from math import atan2
    ang1 = atan2(dy1, dx1)
    ang2 = atan2(dy2, dx2)

    angle_total = ang2-ang1

    return angle_total

print (deg(LineAngle((0., 0.), (1., 0.), (0., 0.), (-1., -0.5))))

5. Euclidische afstandsfunctie

(achtergrond)

  • maak een functie “euclid” aan die de afstand berekent tussen twee punten `p1 = (x1, y1)` en `p2 = (x2, y2)`
    • bereken het verschil tussen de punten: d = (x2-x1, y2-y1)
    • neem de elementen van dat verschil tot de macht twee
    • tel de elementen het resultaat samen (som)
    • neem ervan de vierkantewortel
      • (dus, we hebben hier de vierkantswortel van de som van het quadraat van de elementen van het verschil.)
    • geef het resultaat terug.
  • bonus voor gevoorderden: aanpassen zo dat er vectoren van grotere dimensie mogelijk zijn, bv. 3D of 4D

6. De Taylor-reeks

(achtergrond)

  • schrijf er een functie voor de conversie van een hoek.
    • de functie krijgt dus een hoek “x” binnen (in radialen) en geeft een getal (“float”) terug.
  • definieer een “resultaat” dat in het begin gelijk aan de waarde van x is.
  • maak er een variable “sign” aan die aanvankelijk de waarde “-1” heeft.
  • ga in een “while”-lus, met een loopvariabele “i” die bij 3 begint en voortgaat zolang i kleiner dan 100 is.
    • bereken een tussenresultaat = sign * (x**i)/faculteit(i)
    • tel het resultaat van die tussenberekening bij het resultaat
    • verhoog de loopvariabele om twee
    • vermenigvuldig het “sign” met -1
    • (eind van de lus)
  • geef het resultaat terug.
  • testen met de volgende getalen (rad): [0., 1., pi/2, pi ]
  • bonusvraag: komt je het resultaat bekend voor? Over welke conversie gaat het hier?

(hier een tipp als je helemaal geen idee hebt)

Date: 2024-01-26 Fri 00:00

Author: Falk Mielke