Savvy handboek - Hoofdstuk 3

Page 1


3

Allemaal functies

Inhoudstafel

3.4

Als je een groot probleem wil aanpakken, zoek je best eerst naar de kleinere deelproblemen. Na het oplossen van de deelproblemen, voeg je alles samen om het grote probleem op te lossen. Deze methode heet decompositie

Het oplossen van een groot probleem wordt hierdoor eenvoudiger. Een bijkomend voordeel is dat je de oplossingen van de deelproblemen vaak ook kan inzetten bij andere problemen.

Denk maar aan de volgende deelproblemen:

> Hoe lang is een string?

> Wat is het grootste getal in een rij getallen?

> Hoe rond ik een getal af tot twee cijfers na de komma?

> Hoe bereken ik een leeftijd?

>

Ontwikkelaars van programmeertalen weten dit. Daarom werden deze kleine problemen al voor ons geprogrammeerd in functies.

Functie ::= herbruikbare programmacode met een bepaalde functionaliteit, namelijk het berekenen van een waarde of het uitvoeren van een actie.

<functienaam>(<x>, <y> …)

Een functie heeft

> een naam, de <functienaam>,

> 0, 1 of meerdere parameters, <x>, <y>, en

> een terugkeerwaarde en/of actie die wordt uitgevoerd.

Aandachtspunt:

Bij de declaratie van een functie spreken we van parameters. Bij de aanroep van een functie spreken we van argumenten

Voorbeeld:

Functie declaratie input([<tekst>])

Functie-aanroep naam = input(“Geef een naam in? ”)

<tekst> is de parameter van de functie input.

“Geef een naam in? ” is het argument van de functie input in deze functie-aanroep.

3.1 Ingebouwde functies

We hebben al een aantal functies gebruikt tot nu toe:

functie functienaam argument(en) terugkeerwaarde actie

print(“Jan”) print “Jan” - “Jan” komt op het scherm.

print(“Jan”, “Piet”) print “Jan” en “Piet” - “Jan Piet” komt op het scherm.

input(“woord?”) input “woord?” het ingelezen woord “woord?” komt op het scherm en er wordt gewacht op de ingave van een woord. int(5.8) int 5.8 5str(10) str 10 “10”type(5.2) type 5.2 float -

Er zijn een heleboel ingebouwde functies. We bekijken er nog een paar.

functie doel

abs(<getal>) geeft als resultaat de absolute waarde van het <getal> pow(<getal>, <exponent>) geeft als resultaat het <getal> tot de macht <exponent>

round(<getal>[, <decimalen>]) rondt het <getal> af naar een integer of naar een float met het aantal opgegeven <decimalen>

Voorbeelden:

3)

0)

3.2

Meer mogelijkheden in de functie print (uitbreiding)

De functie print heeft nog een aantal bijkomende parameters.

print({<tekst>} [,sep = <sep>][,end = <end>])

<sep>: bepaalt het scheidingsteken (het teken dat tussen de verschillende teksten in je printopdracht staat); standaard is dit “ ” (een spatie).

<end> bepaalt het teken dat op het einde van een printopdracht wordt geplaatst; standaard is dit “\n” (newline).

Voorbeelden:

instructie

print(“kostprijs:”, 5, “EUR”)

resultaat

kostprijs: 5 EUR print(“kostprijs:”, 5, “EUR”, sep=“”)

kostprijs:5EUR print(“kostprijs:”, 5, “EUR”, sep = “,”)

kostprijs:,5,EUR print(“januari”) print(“februari”)

januari februari print(“januari”, end = “”) print(“februari”, end = “”)

januarifebruari

3.3 Softwarebibliotheken: verzameling van functies

Niet alle functies zijn zomaar beschikbaar. Sommige functies zijn verzameld in softwarebibliotheken. Wil je een functie uit een softwarebibliotheek gebruiken, dan importeer je eerst de module van deze softwarebibliotheek.

3.3.1 Softwaremodule Math

sqrt(<getal>) berekent de vierkantswortel van het <getal> degrees(<radialen>) zet een hoek in <radialen> om naar een hoek in graden radians(<graden>) zet een hoek in <graden> om naar een hoek in radialen sin(<hoek>) geeft als resultaat de sinus van de hoek; de <hoek> wordt in radialen ingegeven cos(<hoek>) geeft als resultaat de cosinus van de <hoek>; de <hoek> wordt in radialen ingegeven pi geeft als resultaat de waarde van pi (= 3.141592…)

3.3.1 Softwaremodule Random

random() geeft als resultaat een willekeurig float getal tussen 0 en 1, met 0 inbegrepen

Geeft als resultaat een willekeurig integer getal gelegen tussen <getal1> en <getal2>, grenzen inbegrepen

Geeft als resultaat een willekeurig integer getal gelegen tussen <getal1> en <getal2>, grenzen inbegrepen

Je kan een module op meerdere manieren importeren. Je vindt hier drie methodes:

import <module>

De <module> wordt geïmporteerd met alle functies die erin zitten.

Je roept een functie op met: module.functie

import <module> as <alias>

De <module> wordt geïmporteerd met alle functies die erin zitten onder de naam <alias>. Je doet dit als de modulenaam lang of ingewikkeld is.

Je roept een functie op met: alias.functie

from <module> import <functie>

Je importeert enkel de <functie> uit de <module>.

Je roept de functie op met: functie

Voorbeelden:

Test de voorbeelden uit in de shell van Thonny.

>>> from math import sqrt

>>> sqrt(9)

3.0

>>> sqrt(12568.36) 112.10869725404893

>>> import math

>>> math.pi 3.141592653589793

>>> math.radians(90) 1.5707963267948966

>>> import random as rd

>>> rd.random() 0.06380675964624183

>>> rd.randint(0,10)

1

De lengte van een ladder

Probleemstelling

Een verhuurbedrijf van allerlei materialen voor de bouwsector verhuurt onder andere ladders in alle maten. Het bedrijf zou graag een programma hebben waarmee de minimumlengte van de ladder berekend kan worden, als de hoogte van de muur wordt ingegeven, zodat het uiteinde van de ladder tegen de bovenkant van de muur leunt. Om ervoor te zorgen dat de ladderhoek in een veilige positie staat, wordt de 1-op-4-regel gehanteerd: de onderkant van de ladder moet één ruimte of meeteenheid van de muur staan, voor iedere vier ruimtes of eenheden omhoog. Volgens de wetgeving mag de stahoogte op een ladder niet hoger zijn dan 7,5 meter, m.a.w. er worden geen laders verhuurd voor muren hoger dan 7,5 meter.

Maak een programma om de lengte van de ladder te berekenen, rekening houdend met de bovenstaande vereisten.

Analyse

Invoer

waarde type betekenis hoogte integer de hoogte van de muur

Gegeven

> de afstanden worden in cm ingegeven

> de afstand tot de muur is 1/4 van de hoogte van de muur

> de stelling van Pythagoras is van toepassing --> a² + b² = c²

Verwerking

als de hoogte groter is dan 7,5 m kan er geen ladder verkocht worden zoniet bereken de afstand tot de muur bereken met behulp van de formule de lengte van de ladder

Uitvoer

een tekst of de lengte van de ladder waarde type betekenis lengte integer De hoogte van de ladder.

Algoritme

lees hoogte als hoogte > 750 dan schrijf “Er mag geen ladder meer gebruikt worden voor deze hoogte.” zoniet

afstand = hoogte /4 lengte = vierkantswortel van (afstand**2 + hoogte**2) schrijf lengte

Programma

# Bereken de lengte van een ladder voor een bepaalde hoogte #

# Importeer de softwaremodule math

import math

# Lees de hoogte in hoogte = int(input("Geef de hoogte van de muur in cm in. "))

# Controleer of de muur hoger is dan 7,5 m if hoogte > 750:

print("Er mag geen ladder meer gebruikt worden voor deze hoogte.") else:

# Bereken met de stelling van Pythagoras de lengte van de ladder afstand = round(hoogte / 4)

lengte = math.sqrt(pow(afstand,2) + pow(hoogte, 2))

print("Gewenste lengte van de ladder, ongeveer:", round(lengte), "cm.")

Bewaar het programma onder de naam Ladder.py.

Testen

hoogte resultaat

800 Er mag geen ladder meer gebruikt worden voor deze hoogte.

600 Gewenste lengte van de ladder: 618 cm.

3.4 Zelf functies maken

Als je een groter probleem opgesplitst hebt in deelproblemen is het nuttig om elk deelprobleem in een aparte functie op te lossen.

Interpreteer en experimenteer

Taak

1 Lees onderstaande programma’s.

2 Wat denk je dat er gebeurt? Wat denk je dat de uitvoer is?

3 Open de programma’s in Thonny, voer ze uit en controleer of je veronderstelling juist is.

Open Even_oneven2.py

def even(testgetal): if testgetal % 2 == 0: print("Het getal is even.") else: print("Het getal is oneven.")

# Hoofdprogramma

getal = int(input("Geef een getal in. ")) even(getal)

Open Btw2.py.

def incl_prijs(code,prijs):

BTW1 = 6

BTW2 = 21 if code == "1":

prijs_incl = prijs_excl * (1 + BTW1/100) else:

prijs_incl = prijs_excl * (1 + BTW2/100) return(prijs_incl)

# Hoofdprogramma

btwcode = input("Geef de BTW-code in. ") prijs_excl = float(input("Geef de prijs van het product in. ")) print("De prijs inclusief BTW bedraagt", incl_prijs(btwcode, prijs_excl), “EUR”)

Open Korting4.py.

def korting(perc, bedrag): return(bedrag * perc / 100)

# Hoofdprogramma

aantal = int(input("Hoeveel producten heb je gekocht? ")) prijs = float(input("Wat is de prijs van het product? "))

KORTINGSPERC = 10

totale_prijs = aantal * prijs if aantal >= 50:

totale_prijs = totale_prijs - korting(KORTINGSPERC, totale_prijs) print("De totale prijs bedraagt", totale_prijs, "EUR")

Taak

1 Open Korting3.py.

2 Pas het programma aan zodat een zelfgedefinieerde functie wordt gebruikt om de korting te berekenen.

3 Bewaar het programma onder de naam Korting5.py

3.4.1 De functiedefinitie

Voor het definiëren van een functie gebruik je een functiedefinitie.

functiedefinitie ::= def functienaam({<parameter>}): <opdrachtenblok>

Een functie met een terugkeerwaarde eindigt met: return(<terugkeerwaarde>)

Een functie wordt opgeroepen met: functienaam({<argument>})

Afspraken:

> De functienaam

• bestaat alleen uit letters, cijfers, en onderlijningstekens;

• mag niet starten met een cijfer;

• bestaat alleen uit kleine letters;

• omschrijft wat de functie doet.

> Gebruik andere namen voor de parameters en de variabelen in het opdrachtenblok dan voor de variabelen in je programmablok, om verwarring te voorkomen.

Hoger lager

Probleemstelling

Speel je mee? Maak een programma om een miniversie van hoger-lager te spelen. De computer kiest een willekeurig getal tussen 1 en 10. Jij probeert het te raden.

Maak een functie hoger_lager() om te bepalen wat het resultaat is van je ingave. Er zijn drie mogelijke antwoorden: gewonnen, hoger of lager. Schrijf op het einde het zoekgetal uit.

Analyse

Invoer

waarde type getal integer

Verwerking

Bepaal het zoekgetal.

Ga na of het getal gelijk is aan het zoekgetal, of dat het zoekgetal hoger of lager is dan het ingegeven getal.

Uitvoer

gewonnen, hoger of lager

waarde type

getal integer

Algoritme

functie hoger_lager(zoekgetal, getal) als getal == zoekgetal dan schrijf “gewonnen” zoniet

als getal < zoekgetal dan schrijf “hoger” zoniet

schrijf “lager” bepaal het zoekgetal zoek lees raadgetal

hoger_lager(zoek, raadgetal) schrijf zoek

Programma

# Raad een random getal

#

# Functie hoger_lager

def hoger_lager(zoekgetal, getal): if getal == zoekgetal: print("gewonnen") else: if getal < zoekgetal: print("hoger") else: print("lager")

# Hoofdprogramma

# Importeer de softwaremodule random import random

# Bepaal het zoekgetal zoek = random.randint(1,10)

# Lees het getal dat je raadt in raad = int(input("Aan welk getal denk ik? "))

# Controleer het ingelezen getal

hoger_lager(zoek, raad) print("Het getal dat je zoekt is", zoek)

Bewaar het programma onder de naam Hoger_lager1.py

Testen

Voer het programma een aantal keren uit om te testen of het werkt.

3.5

Oefeningen

In de oefeningen maak je een functie en een hoofdprogramma voor de in- en uitvoer en de oproep van de functie.

Gemakkelijk

1 Maak een programma dat twee natuurlijke getallen inleest. Het programma bevat een zelfgedefinieerde functie veelvoud() die nagaat of het tweede getal een veelvoud is van het eerste. Bewaar het programma onder de naam Veelvoud.py

2 Maak een programma dat de zelfgedefinieerde functie isgeslaagd() bevat. Deze functie bepaalt of je voor een toets al dan niet bent geslaagd. De functie heeft twee parameters, namelijk de behaalde punten en het totaal aantal punten op de toets. Het resultaat van de functie is True als je geslaagd bent en False als je niet slaagde. Iemand die 10 op 20 haalt is uiteraard geslaagd.

Bewaar het programma onder de naam Geslaagd1.py

3 Je bent geboeid door Amerika en wil er graag naartoe, maar je vraagt je af hoe warm het er is. In België wordt de temperatuur weergegeven in graden Celsius, in Amerika in graden Fahrenheit. Maak een programma met daarin de zelfgedefinieerde functie celsius() die een ingegeven temperatuur in graden Fahrenheit (F) omzet in het equivalent in graden Celsius (C)

Formule: F = C * 9 / 5 + 32

Bewaar het programma onder de naam Fahrenheit2.py

4 In Amerika is de munteenheid de Amerikaanse dollar. Maak een programma met daarin de zelfgedefinieerde functie wissel(), waarmee je een ingevoerd bedrag in Amerikaanse dollar kan omrekenen naar euro. Zoek de wisselkoers op het internet. Rond het resultaat af tot op twee cijfers na de komma. Het resultaat wordt als volgt weergegeven: “X USD is gelijk aan Y EUR” met X het bedrag in dollar en Y het bedrag in euro.

Bewaar het programma onder de naam Wissel2.py.

5 Je gaat elke dag joggen. Je weet welke afstand je aflegt en hoe lang je erover doet, maar je vraagt je af hoe snel je eigenlijk loopt.

Als je een verplaatsing maakt, is de afgelegde weg afhankelijk van je snelheid en de tijd van je verplaatsing. De formule is S = v * t met S = afstand, v = snelheid en t = tijd.

Maak een programma om te berekenen hoe snel je loopt. Geef het aantal km in dat je hebt gejogd en de tijd in minuten. Maak een zelfgedefinieerde functie snelheid() die je snelheid in km/u berekent. Rond de snelheid af tot op 0 cijfers na de komma.

Bewaar het programma onder de naam Snelheid2.py

6 Maak een programma met daarin de zelfgedefinieerde functie samengesteld(). De functie berekent het eindkapitaal voor een bedrag dat uitstaat tegen een samengestelde intrest van 1,25%. Het beginkapitaal en de looptijd (uitgedrukt in jaren) dienen ingevoerd te worden.

De formule voor de berekening van het eindkapitaal is: eindkapitaal = beginkapitaal * (1 + intrestvoet)looptijd

Rond het resultaat af tot op 2 cijfers na de komma. Gebruik een functie om de macht te berekenen.

Bewaar het programma onder de naam Intrest2.py

7 Ontwerp een programma met een zelfgedefinieerde functie sorteer() die twee ingegeven namen of getallen gerangschikt weergeeft. Standaard wordt er van klein naar groot gerangschikt. Test het uit met getallen en woorden. Bewaar het programma onder de naam Rangschik1.py

Gemiddeld

8 Een verkoper van behangpapier wil graag een programma dat berekent hoeveel rollen behangpapier er nodig zijn om een muur (zonder deuren of vensters) te behangen. Eén rol behangpapier is 10 meter lang en 52 centimeter breed.

Maak een programma met daarin een zelfgedefineerde functie behangen() om het minimum aantal rollen behangpapier te berekenen. Laat echter 10% bijtellen om rekening te houden met het verlies van onbruikbare overschotten. Geef de lengte en de hoogte in van de muur die behangen moet worden.

Tip

Zet alle eenheden in cm.

Bewaar het programma onder de naam Behangen.py.

9

Een landmeter wil een berekening die hij vaak moet maken, automatiseren via een programma. De landmeter wil namelijk de afstand berekenen tussen een bereikbaar punt

A en een onbereikbaar punt B aan de overkant van de beek.

Om die afstand te berekenen, moet hij een aantal metingen laten uitvoeren. Hij neemt een bereikbaar punt C (altijd op 10 m van A). Vervolgens meet hij de hoeken

A en C in de driehoek ABC (in graden). De formule om AB te berekenen is dan:

AB = AC * sin(C)/sin(A+C)

Maak een programma dat een zelfgedefinieerde functie afstand() bevat om deze afstand te berekenen. Rond de uitkomst af tot op 1 cijfer na de komma. De hoeken worden in graden ingegeven.

Bewaar het programma onder de naam Landmeter.py

10 Maak een programma dat een zelfgedefinieerde functie wortels() bevat. Deze functie berekent en print de wortels van een vierkantsvergelijking ax² + bx + c = 0. Houd rekening met de drie gevallen: D > 0, D = 0, D < 0. De coëfficiënten a, b en c worden ingelezen; hierbij mag a niet nul zijn (controleer dit).

De oplossing van ax² + bx + c = 0 is: met

Bewaar het programma onder de naam Wortels.py

11 Maak een programma met daarin de zelfgedefinieerde functie schrikkeljaar(). De functie heeft één parameter, namelijk een jaartal. De functie gaat na of het jaartal een schrikkeljaar is of niet. Zoek op het internet de voorwaarden op voor een schrikkeljaar. Gebruik logische operatoren. De functie geeft als resultaat True of False. Het programma schrijft de juiste boodschap. Bewaar het programma onder de naam Schrikkeljaar.py

12 Pas het programma Rangschik1.py aan zodat er een standaardparameter in de functiedefinitie wordt opgenomen die bepaalt of van klein naar groot of van gsroot naar klein moet worden gesorteerd. Standaard krijgt deze parameter de waarde 0 en wordt er van klein naar groot gerangschikt. Test het uit met getallen en woorden.

Tip

Zoek op het internet hoe je een standaardparameter kan toevoegen.

Bewaar het programma onder de naam Rangschik2.py

Turn static files into dynamic content formats.

Create a flipbook
Issuu converts static files into: digital portfolios, online yearbooks, online catalogs, digital photo albums and more. Sign up and create your flipbook.