Skip to content

2023_2024_deeltoets_1

Harry Broeders edited this page Feb 27, 2024 · 2 revisions

2023-2024 Deeltoets 1

Opgaven

De opgaven kun je vinden op: https://bitbucket.org/HR_ELEKTRO/ems10/wiki/Toetsen/2023-2024_Deeltoets_1.pdf

Uitwerkingen

Toetsvraag 1a

def bereken_golflengte(f):
    lambda = 3e8 / f
    return lambda

De lokale variabele lambda is niet echt nodig:

def bereken_golflengte(f):
    return 3e8 / f

Toetsvraag 1b

Een stap-voor-stap oplossing:

import math
def bereken_FSPL(d, f):
    golflengte = bereken_golflengte(f)
    FSPL = (4 * math.pi * d / golflengte) ** 2
    return FSPL

Een compacte oplossing:

import math
def bereken_FSPL(d, f):
    return (4 * math.pi * d / bereken_golflengte(f)) ** 2

Toetsvraag 1c

Een stap-voor-stap oplossing:

d = int(input('Geef de afstand in meter: '))
f = int(input('Geef de signaalfrequentie in Hz: '))
FSPL = bereken_FSPL(d, f);
print('De FSPL is:', FSPL)

Een compacte oplossing:

print('De FSPL is:', bereken_FSPL(int(input('Geef de afstand in meter: ')), int(input('Geef de signaalfrequentie in Hz: '))))

Toetsvraag 1d

Met een for-loop:

def FSPL_met_bandbreedte(afst, f1, f2):
    for freq in range(f1, f2, 1000):
        FSPL = bereken_FSPL(afst, freq)
        print("frequentie:", freq, "FSPL:", FSPL)

FSPL_met_bandbreedte(3000, 10000, 20000)

Met een while-loop:

def FSPL_met_bandbreedte(afst, f1, f2):
    freq = f1
    while freq < f2:
        FSPL = bereken_FSPL(afst, freq)
        print("frequentie:", freq, "FSPL:", FSPL)
        freq = freq + 1000

FSPL_met_bandbreedte(3000, 10000, 20000)

Toetsvraag 2

def fix_std_nr(lijst):
    nieuwe_lijst = []
    for nummer in lijst:
        if nummer[0] == '9' or nummer[0] == '8':
            nieuwe_lijst.append('0' + nummer)
        else:
            nieuwe_lijst.append(nummer)
    return nieuwe_lijst

De voorwaarde van het if-statement kan ook korter geformuleerd worden:

def fix_std_nr(lijst):
    nieuwe_lijst = []
    for nummer in lijst:
        if nummer[0] == '9' or '8':
            nieuwe_lijst.append('0' + nummer)
        else:
            nieuwe_lijst.append(nummer)
    return nieuwe_lijst

De voorwaarde van het if-statement kan ook anders geformuleerd worden:

def fix_std_nr(lijst):
    nieuwe_lijst = []
    for nummer in lijst:
        if nummer[0] in ['9', '8']:
            nieuwe_lijst.append('0' + nummer)
        else:
            nieuwe_lijst.append(nummer)
    return nieuwe_lijst

Omdat je met in ook in een string kan zoeken naar een karakter, kan de voorwaarde van het if-statement nog compacter worden:

def fix_std_nr(lijst):
    nieuwe_lijst = []
    for nummer in lijst:
        if nummer[0] in '98':
            nieuwe_lijst.append('0' + nummer)
        else:
            nieuwe_lijst.append(nummer)
    return nieuwe_lijst

Een alternatieve oplossing die niet geheel correct is omdat de originele lijst wordt aangepast (er wordt gevraagd om een nieuwe lijst terug te geven):

def fix_std_nr(lijst):
    for i in range(len(lijst)):
        if lijst[i][0] in ['9', '8']:
            lijst[i] = '0' + lijst[i]
    return lijst

Een recursieve oplossing:

def fix_std_nr(lijst):
    if len(lijst) == 0:
        return []
    if lijst[0][0] in ['9', '8']:
        return ['0' + lijst[0]] + fix_std_nr(lijst[1:])
    else:
        return [lijst[0]] + fix_std_nr(lijst[1:])

Een compacte oplossing:

def fix_std_nr(lijst):
    return ['0' + nummer if nummer[0] in '98' else nummer for nummer in lijst]

In het bovenstaande programma wordt gebruik gemaakt van list comprehension. Dit is niet behandeld in de les, maar wordt uitgelegd in paragraaf 19.2 van het boek.

Testcode:

studenten_lijst = ['951203', '863665', '1625532', '811553', '0902333', '0826254', '0913256', '0915464', '941663', '1363614']

nieuwe_studenten_lijst = fix_std_nr(studenten_lijst)
print(nieuwe_studenten_lijst)

Clone this wiki locally