PROGRAMMEREN IN CURSUS VOOR NATUUR- EN STERRENKUNDESTUDENTEN 1998/ 99 MAURITS WIJZENBEEK. 11 december 2003

Maat: px
Weergave met pagina beginnen:

Download "PROGRAMMEREN IN CURSUS VOOR NATUUR- EN STERRENKUNDESTUDENTEN 1998/ 99 MAURITS WIJZENBEEK. 11 december 2003"

Transcriptie

1 PROGRAMMEREN IN C CURSUS VOOR NATUUR- EN STERRENKUNDESTUDENTEN 1998/ 99 MAURITS WIJZENBEEK 11 december 2003

2 ii

3 Inhoudsopgave 1 Inleiding en opzet cursus. 1 2 De computer Digitale en analoge elektronica Opbouw computer Het geheugen De computerbus De processor Randapparatuur De stack Subprogramma s of functies Getallen en variabelen Meer over reals Hexadecimale weergave van bitpatronen 9 3 Programmeren Programmeermethodes en -talen De programmeercyclus Manieren van programmeren Hogere programmeertalen De programmeertaal C Werken met een editor Programmeren in C Variabelen Lussen De for-lus De while- en de do-lus Voorwaarden, if... else... ; Eenvoudige invoer Array s Karakterarray s en strings Pointers Pointers en array s Types van pointers De NULL-pointer Functies Functieresultaten en pointers Grafieken en andere plaatjes 32 5 In- en uitvoer Streams 35 iii

4 iv INHOUDSOPGAVE 5.2 Soorten in- en uitvoer Karakter I/O Geformatteerde in- en uitvoer Format strings Directe in- en uitvoer met streams 39 6 Meer over C Assignatie-operator Typeconversies en casts Numerieke waarden Lussen: break en continue Modifiers Switches Enums Structs Typedefs Pointers naar functies Numeriek integreren void pointers en vrij geheugen Bitfields Argumenten bij de aanroep 51 7 Achtergronden De werking van de C-compiler Preprocessor Compiler Linker of loader Meer over de preprocessor Geheugengebruik Goed programmeren Wat is een goed programma? Inspringen bij een nieuw blok Goed gebruik van variabelen Information hiding Commentaar Bereik en precisie van variabelen Operaties op integers De precisie van real s Rekentijd Het volume van een 8 dimensionale hyperbol 59 8 Numerieke natuurkunde Inleiding Voorbeeld: een kaatsende bal Een leeglopend vat Inwendig magneetveld Warmtegeleiding in een staaf Wet van Snellius 64 A Syntax 67 A.1 Identifiers 67

5 INHOUDSOPGAVE v A.2 Operatoren 67 A.2.1 Rekenkundige operatoren 67 A.2.2 Vergelijkingsoperatoren 67 A.2.3 Toekenningsoperatoren 67 A.2.4 Logische operatoren 68 A.2.5 Bitgewijze operatoren 68 A.2.6 Unaire operatoren 68 A.2.7 Ternaire operator 68 A.3 Prioriteiten van operatoren 68 A.4 Bitfields 69 B In- en uitvoer 71 B.1 I/O naar het scherm en van het toetsenbord 71 B.2 I/O naar bestanden 71 B.3 Data types and format specifiers 71 C Tips en veel voorkomende fouten 73 C.1 Includefile vergeten 73 C.2 Geen prototype 73 C.3 Namen in #define s niet met hoofdletters 73 C.4 Niet geinitialiseerde pointers 73 C.5 Stack overflow 74 D Bibliotheekfuncties 75 D.1 In- en uitvoer (stdio.h) 75 D.1.1 Bestanden openen en sluiten 75 D.1.2 Tekst in- uitvoer 75 D.1.3 In- en uitvoer van tekens enz. 76 D.1.4 Binaire in- en uitvoer 76 D.1.5 Positionering in een file 76 D.1.6 Foutafhandeling 76 D.2 ctype.h 76 D.3 String- en geheugen-functies, string.h 77 D.3.1 String-functies 77 D.3.2 Beheer geheugen 77 D.4 math.h 77 D.5 stdlib.h 78 D.6 Andere functies 78 D.6.1 assert.h 78 D.6.2 setjmp.h 79 D.6.3 signal.h 79 D.6.4 limits.h 79 D.6.5 float.h 79 D.6.6 time.h 79 D.6.7 stdarg.h 79 E De GNU C-compiler 81 F Het hulpprogramma make 83 G Het volume van een hyperbol 85 H Gplot 87 H.1 Use of the GPLOT package 88

6 vi INHOUDSOPGAVE H.2 Functions. 88 H.2.1 Preparation of the plot 88 H.2.2 Plot functions 88 H.2.3 Show plot on screen. 89 H.3 gplot.h 90

7 Hoofdstuk 1 CE QUI PRODUIT L ENTHOUSIASME POUR L ORDINATEUR, CE N EST PAS SON UTILITE, EFFECTIVE, MAIS LE FAIT QU IL DONNE A N IMPORTE QUI L ILLUSION D ETRE INTELLIGENT. Jacques ELLUL. Inleiding en opzet cursus. Computers spelen een belangrijke rol bij onderwijs en onderzoek en het werken met computers en programmeren kan in onze opleiding dan ook niet worden overgeslagen. Deze cursus begint met een korte inleiding in de werking van computers. Daarna zal de programmeertaal C behandeld worden. Na een inleidend college volgen praktica (één middag in de week). De gemaakte opgaven moeten worden ingeleverd en worden nagekeken en besproken. Iedere bijeenkomst begint met een bespreking van de te maken opdrachten en ook kunnen dan algemene vragen worden gesteld. Het is belangrijk hierbij aanwezig te zijn. Halverwege het trimester is er een schriftelijke toets die meetelt voor het eindcijfer. Bij de beoordeling zullen zowel de ingeleverde programma s als de schriltelijke toets worden meegerekend. De cursus is opgezet voor de algehele beginner op computergebied. Om deze doelgroep niet af te schrikken en hen geen definitief minderwaardigheidscomplex te bezorgen verzoek ik aan de op dit gebied meer ervaren studenten om hun superioriteit niet teveel te laten blijken en om zich te beperken in het gebruik van jargon. Deze syllabus is bedoeld als leerboek en is minder geschikt als naslagwerk. Ook kan de programmeertaal C hier niet tot in alle details behandeld worden. Ik raad daarom aan een goed boek te kopen 1. praktica schriftelijke toets voorkennis boek Een probleem bij het schrijven van een nederlandstalige tekst over computers is het jargon. Het gebruik van de Engelse termen heeft als voordeel dat de lezer de internationale terminologie leert kennen en dat het gebruik van geforceerde vertalingen vermeden wordt. Er bestaan echter voor veel begrippen voortreffelijke Nederlandse woorden en er dan ook is geen reden deze niet te gebruiken. In deze syllabus heb ik getracht een middenweg te bewandelen. 1. B.v. Al Kelly en Ira Pohl, A BOOK ON C (Addison Wesley, ISBN: ). 1

8 2 HOOFDSTUK 1. INLEIDING EN OPZET CURSUS.

9 Hoofdstuk 2 De computer 2.1 Digitale en analoge elektronica De elektronische signalen in b.v. audioapparatuur zijn spanningen of stromen waarvan de grootte de waarde van het signaal vertegenwoordigd. Bij computers is dit anders: een signaal kan daar slechts twee waarden hebben: een lage of een hoge spanning, wèl of geen stroom, enz. Een dergelijke eenheid van informatie noemt men een bit. Een bit kan ook een getalwaarde hebben: een hoge spanning kan men b.v. 1 noemen en een lage spanning 0, of andersom. Een signaal met maar twee mogelijkheden kan maar weinig informatie bevatten. Daarom wordt gebruik gemaakt van meer bits parallel. Met acht bits kunnen b.v. 256 (2 8 ) verschillende combinaties van nullen en enen gemaakt worden die gebruikt kunnen worden om de getallen 0 t/m 255 weer te geven: = 0 kleinste getal grootste getal byte Een groepje van acht bits wordt een byte genoemd. bit 2.2 Opbouw computer Een computer bestaat uit de volgende onderdelen (zie figuur 2.1): Het geheugen Het computergeheugen bestaat uit bytes waar een patroon van nullen en enen in kan worden bewaard. De plaatsen in het geheugen zijn genummerd, de z.g. adressen. Met deze adressen wordt bepaald op welke plaats in het geheugen het bitpatroon wordt opgeborgen. Deze adressen zijn zelf natuurlijk ook bitpatronen en hebben een getalwaarde. adres 3

10 4 HOOFDSTUK 2. DE COMPUTER Toetsenbord Monitor Harde schjf Diskette drive Geheugen Bus Processor Figuur 2.1: Opbouw computer. megabyte De grootte van het geheugen, d.w.z. het aantal bytes dat in het geheugen kan worden opgeborgen, wordt weergegeven in kilobyte (Kb) of megabyte (Mb). Kilo betekent hier niet 1000 maar Dit is gelijk aan 2 10 en de bytes in een geheugen van één kilobyte kunnen dus geadresseerd worden met een tienbits adres. Het maximaal beschikbare werkgeheugen in klassieke PC s is 640 Kb, wat gelijk is aan bytes. Eén megabyte is gelijk aan (2 20 ) bytes. kilobyte ASCII code data De bitpatronen die in het geheugen worden opgeslagen kunnen van alles betekenen. Een paar voorbeelden: Getallen. Belangrijk zijn positieve gehele getallen, gehele getallen die ook negatief kunnen zijn en getallen met een komma. Deze worden alle verderop besproken. Letters en cijfers: Hiervoor wordt de ASCII code (American Standard Code for Information Interchange) gebruikt. In deze code zijn ook codes opgenomen voor spatie, tabulatie, nieuwe regel, één positie terug (backspace), de mogelijkheid om een bel te laten klinken (bell) enz. Op deze manier kan tekst in het geheugen worden opgeslagen. Opdrachten, met name opdrachten voor de computer zelf. Een programma is een verzameling van dergelijke opdrachten. Andere mogelijkheden: Allerlei gecodeerde gegevens, zoals windrichting ( is noordenwind, westenwind enz.), tekeningen, muziek enz. De opdrachten voor de computer worden vaak de code genoemd, de gegevens die verwerkt moeten worden zijn de data. Aan de in het geheugen opgeslagen bitpatronen is dus zonder meer niet te zien wat de betekenis is. Dit blijkt pas uit de manier waarop deze gebruikt worden De computerbus De bus is de bundel draden die de elementen van een computer met elkaar verbindt en is als het ware de snelweg waarlangs binnen de computer het transport plaatsvindt. Via de bus worden b.v. gegevens vanuit de processor in het

11 2.2. OPBOUW COMPUTER 5 geheugen opgeborgen of vanuit het geheugen weer naar de processor overgebracht. Er is één busmaster die het verkeer over de bus regelt. Meestal is dit een onderdeel van de processor. Deze geeft aan welk onderdeel van de computer gegevens op de datalijnen van de bus zet en welk onderdeel deze moet opnemen. busmaster De bus bestaat uit de volgende lijnen (draden), die ieder dus één bit kunnen vervoeren: Datalijnen. Het aantal datalijnen bepaalt hoeveel bits informatie per keer met de bus kan worden overgebracht. Men noemt dit de breedte van de bus. Het aantal datalijnen van de bus is meestal een veelvoud van acht. Het jargon is hier verwarrend: met data wordt hier alle informatie bedoeld die via de bus wordt uitgewisseld, dus ook de opdrachten voor de processor. Adreslijnen. De signalen op deze lijnen geven aan waar in het geheugen de data moet worden opgehaald of opgeborgen. Ook andere onderdelen van de computer die met de bus verbonden zijn hebben adressen. Stuurlijnen. Deze regelen de timing en geven aan of op het opgegeven adres een lees- of een schrijfoperatie moet worden uitgevoerd De processor De processor doet het eigenlijke werk. De opeenvolgende opdrachten voor de processor staan op opeenvolgende plaatsen in het geheugen en worden één voor één over de bus uit het geheugen opgehaald en door de processor uitgevo- programmateller erd. In de programmateller van de processor staat het adres van de plaats in het geheugen waar de eerstvolgende opdracht staat. De executiecyclus van de processor is dus: executiecyclus 1. De processor vat het getal dat in de programmateller staat op als een geheugenadres en haalt de opdracht die op deze plaats in het geheugen staat op. 2. De programmateller wordt één opgehoogd. 3. De opdracht wordt uitgevoerd. Er zijn ook processoropdrachten die een nieuwe waarde in de programmateller plaatsen. Dit heeft als resultaat dat de executie van het programma naar een andere plaats in het geheugen springt. In de opdrachten die op data werken moet aangegeven zijn waar deze gegevens zich in het geheugen bevinden. sprongen De processor bevat verder een rekeneenheid en enkele snelle hulpgeheugens, de registers. Naast de gewone registers is er ook een flag register. Ieder bit hiervan heeft een eigen betekenis. Zo is er een bit dat aangeeft of het resultaat van de laatste opdracht nul was, een bit dat aangeeft of dit resultaat negatief was, of het resultaat te groot werd (overflow of carry) optrad etc. Er zijn instructies die dit bit testen en afhankelijk van het resultaat een andere waarde in de program- mateller laden. Men noemt dit een voorwaardelijke sprong: op deze manier kan het verloop van een programma afhangen van tussenresultaten. registers flag register voorwaarde- lijke sprong

12 6 HOOFDSTUK 2. DE COMPUTER De elementaire processoropdrachten zijn zeer simpel. Voor een beginner is het moeilijk om te geloven dat met een dergelijke beperkte instructieset ooit een redelijk programma kan worden gemaakt. Er zijn opdrachten om gegevens van het geheugen naar de registers te schrijven of terug. Verder kan de inhoud van twee registers worden opgeteld, afgetrokken, vermenigvuldigd of gedeeld. Ook kan het bitpatroon van een register naar links of naar rechts worden verschoven en kunnen bepaalde bits van een register 0 of 1 worden gemaakt. Ook zijn er opdrachten om een nieuwe adres in de programmateller te zetten, zodat het programma op een andere plaats in het geheugen verder gaat. instructieset Randapparatuur I/O interface of controller harde schijf diskette driver De randapparatuur dient voor in- en uitvoer (input/output, I/O in jargon) en voor opslag van gegevens. Omdat in een computer alle datatransport via de bus gaat is ook alle randapparatuur hierop aangesloten. Het onderdeel dat aan de ene kant op de computerbus is aangesloten en dat aan de andere kant een randapparaat aanstuurt heet een interface of een controller. Het meest opvallend zijn het toetsenbord en het beeldscherm. Deze werken onafhankelijk van elkaar: de software moet er voor zorgen dat een aangeslagen toets op het beeldscherm zichtbaar wordt. Het werkgeheugen van de computer werkt elektronisch zodat alle informatie bij het uitschakelen verloren gaat. Voor permanente opslag van data en programma s worden daarom harde schijven en diskettes gebruikt. Deze hebben een magnetische opslagmethode. Ze zijn gemonteerd in z.g. drives. Op de schijven worden de gegevens niet per byte geadresseerd maar per blok: een vast aantal bytes wordt in één keer door de diskcontroller zelf van het geheugen naar een blok op de schijf geschreven of terug. Een sterk punt van computers is dat een grote verscheidenheid van randapparatuur te krijgen is: geluidskaarten, muizen, modems, printers enz. Dit maakt het mogelijk om computers direct aan een meetopstelling te koppelen en zo te gebruiken voor de sturing van de opstelling en het registreren van de meetresultaten. Het stuk programma dat de aansturing van randapparatuur verzorgt wordt een driver genoemd. Zo spreekt men van een printerdriver, een keyboarddriver, enz De stack push pop stackpointer Een deel van het geheugen is gereserveerd voor de stack. Men kan zich deze voorstellen als een stapel briefjes voor zaken die onthouden moeten worden: één gegeven per papiertje. Het is alleen mogelijk om iets op een nieuw briefje te schrijven en het bovenop te leggen (push in jargon) of om het bovenste papiertje er af te halen en het te lezen (pop). Een speciaal register van de processor, de stackpointer, bevat het adres van de eerstvolgende lege plaats. Men zegt dat stackpointer naar deze plaats wijst. Bij

13 2.3. SUBPROGRAMMA S OF FUNCTIES 7 een push wordt de op de bergen waarde op dit adres geschreven en wordt vervolgens de stackpointer één opgehoogd. Bij een pop gebeurt het omgekeerde. Een aantal belangrijke machineinstructies maakt gebruik van de stack. Dit zal verderop besproken worden. 2.3 Subprogramma s of functies Het komt vaak voor dat een groep opdrachten binnen een programma vaak moet worden uitgevoerd of een aparte taak heeft. Het is dan handig dit stuk programma afzonderlijk te programmeren om herhalingen te voorkomen en om de complexiteit van het programma laag te houden. In C gebeurt dit door de opdrachten onder te brengen in een functie. In het programma staat dan een machineinstructie die de uitvoering van het programma naar het begin van de functie laat springen. Het returnadres wordt op de stack bewaard. De laatste machineopdracht van de functie laadt de waarde op de top van de stack weer in de programmateller, zodat het programma weer op de oude plaats doorgaan. returnadres Grote programma s bestaan bijna helemaal uit functies. Het hoofdprogramma bestaat dan slechts uit een serie functieaanroepen. Door deze opbouw behandelt iedere functie een deelprobleem, wat het ook mogelijk maakt met verscheidene mensen aan één programma te werken. LET OP: met functies wordt in C iets héél anders bedoeld dan in de wiskunde! 2.4 Getallen en variabelen Omdat bij numerieke natuurkunde getallen een belangrijke rol spelen volgen hier enkele korte opmerkingen over de manier waarop deze in een bitpatroon worden weergegeven. Omdat de elektronica van de computer digitaal werkt en alle signalen slechts twee waarden kennen wordt meestal gebruik gemaakt van het tweetallig stelsel. Gehele getallen zonder teken (unsigned integers) Met een rij van n bits kunnen 2 n verschillende bitpatronen gemaakt worden, ofwel 2 n verschillende gehele getallen worden weergegeven. Als de getallen alleen positieve waarden hoeven te hebben kunnen zo de waarden n 1 worden gemaakt. Men noemt deze unsigned integers. Een 8-bits unsigned integer heeft zo als kleinste waarde = 0 en als grootste = noemt men het bereik. Gehele getallen mèt teken (signed integers) Dit is een notatie waarmee, door de bitpatronen een andere betekenis te geven, ook negatieve getallen kunnen worden gemaakt. Met acht bits wordt het bereik :

14 8 HOOFDSTUK 2. DE COMPUTER reals floats = 128 kleinste getal grootste getal Het belangrijkste bit geeft hier aan of een getal positief of negatief is. Bij deze representaties zijn de bitopraties voor optellen en aftrekken voor getallen met en zonder teken hetzelfde, wat de processorhardware eenvoudiger maakt. Gehele getallen hebben een beperkt bereik. Voor 16-bits getallen met teken is dit en voor 32 bits Karakters Dit zijn codes voor letters, cijfers enz. In C kan er echter mee gerekend worden alsof het hele getallen zijn: als ik drie optel bij de code voor a krijg ik de code voor d. Een karakter heeft acht bits. Getallen met komma (floating point getallen of reals) Getallen die te groot zijn om als geheel getal te worden opgeslagen of getallen met cijfers achter de komma worden opgeslagen in een vorm die meestal real maar in C float genoemd wordt. Een getal wordt daarin weergegeven als een tekenbit en twee integers, de mantisse en de exponent. Het getal -123,456 wordt bijvoorbeeld geschreven als Het eerste getal heet de mantisse, het tweede de exponent. In dit voor- beeld zijn deze getallen in het tientallig stelsel. Computers werken binair; intern wordt daarom het tweetallig stelsel gebruikt. mantisse exponent tekenbit en opgeslagen als ( ) (123456) ( 3) Meer over reals In de praktijk gebruikt men (teken) 2 exponent mantisse 2 n waarbij teken één bit is (plus of min), de exponent een signed integer en de mantisse een unsigned integer. n is het aantal bits van de mantisse, zodat mantisse 2 n altijd kleiner is dan één. Reals worden dus opgeslagen als een combinatie van een enkel bit dat het teken aangeeft en twee gehele getallen: (tekenbit) (exponent) (mantisse) Deze representatie is niet eenduidig: een getal houdt dezelfde waarde als het bitpatroon van de mantisse naar rechts wordt geschoven (delen) en de exponent

15 2.4. GETALLEN EN VARIABELEN 9 wordt opgehoogd (vermenigvuldigen), natuurlijk onder de voorwaarde dat er bij de mantisse rechts alleen nullen uitschuiven. Het is daarom altijd mogelijk om het belangrijkste bit van de mantisse 1 te maken door exponent en mantisse aan te passen. Er is dan een bit precisie te winnen door dit bit weg te laten. Deze representatie is wèl eenduidig en heet genormaliseerd. Een probleem is dat genormaliseerde reals de waarde 0 niet kennen. Dit is opgelost door het kleinste positieve getal per definitie de waarde 0 te geven. De grootste positieve waarde die een real kan weergeven heet het bereik en de kleinste waarde waarmee een getal kan worden opgehoogd gedeeld door de waarde is de precisie. Een voorbeeld: Een real heeft vier cijfers voor de mantisse en twee voor de exponent. Het bereik is dan en de precisie is Het bereik van reals wordt dus bepaald door het aantal bits van de exponent en de precisie door het aantal bits van de mantisse. Deze twee begrippen zijn belangrijk bij rekenwerk. Terwijl integers altijd exact de waarde hebben die ze moeten weergeven is dit bij reals niet altijd mogelijk, omdat vaak moet worden afgerond. Hiermee moet bij het programmeren rekening worden gehouden, b.v. door niet aan te nemen dat twee reals, die dezelfde waarde zouden moeten hebben maar op verschillende manier zijn berekend, exact gelijk zijn. sin 45 hoeft dus niet exact gelijk te zijn aan 1/ 2! normalisatie bereik precisie Hexadecimale weergave van bitpatronen Voor mensen is het niet handig om bitpatronen op papier of op het beeld- binair scherm weer te geven in reeksen nullen en enen (binair). De menselijke brein is niet geschikt deze te overzien of te onthouden. Een normale decimale (10- tallige) weergave heeft als bezwaar dat het bijbehorende bitpatroon moeilijk is decimaal te doorzien. Als niet de getalwaarde maar het bitpatroon belangrijk is wordt daarom vaak gekozen voor een hexadecimale (zestientallig) notatie. Het bitpa- hexadecimaal troon word daarvoor van achteren af opgedeeld in blokken van vier bits. Met de vier bits in een blok kunnen 2 4 verschillende bitpatronen gemaakt worden ofwel de getallen De getalwaarden van deze blokken worden achter elkaar opgeschreven. De cijfers tien t/m vijftien worden geschreven als a t/m f. Een bitpatroon dat in de computer is opgeslagen als wordt dus opgedeeld in en als 3d2a5 geschreven. In C wordt een hexadecimale notatie aangegeven door voor het getal 0x te zetten. Omdat het om bitpatronen gaat en niet om getalwaarden is een negatieve hexadecimale representatie zinloos.

16 10 HOOFDSTUK 2. DE COMPUTER

17 Zovele talen iemand spreekt, Zovele malen is hij een mens. Karel V Hoofdstuk 3 Programmeren Hoewel het de vraag is of bovenstaande uitspraak ook voor programmeertalen geldt is toch het leren programmeren een onderdeel van iedere opleiding tot natuur- of sterrenkundige. De tijd dat iedere computergebruiker zijn eigen programma s moest maken is al lang voorbij. Tegenwoordig staan kant en klare programma s en programmapakketten ter beschikking zoals WordPerfect of Math- Cad. Zelfgemaakte programma s hebben echter het voordeel dat ze beter zijn aangepast aan het probleem en vaak sneller zijn. Commerciële programma s moeten geschikt zijn voor iedereen; dit maakt ze ingewikkeld en traag, als ze al te gebruiken zijn voor net dat ene probleem waar een oplossing voor gevonden moet worden. Het nadeel van zelf programmeren is dat het veel tijd kost. Voor kleine programma s van een paar bladzijden valt dit wel mee, maar voor een middelgroot programma moet toch al gauw drie maanden tot een half jaar worden uitgetrokken. Het loont dan ook de moeite om zo veel mogelijk gebruik te maken van het programmeerwerk van anderen en programmatheken te gebruiken voor bijvoorbeeld rekenwerk of grafische weergave. Ook dit zal in deze cursus ter sprake komen. 3.1 Programmeermethodes en -talen. Programmeren wordt geleerd door het te doen en veel fouten te maken. Dit laatste is geen probleem, zodat iedereen het kan leren. Het doel is om een reeks processoropdrachten te maken die, nadat ze in het geheugen geladen zijn, automatisch achter elkaar door de processor worden uitgevoerd en het gewenste resultaat leveren De programmeercyclus Een programma wordt meestal gemaakt in tekstvorm. Dit gebeurt met een programma dat editor genoemd wordt. De nieuw in te typen of te veranderen tekst staat bij het editten (wie weet een beter Nederlands woord?) in het geheugen. Als de tekst klaar is wordt deze naar een file op de schijf weggeschreven. De als tekst geschreven opdrachten worden met een vertaalprogramma omgezet naar editor 11

18 12 HOOFDSTUK 3. PROGRAMMEREN programmeercyclus machinecode en deze weer als file op de schijf opgeborgen. Hoopvol probeert de programmeur vervolgens of het programma loopt. Meestal zitten er echter nog fouten in, zodat, na enig nadenken, de programmatekst met de editor veranderd wordt, opnieuw wordt vertaald enz. Deze cyclus van editten... vertalen... testen... editten... heet de programmeercyclus Manieren van programmeren. compiler Het schrijven van een programma kan op verschillende manieren: Machinecode. De programmeur schrijft direct de instructies voor de processor. Deze manier van programmeren gebeurt alleen bij hoge uitzondering. Het is lastig en tijdrovend, niet alleen omdat iedere vergissing fataal is, maar ook omdat, als ergens een paar instructies worden tussengevoegd en de rest van de code opschuift, alle adressen die verderop staan niet meer kloppen en de verwijzingen daarnaar moeten worden bijgewerkt. Assembler. Assembler is de programmeertaal die geheel aan de processor is aangepast: iedere processor heeft zijn eigen assembler. Eén opdracht in assembler komt overeen met één opdracht in machinecode. De in assembler geschreven programmatekst wordt door een vertaalprogramma, verwarrenderwijs ook assembler geheten, vertaald in machinecode. De instructies hebben namen wat het programma voor mensen beter leesbaar maakt. Ook plaatsen in het geheugen worden met een naam (identifier) aangegeven. De assembler (het vertaalprogramma) beslist welk adres hierbij hoort. Het voordeel van assembler is dat de programmeur alles in de hand heeft en geheel vrij is om van alle mogelijkheden van de computer gebruik te maken. Een nadeel is dat hij niet alleen alles kán doen, maar ook alles zelf móet doen. Het schrijven van grote programma s in assembler is dan ook extreem tijdrovend. Interpreters. Hierbij wordt de programmatekst niet vertaald, maar opdracht na opdracht ingelezen door een interpreter-programma en uitgevoerd. BA- SIC is het meest bekende voorbeeld. Het programmeren is in dergelijke talen vaak gemakkelijk, maar de executiesnelheid kan traag zijn. Hogere talen. Ook bij hogere talen wordt tekst vertaald in machinecode, maar hier wordt één opdracht (statement) vertaald naar méér machineopdrachten. Het vertaalprogramma wordt hier compiler genoemd en het vertalen van de programmatekst (de source) naar machinecode heet compileren Hogere programmeertalen Een hogere programmeertaal is goed omschreven, wat maakt dat de programmeur bij een vergissing direct op zijn vingers wordt getikt. Voor beginners is dat hinderlijk, maar later leert men het waarderen omdat het domme fouten voorkomt. Ook hebben alle hogere talen voorzieningen om programma s in delen te schrijven, ev. door verschillende programmeurs, en die later samen te voegen. Zo zijn er bibliotheken met kant en klare programmadelen beschikbaar die een gebruiker in zijn programma kan invoegen.

19 3.1. PROGRAMMEERMETHODES EN -TALEN. 13 Voor alle hogere talen geldt een internationale standaard die het mogelijk zou moeten maken dat programma s die in deze talen geschreven zijn zonder aanpassingen gedraaid kunnen worden op alle computers waarvoor een compiler beschikbaar is. In de praktijk valt dit tegen, o.m. omdat veel compilers, naast de standaard, nog een paar handige extra s hebben en veel programmeurs de verleiding niet kunnen weerstaan om deze te gebruiken. Ook is b.v. de grootte van de integers (b.v. 16, 32 of 64 bits) en het bereik van reals machineafhankelijk, zodat een programma op een andere machine niet zonder meer dezelfde resultaten hoeft te geven. Een aantal hogere talen wordt intensief gebruikt. Discussies over welke programmeertaal de beste is hebben vaak een emotioneel verloop, waarschijnlijk omdat iedereen toch het liefst wil blijven werken in de taal die hem vertrouwd is. In principe kan in iedere programmeertaal alles worden geprogrammeerd en de verschillen lijken op het eerste gezicht vaak onbelangrijk. Toch kunnen kleine verschillen maken dat het in de praktijk met de ene taal veel prettiger werken is dan met de andere. Vaak hoort men dat een taal efficiënter zou zijn. Nu zijn er twee soorten efficiëntie: efficiëntie in programmaexecutie en efficiëntie bij het programmeren. In het verleden waren computers en rekentijd duur, computers traag en het geheugen in de computers beperkt. Goed programmeren hield toen in dat programma s snel waren en weinig geheugen nodig hadden. De tijden zijn echter veranderd. Computers zijn nu snel en goedkoop en het beschikbare geheugen is minder snel een beperking. Het is nu de tijd van de programmeur die duur is: hoe minder tijd aan het programmeren en het latere onderhoud hoeft te worden besteed hoe beter, ook al loopt het programma wat langzamer en heeft het meer geheugen nodig. De executiesnelheid hangt bovendien niet alleen van de taal af, maar ook van de compiler. TurboPascal b.v. is een compiler die prettig snel compileert, ook door weinig tijd te besteden aan optimalisatie. Een met de Microsoft-C compiler gecompileerd C programma loopt twee maal zo snel. Dit zegt echter meer over deze compilers dan over C en Pascal. taalkeuze efficiëntie executiesnelheid De talen die door natuur- en sterrenkundigen gebruikt worden zijn voornamelijk: Fortran is de oudste taal voor wetenschappelijk rekenwerk en wordt nog steeds veel gebruikt, ook omdat voor deze taal goede rekenbibliotheken beschikbaar zijn. De syntax van Fortran is echter zodanig dat bij een aantal voor de hand liggende fouten of vergissingen er toch nog correct Fortran ontstaat, zodat de programmeur bij het compileren niet gewaarschuwd wordt door een foutmelding. Het kan veel tijd kosten om deze fouten te vinden. Pascal is ontworpen als een taal om studenten netjes te leren programmeren. De mogelijkheden zijn daarom vaak hinderlijk beperkt en een aantal, misschien minder nette maar wel praktische, mogelijkheden is niet toegestaan. Dit geeft Pascal iets frikkerigs. Alle bruikbare Pascalcompilers hebben daarom extra mogelijkheden, wat de standaardisatie en daarmee de

20 14 HOOFDSTUK 3. PROGRAMMEREN overdraagbaarheid niet ten goede komt. Een bekende Pascalcompiler voor PC s is TurboPascal van de firma Borland. Deze werkt erg prettig, maar staat dan ook ver van standaard-pascal af. C is goed gedefinieerd, heeft veel mogelijkheden en is geschikt voor grote programma s. Belangrijker is echter dat deze taal veel wordt gebruikt omdat hij veel wordt gebruikt. Computerfabrikanten zorgen ervoor dat voor hun computers goede C-compilers beschikbaar zijn en programmeurs kiezen C omdat hun programma s dan op veel typen computers gebruikt kunnen worden. C is een praktische taal en laat ook constructies toe die niet mooi zijn, maar wel handig. Voor wetenschappelijk rekenwerk is C langzamerhand Fortran aan het verdringen. Een nadeel van C is dat het meer dan twintig jaar oud is en dat C daardoor slecht is aangepast aan moderne eisen. Zo zijn de voorzieningen voor het schrijven van programma s voor een windows systeem niet in de standaard opgenomen. Men moet daarbij nu gebruik maken van systeemafhankelijke eisen, wat de overdraagbaarheid tussen b.v. MS-Windows en XWindows lastig maakt. 3.2 De programmeertaal C Programma s voor wetenschappelijk onderzoek worden soms lang gebruikt en kunnen een paar generaties computers overleven. De aanpassingsproblemen die dan steeds ontstaan als een programmma weer moet worden aangepast aan een modernere computer zijn beduidend minder voor C-programma s door de goede standaardisatie en omdat, door de vele mogelijkheden van C, het gebruik van computerafhankelijke trucs niet nodig is. K&R C ANSI C C++ In 1978 verscheen het boek THE C PROGRAMMING LANGUAGE van Brian Kernighan en Dennis Ritchie. Dit boek is jarenlang de facto de standaard geweest, het z.g. K&R C, en heeft door zijn heldere uitleg ongetwijfeld bijgedragen tot de populariteit van C. In 1983 stelde het American National Standards Institute een commissie in om een C-standaard te maken waarin ook nieuwere ideeën over programmeren en programmeertalen verwerkt moesten worden. Deze is nu klaar en dit z.g. ANSI-C wordt in deze cursus behandeld. Omdat programma s die geschreven zijn in K&R C ook verwerkt moeten kunnen worden met een ANSI-C compiler zijn bepaalde verouderde constructies uit K&R C nog steeds toegestaan. Zij zullen hier niet behandeld worden. De tweede druk van THE C PROGRAMMING LANGUAGE behandeld ANSI-C. Een bezwaar van C is dat het langzamerhand aardig bejaard is en dat b.v. de benodigdheden voor het maken van programma s voor een window systeem (Xwindows, Microsoft Windows) niet in de standaard zijn opgenomen. De programmeur moet hiervoor gebruik maken van systeemafhankelijke bibliotheken. Een verdere ontwikkeling van C is het door Bjarne Stroustrup ontwikkelde C++. Deze ondersteunt z.g. object-georiënteerde programmering (wat dit is doet hier niet ter zake) en ook de in- en uitvoer is handiger. Te verwachten is dat

21 3.3. WERKEN MET EEN EDITOR. 15 C++ op den duur C zal overvleugelen, al zullen de meeste gebruikers niet alle mogelijkheden benutten. 3.3 Werken met een editor. Editors zijn er in vele soorten en iedere programmeur heeft zijn eigen voorkeur. Editors werken op platte tekst, d.w.z. op tekst die alleen de standaard ASCII karakters bevat en waarvan alle tekens op het scherm zichtbaar zijn. Dit in tegenstelling tot tekstverwerkingsprogramma s zoals WordPerfect waar, onzichtbaar tussen de leesbare tekst, aanwijzingen staan voor de gebruikte letters, de printer enz. Hoewel de editor de tekst waarmee hij werkt in regels op het scherm laat zien staat deze in werkelijkheid achter elkaar in het geheugen, gescheiden door nieuwe regel karakters. Als zo n karakter wordt weggehaald worden dus twee regels samengevoegd. Alle editors hebben dezelfde basiscommando s, hoewel de vorm waarin ze gegeven moeten worden verschilt. Daarnaast heeft iedere editor zijn eigen speciale mogelijkheden. De basiscommando s zijn (de voorbeelden gelden voor PC-editors): Een file openen. Dit kan een bestaande file zijn die veranderd moet worden of een nieuw te maken file. Een file saven. Het (tussen) resultaat wordt weer op de schijf geschreven onder de oude naam. Vaak wordt de oude versie ook op de schijf bewaard, b.v. in een file met de extensie.bak. De cursor verplaatsen. De cursor geeft aan op welke plaats de tekst veranderd wordt. Verplaatsen van de cursor geeft dus geen verandering van de tekst. Dit kan b.v. met een muis of met de pijltjes- en PageUp / PageDown -toetsen op het toetsenbord. Een karakter toevoegen. Dit kan op twee manieren: door een karakter tussen te voegen (insert), of door het karakter op de plaats van de cursor te overschrijven (overstrike of replace). Op PC s wordt dit omgeschakeld met de Insert -toets. Een karakter weghalen. Dit kan op twee manieren: óf het karakter op de plaats insert overstrike replace van de cursor wordt weggehaald met Delete óf het karakter links van delete backspace de cursor met Backspace. Als deze toetsen een paar maal worden ingedrukt verdwijnt in het eerste geval de tekst rechts van de cursor en in het tweede geval de tekst links. Een regel tekst weghalen. Zoeken en ev. veranderen. Hierbij moet eerst de tekst opgegeven worden waarnaar wordt gezocht. De cursor springt dan naar de eerstvolgende plaats in de tekst waar deze karaktercombinatie voorkomt. Ook is het mogelijk om de tekst te veranderen. Dit kan ook automatisch met één opdracht voor de hele tekst. Blokken. Een gedeelte van de tekst, een z.g. blok kan een blok worden gemarkeerd en in zijn geheel verwijderd, gekopieerd, of verplaatst.

22 16 HOOFDSTUK 3. PROGRAMMEREN Neem de tijd om een editor uit te proberen en in je vingers te krijgen. Meestal is een help aan te roepen, op PC s met F1, op UNIX met? of h en kunnen daarin de opdrachten worden gevonden.

23 C is not a big language, and is not well served by a big book. Kernighan and Ritchie Hoofdstuk 4 Programmeren in C Een gecompileerd programma bevat opdrachten voor de processor, de z.g. code en de data die moeten worden verwerkt. Deze zijn ook in het niet-vertaalde programma terug te vinden. Daarnaast staan in de programma-tekst aanwijzingen voor de compiler. Het is belangrijk om bij het schrijven van een programma goed te weten wat een opdracht moet doen en of het een opdracht is voor de compiler of is een opdracht in het uiteindelijk uit te voeren programma. code data 4.1 Variabelen Na het compileren is een variabele een plaats in het geheugen waar een gegeven wordt opgeslagen. In een programma is de definitie van een variabele is een opdracht aan de compiler om in het uiteindelijke programma een geheugenplaats te reserveren. Een variabele wordt gedefinieerd: float versnelling; Dit is een variabele van het type float, d.w.z. een variabele waarvan de waarde in de vorm van een getal met een komma is opgeslagen, en met de naam versnelling. Met de in de variabelen opgeborgen waarden kan ik m.b.v. operatoren zoals + en iets doen. De belangrijkste operator is =. Deze heeft niets te maken met het = -teken in de wiskunde, maar is de opdracht om een getal in een variabele op te bergen: versnelling = 9.81; of, nadat ik ook de variabelen plaats en tijd heb gedefinieerd en er de waarden aan heb gegeven: plaats = 0.5 versnelling tijd tijd; Het is beter om hier niet de versnelling is 9.81 te zeggen maar de versnelling wordt Het aan een variabele toekennen van een waarde wordt assignatie genoemd. Het gedeelte links van het = -teken heet de left value, het gedeelte rechts, dat een getalwaarde heeft, is een expressie. Omdat het = -teken een definitie assignatie left value expressie 17

24 18 HOOFDSTUK 4. PROGRAMMEREN IN C operator is vormt dat de hele opdracht (left value) = (expressie) ook weer een expressie, en heeft dus ook een getalwaarde. Het volgende programma rekent uit hoeveel 2 maal 3.5 is en laat het resultaat op het scherm zien. De regelnummers horen niet bij de programmatekst maar zijn toegevoegd voor de uitleg. 1 #include <stdio.h> 2 3 main() 4 { 5 float a, res; 6 a = 2; 7 res = 3.5 a; 8 printf("twee maal drie en een half is %f\n", res); 9 10 return 0; 11 } Opmerkingen: Opdrachten (statements) eindigen op ;. Regel 1 is daarop een uitzondering. Dit wordt later uitgelegd. De executie van het programma begint altijd bij main(). De in main() uit te voeren opdrachten staan tussen { en }. Regel 5: definitie van twee variabelen met namen a en res waarin een getal met een komma kan worden opgeslagen. Regel 6: berg het getal 2 op in de variabele a. Regel 7: reken uit hoeveel 3.5 maal de waarde in a is en berg het resultaat op in de variabele res. Regel 8: printf laat het de tekst tussen de dubbele aanhalingstekens (string) op het scherm zien en vervangt daarbij %f door de waarde van res. \n is het teken voor een nieuwe regel. Regel 10: wordt later behandeld. Opdracht 1. Test dit programma. constante De getallen die in het programma voorkomen, zoals b.v. 3.5 op regel 7, worden constanten genoemd. Ook constanten hebben een type: 3 is een int, een type variabele waarin gehele getallen worden opgeslagen, en 3.5 is een float. De code voor een karakter wordt aangeduid met het karakter tussen enkele quotes, b.v. int i;

25 4.2. LUSSEN 19 i = 'a'; Met deze waarden kan gewoon gerekend worden. De volgende opdracht laat de letter c op het scherm zien: printf("%c\n", 'a' + 2); Opdracht 2. Laat op het scherm de letters A, B,., nieuwe regel en spatie op het scherm zien, samen met de intergerwaarde van hun code. 4.2 Lussen De for-lus. C kent opdrachten om een deel van een programma herhaald uit te voeren. De for-lus wordt in C het meest gebruikt. 1 #include <stdio.h> 2 3 main() 4 { 5 int i, som = 0; 6 7 for (i = 2; i < 8; i = i + 1) { 8 som = som + i; 9 printf("i = %d, som = %d\n", i, som); 10 } printf("de gemiddelde waarde van de gehele" 13 " getallen 2 t/m 7 is %d / %d = %d\n", 14 som, i 2, som / (i 2)); return 0; 17 } Opmerkingen: Regel 5: Definitie van de integer variabelen i en som. som krijgt de beginwaarde 0. De beginwaarde van i is ongedefinieerd. Regel 7: Dit is een for-lus: het programmadeel tussen de accoulades, de lus, wordt een aantal malen uitgevoerd. Achter for staan, tussen de haakjes, drie opdrachten, gescheiden door puntkomma s. De eerste wordt uitgevoerd voordat het lussen begint: de variabele i krijgt de waarde 0. De middelste is een test die steeds plaatsvindt vóór de lus wordt uitgevoerd: zolang i kleiner is dan 7 gaat het lussen door. De derde opdracht wordt steeds aan het einde van iedere lus uitgevoerd: hier wordt i met één opgehoogd.

26 20 HOOFDSTUK 4. PROGRAMMEREN IN C Regel 13: In een string, tussen de dubbele aanhalingstekens, mag niet met een nieuwe regel worden begonnen. Als een string te lang wordt en van het scherm afloopt kan hij op deze manier over meer regels worden verdeeld. Let op: om bij de uitvoering van het programma een nieuwe regel te krijgen moet het nieuwe regel karakter (\n) worden gebruikt. Regel 13: De gebruikte variabelen i en som zijn integers, d.w.z. variabelen waar een geheel getal in wordt opgeborgen. Dit maakt dat het resultaat van de deling som / i ook een geheel getal is en dat de cijfers achter de komma worden verwaarloosd. In dit programma kunnen ook variabelen van het type float (getallen met komma) gebruikt worden i.p.v. int s (gehele getallen). In de printfopdracht moet dan %f moeten staan i.p.v. %d. Opdracht 3. Test het bovenstaande programma. Is het antwoord goed? Als het gemiddelde van een andere rij getallen zou moeten worden uitgerekend, b.v. 5 t/m 17, op welke plaatsen moet het programma dan worden aangepast? De test of het uitvoeren van de lus moet worden voortgezet, wordt de voor- waarde genoemd. Dit is een bewering die waar is of onwaar. voorwaarde waar onwaar Voorbeelden: a < 10 waar als de waarde van a kleiner is dan 10 a <= 10 waar als a kleiner of gelijk is aan 10 a == 10 waar als a gelijk is aan 10 a!= 10 waar als a ongelijk is aan 10 enz. Waar en onwaar hebben in C een numerieke waarde en kunnen dus ook in een (integer) variabele worden opgeborgen: a = 5; b = a < 10; c = a > 10; printf(" Waar is %d, onwaar is %d\n", b, c); C kent ook operatoren die op de waar en onwaar werken, zoals: a && b a b waar als a en b beide waar zijn waar als a waar is óf als b waar is óf als ze beide waar zijn.!a waar al a niet waar is en niet waar als a waar is. Een lijst van operatoren is te vinden in aanhangsel A. In veel programmeertalen bestaat een type boolean, een type variabele dat slechts de waarden waar en onwaar kan aannemen. In C is dit anders, waar en onwaar hebben in C een getalwaarde: onwaar is gelijk aan nul en waar ongelijk nul. Dit maakt het volgende programma mogelijk om de tafels van 1 t/m 10 af te drukken:

27 4.2. LUSSEN 21 #include <stdio.h> main() { int i, j; } for (i = 10; i; i = i 1) { for (j = 10; j; j = j 1) printf(" %3d", i j); printf("\n"); } return 0; De format specifier %3d geeft aan dat uit te printen integer minstens drie posities breed moet zijn, zodat de getallen netjes onder elkaar komen. Opdracht 4. Het vorige voorbeeld laat de tafels van tien tot één zien i.p.v. de tafels van één tot tien. Verander het om het goed te krijgen De while- en de do-lus. De while- en de do- lussen zijn eenvoudiger dan de for-lus. 1 #include <stdio.h> 2 3 main() 4 { 5 int i = 0; 6 7 do { 8 printf("eerste lus: i = %d\n", i); 9 i = i + 1; 10 } while (i < 5); while (i < 10) { 13 printf("tweede lus: i = %d\n", i); 14 i = i + 1; 15 } 16 return 0; 17 }

28 22 HOOFDSTUK 4. PROGRAMMEREN IN C blok compound statement Opmerkingen: Regel 7: do-lus: de test of moet worden doorgegaan gebeurt iedere keer aan het einde van de lus. Na do, while, for, enz. mag als lus één statement staan of meer statements tussen {}. Dit heet een blok of een compound statement. Om het programma beter leesbaar te maken (voor mensen, niet voor de computer) is het een goed gebruik om de programmatekst te laten inspringen. Regel 12: while-lus: de test of moet worden doorgegaan is aan het begin van de lus. Opdracht 5. Bereken de waarde van n! met n = 0, 1, 2,... voor die waarden van n waarbij het resultaat kleiner is dan Voorwaarden, if... else... ; Met if en else kunnen delen van het programma worden uitgevoerd of overgeslagen. #include <stdio.h> main() { int te testen = 100; if (te testen > 50) printf("groter dan vijftig"); else printf("kleiner dan vijftig"); if (te testen) printf(" en ongelijk nul\n"); if (!te testen) printf(" en gelijk nul\n"); } return 0; Na een if kan dus een else komen maar dit hoeft niet. Een else hoort altijd bij de het laatst daarvoor staande if. If else constructies kunnen berucht moeilijk leesbaar worden gemaakt. Het onderstaande is een voorbeeld van een zeer slecht geschreven programma. Ook de layout is geheel in stijl.

29 4.4. EENVOUDIGE INVOER 23 #include <stdio.h> main() { int eerste, tweede, derde, vierde; printf("type vier getallen in "); scanf("%d, %d, %d, %d", &eerste, &tweede, &derde, &vierde); if (eerste == 30 && tweede == 10) if (!vierde) {if (derde < 7 eerste >= 19) printf("goedzo\n"); else if (eerste tweede < 65) printf("dat valt tegen\n"); else if (tweede derde) if (derde < 15) printf("ziezo\n");} else printf("wat nu?\n"); else printf("ik raak de draad kwijt\n"); } return 0; Opdracht 6. Maak het bovenstaande programma beter leesbaar door inspringen en het gebruik van accoulades. Probeer of beide versies hetzelfde resultaat geven. 4.4 Eenvoudige invoer Tijdens het uitvoeren van het programma kunnen getallen worden ingetypt en in een variabele worden opgeborgen met scanf. #include <stdio.h> main() { float f, g; do { printf("\nvermenigvuldigen, type twee getallen in? "); scanf("%f %f", &f, &g); printf("het resultaat is %f\n", f g); } while (f g); } return 0;

30 24 HOOFDSTUK 4. PROGRAMMEREN IN C Let vooral op &f en &g. Later zal scanf() nader worden behandeld. Opdracht 7. Maak een programma dat test of ingetypte getallen deelbaar zijn door 19. Beëindig het programma als een getal deelbaar is door 13. C kent een operator om de rest van een deling te bepalen: %. 4.5 Array s array-index Een array is een rij variabelen van hetzelfde type met één gezamenlijke naam en een index nummer. Een voorbeeld maakt dit duidelijk. #include <stdio.h> int array1[5], array2[5]; main() { int i; array1[0] = 4; array1[1] = 17; array1[2] = 28; array1[3] = 8; array1[4] = 57; for (i = 0; i < 5; i++) array2[i] = array1[i] 3; for (i = 0; i < 5; i++) printf("3 * %d = %d\n", array1[i], array2[i]); } return 0; Hier wordt twee array s van vijf integers gedefinieerd met de namen array1 en array2. In de beide for-lussen wordt de variabele i gebruikt als index. LET OP: bij een array met n elementen (hier dus vijf) loopt de index van 0 tot n 1. Array s kunnen ook worden geïnitialiseerd. Het bovenstaande voorbeeld wordt eenvoudiger door het array te definieren met int array1[] = {4, 17, 28, 8, 57}; Als grootte van het array niet tussen de rechte haken is opgegeven wordt deze bepaald door het aantal geïnitialiseerde elementen.

31 4.6. POINTERS 25 Ook meerdimensionale array s zijn mogelijk, b.v. double tweedim[5][6]; double driedim[5][6][5]; Opdracht 8. Bepaal de grootste, de kleinste en het gemiddelde van tien ingetypte getallen. Sla de ingetypte getallen eerst op in een array Karakterarray s en strings Een char is een acht bits integer die meestal wordt gebruikt om een karaktercode in op te slaan. We kunnen een char-array definieren en initialiseren met char naam[] = {'P', 'i', 'e', 't', '\0'); \0 is het nul-karakter en heeft de getalwaarde nul. Het moet hier worden gebruikt om het eind van de naam aan te geven. Een dergelijke rij symbolen, afgesloten door een nul-karakter heet een string en komt zo vaak voor dat er een aparte notatie voor is: char naam[] = "Piet"; Deze string heeft dus vijf elementen. Als wij in ons programma iets met een string willen doen moet dit karakter voor karakter gebeuren. Het volgende voorbeeld kopieert een string: char naam1[] = "Piet", naam2[20]; int i; for (i = 0; naam2[i] = naam1[i]; i++); De voorwaarde van de for-lus wordt hier gebruikt om het karakter te kopiëren. i++ betekent hetzelfde als i = i + 1. Het bovenstaande is een voorbeeld van de compacte programmeerstijl die met C mogelijk is. Voor iemand die niet goed in C thuis is kan een zo geschreven programma moeilijk leesbaar zijn. 4.6 Pointers Pointers zijn variabelen waarin een adres wordt opgeborgen. Ze worden in C veel gebruikt. In het volgende voorbeeld wordt het adres van i opgeborgen in de pointer p en wordt vervolgens de waarde van de variabale waar p naar wijst (i dus) drie maal zo groot gemaakt: i = 10; p = &i;

32 26 HOOFDSTUK 4. PROGRAMMEREN IN C p = p 3; printf("i is nu %d\n", i); &i is dus het adres van i. Omdat i een vaste plaats in het geheugen heeft, en dus een vast adres, is &i een constante. Een pointervariabele wordt gedefinieerd door * voor de naar te zetten. Met int p; wordt een pointer genaamd p naar een integer gedefinieerd Pointers en array s In C is het gebruik van pointers nauw verbonden met het gebruik van array s. Dit komt door een eigenaardigheid van C die op het eerste gezicht vreemd aandoet. De elementen van een array kan ik gebruiken d.m.v. de index: aaa[0] is het eerste element van het array aaa, aaa[1] het tweede element enz. Wat betekent het nu als ik in een programma aaa schrijf, dus zonder de rechte haken? Je zou verwachten dat daarmee het hele array bedoeld wordt en dat, als aaa en bbb array s zijn van hetzelfde type en met dezelfde lengte, de opdracht bbb = aaa; alle elementen van aaa naar bbb zou kopiëren. Ik sommige programmeertalen is dit ook zo, maar niet in C: aaa betekent hier het adres waar het array aaa begint. pointerarithmetic Dit geeft verrassende mogelijkheden. Als ik b.v. een array nodig heb van negen elementen waarvan de index van -4 tot +4 loopt i.p.v. van 0 tot 8 kan ik dit maken met: float mijnarray[9], p; p = &mijnarray[4]; for (i = 4; i <= +4; i++) p[i] = i; Omdat het type variabele waar een pointer naar wijst bekend is wordt hier rekening mee gehouden bij het berekenen van een adres (pointerarithmetic): met een opdracht p++ kan ik door een array heenstappen en i.p.v. kan ik ook schrijven. p = &mijnarray[4]; p = mijnarray + 4; Het bovenstaande geldt ook voor strings: char naam; int c; p = "Jan Klaassen";

continue in een for, while of do lus herhaalt de lus vroegtijdig. De volgende herhaling wordt onmiddellijk begonnen.

continue in een for, while of do lus herhaalt de lus vroegtijdig. De volgende herhaling wordt onmiddellijk begonnen. Hoofdstuk 3: controlestructuren instructies en blokken Naar elke instructie staat een ; Instructies worden door de haakjes {} in een block samengevat. if else if ( expression) statement1; else statement2;

Nadere informatie

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

HOOFDSTUK 3. Imperatief programmeren. 3.1 Stapsgewijs programmeren. 3.2 If Then Else. Module 4 Programmeren HOOFDSTUK 3 3.1 Stapsgewijs programmeren De programmeertalen die tot nu toe genoemd zijn, zijn imperatieve of procedurele programmeertalen. is het stapsgewijs in code omschrijven wat een programma moet

Nadere informatie

17 Operaties op bits. 17.1 Bitoperatoren en bitexpressies

17 Operaties op bits. 17.1 Bitoperatoren en bitexpressies 17 Operaties op bits In hoofdstuk 1 is gezegd dat C oorspronkelijk bedoeld was als systeemprogrammeertaal om het besturingssysteem UNIX te implementeren. Bij dit soort toepassingen komt het voor dat afzonderlijke

Nadere informatie

Les A-03 Binaire en hexadecimale getallen

Les A-03 Binaire en hexadecimale getallen Les A-03 Binaire en hexadecimale getallen In deze les wordt behandeld hoe getallen kunnen worden voorgesteld door informatie die bestaat uit reeksen 0-en en 1-en. We noemen deze informatie digitale informatie.

Nadere informatie

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

Als een PSD selecties bevat, deelt de lijn van het programma zich op met de verschillende antwoorden op het vraagstuk. HOOFDSTUK 3 3.1 Stapsgewijs programmeren In de vorige hoofdstukken zijn programmeertalen beschreven die imperatief zijn. is het stapsgewijs in code omschrijven wat een programma moet doen, net als een

Nadere informatie

PROS1E1 Gestructureerd programmeren in C Dd/Kf/Bd

PROS1E1 Gestructureerd programmeren in C Dd/Kf/Bd Inhoudsopgave 1 Inleiding... 1 2 Toekenning- en herhalingsopdrachten (for loop)... 2 2.1 De wet van Ohm... 3 2.2 De spaarrekening... 3 2.3 De transformator... 3 3 Keuze- en herhalingsopdrachten (if, switch,

Nadere informatie

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

Deel 1: Arduino kennismaking. Wat is een microcontroller, structuur van een programma, syntax, Deel 1: Arduino kennismaking Wat is een microcontroller, structuur van een programma, syntax, Wat is een microcontroller Wat is een microcontroller? Microcontroller = kleine dedicated computer. - Beperkt

Nadere informatie

Week 2 : Hoofdstukken 2 en 6; extra stof: inleiding pointers

Week 2 : Hoofdstukken 2 en 6; extra stof: inleiding pointers Week 2 : Hoofdstukken 2 en 6; extra stof: inleiding pointers Hoofdstuk 6: Beslissingen: if-statement en switch-statement. Inleiding: Condities zijn waar (true) of onwaar (false) In C staat het int-getal

Nadere informatie

Pascal uitgediept Data structuren

Pascal uitgediept Data structuren Pascal uitgediept Data structuren MSX Computer & Club Magazine nummer 68-juni/juli 1994 Herman Post Scanned, ocr ed and converted to PDF by HansO, 2001 In deze aflevering wordt bekeken hoe zelf een datastructuur

Nadere informatie

PROS1E1 Handleiding ( ) Kf/Dd/Bd

PROS1E1 Handleiding ( ) Kf/Dd/Bd 1 Inleiding De eerste oefening In deze eerste oefening wordt het voorbeeld 2-1 van bladzijde 11 uit het boek De taal C van PSD tot C-programma (enigszins aangepast) ingevoerd in de computer. Tevens wordt

Nadere informatie

Vakgroep CW KAHO Sint-Lieven

Vakgroep CW KAHO Sint-Lieven Vakgroep CW KAHO Sint-Lieven Objecten Programmeren voor de Sport: Een inleiding tot JAVA objecten Wetenschapsweek 20 November 2012 Tony Wauters en Tim Vermeulen tony.wauters@kahosl.be en tim.vermeulen@kahosl.be

Nadere informatie

Een typisch programma in C en C++ bestaat uit een aantal onderdelen:

Een typisch programma in C en C++ bestaat uit een aantal onderdelen: Eerste stappen in C. Een typisch programma in C en C++ bestaat uit een aantal onderdelen: /* Alles wat op meerdere lijnen staat zoals hier is commentaar. */ // Dit is commentaar op 1 lijn. Geldig tot einde

Nadere informatie

Variabelen en statements in ActionScript

Variabelen en statements in ActionScript Ontwikkelen van Apps voor ios en Android Variabelen en statements in ActionScript 6.1 Inleiding Als we het in de informatica over variabelen hebben, bedoelen we een stukje in het geheugen van de computer

Nadere informatie

Programmeren met Arduino-software

Programmeren met Arduino-software Programmeren met Arduino-software De software waarin we programmeren is Arduino IDE. Deze software is te downloaden via www.arduino.cc. De programmeertaal die hier gebruikt wordt, is gebaseerd op C en

Nadere informatie

Online c++ leren programmeren:

Online c++ leren programmeren: Online c++ leren programmeren: Inhoud 1)Waar vind ik een c++ compiler?... 2 2)Hoe start ik een programma in c++?... 2 3)Een eerste c++ programma:... 3 Een eerste programma schrijven:... 3 Mijn eerste programma

Nadere informatie

Een korte samenvatting van enkele FORTRAN opdrachten

Een korte samenvatting van enkele FORTRAN opdrachten Een korte samenvatting van enkele FORTRAN opdrachten Inhoud 1 Introductie 3 2 De structuur van een FORTRAN programma 3 3 Datatypen, variabelen en declaraties 3 4 Expressies-volgorde van uitwerking 4 5

Nadere informatie

slides12.pdf December 14, 2001 1

slides12.pdf December 14, 2001 1 Onderwerpen Inleiding Algemeen 12 Getallen Getallen Representaties Rekenen Problemen Piet van Oostrum 12 dec 2001 INL/Alg-12 1 X INL/Alg-12 1 X Getallen Soorten getallen Wat is een getal? Experiment: met

Nadere informatie

1 Rekenen in eindige precisie

1 Rekenen in eindige precisie Rekenen in eindige precisie Een computer rekent per definitie met een eindige deelverzameling van getallen. In dit hoofdstuk bekijken we hoe dit binnen een computer is ingericht, en wat daarvan de gevolgen

Nadere informatie

De Arduino-microcontroller in de motorvoertuigentechniek (2)

De Arduino-microcontroller in de motorvoertuigentechniek (2) De Arduino-microcontroller in de motorvoertuigentechniek (2) E. Gernaat (ISBN 978-90-79302-11-6) 1 Procescomputer 1.1 Microprocessoren algemeen De informatie-verwerking zoals is behandeld, is vrijwel geheel

Nadere informatie

Constanten. Variabelen. Expressies. Variabelen. Constanten. Voorbeeld : varid.py. een symbolische naam voor een object.

Constanten. Variabelen. Expressies. Variabelen. Constanten. Voorbeeld : varid.py. een symbolische naam voor een object. een symbolische naam voor een object. Variabelen Constanten Variabelen Expressies naam : geeft de plaats in het geheugen aan waarde : de inhoud van het object identifier : een rij van letters en/of cijfers

Nadere informatie

Tentamen Programmeren in C (EE1400)

Tentamen Programmeren in C (EE1400) TU Delft Tentamen Programmeren in C (EE1400) 3 feb. 2012, 9.00 12.00 Faculteit EWI - Zet op elk antwoordblad je naam en studienummer. - Beantwoord alle vragen zo nauwkeurig mogelijk. - Wanneer C code gevraagd

Nadere informatie

Interne voorstelling. types en conversies. Binaire en andere talstelsels. Voorstelling van gegevens: bits en bytes

Interne voorstelling. types en conversies. Binaire en andere talstelsels. Voorstelling van gegevens: bits en bytes Interne voorstelling types en conversies Het geheugen wordt ingedeeld in een aantal gebieden van gelijke grootte. Een gebied van 8 bits noemt men een byte (nible een groep van bits). Een (computer)woord

Nadere informatie

THEORIE TALSTELSELS. 1 x 10 0 = 1 (een getal tot de macht 0 = 1) 8 x 10 1 = 80 2 x 10 2 = x 10 3 = Opgeteld: 9281d(ecimaal)

THEORIE TALSTELSELS. 1 x 10 0 = 1 (een getal tot de macht 0 = 1) 8 x 10 1 = 80 2 x 10 2 = x 10 3 = Opgeteld: 9281d(ecimaal) THEORIE TALSTELSELS De binaire code Het geheugenelement van de computer kan slechts twee verschillende waarden bevatten. De schakelingen uit de computer werken daarom met een tweetallig ofwel binair stelsel.

Nadere informatie

Tentamen Programmeren in C (EE1400)

Tentamen Programmeren in C (EE1400) TU Delft Tentamen Programmeren in C (EE1400) 5 april 2012, 9.00 12.00 Faculteit EWI - Zet op elk antwoordblad je naam en studienummer. - Beantwoord alle vragen zo nauwkeurig mogelijk. - Wanneer C code

Nadere informatie

PYTHON REEKS 1: BASICS. Mathias Polfliet

PYTHON REEKS 1: BASICS. Mathias Polfliet PYTHON REEKS 1: BASICS Mathias Polfliet mpolflie@etrovub.be EENVOUDIGE REKENMACHINE 2 soorten getallen Getallen Z -> integers (gehele getallen) Getallen R -> floating points (reële getallen) Door beperkte

Nadere informatie

Instructies en blokken

Instructies en blokken Herhaling 1 Instructies en blokken Naar elke instructie staat een ; puntkomma Verschillende instructies worden door de accolades in een block samengevat. Een blok is het zelfde als een enkele instructie.

Nadere informatie

De AT90CAN microprocessor van ATMEL in de motorvoertuigentechniek (2)

De AT90CAN microprocessor van ATMEL in de motorvoertuigentechniek (2) De AT90CAN microprocessor van ATMEL in de motorvoertuigentechniek (2) Timloto o.s. / E. Gernaat / ISBN 978-90-79302-06-2 Op dit werk is de Creative Commens Licentie van toepassing. Uitgave: september 2012

Nadere informatie

4,7. Praktische-opdracht door een scholier 1959 woorden 1 juni keer beoordeeld

4,7. Praktische-opdracht door een scholier 1959 woorden 1 juni keer beoordeeld Praktische-opdracht door een scholier 1959 woorden 1 juni 2001 4,7 331 keer beoordeeld Vak Wiskunde Tientallig stelsel In een tientallig stelsel heb je de getallen 0 t/m 9 tot je beschikking. Zoals je

Nadere informatie

Je gaat leren programmeren en een spel bouwen met de programmeertaal Python. Websites zoals YouTube en Instagram zijn gebouwd met Python.

Je gaat leren programmeren en een spel bouwen met de programmeertaal Python. Websites zoals YouTube en Instagram zijn gebouwd met Python. 1 Je gaat leren programmeren en een spel bouwen met de programmeertaal Python. Websites zoals YouTube en Instagram zijn gebouwd met Python. Voordat je leert programmeren, moet je jouw pc zo instellen dat

Nadere informatie

2 Algemene opbouw van een computersysteem

2 Algemene opbouw van een computersysteem Procescomputer E. Gernaat 1 Microprocessoren algemeen Informatie-verwerking zoals behandeld is momenteel vrijwel geheel overgenomen door microprocessoren. Wanneer we voortborduren op het idee van combinatorische

Nadere informatie

Bij dit hoofdstukken horen geen opgaven.

Bij dit hoofdstukken horen geen opgaven. 6. Programmeertalen Een computer begrijpt eigenlijk alleen maar binaire code (bestaande uit 1 en 0). Om hem/haar makkelijk opdrachten te geven zijn programmeertalen ontwikkeld. Deze moeten een goed gedefinieerde

Nadere informatie

De computer als processor

De computer als processor De computer als processor DE FYSIEKE COMPUTER Componenten van de computerconfiguratie Toetsenbord Muis Scanner Microfoon (Extern geheugen) Invoerapparaten Uitvoerapparaten Monitor Printer Plotter Luidspreker

Nadere informatie

Lab Webdesign: Javascript 3 maart 2008

Lab Webdesign: Javascript 3 maart 2008 H5: OPERATORS In dit hoofdstuk zullen we het hebben over de operators (of ook wel: operatoren) in JavaScript waarmee allerlei rekenkundige en logische bewerkingen kunnen worden uitgevoerd. Daarbij zullen

Nadere informatie

Talstelsels en getalnotaties (oplmodel)

Talstelsels en getalnotaties (oplmodel) Talstelsels en getalnotaties (oplmodel) herhalingsvragen 1. Waarom werken computers binair? Omdat binaire computers veel makkelijker te maken is. De kans op fouten is ook veel kleiner. het spanningsverschil

Nadere informatie

Niet-numerieke data-types

Niet-numerieke data-types Intern wordt een karakter voorgesteld als een rij van acht bits, Niet-numerieke data-types string de letter a 01100001 0110 0001 0x61 97 Bij interpretatie van de inhoud van een byte als een geheel getal,

Nadere informatie

Java Les 3 Theorie Herhaal structuren

Java Les 3 Theorie Herhaal structuren Java Les 3 Theorie Herhaal structuren Algemeen Een herhaal structuur een is programmeertechniek waarbij bepaalde Java instructies worden herhaald net zo lang tot een bepaalde voorwaarde is bereikt. Een

Nadere informatie

Talstelsels, getalnotaties en Ascii code

Talstelsels, getalnotaties en Ascii code Talstelsels, getalnotaties en Ascii code 1 Algemeenheden Digitale systemen werken met nullen en enen omdat dit elektronisch gemakkelijke te verwezenlijken is. De transistor wordt in digitale systemen als

Nadere informatie

Proeftentamen in1211 Computersystemen I (NB de onderstreepte opgaven zijn geschikt voor de tussentoets)

Proeftentamen in1211 Computersystemen I (NB de onderstreepte opgaven zijn geschikt voor de tussentoets) TECHNISCHE UNIVERSITEIT DELFT Faculteit Informatietechnologie en Systemen Afdeling ISA Basiseenheid PGS Proeftentamen in1211 Computersystemen I (NB de onderstreepte opgaven zijn geschikt voor de tussentoets)

Nadere informatie

Een eenvoudig algoritme om permutaties te genereren

Een eenvoudig algoritme om permutaties te genereren Een eenvoudig algoritme om permutaties te genereren Daniel von Asmuth Inleiding Er zijn in de vakliteratuur verschillende manieren beschreven om alle permutaties van een verzameling te generen. De methoden

Nadere informatie

int main() { int m; m = power(2,3) /* berekent 2^3 en geeft de resultaat naar m terug */ }

int main() { int m; m = power(2,3) /* berekent 2^3 en geeft de resultaat naar m terug */ } 1 Functies ( ) voorbeeld: int power(int base, int n) int i, p; p = 1; for ( i=1, i

Nadere informatie

Jörg R. Hörandel Afdeling Sterrenkunde

Jörg R. Hörandel Afdeling Sterrenkunde Jörg R. Hörandel Afdeling Sterrenkunde http://particle.astro.ru.nl/goto.html?prog1415 1 Jörg R. Hörandel Afdeling Sterrenkunde http://particle.astro.ru.nl/goto.html?prog1415 2 Alle studenten moeten op

Nadere informatie

VAN HET PROGRAMMEREN. Inleiding

VAN HET PROGRAMMEREN. Inleiding OVERZICHT VAN HET PROGRAMMEREN Inleiding Als je leert programmeren lijkt het nogal overweldigend om die eerste stappen te doorworstelen. Er zijn dan ook heel wat programmeertalen (Java, Ruby, Python, Perl,

Nadere informatie

9 Meer over datatypen

9 Meer over datatypen 9 Meer over datatypen We hebben al gezien dat het gebruik van symbolische constanten de leesbaarheid van een programma kan verbeteren. Door een geschikte naam (identifier) voor een constante te definiëren,

Nadere informatie

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

Module 3: Scratch programmeren: is het logisch of is het niet logisch? Module 3: Scratch programmeren: is het logisch of is het niet logisch? Inhoudsopgave Module 3: Scratch programmeren: is het logisch of is het niet logisch?...1 Wat is een computerprogramma eigenlijk?...2

Nadere informatie

Activiteit 1. Tel de punten Binaire Getallen. Samenvatting. Kerndoelen. Vaardigheden. Leeftijd. Materiaal

Activiteit 1. Tel de punten Binaire Getallen. Samenvatting. Kerndoelen. Vaardigheden. Leeftijd. Materiaal Activiteit 1 Tel de punten Binaire Getallen Samenvatting Data in de computer worden opgeslagen als een serie van nullen en enen. Hoe kunnen we woorden en getallen weergeven met alleen deze twee symbolen?

Nadere informatie

OEFENINGEN PYTHON REEKS 1

OEFENINGEN PYTHON REEKS 1 OEFENINGEN PYTHON REEKS 1 Vraag 1: Python als een eenvoudige rekenmachine Python maakt gebruik van enkele vaak voorkomende (data)types. Zo zijn er integers die behoren tot de gehele getallen (VB: 3) en

Nadere informatie

OEFENINGEN PYTHON REEKS 1

OEFENINGEN PYTHON REEKS 1 Vraag 1: Expressies & Types OEFENINGEN PYTHON REEKS 1 Python maakt gebruik van enkele vaak voorkomende (data)types. Zo zijn er integers die behoren tot de gehele getallen (VB: 3), zijn er float s die behoren

Nadere informatie

Algoritme noteren? Algoritmen voor de computer worden vastgelegd met behulp van een programmeertaal.

Algoritme noteren? Algoritmen voor de computer worden vastgelegd met behulp van een programmeertaal. Programmeertalen Algoritme noteren? Algoritmen voor de computer worden vastgelegd met behulp van een programmeertaal. Taal // machine De geschiedenis van de programmeertalen loopt parallel met de geschiedenis

Nadere informatie

Lineaire data structuren. Doorlopen van een lijst

Lineaire data structuren. Doorlopen van een lijst Lineaire data structuren array: vast aantal data items die aaneensluitend gestockeerd zijn de elementen zijn bereikbaar via een index lijst: een aantal individuele elementen die met elkaar gelinkt zijn

Nadere informatie

OEFENINGEN PYTHON REEKS 1

OEFENINGEN PYTHON REEKS 1 Vraag 1: Expressies & Types OEFENINGEN PYTHON REEKS 1 Python maakt gebruik van enkele vaak voorkomende (data)types. Zo zijn er integers die behoren tot de gehele getallen (VB: 3), zijn er float s die behoren

Nadere informatie

De standaard programmeertaal

De standaard programmeertaal C De standaard programmeertaal Oorsprong CPL stond voor Combined Programming Language of Cambridge Programming Language. Ze stamt uit 1963, maar de eerste compiler arriveerde pas rond 1970. De taal was

Nadere informatie

Numerieke benadering van vierkantwortels

Numerieke benadering van vierkantwortels HP Prime Grafische Rekenmachine Numerieke benadering van vierkantwortels Doel: De waarde van een vierkantswortel met een recursieve rij benaderen, het schrijven van een klein programma. Sleutelwoorden:

Nadere informatie

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.

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. In onderstaande oefeningen zijn kleuren gebruikt. Deze dienen aleen om de structuren makkelijker terug te kunnen herkennen. Ze worden niet standaard zo gebruikt. De dunne rood/roze balken zijn ook geen

Nadere informatie

Getalformaten, timers en tellers

Getalformaten, timers en tellers Getalformaten, timers en tellers S_CU CU S PV R CV DEZ CV_BCD S_ODT S TV BI R BCD 1 pagina 1 Getalformaten (16 bits) PG CPU BCD W#16#296 Voorteken (+) 2 9 6 0 0 0 0 0 0 1 0 1 0 0 1 0 1 1 0 Positieve getallen

Nadere informatie

Tentamen Programmeren in C (EE1400)

Tentamen Programmeren in C (EE1400) TU Delft Faculteit EWI Tentamen Programmeren in C (EE1400) 28 jan 2011, 9.00 12.00 - Zet op elk antwoordblad je naam en studienummer. - Beantwoord alle vragen zo nauwkeurig mogelijk. - Wanneer C code gevraagd

Nadere informatie

Oefententamen 2. Tijd: 2 uur. Maximaal aantal punten: 30. Naam: Studentnummer:

Oefententamen 2. Tijd: 2 uur. Maximaal aantal punten: 30. Naam: Studentnummer: Oefententamen 2 C Naam: Studentnummer: Tijd: 2 uur Maximaal aantal punten: 30 Menselijke compiler (10 punten) 0. (1 punt) Stel, je haalt het tentamen als je tenminste een 5.5 gemiddeld hebt gehaald voor

Nadere informatie

Windows Basis - Herman Van den Borre 1

Windows Basis - Herman Van den Borre 1 Windows Vista Basis Herman Van den Borre Praktische zaken Lessen Vrijdagmorgen 9u00 11u45 Pauze 10u15-10u30 Handboek Windows Vista Basis Roger Frans Uitgeverij Campinia Media ISBN: 978.90.356.1212.9 Prijs:

Nadere informatie

De Arduino-microcontroller in de motorvoertuigentechniek (6)

De Arduino-microcontroller in de motorvoertuigentechniek (6) De Arduino-microcontroller in de motorvoertuigentechniek (6) E. Gernaat (ISBN 978-90-79302-11-6) 1 De Arduino Programmeeromgeving (IDE) 1.1 Inleiding Als we naar de Arduino site gaan kunnen we daar de

Nadere informatie

Java. Basissyllabus. Egon Pas

Java. Basissyllabus. Egon Pas Java Basissyllabus Egon Pas 2011 BeanPole bvba Gasmeterlaan 92-9000 Gent BTW BE 472.902.516 Tel: + 32 9 224 42 17 Fax: + 32 9 223 62 88 www.beanpole.be info@beanpole.be 1 Programmeren 1.1 Hoe werkt een

Nadere informatie

Javascript oefenblad 1

Javascript oefenblad 1 Leer de basis van Javascript. Javascript oefenblad 1 Niels van Velzen Javascript oefenblad 1 Pagina 2 Inleiding Javascript is niet altijd even makkelijk. Vooral aan het begin is het even wennen hoe de

Nadere informatie

4 Invoer en uitvoer. 4.1 Toegang tot de standaardbibliotheek

4 Invoer en uitvoer. 4.1 Toegang tot de standaardbibliotheek 4 Invoer en uitvoer Strikt genomen maken invoer- en uitvoerfaciliteiten geen deel uit van de taal C, zoals dat in FORTRAN wel het geval is, waar de statements READ en WRITE als deel van de taal zijn gedefinieerd.

Nadere informatie

DE INTERACTIEVE SHELL

DE INTERACTIEVE SHELL Hoofdstuk2 De interactieve shell 6 Hoofdstuk 2 DE INTERACTIEVE SHELL In dit hoofdstuk behandelen we: Integers (gehele getallen) en getallen met drijvende komma Expressies Waarden Operatoren Het evalueren

Nadere informatie

Turbo Pascal (deel 1)

Turbo Pascal (deel 1) Turbo Pascal (deel 1) MSX CLUB MAGAZINE 34 Erik van Bilsen Scanned, ocr ed and converted to PDF by HansO, 2001 Erik van Bilsen leert u het klappen van de Turbo Pascal zweep. Turbo Pascal toepassen Deze

Nadere informatie

Computerarchitectuur en netwerken. Memory management Assembler programmering

Computerarchitectuur en netwerken. Memory management Assembler programmering Computerarchitectuur en netwerken 2 Memory management Assembler programmering Lennart Herlaar 10 september 2018 Inhoud 1 Protectie: Hoe het O.S. programma s tegen elkaar kan beschermen modes memory management

Nadere informatie

Rekenen aan wortels Werkblad =

Rekenen aan wortels Werkblad = Rekenen aan wortels Werkblad 546121 = Vooraf De vragen en opdrachten in dit werkblad die vooraf gegaan worden door, moeten schriftelijk worden beantwoord. Daarbij moet altijd duidelijk zijn hoe de antwoorden

Nadere informatie

Rekenen met computergetallen

Rekenen met computergetallen Rekenen met computergetallen Getallenstelsel en notaties Getallen in computers zijn opgebouwd met het kleinste element dat een computer kent: een bit. Een bit kan twee logische waardes bevatten, een nul

Nadere informatie

maplev 2010/7/12 14:02 page 15 #17 Nadere detaillering van een aantal zaken van Module 1 Geen,, " ", \, save, read, protect, unprotect

maplev 2010/7/12 14:02 page 15 #17 Nadere detaillering van een aantal zaken van Module 1 Geen,,  , \, save, read, protect, unprotect maplev 2010/7/12 14:02 page 15 #17 Module 2 Het gebruik van Maple, vervolg Onderwerp Voorkennis Expressies Nadere detaillering van een aantal zaken van Module 1 Geen,, " ", \, save, read, protect, unprotect

Nadere informatie

Een spoedcursus python

Een spoedcursus python Een spoedcursus python Zoals je in de titel misschien al gezien hebt, geven wij een spoedcursus Python. Door deze cursus leer je alle basics, zoals het rekenen met Python en het gebruik van strings. Het

Nadere informatie

4EE11 Project Programmeren voor W. College 2, , Blok D Tom Verhoeff, Software Engineering & Technology, TU/e

4EE11 Project Programmeren voor W. College 2, , Blok D Tom Verhoeff, Software Engineering & Technology, TU/e 4EE11 Project Programmeren voor W College 2, 2008 2009, Blok D Tom Verhoeff, Software Engineering & Technology, TU/e 1 Onderwerpen Terugblik Functies Organisatie (architectuur) van programma s Arrays Structuren

Nadere informatie

Proeftentamen in1211 Computersystemen I (Opm: de onderstreepte opgaven zijn geschikt voor de tussentoets)

Proeftentamen in1211 Computersystemen I (Opm: de onderstreepte opgaven zijn geschikt voor de tussentoets) TECHNISCHE UNIVERSITEIT DELFT Faculteit Informatietechnologie en Systemen Afdeling ISA Basiseenheid PGS Proeftentamen in1211 Computersystemen I (Opm: de onderstreepte opgaven zijn geschikt voor de tussentoets)

Nadere informatie

Algoritme noteren? Algoritmen voor de computer worden vastgelegd met behulp van een programmeertaal.

Algoritme noteren? Algoritmen voor de computer worden vastgelegd met behulp van een programmeertaal. Programmeertalen Algoritme noteren? Algoritmen voor de computer worden vastgelegd met behulp van een programmeertaal. Taal // machine De geschiedenis van de programmeertalen loopt parallel met de geschiedenis

Nadere informatie

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

Turbo Pascal deel 3 MSX CLUB MAGAZINE 36. Erik van Bilsen. Scanned, ocr ed and converted to PDF by HansO, 2001 Turbo Pascal deel 3 MSX CLUB MAGAZINE 36 Erik van Bilsen Scanned, ocr ed and converted to PDF by HansO, 2001 In deze aflevering van de cursus gaan we scrollen en wel smooth-scroll in maar liefst vier richtingen.

Nadere informatie

EE1400: Programmeren in C BSc. EE, 1e jaar, , 3e college

EE1400: Programmeren in C BSc. EE, 1e jaar, , 3e college EE1400: Programmeren in C BSc. EE, 1e jaar, 2012-201, e college Arjan van Genderen, Computer Engineering 4-12-2012 Delft University of Technology Challenge the future Hoorcollege Arrays, Pointers en Strings

Nadere informatie

Hoofdstuk 7: Werken met arrays

Hoofdstuk 7: Werken met arrays Programmeren in Microsoft Visual Basic 6.0, lessenserie voor het voortgezet onderwijs HAVO/VWO David Lans, Emmauscollege, Marnix Gymnasium Rotterdam, januari 2004 Hoofdstuk 7: Werken met arrays 7.0 Leerdoel

Nadere informatie

Fout detecterende en verbeterende codes

Fout detecterende en verbeterende codes Profielwerkstuk Fout detecterende en verbeterende codes Een compacte module over het onderwerp fouten detectie en verbetering Gemaakt door Roy van Schaijk, Boris Kloeg en Willy Mackus Inhoudsopgave. Introductie

Nadere informatie

Jörg R. Hörandel Afdeling Sterrenkunde http://particle.astro.ru.nl/goto.html?prog1516

Jörg R. Hörandel Afdeling Sterrenkunde http://particle.astro.ru.nl/goto.html?prog1516 Jörg R. Hörandel Afdeling Sterrenkunde http://particle.astro.ru.nl/goto.html?prog1516 1 Jörg R. Hörandel Afdeling Sterrenkunde http://particle.astro.ru.nl/goto.html?prog1516 2 wiskunde om 8:45 in HG00.023

Nadere informatie

Je gaat leren programmeren in Ruby. En daarna in Ruby een spelletje maken. Websites zoals Twitch en Twitter gemaakt zijn met behulp van Ruby?

Je gaat leren programmeren in Ruby. En daarna in Ruby een spelletje maken. Websites zoals Twitch en Twitter gemaakt zijn met behulp van Ruby? 1 Je gaat leren programmeren in Ruby. En daarna in Ruby een spelletje maken. Websites zoals Twitch en Twitter gemaakt zijn met behulp van Ruby? Voordat je begint met programmeren, moet je Ruby installeren.

Nadere informatie

3. Structuren in de taal

3. Structuren in de taal 3. Structuren in de taal In dit hoofdstuk behandelen we de belangrijkst econtrolestructuren die in de algoritmiek gebruikt worden. Dit zijn o.a. de opeenvolging, selectie en lussen (herhaling). Vóór we

Nadere informatie

HET BESTURINGSSYSTEEM

HET BESTURINGSSYSTEEM HET BESTURINGSSYSTEEM Een besturingssysteem (ook wel: bedrijfssysteem, in het Engels operating system of afgekort OS) is een programma (meestal een geheel van samenwerkende programma's) dat na het opstarten

Nadere informatie

Opdrachten numerieke methoden, week 1

Opdrachten numerieke methoden, week 1 Opdrachten numerieke methoden, week Opdracht : De potentiaal in een diode. [Bewijs dat ψ = u T arcsinh D 2n i ) ] ) ) D = n p = n i e ψ u T e ψ u ψ T = 2n i sinh u T ) D ψ = u T arcsinh 2n i.2 [Conditiegetal

Nadere informatie

10 Meer over functies

10 Meer over functies 10 Meer over functies In hoofdstuk 5 hebben we functies uitgebreid bestudeerd. In dit hoofdstuk bekijken we drie andere aspecten van functies: recursieve functies dat wil zeggen, functies die zichzelf

Nadere informatie

DE ASTRO PI PROGRAMMEREN VOOR MISSION ZERO

DE ASTRO PI PROGRAMMEREN VOOR MISSION ZERO DE ASTRO PI PROGRAMMEREN DOCENTENHANDLEIDING 1 Deze handleiding is bedoeld om leerlingen te ondersteunen bij de Astro Pi Challenge, waarbij leerlingen een programma voor de Astro Pi-computer in het ISS

Nadere informatie

Jörg R. Hörandel Afdeling Sterrenkunde.

Jörg R. Hörandel Afdeling Sterrenkunde. Jörg R. Hörandel Afdeling Sterrenkunde http://particle.astro.ru.nl/goto.html?prog1213 1 Alle mensen moeten op blackboard ingeschreven zijn! 2 http://particle.astro.ru.nl/goto.html?prog1213 3 eindcijfer:

Nadere informatie

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

Syntax- (compile), runtime- en logische fouten Binaire operatoren Inhoud Syntax- (compile), runtime- en logische fouten Binaire operatoren Operaties op numerieke datatypen Evaluatie van expressies, bindingssterkte Assignment operaties en short-cut operatoren Controle

Nadere informatie

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

VAN HET PROGRAMMEREN. Inleiding. Het spiraalmodel. De programmeertaal. vervolgens de berekening van het totale bedrag, incl. BTW: OVERZICHT VAN HET PROGRAMMEREN Inleiding Als je leert programmeren lijkt het nogal overweldigend om die eerste stappen te doorworstelen. Er zijn dan ook heel wat programmeertalen (Java, Ruby, Python, Perl,

Nadere informatie

Technology, Innovation & Society Delft

Technology, Innovation & Society Delft Technology, Innovation & Society Delft VOORBLAD SCHRIFTELIJKE TOETSEN OPLEIDING TOETSCODE GROEP : ELEKTROTECHNIEK : GESPRG-SC1 : EP11, EP12 TOETSDATUM : 22-01-2015 TIJD : 13.00u-14.30u AANTAL PAGINA S

Nadere informatie

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

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 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 dat er zowel typografische als inhoudelijke onvolkomenheden

Nadere informatie

Teamhandleiding DOMjudge (versie 2.2.0muKP) 31 mei 2008

Teamhandleiding DOMjudge (versie 2.2.0muKP) 31 mei 2008 judge Teamhandleiding DOMjudge (versie..0mukp) 31 mei 008 /\ DOM DOM judge Inhoudsopgave 1 Inleiding Samenvatting.1 Inlezen en wegschrijven............................... Insturen van oplossingen...............................3

Nadere informatie

REKENVAARDIGHEID BRUGKLAS

REKENVAARDIGHEID BRUGKLAS REKENVAARDIGHEID BRUGKLAS Schooljaar 008/009 Inhoud Uitleg bij het boekje Weektaak voor e week: optellen en aftrekken Weektaak voor e week: vermenigvuldigen Weektaak voor e week: delen en de staartdeling

Nadere informatie

6,2. Paragraaf 2.1. Paragraaf 2.2. Samenvatting door een scholier 1375 woorden 10 december keer beoordeeld. Informatica Informatica actief

6,2. Paragraaf 2.1. Paragraaf 2.2. Samenvatting door een scholier 1375 woorden 10 december keer beoordeeld. Informatica Informatica actief Samenvatting door een scholier 1375 woorden 10 december 2006 6,2 6 keer beoordeeld Vak Methode Informatica Informatica actief Hoofdstuk 2 Paragraaf 2.1 Kranten dienen om informatie te verspreiden. Een

Nadere informatie

Voorbeeld casus mondeling college-examen

Voorbeeld casus mondeling college-examen Voorbeeld casus mondeling college-examen Examenvak en niveau informatica vwo Naam kandidaat Examennummer Examencommissie Datum Voorbereidingstijd Titel voorbereidingsopdracht 20 minuten van analoog naar

Nadere informatie

BEGINNER JAVA Inhoudsopgave

BEGINNER JAVA Inhoudsopgave Inhoudsopgave 6 Configuratie Hallo wereld! Praten met de gebruiker Munt opgooien Voorwaarden Lussen......6 Configuratie Met deze Sushi kaarten ga je een simpel spel maken met één van de meest populaire

Nadere informatie

HomeOffice to ASCII Teksten converteren

HomeOffice to ASCII Teksten converteren HomeOffice to ASCII Teksten converteren Marco Soijer MCCM 65 Scanned, ocr ed and converted to PDF by HansO, 2001 Dit al enige tijd geleden ingezonden programma zet tekstbestanden, gemaakt met Home Office

Nadere informatie

1.3 Rekenen met pijlen

1.3 Rekenen met pijlen 14 Getallen 1.3 Rekenen met pijlen 1.3.1 Het optellen van pijlen Jeweetnuwatdegetallenlijnisendat0nochpositiefnochnegatiefis. Wezullen nu een soort rekenen met pijlen gaan invoeren. We spreken af dat bij

Nadere informatie

Studentnummer:... Opleiding:...

Studentnummer:... Opleiding:... Computerorganisatie INF/TEL (233) februari 2, 9. 2.3 uur 8 bladzijden met 9 opgaven 3 bladzijden met documentatie Let op: Vul het tentamenbriefje volledig in (d.w.z. naam, studentnummer, naam vak, vakcode,

Nadere informatie

Objective-C Basis. 23 april 2005, Eindhoven Patrick Machielse

Objective-C Basis. 23 april 2005, Eindhoven Patrick Machielse Objective-C Basis 23 april 2005, Eindhoven Patrick Machielse patrick@hieper.nl Algemeen // extensies Objective-C code in bestanden met.m extensie // commentaar moet! /* Alles hiertussen wordt genegeerd

Nadere informatie

Zelftest Inleiding Programmeren

Zelftest Inleiding Programmeren Zelftest Inleiding Programmeren Document: n0824test.fm 22/01/2013 ABIS Training & Consulting P.O. Box 220 B-3000 Leuven Belgium TRAINING & CONSULTING INLEIDING BIJ DE ZELFTEST INLEIDING PROGRAMMEREN Deze

Nadere informatie

Programmeren in Java les 3

Programmeren in Java les 3 4 september 2015 Deze les korte herhaling vorige week loops methodes Variabelen Soorten variabelen in Java: integer: een geheel getal, bijv. 1,2,3,4 float: een gebroken getal, bijv. 3.1415 double: een

Nadere informatie

recursie Hoofdstuk 5 Studeeraanwijzingen De studielast van deze leereenheid bedraagt circa 6 uur. Terminologie

recursie Hoofdstuk 5 Studeeraanwijzingen De studielast van deze leereenheid bedraagt circa 6 uur. Terminologie Hoofdstuk 5 Recursion I N T R O D U C T I E Veel methoden die we op een datastructuur aan kunnen roepen, zullen op een recursieve wijze geïmplementeerd worden. Recursie is een techniek waarbij een vraagstuk

Nadere informatie

Het gebruik van een spreadsheetprogramma Algemene introductie in het gebruik van spreadsheets Fons Vernooij

Het gebruik van een spreadsheetprogramma Algemene introductie in het gebruik van spreadsheets Fons Vernooij Het gebruik van een spreadsheetprogramma Algemene introductie in het gebruik van spreadsheets Fons Vernooij Introductie Een spreadsheetprogramma kan heel veel. Zoveel zelfs dat je bijna vergeet dat hij

Nadere informatie