Opgaven
Wat je geleerd hebt
In dit hoofdstuk is het volgende besproken:
- Het nut van functies
- Functies creëren
- Parameters en argumenten
- Waardes uit functies retourneren middels
return - Functie benamingen
- Commentaar in functies
- Variabele scope en levensduur
- Lokale en globale variabelen
- Het gebruik van functies om grip te krijgen op complexiteit
- Modules
- Gebruik van een
main()functie - Anonieme functies
In deze opgaves schrijf je functies. Je moet natuurlijk niet alleen de functies schrijven, maar ook code om de functies te testen. Om te oefenen, moet je ook je functies becommentariëren als hierboven uitgelegd.
Opgave 1
Schrijf een functie tafel_van_vermenigvuldiging waaraan een getal (int) moet doorgegeven worden. De functie moet de tafel van vermenigvuldiging van uitschrijven vanaf 1 tot en met 10.
Voorbeeld
>>> tafel_van_vermenigvuldiging(12)
1 * 12 = 12
2 * 12 = 24
3 * 12 = 36
4 * 12 = 48
5 * 12 = 60
6 * 12 = 72
7 * 12 = 84
8 * 12 = 96
9 * 12 = 108
10 * 12 = 120
Opgave 2
Schrijf een functie gemeenschappelijke_karakters waaraan twee strings (str) moeten doorgegeven worden. De functie moet het aantal gemeenschappelijke karakters (int) van de twee strings teruggeven. Hierbij wordt hetzelfde karakter slechts één keer geteld. Zo hebben de strings een en twee bijvoorbeeld slechts één gemeenschappelijk karakter (de letter e). Hoofdletters en kleine letters worden beschouwd als verschillende karakters.
Voorbeeld
>>> gemeenschappelijke_karakters('een', 'twee')
1
Opgave 3
De Grerory-Leibnitz reeks benadert op basis van de reeksontwikkeling
Schrijf een functie gregory_leibnitz waaraan een getal (int) moet doorgegeven worden. De functie moet de benadering (float) van teruggeven die men bekomt op basis van de eerste termen van de Grerory-Leibnitz reeks.
Voorbeeld
>>> gregory_leibnitz(1)
4.0
>>> gregory_leibnitz(10)
3.0418396189294032
>>> gregory_leibnitz(100)
3.1315929035585537
>>> gregory_leibnitz(1000)
3.140592653839794
Opgave 4
Een kwadratische vergelijking is een vergelijking van de vorm
waarin en .
De grootheid
wordt de discriminant van de kwadratische vergelijking genoemd. Het teken van bepaalt het aantal reële oplossingen:
-
als dan zijn er twee verschillende reële oplossingen
-
als dan zijn er twee gelijke reële oplossingen
-
als dan zijn er geen reële oplossingen voor de vergelijking
De reële oplossingen kunnen bepaald worden met de zogenaamde wortelformule:
-
Schrijf een functie
discriminantwaaraan de drie parameters , en (intoffloat) van een kwadratische vergelijking moeten doorgegeven worden. De functie moet de discriminant (float) van de kwadratische vergelijking teruggeven. -
Schrijf een functie
oplossingenwaaraan de drie parameters , en (intoffloat) van een kwadratische vergelijking moeten doorgegeven worden. De functie moet drie waarden teruggeven: i) het aantal verschillende reële oplossingen (int) van de vierkantsvergelijking, ii) de oplossing (float) van de vierkantsvergelijking en iii) de oplossing (float) van de vierkantsvergelijking. Als de kwadratische vergelijking geen reële oplossingen heeft, dan moet de waarde teruggegeven worden voor en .
Voorbeeld
>>> discriminant(1, 0, -1)
4.0
>>> discriminant(1, 4, -5)
36.0
>>> oplossingen(1, 0, -1)
(2, -1.0, 1.0)
>>> oplossingen(1, 4, -5)
(2, -5.0, 1.0)
Opgave 5
In hoofdstuk 7 legde ik de loop-en-een-half uit. De uiteindelijke code voor het voorbeeld dat ik gebruikte had nog steeds iets lelijks, namelijk dat als x kleiner dan 0 of groter dan 1000 was, dat de code nog steeds vroeg om y terwijl het al bekend was dat het een andere waarde voor x zou moeten krijgen. Ik gaf ook aan dat he dat het gemakkelijkste kon oplossen via functies. Creëer een functie die je aan onderstaande code toevoegt en in onderstaande code aanroept, zodat het probleem wordt opgelost. Verwijder ook de exit() door introductie van een main() functie. Hint: Maak een variant van getInteger() die garandeert dat de integer tussen 0 en 1000 ligt.
from pcinput import getInteger
from sys import exit
while True:
x = getInteger( "Geef nummer 1: " )
if x == 0:
break
y = getInteger( "Geef nummer 2: " )
if y == 0:
break
if (x < 0 or x > 1000) or (y < 0 or y > 1000):
print( "De nummers moeten tussen 0 en 1000 liggen" )
continue
if x%y == 0 or y%x == 0:
print( "Fout: de nummers mogen geen delers zijn" )
exit()
print( "Vermenigvuldiging van", x, "met", y, "geeft", x * y )
print( "Tot ziens!" )
Opgave 6
Hoeveel kleurencombinaties zijn er mogelijk bij een keuze van drie kleuren uit de zeven kleuren van de regenboog? De volgorde van de kleuren is niet van belang. Dat zijn er
Hoe komt men tot de waarde van deze coëfficiënt? Voor de eerste kleurkeuze zijn er 7 mogelijkheden, voor de tweede nog 6, en voor de derde nog 5. In totaal dus mogelijkheden.
Maar daarbij is rekening gehouden met de volgorde van de kleuren: eerst kan rood en dan geel gekozen zijn, maar ook eerst geel en dan rood. Om van deze volgorde af te zien, moet nog gedeeld worden door het aantal volgordes van de drie kleuren. Dat is
Opgave
De faculteit van een natuurlijk getal , genoteerd als , is het product van de getallen 1 tot en met :
Bijvoorbeeld als :
In overeenstemming met de definitie van het lege product is afgesproken dat
Een binomiaalcoëfficient, geschreven als
en uitgesproken als " boven ", is een grootheid uit de combinatoriek die aangeeft op hoeveel manieren men uit (verschillende) objecten er zonder terugleggen kan kiezen. Zo'n keuze heet een combinatie. Een binomiaalcoëfficient is gedefinieerd als het natuurlijk getal
en
Gevraagd wordt:
-
Schrijf een functie
faculteitwaaraan een getal (int) moet doorgegeven worden. De functie moet (int) teruggeven. -
Schrijf een functie
binomiaalwaaraan twee getallen (int) moeten doorgegeven worden. De functie moet teruggeven.
Voorbeeld
>>> faculteit(5)
120
>>> binomiaal(7, 3)
35
Opgave 7
Wat is er fout aan de volgende code? Los het probleem op!
# Wat is er fout?
def oppervlakte_van_driehoek( basis, hoogte ):
opp = 0.5 * basis * hoogte
print( "Een driehoek met basis", basis, "en hoogte", hoogte, "heeft oppervlakte", opp )
print( oppervlakte_van_driehoek( 4.5, 1.0 ) )
Dit soort code wordt vaak geschreven door studenten die de details van functies nog niet goed begrijpen.