Week 1

advertisement
Week 2.
Leerdoel:
 Omzetten van PSD's (Programma Structuur Diagram) naar c-code.
 Ervaring opdoen met syntax en IDE(ontwikkelomgeving).
 Leren werken met complexere programmabesturingsconstructies
Inlevertijdstip:
Onderstaande opgaven dienen aan het begin van het practicum van week 3 ingeleverd te worden.
Opgave 1.
Gevraagd wordt de driehoek van Pascal af te drukken, een willekeurig aantal regels tot maximaal 10 regels.
Driehoek van Pascal
0
1
1
1
1
2
1
2
1
3
1
3
3
1
4
1
4
6
4
1
5
1
5
10
10
5
1
6
1
6
15
20
15
6
Variabelen:
tabel, grootte 11, waar maximaal 11 gehele getallen in kunnen.
regel: geeft de regel aan die berekend wordt
kolom: geeft het getal aan binnen de regel die berekend wordt
nRegels: aantal af te drukken regels van de driehoek, getal tussen 1 en 10
Globaal PSD
voer aantal regels in
initialiseer tabel
Globaal
druk 0-dePSD.
regel af
zolang er nog een regel te doen valt
bereken volgende regel
druk regel af
1
Voer aantal regels in
lees terminal(nRegels)
totdat(nRegels>0 en nRegels <=10)
Initialiseer tabel
tabel(0):=1
Druk 0-de regel af
schrijf terminal(tabel(0))
schrijf terminal (nieuwe regel)
Restant
regel:=1
zolang regel <= nRegels
kolom:=regel
tabel(kolom):=1
kolom:=kolom-1
zolang kolom >0
tabel(kolom):=tabel(kolom)+tabel(kolom-1)
kolom:=kolom-1
zolang kolom<=regel
schrijf terminal(tabel(kolom))
kolom:=kolom+1
schrijf terminal(nieuwe regel)
regel:=regel+1
Opgave 2.
Druk alle fibonacci getallen af kleiner dan MAXINT.
Eerste poging:
Variabelen:
vorig: voorlaatst berekend fibonacci getal, geheel getal
huidig: laatst berekend fibonacci getal, geheel getal
hulp: hulp variabele om het nieuwe fibonacci getal te berekenen, geheel getal
nPerRegel: aantal fibonacci getallen op 1 regel, constante 5
n: positie van het huidige fibonacci getal in de huidige regel, geheel getal
vorig := 0 en schrijf terminal(vorig)
huidig := 1 en schrijf terminal(huidig)
n:=2
zolang huidig <MAXINT
hulp:=huidig
huidig:=huidig+vorig
vorig:=hulp
n=nPerRegel
n:=0
Schrijf terminal(nieuwe regel)
n:=n+1
schrijf terminal (huidig)
Wat is hier fout??
Hoe los je dit op?? Wijzig het PSD en zet dit gewijzigde PSD om naar een c programma
Opgave 3.
Geef alle priemgetallen tot-en-met een in te lezen getal (maxPriem tussen 2 en MAXINT)
Zeef van Eratosthenes (alle veelvouden van een priemgetal vallen weg, wat over blijft is weer een priemgetal.)
Vul een tabel met alle getallen van 2 tot-en-met maxPriem. Begin bij getal 2, streep alle veelvouden van 2 weg.
Ga naar het eerste volgende -nog niet weggestreepte- getal, streep alle veelvouden van dit getal weg. Ga
hiermee door zolang getal <= maxPriem
variabelen:
i, teller (tbv doorlopen van alle -priem-getallen kleiner of gelijk aan maxPriem)
j, teller (tbv doorlopen van alle veelvouden van priemgetallen)
maxPriem, getal tussen 2 en MAXINT
tab, tabel ter grootte van maxPriem
/* inlezen maxPriem(getal tussen 2 en MAXINT) */
lees terminal(maxPriem)
/* vullen tabel van 1 tot-en-met maxPriem */
i := 0
Zolang i < maxPriem - 1
tab(i) := i + 2
i := i + 1
/* zeef van Eratosthenes */
i := 0
Zolang tab(i) * tab(i) <= maxPriem
tab(i) <> 0
Ja
nee
j := i + tab(i)
Zolang j < maxPriem
tab(j) := 0
j := j + tab(i)
i := i + 1
/* afdrukken priemgetallen, maw alle getallen <> 0 */
i := 0
zolang i < maxPriem – 1
tab(i) <> 0
Ja
schrijf terminal (tab(i))
i := i + 1
nee
Waarom kan dit programma 'at run-time' fout gaan(denk aan het geheugenmodel)? Wat kun je hier aan
doen?.
Opgave 4 (frequentietabel)
Zet onderstaand PSD om naar een c-programma en beschrijf voldoende wat het programma doet.
variabelen:
nFouten, integer ...
nStudenten, integer ...
fout, tabel van integers ...
i, teller
freq, tabel van 16 reals ...
i := 0
Zolang i < 16
fout(i) := 0
i := i + 1
NStudenten := 0
schrijf terminal ("Voer aantal fouten van een student in, 222 is afsluiten")
lees terminal (nFouten)
Zolang nFouten <> 222
fout(nFouten) := fout(nFouten) + 1
nStudenten := nStudenten + 1
schrijf terminal ("Voer aantal fouten van een student in, 222 is afsluiten")
lees terminal (nFouten)
i := 0
Zolang i < 16
freq(i) := fout(i) / nStudenten * 100
i := i + 1
schrijf terminal ("Overzicht Fouten")
i := 0
Zolang i < 16
schrijf terminal ("i, fout(i), freq(i)")
i := i + 1
Download