{ auteur, toelichting }

Vergelijkbare documenten
Opmerkingen en vragen aan Ultieme vraag: Hoe beïnvloedt dit de winstkansen?

{ specificatie (contract) en toelichting }

Probleem met dobbelspel. 2IP05: Programmeren Blok A. 5 spelers,2 dobbelstenen. wstomv/edu/2ip05/ Per ronde werpt elke speler 1

Waarden persistent (blijvend) opslaan gaat in bestanden (files). Lege tekst: eof

Methode: Verdeel en heers

UNIVERSITEIT ANTWERPEN FACULTEIT WETENSCHAPPEN DEPARTEMENT WISKUNDE-INFORMATICA OBERON CODE CONVENTIONS

Small Basic Programmeren Text Console 2

VAN HET PROGRAMMEREN. Inleiding

Programmeren in Pascal: Voorbeelden

VAN HET PROGRAMMEREN. Inleiding. Het spiraalmodel. De programmeertaal. vervolgens de berekening van het totale bedrag, incl. BTW:

Programmeren A. Genetisch Programma voor het Partitie Probleem. begeleiding:

Een korte samenvatting van enkele FORTRAN opdrachten

Leren Programmeren met Visual Basic 6.0 Les 3+4. Hoofdstuk 4 : De Selectie

Programmeren met Arduino-software

Visual Basic.NET. Visual Basic.NET. M. den Besten 0.3 VB. NET

Controle structuren. Keuze. Herhaling. Het if statement. even1.c : testen of getal even of oneven is. statement1 statement2

Voorbeeldtentamen Inleiding programmeren (IN1608WI), Oktober 2003, , Technische Universiteit Delft, Faculteit EWI, Afdeling 2.

Turbo Pascal (deel 1)

De keuzestructuur. Versie DD

9 Meer over datatypen

Uitwerking tentamen Analyse van Algoritmen, 29 januari

10. Controleopdrachten

Info-books. Toegepaste Informatica. Deel 20 : Algoritmen en programmeren in Access en Excel (Basis) AL20. Jos Gils Erik Goossens

Bij dit hoofdstukken horen geen opgaven.

Pascal uitgediept Data structuren

RCL Arduino Workshop 1

Turbo Pascal deel 3 MSX CLUB MAGAZINE 36. Erik van Bilsen. Scanned, ocr ed and converted to PDF by HansO, 2001

van PSD naar JavaScript

Zelftest Inleiding Programmeren

algoritmiek - antwoorden

Programmeren in Java les 3

Javascript oefenblad 1

HOOFDSTUK 3. Imperatief programmeren. 3.1 Stapsgewijs programmeren. 3.2 If Then Else. Module 4 Programmeren

Hoofdstuk 7: Werken met arrays

Deel 1: Arduino kennismaking. Wat is een microcontroller, structuur van een programma, syntax,

17 Operaties op bits Bitoperatoren en bitexpressies

Variabelen en statements in ActionScript

oefening JavaScript - antwoorden

Module 3: Scratch programmeren: is het logisch of is het niet logisch?

Zelftest Programmeren in COBOL - deel I

Programmeermethoden NA. Week 3: Controlestructuren

[13] Rondjes draaien (loops)

Disclaimer Het bestand dat voor u ligt, is nog in ontwikkeling. Op verzoek is deze versie digitaal gedeeld. Wij willen de lezer er dan ook op wijzen

Faculteit Economie en Bedrijfskunde

Uitleg: In de bovenstaande oefening zie je in het eerste blokje een LEES en een SCHRIJF opdracht. Dit is nog lesstof uit het tweede trimester.

II. ZELFGEDEFINIEERDE FUNCTIES

Lab Webdesign: Javascript 3 maart 2008

Thinking of Development

7 Omzetten van Recursieve naar Iteratieve Algoritmen

BLOK 3 HOOFDSTUK 8 PARAGRAAF 2

Logica voor Informatica

OPDRACHT Opdracht 2.1 Beschrijf in eigen woorden wat het bovenstaande PSD doet.

Werkbladen voor Arduino workshop 1

VBA voor Doe het Zelvers Deel 7

Een topprogrammeur in het OO programmeren is Graig Larman. Hij bedacht de volgende zin:

Metro Simulatie. 1 Samenvatting. 2 Context

Java Les 3 Theorie Herhaal structuren

PROS1E1 Gestructureerd programmeren in C Dd/Kf/Bd

Tentamen Objectgeorienteerd Programmeren TI februari Afdeling ST Faculteit EWI TU Delft

Gelijktijdigheid: Wederzijdse Uitsluiting & Synchronisatie Concurrency: Mutual Exclusion & Synchonization (5e ed: , Appendix A.

SEQUENTIE-STRUCTUUR. Oefening: Dichtheid

11. Eenvoudige programma s schrijven in Maxima

Als een PSD selecties bevat, deelt de lijn van het programma zich op met de verschillende antwoorden op het vraagstuk.

Arduino Workshop 1 Zuid-Limburg

Vakgroep CW KAHO Sint-Lieven

Inhoud leereenheid 4. Inleiding JavaScript. Introductie 99. Leerkern 100. Zelftoets 108. Terugkoppeling 109

Universiteit van Amsterdam FNWI. Voorbeeld van tussentoets Inleiding programmeren

Een spoedcursus python

Tentamen Object Georiënteerd Programmeren TI januari 2013, Afdeling SCT, Faculteit EWI, TU Delft

Syntax- (compile), runtime- en logische fouten Binaire operatoren

BEGINNER JAVA Inhoudsopgave

Bij elkaar behorende instructies die een probleem oplossen of een taak uitvoeren.

Tentamen Programmeren in C (EE1400)

Inleiding programmeren

Ontwerp van Informatiesystemen

Zelftest Programmeren in PL/I

Programmeren en Wetenschappelijk Rekenen in Python. Wi1205AE I.A.M. Goddijn, Faculteit EWI 22 april 2014

Getallensystemen, verzamelingen en relaties

Stel dat u 15 tellers nodig heeft. Dat kunt u een array van tellers als volgt declareren:

Arrays. Complexe datastructuren. Waarom arrays. Geen stijlvol programma:

Uitwerking Aanvullend tentamen Imperatief programmeren Woensdag 24 december 2014, uur

Hoofdstuk 6: Zelf functies maken

Transcriptie:

Programmeren Blok A Trilogie van (programmeer)talen http://www.win.tue.nl/ wstomv/edu/ip0/ College Syntaxis (vormleer): Hoe ziet t eruit, hoe schrijf je t? Tom Verhoeff Technische Universiteit Eindhoven Faculteit Wiskunde en Informatica Software Engineering & Technology Semantiek (betekenisleer): Wat betekent t, hoe werkt t? Pragmatiek (gebuiksleer): Hoe gebruik je t in de praktijk? conventies, methodes, technieken pmerkingen aan T.Verhoeff@TUE.NL c 008, T. Verhoeff @ TUE.NL 1 Programmeren Blok A: College c 008, T. Verhoeff @ TUE.NL Programmeren Blok A: College Trilogie-voorbeeld: Verkeerslichten Pascal: Structuur van programma Syntax (verschijningsvormen): o o o o o auto voetganger trein bus Semantiek (bevelen): Stop, Pas op, Ga,... Pragmatiek (gewoontes): door rood rijden,... program prognaam ; { auteur, toelichting } lijst definities { const, type } var { toestandsruimte } varnaam : type ; { toelichting }... begin { toestandsveranderingen } end. lijst opdrachten { aaneengeregen met ; } c 008, T. Verhoeff @ TUE.NL Programmeren Blok A: College c 008, T. Verhoeff @ TUE.NL Programmeren Blok A: College

Pascal: pdrachten perationele betekenis toekenning: var := formule if Condition then Body if Condition then Body1 else Body while Condition do Body repeat Body until Condition invoer: readln ( var ) uitvoer: writeln ( formule ) Condition False Condition False Condition False Body selectie: if conditie then opdracht else opdracht True True True herhaling: while conditie do opdracht {0 of meer keer} Body Body1 Body Body Condition False True samenstelling: begin lijst opdrachten end c 008, T. Verhoeff @ TUE.NL Programmeren Blok A: College c 008, T. Verhoeff @ TUE.NL Programmeren Blok A: College Meer Pascal Nog meer Pascal Array-type: array [ indextype ] of type Constante benoemen: const constnaam = constexpr ; array-element: arrayvarnaam [ indexformule ] Nieuw type construeren Interval-type: constexpr.. constexpr Type benoemen: type typenaam = type ; Vooraf bepaald aantal keer herhalen: for varnaam := formule to formule do opdracht for varnaam := formule downto formule do opdracht Eén of meer keer herhalen: repeat lijst opdrachten until conditie c 008, T. Verhoeff @ TUE.NL Programmeren Blok A: College c 008, T. Verhoeff @ TUE.NL 8 Programmeren Blok A: College

Nesten 1-dimensionale arrays Array-type: array [ indextype ] of type array-element: arrayvarnaam [ indexformule ] Geneste haakjes: ( (... )... (... ) ) var a: array [ 0.. 9 ] of Integer; Geneste lussen: while B do begin... ; while C do S ;... end a [ 0 ], a [ 1 ],..., a [ 9 ] Kortschrift voor declaratie van 10 Integer variabelen a[i] c 008, T. Verhoeff @ TUE.NL 9 Programmeren Blok A: College c 008, T. Verhoeff @ TUE.NL 10 Programmeren Blok A: College 1-dimensionale arrays ingekleurd Toepassing van array bij VolleybalScore var a: array [ 0.. 9 ] of Integer ; a [ 0 ] a [ 1 ]... a [ 9 ] Inpakken versus uitpakken Vergelijk met (wiskundige) functie f en beeld f(x) bij origineel x: Voor f : D R en x D is f(x) R c 008, T. Verhoeff @ TUE.NL 11 Programmeren Blok A: College 1 type Team = 1.. ; Score = 0.. MaxInt; var score1 : Score; { score van team 1 (uitvoer) } score : Score; { score van team (uitvoer) } 8 scoort : Team; { team dat nu scoort (invoer) } 9... 10 if scoort = 1 then 11 score1 := score1 + 1 1 else {@ scoort = } 1 score := score + 1 1 var score: array [ Team ] of Score; { score[t] = score van team t (uitvoer) }... score [ scoort ] := score [ scoort ] + 1 c 008, T. Verhoeff @ TUE.NL 1 Programmeren Blok A: College

for-lus: vast aantal keer herhalen, interval doorlopen for varnaam := formule to formule do opdracht for varnaam := formule downto formule do opdracht Voorbeelden: 1 writeln ( 1 ) ; writeln ( ) ; writeln ( ) for i := 1 to do writeln ( i ) for i := n downto 1 do... i... for c := a to z do... c... c 008, T. Verhoeff @ TUE.NL 1 Programmeren Blok A: College for-lus: semantiek quiz 1 readln ( i ) ; for i := i + 1 to sqr ( i ) do writeln ( i ) ; writeln ( i ) Wat is de uitvoer bij invoer 0, 1,,? Beter: 1 readln ( a ) ; for i := a + 1 to sqr ( a ) do writeln ( i ) ; writeln ( sqr ( a ) ) c 008, T. Verhoeff @ TUE.NL 1 Programmeren Blok A: College for-lus: semantiek Hoe een keizer te kiezen for varnaam := formule to formule do opdracht for varnaam := formule downto formule do opdracht Boven- en ondergrens worden vóóraf éénmalig geëvalueerd. Zet kandidaten 0 t/m N 1 in de kring. Beginnend bij 0 valt elke e af. Laatstoverblijvende wordt keizer. Na afloop is de waarde van de stuurvariabele ongedefinieerd. De herhaalde opdracht mag de stuurvariabele niet veranderen. Verboden: for i := 1 to n do begin... i := i + 1... end 0 Geen 1 0 kei- 1 0 zer! 1 0 Geen 1 c 008, T. Verhoeff @ TUE.NL 1 Programmeren Blok A: College c 008, T. Verhoeff @ TUE.NL 1 Programmeren Blok A: College

ntwerp voor KeizerKiezer Programma voor KeizerKiezer: Definities en declaraties Houdt bij welke kandidaten in kring staan (Boolean per kandidaat). 1. Initieel alle kandidaten in kring.. Herhaaldelijk één kandidaat laten afvallen (aanwijzen en aftellen).. vergebleven kandidaat wordt keizer. 1 program KeizerKiezer; { Kies keizer uit kandidaten 0 t/m N-1. Beginnend bij kandidaat 0 valt elke e kandidaat af. } const N = 8; { aantal kandidaten } 8 type 9 Kandidaat = 0.. N - 1; { de kandidaten } 10 11 var 1 inkring: array [ Kandidaat ] of Boolean; { de kring met kandidaten } 1 { inkring[i] = "kandidaat i staat nog in de kring" } 1 rest: 1.. N; { aantal overgebleven kandidaten } 1 { rest = (# i: i in Kandidaat: inkring[i] ) } 1 aangewezen: Kandidaat; { doorloopt de kandidaten } 1 { er geldt inkring [ aangewezen ] } c 008, T. Verhoeff @ TUE.NL 1 Programmeren Blok A: College c 008, T. Verhoeff @ TUE.NL 18 Programmeren Blok A: College Programma voor KeizerKiezer: Initialisatie Programma voor KeizerKiezer: Volgende aanwijzen 1... 1 begin { 1. Initialiseer volle kring, wijs eerste kandidaat aan } ; for aangewezen := 0 to N - 1 do begin inkring [ aangewezen ] := True end { for aangewezen } 8 9 ; rest := N { alle kandidaten doen (nog) mee } 10 ; aangewezen := 0 { kandidaat 0 als eerste aangewezen } {@ lettergreep g valt op aangewezen kandidaat } repeat aangewezen := ( aangewezen + 1 ) mod N 8 10 9 until inkring [ aangewezen ] 11 {@ lettergreep g+1 valt op aangewezen kandidaat } 1 1... c 008, T. Verhoeff @ TUE.NL 19 Programmeren Blok A: College c 008, T. Verhoeff @ TUE.NL 0 Programmeren Blok A: College

Programma voor KeizerKiezer: Herhaald afvallen Programma voor KeizerKiezer: Herhaald afvallen 1 {. Dun kring uit tot een kandidaat resteert, die keizer wordt } {@ Invariant: 1e lettergreep valt op aangewezen kandidaat } ; while rest <> 1 do begin {.1. Wijs afvaller aan } repeat... until inkring [ aangewezen ] {@ e lettergreep... } ; repeat... until inkring [ aangewezen ] 8 {@ e lettergreep valt op aangewezen kandidaat } 9 10 {.. Verwijder aangewezen kandidaat uit kring } 11 ; inkring [ aangewezen ] := False 1 ; rest := rest - 1 1 1 {.. Wijs volgende kandidaat in kring aan voor 1e lettergreep } 1 ; repeat... until inkring [ aangewezen ] {@ 1e lettergreep aangewezen } 1 end { while } 1 {@ rest = 1 } 1 {. Schrijf het antwoord } ; writeln ( Kandidaat, aangewezen, wordt keizer ) end. c 008, T. Verhoeff @ TUE.NL 1 Programmeren Blok A: College c 008, T. Verhoeff @ TUE.NL Programmeren Blok A: College Programma voor KeizerKiezer: Aantal kandidaten inlezen Programma voor KeizerKiezer: Alternatief ontwerp 1 program KeizerKiezer; {... } const MaxN = 10000; { maximale aantal kandidaten, >= 1 } type 8 Kandidaat = 0.. MaxN - 1; { de kandidaten, eigenlijk 0.. N - 1 } 9 10 var 11 N: 1.. MaxN; { aantal kandidaten (invoer) } 1 inkring: array [ Kandidaat ] of Boolean; { wie er nog meedoen } 1 rest: 1.. MaxN; { aantal overgebleven kandidaten } 1 aangewezen: Kandidaat; { doorloopt kring } 1 1 begin 1... 18 readln ( N ) c 008, T. Verhoeff @ TUE.NL Programmeren Blok A: College 1 var inkring: array [ Kandidaat ] of Boolean; { wie er nog meedoen }... repeat aangewezen := ( aangewezen + 1 ) mod N until inkring [ aangewezen ] veranderen in 1 var opvolger: array [ Kandidaat ] of Kandidaat; { voor alle i: 0 <= i < NKandidaten: opvolger[i] = "opvolger van i in de kring" }... aangewezen := opvolger [ aangewezen ] c 008, T. Verhoeff @ TUE.NL Programmeren Blok A: College

Codeerstandaard Practium week Hoe schrijf je een programma op? Beperkingen zorgen voor leesbaarheid uniformiteit minder fouten Letters turven Keizer kiezer met opvolger array Simulatie van dobbelspel nze codeerstandaard: doorsnede van aantal codeerstandaarden c 008, T. Verhoeff @ TUE.NL Programmeren Blok A: College c 008, T. Verhoeff @ TUE.NL Programmeren Blok A: College Letters Turven: aanhef en definities Letters Turven: variabelen en initialisatie 1 program LettersTurvenrig; { Tom Verhoeff, TU/e, 8 september 008 } { Lees 0 letters (uit a t/m z ) van een regel, zonder spaties ertussen. Bepaal het aantal voorkomens van elke letter. Schrijf een tabel met per letter van a t/m z een regel, waarop de letter en het aantal voorkomens ervan. } 8 { (c) 1981, Tom Verhoeff, TUE. Version 1.0 } 9 10 const 11 MinLetter = a ; { eerste te tellen letter } 1 MaxLetter = z ; { laatste te tellen letter } 1 Aantal = 0; { aantal letters in invoer } 1 1 type 1 Letter = MinLetter.. MaxLetter; { te tellen letters } 18 var 19 a: Letter; { om de te tellen letters te doorlopen of in te lezen } 0 i: 1.. Aantal; { om de letters af te tellen bij het inlezen } 1 freq: array [ Letter ] of Cardinal; { frequentietelling van letters } { freq [ a ] = aantal voorkomens van letter a } begin { 1. Initialiseer de tellingen op nul } for a := MinLetter to MaxLetter do begin 8 freq [ a ] := 0 9 end { for a } 0 1 {@ freq [ a ] = 0, voor a in Letter } c 008, T. Verhoeff @ TUE.NL Programmeren Blok A: College c 008, T. Verhoeff @ TUE.NL 8 Programmeren Blok A: College

Letters Turven: frequenties tellen en afdrukken Groter programma aan de praat krijgen {. Lees de letters en tel hun voorkomens } ; for i := 1 to Aantal do begin read ( a ) ; freq [ a ] := freq [ a ] + 1 8 end { while } 9 0 ; readln 1 {@ freq [ a ] = aantal keer dat a gelezen is } {. Schrijf de tabel } ; writeln ( Ltr # ) ; writeln ( --- -- ) ; for a := MinLetter to MaxLetter do begin 8 writeln (, a,,, freq [ a ] ) 9 end { for a } 1 {@ freq is geschreven als tabel } c 008, T. Verhoeff @ TUE.NL 9 Programmeren Blok A: College In stapjes opbouwen. Telkens code nalezen en testen. Letters Turven: 1. Eerst alleen stappen 1 (initialisatie) en (afdrukken).. Dan pas stap (tellen) tussenvoegen. c 008, T. Verhoeff @ TUE.NL 0 Programmeren Blok A: College Dobbelsimulatie Huiswerkopgaven 1. In Dobbelronde, de invoer vervangen door Random gegenereerde waarden. Druk daarbij (tijdelijk) de worpwaarden af.. Een for-lus eromheen plaatsen, om een ingelezen aantal ronden te simuleren. Achterstand wegwerken. Variabele voor frequentietelling toevoegen, initialiseren, en na forlus afdrukken. Zie FAQ op studeerwijzer.. In de for-lus de frequentie voor de winnaar bijwerken.. Het afdrukken van de worpwaarden verwijderen. c 008, T. Verhoeff @ TUE.NL 1 Programmeren Blok A: College c 008, T. Verhoeff @ TUE.NL Programmeren Blok A: College