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