Les 1: Inleiding en een eenvoudig programma

Vergelijkbare documenten
Demo document template available on the Rapptorlab website

PROS1E1 Handleiding ( ) Kf/Dd/Bd

Bij dit hoofdstukken horen geen opgaven.

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.

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

WORKSHOP ORANGE PI & PYTHON v september 2017

BEGINNER JAVA Inhoudsopgave

Programmeren: Visual Basic

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

slides6.pdf 16 nov

FORTRAN. Pieter van Leeuwen Studentnr:

BLOK 3 HOOFDSTUK 8 PARAGRAAF 2

Van Poort tot Pipeline. Ben Bruidegom & Wouter Koolen-Wijkstra AMSTEL Instituut Universiteit van Amsterdam

DE ASTRO PI PROGRAMMEREN VOOR MISSION ZERO

De Arduino-microcontroller in de motorvoertuigentechniek (6)

Zelftest Programmeren in COBOL - deel I

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

9 Meer over datatypen

Turbo Pascal (deel 1)

Online c++ leren programmeren:

Tutorial 1, Delphi: Geldspraak

Module 4 Hoofdstuk 1. Programmeertalen

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

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

Compilers.

Practicum Ox intro. Practicum Ox intro. VU Numeriek Programmeren 2.5. Charles Bos. Vrije Universiteit Amsterdam. 3 april /18

Assembly en Assemblers. Processoren 5 januari 2015

Jörg R. Hörandel Afdeling Sterrenkunde.

HANDLEIDING PROGRAMMEREN IN PASCAL (LAZARUS)

Modelleren en Programmeren

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

Selenium IDE Webdriver. Introductie

Zo gaat jouw kunstwerk er straks uitzien. Of misschien wel heel anders.

Oefeningen Interpretatie I Reeks 6 : Registermachines

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

Accelerometer project 2010 Microcontroller printje op basis van de NXP-LPC2368

UNIVERSITEIT ANTWERPEN FACULTEIT WETENSCHAPPEN DEPARTEMENT WISKUNDE-INFORMATICA OBERON CODE CONVENTIONS

Inleiding programmeren

Informatica: C# WPO 12

Grafisch programmeren met GTK

Vereiste kennis. 1 Java-editor. 2 Het compileren van een programma

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

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

VOORBLAD SCHRIFTELIJKE TOETSEN

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

In de tweede regel plaatsen we in het gereserveerde stukje geheugen een getal.

6.2 VBA Syntax. Inleiding Visual Basic

MINICURSUS PHP. Op dit lesmateriaal is een Creative Commons licentie van toepassing Sebastiaan Franken en Rosalie de Klerk Bambara

Javascript oefenblad 1

6.3 VBA Syntax Instructie. Wij gaan de Visual Basic Editor opnieuw openen, om de instructie die wij zojuist getypt hebben, nader te bekijken.

Project Software Engineering XML parser: Parsen van een xml CD catalogus

Informatica: C# WPO 13

Zelftest Inleiding Programmeren

2. Syntaxis en semantiek

Let op dat de scoping regels gerespecteerd blijven; het volgende voorbeeld mag geen fout melden.

start -> id (k (f c s) (g s c)) -> k (f c s) (g s c) -> f c s -> s c

Matlab introductie. Kees Vuik

HomeOffice to ASCII Teksten converteren

Dit document bevat informatie over make bij het eerstejaars college Programmeermethoden, Universiteit Leiden, najaar 2010, zie

1.Noem de vijf categorieën waarin programmeertalen kunnen worden ingedeeld en geef van elke categorie één voorbeeld.

Een eerste applicatie

Seven segments of Pi

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

Jörg R. Hörandel Afdeling Sterrenkunde

Handleiding ISaGRAF. Wil men het programma bewaren, dan is het verstandig een back-up te maken: C9 Back-up / Restore

Augustus& Handleiding - Publisher Tool 3

Derde Delphi Programma verkenning

Pascal uitgediept Data structuren

1.2 ENVIRONMENT DIVISION.

Programmeren met Arduino-software

Workshop Arduino voor beginners deel 2

De standaard programmeertaal

Programmeermethoden. Recursie. week 11: november kosterswa/pm/

NetBeans tutorial, Rik Eshuis, Kees Huizing versie 2.2 Augustus 2009

Debugging in embedded en native systemen met GDB

17 Operaties op bits Bitoperatoren en bitexpressies

Les C-04 Programmeren

PSD Turtle. Om op een goede manier een programma te schrijven wordt er ook een algoritme gevolgd. Dit algoritme bestaat uit de volgende stappen/fasen:

Een spoedcursus python

1. Introductie tot SPSS

Cursus Programmeren en Dataverwerking.

PROS1E1 Gestructureerd programmeren in C Dd/Kf/Bd

Datatypes Een datatype is de sort van van een waarde van een variabele, veel gebruikte datatypes zijn: String, int, Bool, char en double.

Programmeren in COBOL. Sephiroth

Programmeerstructuren met App Inventor

Programmeren: Visual Basic

Variabelen en statements in ActionScript

Oefenzitting Werken met Java Achtergrond BVP

L A TEX-workshop (Handleiding)

Tentamen Programmeren in C (EE1400)

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

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

Programmeermethoden. Controle-structuren. Walter Kosters. week 3: september kosterswa/pm/

1.1 Programmeren en voorbereiding

Inhoud Inhoud. Over dit boek 7. 1 Eclipse IDE (Integrated Development Environment) 9. 2 Functionele specificatie 13

Introductie in C++ Jan van Rijn. September 2013

Voorlopig onderzoeksplan Bachelorscriptie CleanDoc-

10. Mijn eerste programma

Een korte samenvatting van enkele FORTRAN opdrachten

Transcriptie:

Les 1: Inleiding en een eenvoudig programma In deze les geven we een inleiding in de achtergrond van de taal. Onderwerpen die hierbij aan de orde komen zijn: Hoe is ontstaan? Hoe staat ten opzichte van concurrerende talen? Hoe vertalen we een programma naar een voor de machine leesbaar programma? Een eenvoudig programma Oorspronkelijke programmeertalen, gebruikt in de techniek. Reeds vanuit de jaren 60 van de vorige eeuw zijn programmeertalen steeds meer voor het gewone publiek beschikbaar gekomen. Talen waren in die tijd nog vaak toepassinggericht. Zo was OBOL (Ommon Business Oriented Language) speciaal toegespitst op het economische verkeer en was ALGOL (ALGOrithmic Language) veel in gebruik op universiteiten (Veel talen werden ontwikkeld op universiteiten). Daarnaast was door IBM de taal FORTRAN (FORmula TRANslator) ontwikkeld. Iedere taal had zijn eigenaardigheden. OBOL was echt een buitenbeentje, want de taal was zodanig opgesteld dat een accountant het redelijk kon volgen. Een statement als: c=a/b wordt in OBOL opgegeven als Divide a by b giving c. Dit is niet echt iets waar je in de techniek mee uit de voeten kan. De technische talen zitten daarom veel dichter bij de oorspronkelijke wiskundige formules. In dit oerwoud van talen ontstond al snel de behoefte aan een taal die simpel en algemeen was. Deze taal heette BASI (Beginners Al purpose Symbolic Instruction ode). De taal was simpel in het gebruik in die zin dat je de statements direct achter de terminal kon intypen en met behulp van een RUN het resultaat op de terminal kon laten verschijnen. De programma s in de oorspronkelijke talen moesten alle via een ingewikkelde vertaalcyclus aan de gang gekregen worden. Vaak via ponskaarten. Om een indruk te krijgen van de verschillende gedaanten van de programmeertalen wordt in het onderstaande een voorbeeld gegeven van een programma om de getallen 1 t/m 9 af te drukken in een aantal talen. BASI 10 FOR 1=1 TO 9 20 PRINT 1; ; 30 NEXT 1 40 END

FORTRAN IMPLIIT INTEGER (A-Z) DO 10 OUNT=1,9 WRITE (5,10) OUNT 10 FORMAT (1H$,I3) 20 ONTINUE END OBOL IDENTIFIATION DIVISION. PROGRAM-ID. INTRO1 AUTHOR. RPL DATE-WRITTEN. 1 NOVEMBER 2004 ENVIRONMENT DIVISION. INPUT-OUTPUT SETION. FILE-ONTROL. SELET LINE-OUT-FILE ASSIGN TO PR00001. DATA DIVISION. FILE SETION. FD LINE-OUT-FILE LABEL REORDS ARE OMITTED 01 OUNT PI 999 PROEDURE DIVISION. WRITE-NINE-NUMBERS. OPEN OUTPUT LINE-OUT-FILE. MOVE 1 TO OUNT. PERFORM WRITE OUNT. ADD 1 TO OUNT UNTIL I=9. STOP RUN. BASI lijkt in bovenstaande voorbeelden de winnaar qua efficiency. Dat wordt echter een stuk minder als de programma s veel langer worden. De oorspronkelijke versie van BASI kon slechts een beperke naamgeving voor variabelen aan en de taal was sgterk afhankelijk van statement-nummers. Deze statement-nummers maakten het intypen van de programma s makkelijk, maar vormden een belemmering als er projectmatig in groepen werd gewerkt.

Nagenoeg alle talen misten een duidelijke structuur, waardoor het programmeren ver af stond van de gebruikelijke denkwijze in structuren. Daarvoor werd op een zwitserse universiteit de programmeertaal PASAL ontwikkeld (genoemd naar de wiskundige Blaise Pascal). Pascal was in feite alleen bedoeld om de student te leren programmeren in duidelijk herkenbare structuren. De taal was daarom minder geschikt om in de praktijk te gebruiken (De taal miste onder andere een fatsoenlijk filehandling-systeem en de variabele-syntax was erg strikt). De structuren in Pascal maakte echter dat het steeds meer gebruikt werd in de praktijk en de fabrikanten van de pascal-vertalers vonden elk een oplossing voor de tekortkomingen in de taal. Dit resulteerde in een groot aantal verschillende Pascalversies. Uiteindelijk kwam er een internationale norm ISO 7185, die nu verkrijgbaar is als NEN-ISO 7185, waarin een basisstandaard was vastgelegd. Halverwege de jaren 80 kwam Borland met Turbo Pascal op de IBM-P. Dit was een implementatie met een groot aantal extra mogelijkheden boven de geadviseerde NEN- ISO-standaard. Deze versie van de taal was erg bruikbaar en is in feite de de-facto standaard geworden op het P-platform in die tijd. Als we de bovenstaande programma s in Pascal willen weergeven, krijgen we het volgende programma: program onetonine (input,output); var count : integer; begin for count:=1 to 9 do Write (i, ); end. De taal Nog voordat Pascal uitkwam werd de taal ontwikkeld. Ook heeft vergelijkbare structuren als Pascal, maar de taal biedt veel meer mogelijkheden om te rommelen met variabelen. Dit in combinatie met het feit dat nagenoeg alles gedefinieerd is in losse functies maakte het mogelijk de taal uit te breiden zonder de syntax van de taal te hoeven wijzigen. Deze eigenschap maakt dat de taal identiek is gebleven op alle platformen waar hij op beschikbaar is. Extra faciliteiten op een platform kunnen eenvoudig toegevoegd worden in functies. Ook voor is een internationale norm beschikbaar; NEN-ISO/IE 9899. In feite lijkt alles koek en ei voor. Een taal waarin alles kan en die toch duidelijke structuren heeft. Helaas is het niet zo simpel. Pascal heeft een strakke syntax en daardoor is veel lastig te realiseren. laat echter meer toe, maar daardoor kunnen onvoorspelbare resultaten het gevolg zijn en foutmeldingen waarschuwen ons lang niet altijd tegen dit onheil.

Niettegenstaande is nu de taal geworden, waarin in de industrie veel wordt geprogrammeerd. Hardwareleveranciers leveren vaak -libraries bij hun hardware en zelden libraries voor andere talen. Van zijn inmiddels nieuwe varianten in omloop. De belangrijkste hiervan is ++ (NEN-ISO/IE 14882), waarbij Object oriented programming (OOP) is geïmplementeerd. Tot slot van deze talensamenvatting nog ons demo-programma in de taal. #include <stdio.h> void main() { int count; for (count=1;count<=9;count++) printf ( %d,count); } Hoe voeren we een programma in? Programma s kunnen werken in twee specifieke omgevingen. De eerste is een interpreter. In een interpreter worden programma s regel voor regel ingelezen en iedere regel wordt door de interpreter ter plaatse uitgevoerd. Het bekendste voorbeeld van een interpreter is BASI. Nagenoeg alle implementaties van BASI werkten onder een interpreter. Door de statement-nummers is meteen bekend waar een statement thuishoort en het invoeren was daardoor zeer eenvoudig. Wijzigen van regels kon simpel plaatsvinden door opnieuw de regel met statementnummer in te typen. Met een simpel RUN-commando konden we de resultaten op papier of scherm krijgen. Een interpreter kunnen we het beste vergelijken met bemande ruimtevaart. De astronaut die in het ruimteschip zit dient als interpreter en kan per gebeurtenis ingrijpen. Een andere mogelijkheid is te vergelijken met de onbemande vorm van ruimtevaart. Hier moet vooraf voorzien worden wat er kan gebeuren. Deze mogelijkheid wordt een compiler genoemd. Een compiler vertaalt een programma via een aantal tussenstappen naar een programma in pure machinetaal. Als dit programma runt, heeft de compiler er geen vat meer op. Het vertalen van programma naar machinetaal heet compileren. Om een programma te maken wordt in principe de volgende volgorde gehanteerd: Het programma wordt ingevoerd met een ruwe-asii-editor. Ruwe ASII is een bestandsformaat waar regels in gewone tekst worden afgesloten met een End-OF- LINE-teken. Het programma wordt met behulp van een -compiler vertaalt naar assemblercode. Assemblercode is voor mensen leesbare machinetaal. De - compiler werkt in twee stappen. Eerst wordt in de zogenaamde preprocessor voorgedefinieerde constanten en tabellen ingevuld (Hierin wordt in bovenstaand

bijvoorbeeld de #include-regel verwerkt). In het tweede gedeelte van de compiler wordt he programma uiteindelijk vertaald. De assemblercode wordt met behulp van een assembleerprogramma vertaalt naar zogenaamde objectcode. Objectcode is binaire machinecode (door de machine leesbaar), maar library-routines zijn nog niet toegevoegd. Vanuit de objectcode wordt met behulp van een linker de library-routines toegevoegd. Deze library-routines kunnen standaard-routines zijn (Bijvoorbeeld printf in bovenstaand voorbeeld), maar ook eigen routines (bijvoorbeeld libraries die bij onze hardware zijn bijgeleverd). Het uiteindelijke programma kan op de computer worden uitgevoerd. Blijkt het niet goed te werken, dan kunnen we in de editor wijzigingen doorvoeren, waarna we het geheel weer opnieuw compileren. Ontwikkelomgevingen Bovenstaand programmeervolgorde is de basis van alle programmeeromgevingen. In veel gevallen zullen echter bepaalde vereenvoudigingen aangebracht zijn. Zo zal vaak de compiler (met zijn preprocessor) en de assembler geïntegreerd zijn. Uiteindelijk blijven dan drie stappen over: Edit, ompile, Link. De firma Borland heeft op het gebied van de -compiler een hoop betekend. Vergelijkbaar met Turbo Pascal heeft Borland voor een zogenaamde Integrated Development Environment (IDE) ontwikkeld. Dit lijkt enigszins op een interpreter, maar de IDE levert echte machinetaalprogramma s af (executables). De IDE is in feite een slimme combinatie van bovengenoemde programma s, waardoor het ontwikkelen van programma snel gaat. Met de opkomst van het Windows-platform bleek het lastig te zijn op op een makkelijke manier in een Windows-omgeving te programmeren. De gebruikte interfaces als iconen, buttons, edit-boxen, listboxen e.d. zijn lastig te programmeren vanuit ruwe -code. Niettemin is de taal (Of eigenlijk ++ in dit geval) wel een uiterst geschikte taal om de code in te beschrijven. Om dit gat op te vullen is er onder andere door Borland een zogenaamde Rapid Application Development tools (RAD) ontwikkeld. Indeze RAD wordt een programma op twee manieren tegelijk opgebouwd. Het visuele gedeelte bouwen we op via het scherm, waarbij we de visuele delen op het scherm plaatsen. De code die we per item willen laten uitvoeren, kunnen we snel en makkelijk invoeren. De visuele elementen worden door de RAD-omgeving omgezet in relevante -code, maar hiervan zien we doorgaans weinig. Met de opkomst van de RAD is een groot deel van het codeerwerk vervallen en we hoeven ons eigenlijk alleen nog te concentreren op de corebusiness van het programma. Op de volgende bladzijden staat een voorbeeld van de Borland ++ IDE en de RAD van Borland ++Builder.

Formatting -programma s hebben de onhebbelijkheid dat ze onleesbaar worden als je er maar wat op los typt. Het is daarom belangrijk om vanaf het begin een stijl te gebruiken waarin je je programma s intypt. Het maakt uiteindelijk niet zoveel uit welke stijl je adopteert. Het belangrijkste is dat je een stijl kiest, waarin je je thuis voelt en dat je je eraan houdt. Toch willen we een paar richtlijnen geven: Laat de syntax altijd correct zijn. Als we een tekst intypen, dan beginnen we meestal met regel 1 en typen we net zo lang door totdat we aan de eind van de tekst zijn. Bij een -programma dat uit structuren bestaat, kan dit aanleiding tot vergissingen geven. Zorg daarom dat je eerst de structuren afmaakt, voordat je de structuren invult. Hieronder een (deel)voorbeeld: Fase 1: if (getal==5) { } Fase 2: if (getal==5) { getal+=3; printf ( %d,getal); } Merk op dat we eerst de afsluitende accolade (Die bij de structuur hoort) direct na de eerste accolade intypen. Ook als we andere structuren binnen deze structuur invullen, dan weer eerst de structuur kloppend houden. Uiteindelijk krijgen we op deze manier een grof raamwerk van ons programma dat leeg is, maar qua structuur wel klopt. Wijken we hiervan af, dan lopen we uiteindelijk het risico dat accolades uiteindelijk op de verkeerde plaats komen met rampzalige gevolgen voor het programma. In gevallen waar dit de duidelijkheid ten goede komt, kan je overwegen bovenstaand statement op één regel te plaatsen. Bovenstaand voorbeeld wordt dan: if (getal==5) { getal+=3; printf ( %d,getal); } Doe dit echter niet als de structuur te lang of te ingewikkeld wordt. De leesbaarheid heeft er dan onder te leiden.

Houdt het programma overzichtelijk. Dit is een open deur, maar in is het heel makkelijk om een programma nagenoeg onleesbaar te maken. Veel gereserveerde woorden in worden namelijk weergegeven door enkele symbolen (Bijvoorbeeld de accolades, die vergelijkbaar zijn met de pascal-woorden begin en end, hetgeen veel leesbaarder is). Plaats daarom bij elkaar horende accolades recht onder elkaar. De in het vorige punt genoemde typemethode garandeert deze regel min of meer. Houdt het programma printervriendelijk. In sommige gevallen zul je een programmasource wel eens uit moeten printen. Het vinden van een structuurfout kan namelijk lastig zijn op het beeldscherm. Papier kan dan behulpzaam zijn. Bepaalde vormen van layoutkeuze kan er echter wel eens voor zorgen dat het programma erg veel papier kost. Hieronder twee voorbeelden: if ( getal==5 ) Dit zijn vier regels, terwijl if (getal==5) er eentje is. Een ander voorbeeld: if (!strcmp(regel, LOAD )) LoadLine(); else if (!strcmp(regel, SAVE )) SaveLine(); else If (!strcmp(regel, PRINT )) PrintLine(); kost meer papier en is onduidelijker dan: if (!strcmp(regel, LOAD )) LoadLine(); else if (!strcmp(regel, SAVE )) SaveLine(); else If (!strcmp(regel, PRINT )) PrintLine(); Laat de regels niet onnodig breed worden Zeker als je functies gebruikt met veel argumenten, kan dit aan de rechterkant uit het beeld lopen. Groepeer dan deze argumenten indien mogelijk tot leesbare blokken, zie onderstaande functiedefinitie.

int OYDefineMenu ( char *menuname, int posx, int lenx, char *title, WORD status, WORD backolor, struct Dlink *list) int posy, int leny, WORD foreolor, In bovenstaand voorbeeld zijn de argumenten die bij elkaar horen naast elkaar gebleven, terwijl de andere argumenten elk op een eigen regel staan. Zouden we alles naast elkaar geplaatst hebben, dan had de regel ver van het scherm afgelopen, zelfs zonder de hier gebruikte spatie. De syntax van Zoals gezegd is er een norm van. Er is echter een eenvoudige methode om de syntax van na te gaan. is namelijk beschreven in syntax-diagrammen. In het boek staan deze weergegeven op bladzijde 318 t/m 325 (Grammatica). Opgave voor het practicum: Ga na op de computer welke compiler hier beschikbaar is en van welk type (Klassiek, IDE of RAD). Kijk hoe je het programma op moet starten. Let vooral op de volgende zaken: Hoe start ik de editor op. Hoe sla ik tekst op in de editor Hoe maak ik een tussentijdse reservekopie (indien mogelijk) Hoe sluit ik de editor af Hoe compileer is, en zijn er tussenfases te onderscheiden? Zijn er in de compiler opties die van belang zijn. Hoe link ik een programma? Type het programma in en maak een begin met het kiezen van een eigen stijl. Vertaal het programma (one to nine) met behulp van de compiler en kijk of je uiteindelijk een resultaat op het scherm kan krijgen. Kijk welke opties de omgeving je zoal biedt en ga daarbij na welke opties geschikt zijn voor je wensen.