12 Meer over pointers

Save this PDF as:
 WORD  PNG  TXT  JPG

Maat: px
Weergave met pagina beginnen:

Download "12 Meer over pointers"

Transcriptie

1 12 Meer over pointers 12.1 Arrays van pointers Omdat pointers zelf variabelen zijn, is het mogelijk arrays van pointers te maken. Elk arrayelement is een pointer naar een of ander object. In de declaratie int *ptr[4]; is de variabele ptr een array van vier elementen die pointers naar een integer zijn. Als x en t integer variabelen zijn, geeft de toekenning ptr[3]= &x; het adres van de variabele x als waarde aan het laatste element van de array. Als we de declaraties int v4[4], v7[7], v2[2], v3[3]; hebben, kunnen we het nulde element van ptr een waarde geven die het eerste element in de integer array v4 adresseert, namelijk met de toekenning ptr[0]= &v4 [0]; of, gebruikelijker, met: ptr[0l = v4; Als we het basisadres van de arrays v4, v7, v2 en v3 aan opeenvolgende elementen van de array ptr toekennen, hebben we in feite een tweedimensionale array bestaande uit eendimensionale arrays van ongelijke lengte. De array heeft niet meer de gebruikelijke rechthoekige vorm. We kunnen ons deze tweedimensionale array voorstellen zoals in volgende figuur is afgebeeld. 1

2 De noodzakelijke toekenningen zijn: ptr[0l = v4; ptr[1] = v7; ptr[2]= v2; ptr[4]= v3; De array v7 kan worden afgedrukt met de functieaanroep print_rij(ptr[1], 7); als de functie print_rij zo geprogrammeerd is: void print_rij(int *pt, int n) { int k; /* lusteller */ for (k = 0; k < n; k++) /* voor elk element */ printf("%d\n", *pt++); /* print en schuif op */ Meestal worden arrays van pointers voor strings gebruikt. We demonstreren dit gebruik met een programma dat een reeks tekstregels op alfabetische volgorde zet. In volgend voorbeeld zullen we een methode gebruiken om regels tekst te sorteren. Daarvoor hebben we een geschikte datarepresentatie nodig die efficiënt en handig met regels tekst van verschillende lengte kan werken. Een mogelijke oplossing is naar de regels rechtstreeks met pointers te verwijzen. Omdat er waarschijnlijk meer dan één regel tekst zal zijn, is er een array van pointers nodig. In een grote array regelbuffer staan de regels die gesorteerd moeten worden, en wel gewoon achter elkaar. In een tweede array regelpointer staan pointers naar de plaatsen in regelbuffer waar de bijbehorende regel begint. Dus regelpointer [k] is de positie in regelbuffer waar de k-de regel begint, voor k >= 0. Volgende figuur illustreert deze opzet. 2

3 Als in de algoritme een tweetal regels moet worden verwisseld, worden alleen de pointers verwisseld, niet de tekstregels zelf. Dat voorkomt dat we grote hoeveelheden data moeten verhuizen. Ook het geheugenbeheer wordt vereenvoudigd, omdat we regels van verschillende lengte moeten verwisselen. Het sorteerprogramma leest regels tekst in de datastructuur, sorteert ze (door de pointers te veranderen) en drukt ze vervolgens af. Omdat de array regelpointer een of andere vaste grootte zal hebben, is er een maximum gesteld aan het aantal regels dat kan worden opgeslagen. Er bestaat ook een maximum voor de totale ruimte die in regelbuffer aanwezig is. Als die ruimte bij het lezen van de invoer wordt overschreden, is dit een fout. De functie die verantwoordelijk is voor de invoer, levert een statuscode die aangeeft of de invoer geslaagd is of dat de limieten zijn overschreden. De invoer wordt afgesloten met de afsluiten "ZZZ". Het sorteringsalgoritme dat we nu gaan beschrijven noemen we pc_sort. Het is een krachtig en eenvoudig algoritme dat een rij kan sorteren met het absolute minimum aan verplaatsingen van de data. Dit is zeer belangrijk wanneer we bijvoorbeeld ingewikkelde structures (met veel velden) moeten sorteren op een of ander veld. 0 1 aantal - 1 klaar vmin loper We werken met drie variabelen: klaar: is een variabele die aangeeft tot waar de rij al gesorteerd is. Deze variabele loopt van plaats 0 tot plaats aantal-1 (aantal-1 niet inbegrepen, want voor deze klaar zijn er geen elementen meer te vergelijken) vmin: nummer van het voorlopige minimum (kleinste element) tussen klaar en loper. 3

4 loper: loopt van klaar tot en met aantal-1 op zoek naar een element in de rij die kleiner is dan het element waarvan het nummer onthouden wordt in vmin. Het is duidelijk dat op het einde van de procedure klaar helemaal achteraan zit en de rij dus gesorteerd is. Een aantal interessante functies zijn: Syntax #include <stdio.h> char *gets(char *s); Description Gets a string from stdin. gets collects a string of characters terminated by a new line from the standard input stream stdin and puts it into s. The new line is replaced by a null character (\0) in s. gets allows input strings to contain certain whitespace characters (spaces, tabs). gets returns when it encounters a new line; everything up to the new line is copied into s. The gets function is not length-terminated. If the input string is sufficiently large, data can be overwritten and corrupted. Return Value On success, gets returns the string argument s. On end-of-file or error, it returns NULL Syntax #include <string.h> size_t strlen(const char *s); Description Calculates the length of a string. strlen calculates the length of s. Return Value strlen returns the number of characters in s, not counting the null-terminating character. 4

5 Syntax #include <string.h> char *strcpy(char *dest, const char *src); Description Copies one string into another. Copies string src to dest, stopping after the terminating null character has been moved. Return Value strcpy returns dest. Syntax #include <string.h> int strcmp(const char *s1, const char *s2); Description Compares one string to another. strcmp performs an unsigned comparison of s1 to s2, starting with the first character in each string and continuing with subsequent characters until the corresponding characters differ or until the end of the strings is reached. Return Value If s1 is... strcmp returns a value that is... less than s2 < 0 the same as s2 == 0 greater than s2 > 0 Syntax #include <string.h> char *strcat(char *dest, const char *src); Description Appends one string to another. strcat appends a copy of src to the end of dest. The length of the resulting string is strlen(dest) + strlen(src). Return Value strcat returns a pointer to the concatenated strings. 5

6 /* ** Lees een reeks tekstregels en voer ze in alfabetische volgorde uit. De regels worden eerst ** opgeslagen en dan met de algoritme 'pc_sort' gesorteerd. De invoer wordt afgesloten met ** de regel "ZZZ". */ #include <stdio.h> #include <string.h> #define MAXCHARS #define MAXREGELS 200 #define MAXTEKST 128 #define AFSLUITER "ZZZ" enum status { TEVEELREGELS, TEVEELCHARS, GESLAAGD ; typedef enum status Status; Status lees_regels (char *[ ], char [ ], int *); void pc_sort (char *[ ], int); void print_regels (char *[ ], int); int main() { char regelbuffer[maxchars]; /* regels tekst */ char *regelpointer[maxregels]; /* rij pointers naar beginplaatsen van de regels */ int aantalregels; /* aantal invoerregels */ Status afloopinlees; afloopinlees=lees_regels(regelpointer,regelbuffer,&aantalregels); switch (afloopinlees) { case GESLAAGD : pc_sort (regelpointer,aantalregels); print_regels (regelpointer,aantalregels); break; case TEVEELREGELS : printf("te veel regels!\n"); break; case TEVEELCHARS : printf("te veel tekens!\n"); break; default: break; 6

7 Status lees_regels(char *regelpointer[ ], char regelbuffer[ ], int *aantalregels) { char *buffer, *eindebuffer; /* pointers naar begin & einde van regelbuffer */ char regel[maxtekst]; /* Tijdelijke buffer voor inhoud van 1 regel */ buffer=regelbuffer; /* zet beginpointer */ eindebuffer=regelbuffer+maxchars; /* zet eindebuffer: eerste niet-beschikbare plaats */ *aantalregels=0; while (gets(regel), strcmp(regel,afsluiter)!= 0) /* gebruik komma operator: eerst wordt gets(regel) uitgevoerd, daarna de test strcmp(regel,afsluiter)!= 0 */ if (*aantalregels==maxregels) return (TEVEELREGELS); /* te veel regels */ else if (buffer+strlen(regel)+1>=eindebuffer) return (TEVEELCHARS); /* geen plaats meer om de tijdelijke regel te copiëren naar de regelbuffer */ else { regelpointer[(*aantalregels)++]=buffer; /* vul pointer nieuwe regel in en incrementeer aantalregels achteraf */ strcpy (buffer,regel); /* copiëer regel naar de plaats waar buffer naar wijst */ buffer+=strlen(regel)+1; /* zet buffer pointer klaar voor nieuwe regel let op: +1 omwille van '\0' */ return (GESLAAGD); 7

8 void pc_sort(char *regelpointer[ ], int aantalregels) { int klaar, vmin, loper; char *hulp; for (klaar=0; klaar < aantalregels-1; klaar++) { vmin=klaar; for (loper=klaar+1; loper<aantalregels; loper++) if (strcmp(regelpointer[vmin],regelpointer[loper]) vmin=loper; /* pas vmin aan indien loper kleiner */ if (vmin!= klaar) /* wissel indien nodig */ { hulp=regelpointer[klaar]; regelpointer[klaar]=regelpointer[vmin]; regelpointer[vmin]=hulp; void print_regels(char *regelpointer[ ], int aantalregels) { int k; for (k=0; k<aantalregels; k++) printf("%s\n",regelpointer[k]); 12.2 Pointers naar pointers Een formeel argument van een functie gedeclareerd als zijnde van type 'array van T', waarin T een of ander type is, wordt behandeld alsof het van type 'pointer naar T' is. Pointers en arrays zijn equivalent en deze verandering blijft onzichtbaar voor de programmeur en wordt automatisch door de C-compiler aangebracht. Neem bijvoorbeeld deze functie: int somarray(int a[ ], int n) { int som=0, k; /* lopend totaal en teller */ for (k = 0; k < n; k++) som += a[k]; return (som); Het argument a had de programmeur ook kunnen declareren als int *a Dit is in feite de vorm die de C-compiler eraan geeft. 8

9 Als een argument van een functie wordt gedeclareerd als zijnde van type 'array van T' en T van type 'pointer naar S' is, voor een of ander type S, dan krijgt het argument het type 'pointer naar pointer naar S'. Neem bijvoorbeeld de functie print-regels in vorig programma, met de declaratie: void print_regels (char *regelpointer, int aantalregels) De C-compiler maakt hiervan: void print_regels (char **regelpointer, int aantalregels) Dus regelpointer heeft als waarde het basisadres van een reeks geheugenplaatsen (dat wil zeggen een array), die elk het adres zijn van het eerste karakter van een string. Volgende figuur geeft deze situatie schematisch weer. Het object regelpointer bezit de waarde die het adres is van de array van adressen. Het object *regelpointer is het eerste adres in die array en is daarom het adres van het eerste karakter van de eerste string. Het object **regelpointer is het eerste karakter van de eerste string. Let goed op de prioriteit en de associativiteit van de indirectie-operator * en de andere operatoren. Let vooral op de operatoren * (indirectie), ++ (increment) en -- (decrement), die allemaal dezelfde prioriteit hebben en waarvan de associativiteit van rechts naar links loopt. Dus **regelpointer++ verwijst naar het eerste karakter van de eerste string (en verhoogt regelpointer met 1); en ** ++ regelpointer verwijst naar het eerste karakter van de tweede string (nadat regelpointer eerst met 1 is verhoogd). Op grond van het bovenstaande kunnen we de functie print_regels in termen van deze indirecties op meer niveaus herschrijven: void print_regels (char **regelpointer, int aantalregels) { int k; for (k = 0; k < aantalregels; k++) printf("%s\n", *regelpointer++); 9

10 12.3 Argumenten op de commandoregel Normaal bevindt een C-programma zich in een omgeving die verschaft wordt door het besturingssysteem. In die omgeving is het gewoonlijk mogelijk in een commandoregel die een programma aan het werk zet, argumenten mee te geven. Neem bijvoorbeeld een programma som dat wordt aangeroepen met twee argumenten op de commandoregel. Deze argumenten zijn twee integers die bij elkaar moeten worden opgeteld en waarvan de som moet worden afgedrukt. Het programma kan zo worden geactiveerd: som De uitvoer van het programma is dan natuurlijk 579. De functie main van een programma wordt vaak gedefinieerd met twee formele argumenten, die gewoonlijk argv en argc worden genoemd. Het argument argc is het aantal argumenten op de commandoregel. Omdat de naam van het programma daarbij wordt meegeteld, is argc altijd groter dan 0. In het voorbeeld van de aanroep van het programma som heeft argc de waarde 3. Het argument argv is een array van pointers naar char - pointers naar het eerste karakter in de strings die als argumenten fungeren. Omdat de naam van het programma ook als argument geldt, is argv[0] de naam van het programma. In het voorbeeld zijn argv[0], argv[1] en argv[2] respectievelijk som, 123 en 456. Het eerste echte argument is argv[1]. Het laatste argument is argv[argc-1].het programma som kan bijvoorbeeld als volgt worden geschreven. /* **Bepaal de som van twee integers die als argumenten op de commandoregel worden **meegegeven. */ #include <stdio.h> #include <stdlib.h> main(int argc, char *argv[]) { if (argc!= 3) /*controleer aantal argumenten */ printf("gebruik de vorm: %s getal getal\n", argv [0]); else printf("%d\n", atoi(argv[1]) +atoi(argv[2]); Hieronder nog enkele interessante functies: 10

11 Syntax #include <stdlib.h> int atoi(const char *s); Description Converts a string to an integer. atoi converts a string pointed to by s to int; atoi recognizes (in the following order) An optional string of tabs and spaces An optional sign A string of digits The characters must match this generic format: [ws] [sn] [ddd] In this function, the first unrecognized character ends the conversion. There are no provisions for overflow in atoi (results are undefined). Return Value atoi returns the converted value of the input string. If the string cannot be converted to a number of the corresponding type (int), atoi returns 0. Syntax #include <stdlib.h> char *itoa(int value, char *string, int radix); Description Converts an integer to a string. itoa converts value to a null-terminated string and stores the result in string. With itoa, value is an integer. radix specifies the base to be used in converting value; it must be between 2 and 36, inclusive. If value is negative and radix is 10, the first character of string is the minus sign (-). Note: The space allocated for string must be large enough to hold the returned string, including the terminating null character (\0). itoa can return up to 17 bytes. Return Value itoa returns a pointer to string. Er bestaan nog varianten, zoals atof (array to double), ltoa, 11

12 Hier volgt nog een eenvoudig voorbeeld van een programma met argumenten in de commandoregel. Het heet echo en het echoot zijn argumenten naar de standaarduitvoer, met een spatie tussen de strings. Dus als het commando is: echo Mijn eerste programma dan is de uitvoer: Mijn eerste programma In dit voorbeeld is argc gelijk aan 4 en zijn argv[0], argv[1], argv[1] en argv[3] achtereenvolgens echo, Mijn, eerste en programma. U ziet dat de aan een string voorafgaande witruimtekarakters niet in de argumenten zijn opgenomen. Ze dienen op de commandoregel alleen als scheiders. Het programma is als volgt. Echo alle argumenten uit de commandoregel, gescheiden door één spatie. #include <stdio.h> #define NEWLINE '\n' main(int argc, char *argv[ ]) { int k; for (k = l; k < argc; k++) /* voor elk argument */ printf ("%s%c", argv[k ], k!= argc-1? ' ' : NEWLINE) ; 12

13 Een ander voorbeeld is een C programma dat eenvoudige rekenkundige bewerkingen vanaf de parameterlijn kan oplossen: #include <stdio.h> #include <stdlib.h> #include <string.h> /* een operator in commentaar schrijven we als een. dus : eerste.tweede een. kan dus +, -, * of / zijn + in commentaar kan ook een - zijn * in commentaar kan ook een / zijn */ int getfunc(char s[ ], int lim); void cleanfunc(char s[ ]); main (int argc, char *argv[ ]) { double eerste,tweede,derde; int i; char uitdruk[256]="",oper1, oper2; if (argc<2) { printf("?"); getfunc(uitdruk,256); else { for (i=1;i<argc;i++) strcat(uitdruk,argv[i]); cleanfunc(uitdruk); i=0; eerste=atof(&uitdruk[i]); /* eerste operand gevonden */ oper1=' '; tweede=0.; i=1; /* we gaan op zoek naar de eerste operator */ while (!((uitdruk[i]=='+') (uitdruk[i]=='-') (uitdruk[i]=='*') (uitdruk[i]=='/'))&&(uitdruk[i]!='\0')&&(uitdruk[i]!='=')) i++; if ((uitdruk[i]=='\0') (uitdruk[i]=='=')) goto eval; oper1=uitdruk[i++]; /* eerste operator gevonden */ tweede=atof(&uitdruk[i]); /* tweede operand gevonden */ getopt2: /* op zoek naar tweede operand */ i++; /* getal is minstens 1 char lang */ while (!((uitdruk[i]=='+') (uitdruk[i]=='-') (uitdruk[i]=='*') 13

14 (uitdruk[i]=='/'))&&(uitdruk[i]!='\0')&&(uitdruk[i]!='=')) i++; if (uitdruk[i]=='=') uitdruk[i]='\0'; if (uitdruk[i]!='\0') /* tweede operator gevonden */ { oper2=uitdruk[i++]; derde=atof(&uitdruk[i]); /* en derde operand */ if ((oper1=='*') (oper1=='/')) /* het is een uitdrukking van de vorm: eerste*tweede.derde eerste*tweede mag men uitrekenen */ { switch(oper1) { case '*' : eerste = eerste * tweede;break; case '/' : eerste = eerste / tweede;break; default : eerste = 0;break; oper1=oper2; tweede=derde; goto getopt2; /* terug op zoek naar operator en operand */ if ((oper2=='*') (oper2=='/')) /* het is een uitdrukking van de vorm: eerste.tweede*derde tweede*derde mag men uitrekenen */ { switch(oper2) { case '*' : tweede = tweede * derde;break; case '/' : tweede = tweede / derde;break; default : tweede = 0;break; goto getopt2; /* terug op zoek naar operator en operand */ if ((oper2=='+') (oper2=='-')) /* het is een uitdrukking van de vorm: eerste+tweede+derde eerste+tweede mag men uitrekenen alle combinaties met een * worden hierboven uitgetest */ { switch(oper1) { case '+' : eerste = eerste + tweede;break; case '-' : eerste = eerste - tweede;break; default : eerste = 0;break; oper1=oper2; tweede=derde; goto getopt2; /* terug op zoek naar operator en operand */ eval: if (uitdruk[i]=='=') uitdruk[i]='\0'; 14

15 if (oper1!=' ') switch(oper1) /* eerste.tweede uitrekenen */ { case '*' : eerste = eerste * tweede;break; case '+' : eerste = eerste + tweede;break; case '-' : eerste = eerste - tweede;break; case '/' : eerste = eerste / tweede;break; default : eerste = 0;break; printf("%s=%lf\n",uitdruk,eerste); return 0; int getfunc(char s[], int lim) {int c,i; for (i=0;i<lim-1 && (c=getchar())!= EOF && c!= '\n';) { if (c==':') c='/'; if (c==',') c='.'; if (c!=' ') s[i++]=c; s[i]='\0'; return i; void cleanfunc(char s[]) {int i=0; while (s[i]!='\0') { if (s[i]==':') s[i]='/'; if (s[i]==',') s[i]='.'; i++; Veel C-programma's worden geschreven met deze opzet van de argumenten. Vaak zijn de argumenten namen van files die door het programma moeten worden verwerkt, zodat het programma zo kan worden gemaakt dat deze filenamen tijdens de uitvoering van het programma kunnen worden opgegeven. Soms worden deze argumenten aangevuld met opties die het effect van het programma nog verder kunnen veranderen. Opties worden vaak opgegeven als een of meer karakters voorafgegaan door een koppelteken (-). Stel bijvoorbeeld dat er invoer en uitvoer van en naar een bestand moet en dat het programma gestart wordt met: prog -ixxxx.yyy -ozzzz.vvv 15

16 Maar: de volgorde van de parameters mag geen invloed hebben: prog -ozzzz.vvv -ixxxx.yyy moet net hetzelfde doen! Dit kan men als volgt oplossen: #include <stdio.h> #include <string.h> /* om stringfuncties te kennen: */ /* strcpy, strcmp, strcat, strlen, strstr, enz.. */ int main(int argc, char *argv[]) { char naaminfile[256]="standard.in", naamoutfile[256]="standard.out"; // Volgende variabelen dienen voor het onderzoeken van de parameterlijn: char optletter; char *optarg; int optnummer; // Met volgende bijhorende code: for (optnummer=1;optnummer<argc;optnummer++) // voor alle parameters, behalve de naam van het programma { optletter=argv[optnummer][1]; // de eerste character is steeds een - teken optarg= &argv[optnummer][2]; // onthoud het adres van het begin van de parameter // type oproep: programmanaam -inaam1 -onaam2 // andere codes: verwaarlozen. switch(optletter) { case 'i': strcpy(naaminfile,optarg); break; case 'o': strcpy(naamoutfile,optarg); break; default: break; /* rest : niet bekijken */ /* daarna kan het programma echt beginnen met zijn taak */ 16

17 12.4 Dynamische geheugenallocatie #include <stdio.h> #include <stdlib.h> struct knoop { long int int struct knoop struct knoop ; waarde; freq; *links; *rechts; struct knoop *newknoop (void); struct knoop *voegbij (struct knoop *, long int); struct knoop *voegtussen (struct knoop *, long int); void boomprint (struct knoop *); void rijprint (struct knoop *); main() {long int getal; struct knoop *proot; /*begin programma: rootpointer wijst nog naar niets.*/ proot=null; opnieuw: /*is een boomstructuur of een lineaire structuur gewenst?*/ printf ("Keuze:\n 1:boomstructuur\n 2:lineaire structuur\n"); scanf ("%ld",&getal); printf ("\nuw keuze: %1ld\n",getal); /*indien getal = 1 : gebruik boomstructuur = 2 : gebruik lineaire structuur = iets anders : stel vraag opnieuw */ if (!((getal == 1) (getal == 2))) goto opnieuw; 17

18 if (getal == 1) /*men wenst te werken met een boomstructuur*/ { /*vraag een getal*/ printf("boomstructuur\n"); printf ("geef positief getal - negatief om te eindigen\n"); scanf ("%ld",&getal); /*zolang het getal niet negatief is, voeg het bij in de boomstructuur.*/ while (getal >= 0) { proot=voegbij(proot, getal); /*printf ("geef positief getal\n");*/ scanf ("%ld",&getal); /*druk de boomstructuur af.*/ boomprint (proot); else /*men wenst te werken met een lineaire structuur*/ { /*vraag een getal*/ printf("lineaire structuur\n"); printf ("geef positief getal - negatief om te eindigen\n"); scanf ("%ld",&getal); /*zolang het getal niet negatief is, voeg het bij in de lineaire structuur.*/ while (getal >= 0) { proot=voegtussen(proot, getal); /*printf ("geef positief getal\n");*/ scanf ("%ld",&getal); /*druk de lineaire structuur af.*/ rijprint (proot); ; printf ("\n einde programma"); return 0; struct knoop *newknoop (void) { return (struct knoop *) malloc(sizeof(struct knoop)); void boomprint (struct knoop *p) { if (p!=null) { boomprint (p->links); printf("%8ld : %8d\n",p->waarde,p->freq); boomprint (p->rechts); 18

19 void rijprint (struct knoop *p) { while (p!=null) { printf("%8ld : %8d\n",p->waarde,p->freq); p=p->rechts; struct knoop *voegbij (struct knoop *p, long int getal) { if (p == NULL) /*het is een nieuw getal*/ { p=newknoop(); /*nieuwe struct bijmaken*/ if (p==null) printf("geen geheugen meer vrij\n"); p->waarde=getal; /*vul getalwaarde in*/ p->freq=1; /*het getal komt de eerste keer voor*/ p->links=null; /*er zitten geen getallen lager in*/ p->rechts=null; /*de boomstructuur*/ else if (getal == p->waarde) (p->freq)++; /*het getal komt eenmaal meer voor*/ else if (getal < p->waarde) p->links=voegbij(p->links,getal); /* het getal moet links worden bijgeplaatst en de pointer naar links eventueel aangepast*/ else p->rechts=voegbij(p->rechts,getal); /* het getal moet rechts worden bijgeplaatst en de pointer naar rechts eventueel aangepast*/ return p; /*stuur de (aangepaste) pointer terug*/ /*zie $: hier wordt een dubbelgelinkte rij gebruikt: de pointers wijzen zowel naar het vorige als naar het volgende element in de rij getallen. in vele toepassingen is dit niet nodig, en komt men toe met een enkel gelinkte rij waarbij er alleen een pointer naar het volgende element van de rij beschikbaar is. men heeft dan wel problemen bij het terug vrijgeven (free) van deze structures: men moet dan telkens van voor af aan in de rij herbeginnen als het laatste element gewist is.*/ 19

20 struct knoop *voegtussen (struct knoop *p, long int getal) { struct knoop *p1, *p2, *p3; if (p == NULL) /*de rij is nog leeg*/ /*het is een nieuw getal*/ { p=newknoop(); /*nieuwe struct bijmaken*/ if (p==null) printf("geen geheugen meer vrij\n"); p->waarde=getal; /*vul getalwaarde in*/ p->freq=1; /*het getal komt de eerste keer voor*/ p->links=null; /*links=begin van de rij; zie $*/ p->rechts=null; /*rechts: nog niets*/ else { /*begin te zoeken naar een knoop met waarde groter of gelijk aan getal*/ p1=p; p2=null; /*p2 is eerst NULL : eerste struct*/ while ((p1!=null) && (p1->waarde < getal)) { /*p2 volgt p1*/ p2=p1; p1=p1->rechts; /*indien p1==null wordt de < test niet meer gedaan*/ if (p1==null) { /*we zaten aan het einde van de rij*/ p1=newknoop(); if (p1==null) printf("geen geheugen meer vrij\n"); p1->waarde=getal; p1->freq=1; p1->links=p2; /*zie $*/ p1->rechts=null; p2->rechts=p1; else if (p1->waarde == getal) (p1->freq)++; /*er moet geen knoop bijkomen*/ else { /*er moet een knoop tussenkomen*/ p3=newknoop(); if (p3==null) printf("geen geheugen meer vrij\n"); p3->waarde=getal; p3->freq=1; if (p2==null) /*het is de eerste knoop*/ { p2=p=p3; p3->links=null; /*zie $*/ else { p2->rechts=p3; p3->links=p2; /*zie $*/ 20

21 p3->rechts=p1; p1->links=p3; /*zie $*/ return p; /*stuur de (aangepaste) pointer terug*/ Hoe kan men dit programma verklaren?. Het is de bedoeling een aantal positieve cijfers in te typen en deze cijfers gesorteerd bij te houden. Het programma laat toe op twee manieren te werken: enerzijds met behulp van een boomstructuur, waarbij aan de linkerkant kleinere cijfers staan en aan de rechterkant hogere cijfers en anderzijds met behulp van een (dubbel gelinkte) rij. Bekijken we nu in detail enkele bevelen: struct knoop { long int int struct knoop struct knoop ; waarde; freq; *links; *rechts; Een veld van een struct mag gerust een pointer zijn naar opnieuw hetzelfde struct type. Alle pointerstypes gebruiken immers toch hetzelfde aantal bytes, want de adressen kunnen overal in het geheugen staan. We schrijven volgende functies (om het geheel binnen redelijke dimenties te houden): struct knoop *newknoop (void); aanvraag nieuwe geheugenruimte struct knoop *voegbij (struct knoop *, long int); pas boom aan struct knoop *voegtussen (struct knoop *, long int); pas rij aan void boomprint (struct knoop *); print boom af void rijprint (struct knoop *); print rij af Een pointer die naar niets wijst, schrijft men als volgt: proot=null; 21

22 De kern van de dynamische geheugenallocatie zit in volgende functie: struct knoop *newknoop (void) { return (struct knoop *) malloc(sizeof(struct knoop)); malloc is een functie die een pointer geeft naar een pas aangemaakte ruimte in het geheugen. Als enige parameter geeft men het aantal bytes. Syntax #include <stdlib.h> or #include<alloc.h> void *malloc(size_t size); Description malloc allocates a block of size bytes from the memory heap. It allows a program to allocate memory explicitly as it's needed, and in the exact amounts needed. Allocates main memory.the heap is used for dynamic allocation of variable-sized blocks of memory. Many data structures, for example, trees and lists, naturally employ heap memory allocation. For 16-bit programs, all the space between the end of the data segment and the top of the program stack is available for use in the small data models, except for a small margin immediately before the top of the stack. This margin is intended to allow the application some room to make the stack larger, in addition to a small amount needed by DOS. In the large data models, all the space beyond the program stack to the end of available memory is available for the heap. Return Value On success, malloc returns a pointer to the newly allocated block of memory. If not enough space exists for the new block, it returns NULL. The contents of the block are left unchanged. If the argument size == 0, malloc returns NULL. De cast (struct knoop) forceert dat deze functie een pointer weergeeft naar het gewenste type, want malloc geeft een pointer naar het type void. Het aantal bytes om het type struct weer te geven, kan gevonden worden met de functie sizeof. Pointers worden veel gebruikt. De notatie p-> is een korte notatie, zoals in volgend voorbeeld: void rijprint (struct knoop *p) { while (p!=null) { printf("%8ld : %8d\n",p->waarde,p->freq); p=p->rechts; 22

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

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

Datastructuren: stapels, rijen en binaire bomen

Datastructuren: stapels, rijen en binaire bomen Programmeermethoden Datastructuren: stapels, rijen en binaire bomen week 12: 23 27 november 2015 www.liacs.leidenuniv.nl/ kosterswa/pm/ 1 Inleiding In de informatica worden Abstracte DataTypen (ADT s)

Nadere informatie

Week 5 : Hoofdstuk 11+ extra stof: meer over functies. Hoofdstuk 11:

Week 5 : Hoofdstuk 11+ extra stof: meer over functies. Hoofdstuk 11: Week 5 : Hoofdstuk 11+ extra stof: meer over functies Hoofdstuk 11: Functies Functies in C lijken heel erg op functies in Java. Maar er is één groot veschil: Java ken uitsluitend invoer-parameters, terwijl

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

De MySQL C API. Variabelen in C Functies in C Pointers in C

De MySQL C API. Variabelen in C Functies in C Pointers in C LinuxFocus article number 304 http://linuxfocus.org De MySQL C API door Özcan Güngör Over de auteur: Ik gebruik Linux sinds 1997. Vrijheid, flexibiliteit en opensource. Dat

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

Universiteit van Amsterdam FNWI. Voorbeeld van tussentoets Inleiding programmeren

Universiteit van Amsterdam FNWI. Voorbeeld van tussentoets Inleiding programmeren Universiteit van Amsterdam FNWI Voorbeeld van tussentoets Inleiding programmeren Opgave 1: Wat is de uitvoer van dit programma? public class Opgave { static int i = 0 ; static int j = 1 ; int i = 1 ; int

Nadere informatie

HOGESCHOOL VAN AMSTERDAM Informatica Opleiding. CPP 1 van 10

HOGESCHOOL VAN AMSTERDAM Informatica Opleiding. CPP 1 van 10 CPP 1 van 10 ADSdt 1-2009 TENTAMENVOORBLAD Voor aanvang van het tentamen s.v.p. de tentamengegevens goed doorlezen om eventuele misverstanden te voorkomen!! Naam student : Studentnummer : Groep : Studieonderdeel

Nadere informatie

Uitwerking Aanvullend tentamen Imperatief programmeren Woensdag 24 december 2014, 13.30 15.30 uur

Uitwerking Aanvullend tentamen Imperatief programmeren Woensdag 24 december 2014, 13.30 15.30 uur Uitwerking Aanvullend tentamen Imperatief programmeren Woensdag 24 december 2014, 13.30 15.30 uur 1. deze opgave telt voor 30% van het totaal. Schrijf een compleet programma, dat door de gebruiker vanaf

Nadere informatie

Programma-dossier WordMind

Programma-dossier WordMind IC2DA S.B. Bosch C Programmeren Programma-dossier WordMind Het ontwerpen en programmeren van het programma WordMind. Ontvangen probleemstelling Voorwoord Opgave Er werd van ons verwacht een programma

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

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

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

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

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

Intermax backup exclusion files

Intermax backup exclusion files Intermax backup exclusion files Document type: Referentienummer: Versienummer : Documentatie 1.0 Datum publicatie: Datum laatste wijziging: Auteur: 24-2-2011 24-2-2011 Anton van der Linden Onderwerp: Documentclassificatie:

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

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

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

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

4EE11 Project Programmeren voor W. College 3, 2008 2009, Blok D Tom Verhoeff, Software Engineering & Technology, TU/e 4EE11 Project Programmeren voor W College 3, 2008 2009, Blok D Tom Verhoeff, Software Engineering & Technology, TU/e 1 Onderwerpen Grotere programma s ontwerpen/maken Datastructuren en algoritmes 2 Evolutie,

Nadere informatie

De doorsnede van twee verzamelingen vinden

De doorsnede van twee verzamelingen vinden De doorsnede van twee verzamelingen vinden Daniel von Asmuth Inleiding Dit artikel probeert enkele algoritmen te vergelijken om de doorsnede van twee verzamelingen of rijen van getallen te vinden. In een

Nadere informatie

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

Leren Programmeren met Visual Basic 6.0 Les 3+4. Hoofdstuk 4 : De Selectie Leren Programmeren met Visual Basic 6.0 Les 3+4 Hoofdstuk 4 : De Selectie Visual Basic 6.0 1 Basisstructuren (herhaling) Sequentie (HK2) : Alle opdrachten gewoon na mekaar uitvoeren. Hier worden geen keuzes

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

Tentamen Objectgeorienteerd Programmeren

Tentamen Objectgeorienteerd Programmeren Tentamen Objectgeorienteerd Programmeren 5082IMOP6Y maandag 16 november 2015 13:00 15:00 Schrijf je naam en studentnummer op de regel hieronder. Sla deze pagina niet om tot de surveillant vertelt dat het

Nadere informatie

Settings for the C100BRS4 MAC Address Spoofing with cable Internet.

Settings for the C100BRS4 MAC Address Spoofing with cable Internet. Settings for the C100BRS4 MAC Address Spoofing with cable Internet. General: Please use the latest firmware for the router. The firmware is available on http://www.conceptronic.net! Use Firmware version

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

Uitwerkingen Tweede deeltentamen Imperatief programmeren Vrijdag 15 oktober 2010, 11.00-13.00 uur

Uitwerkingen Tweede deeltentamen Imperatief programmeren Vrijdag 15 oktober 2010, 11.00-13.00 uur Uitwerkingen Tweede deeltentamen Imperatief programmeren Vrijdag 15 oktober 2010, 11.00-13.00 uur 1. (2 punten per deelvraag) Deze opgave bestaat uit een aantal tekstvragen. Houd het antwoord kort: een

Nadere informatie

Gegevens invullen in HOOFDLETTERS en LEESBAAR, aub. Belgische Olympiades in de Informatica (duur : maximum 1u15 )

Gegevens invullen in HOOFDLETTERS en LEESBAAR, aub. Belgische Olympiades in de Informatica (duur : maximum 1u15 ) OI 2010 Finale 12 Mei 2010 Gegevens invullen in HOOFDLETTERS en LEESBAAR, aub VOORNAAM :....................................................... NAAM :..............................................................

Nadere informatie

Optimalisatie technieken

Optimalisatie technieken Things should be made as simple as possible, but not any simpler. Floatingpoint berekeningen Floatingpoint getallen kun je praktisch niet met elkaar vergelijken. De meeste embedded systemen hebben geen

Nadere informatie

Maak een pivot uit een Generic.List

Maak een pivot uit een Generic.List Maak een pivot uit een Generic.List Introductie in extensions, reflection en code generation Nivo: 400 Introductie In bepaalde gevallen komt het voor dat je een Generic.List van een specifieke class hebt,

Nadere informatie

Software 1. php mysql. bachelor grafische en digitale media cross-media ontwerp & grafimediatechnologie academiejaar 2010-2011 semester 1

Software 1. php mysql. bachelor grafische en digitale media cross-media ontwerp & grafimediatechnologie academiejaar 2010-2011 semester 1 Software 1 php mysql bachelor grafische en digitale media cross-media ontwerp & grafimediatechnologie academiejaar 2010-2011 semester 1 Alain Simons alain.simons@artesis.be Basis php 1. Introductie 2.

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

Korte uitleg: Wat doet de shell met mijn commandoregel?

Korte uitleg: Wat doet de shell met mijn commandoregel? Korte uitleg: Wat doet de shell met mijn commandoregel? Het onderstaande is heel erg Bash gericht, maar geldt i.h.a. ook voor andere shells. Vooral als het om "begrip" gaat. Iedere regel die aan de shell

Nadere informatie

PROGRAMMEREN IN C CURSUS VOOR STARTERS. J.W. Welleman. header files. source files. *.h. *.c. compiler. object files. library builder. *.

PROGRAMMEREN IN C CURSUS VOOR STARTERS. J.W. Welleman. header files. source files. *.h. *.c. compiler. object files. library builder. *. PROGRAMMEREN IN C CURSUS VOOR STARTERS J.W. Welleman header files *.h source files *.c compiler library builder library files object files *.obj *.lib linker executable *.exe PROGRAMMEREN IN C CURSUS VOOR

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

http://www.liacs.nl/home/kosters/java/

http://www.liacs.nl/home/kosters/java/ sheets Programmeren 1 Java college 2, Walter Kosters De sheets zijn gebaseerd op de hoofdstukken 2 tot en met 6 van: D. Bell en M. Parr, Java voor studenten, Prentice Hall, 2002 http://www.liacs.nl/home/kosters/java/

Nadere informatie

Gebruik van command-line operating systems

Gebruik van command-line operating systems Gebruik van command-line operating systems Mattias Holm & Kristian Rietveld Overzicht - Waarom hier meer over leren? - Wat is een shell? - Hoe werkt een shell? - Pipes en redirectie - Handige utilities

Nadere informatie

Contents. Introduction Problem Definition The Application Co-operation operation and User friendliness Design Implementation

Contents. Introduction Problem Definition The Application Co-operation operation and User friendliness Design Implementation TeleBank Contents Introduction Problem Definition The Application Co-operation operation and User friendliness Design Implementation Introduction - TeleBank Automatic bank services Initiates a Dialog with

Nadere informatie

Ontpopping. ORGACOM Thuis in het Museum

Ontpopping. ORGACOM Thuis in het Museum Ontpopping Veel deelnemende bezoekers zijn dit jaar nog maar één keer in het Van Abbemuseum geweest. De vragenlijst van deze mensen hangt Orgacom in een honingraatpatroon. Bezoekers die vaker komen worden

Nadere informatie

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

Datatypes Een datatype is de sort van van een waarde van een variabele, veel gebruikte datatypes zijn: String, int, Bool, char en double. Algemeen C# Variabele Een variabele is een willekeurige waarde die word opgeslagen. Een variabele heeft altijd een datetype ( De soort waarde die een variabele bevat). Datatypes Een datatype is de sort

Nadere informatie

Hoofdstuk 1: Inleiding. Hoofdstuk 2: Klassen en objecten Datahiding: afschermen van implementatiedetails. Naar de buitenwereld toe enkel interfaces.

Hoofdstuk 1: Inleiding. Hoofdstuk 2: Klassen en objecten Datahiding: afschermen van implementatiedetails. Naar de buitenwereld toe enkel interfaces. Hoofdstuk 1: Inleiding Objectoriëntatie: 1. Objecten & klassen: samenwerking van componenten om bepaald doel te bereiken; herbruikbaarheid. 2. Encapsulation: afschermen gedragingen en kenmerken van de

Nadere informatie

Dynamische websites met PHP (basis) Karel Nijs 2010/09

Dynamische websites met PHP (basis) Karel Nijs 2010/09 Dynamische websites met PHP (basis) Karel Nijs 2010/09 Leswijze Eerst wat theorie Begeleid met (korte) oefeningen Editor = UltraEdit Geen DreamWeaver Browser = Internet Explorer Vereiste voorkennis: (X)HTML

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

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

II. ZELFGEDEFINIEERDE FUNCTIES

II. ZELFGEDEFINIEERDE FUNCTIES II. ZELFGEDEFINIEERDE FUNCTIES In Excel bestaat reeds een uitgebreide reeks van functies zoals SOM, GEMIDDELDE, AFRONDEN, NU enz. Het is de bedoeling om functies aan deze lijst toe te voegen door in Visual

Nadere informatie

CHROMA STANDAARDREEKS

CHROMA STANDAARDREEKS CHROMA STANDAARDREEKS Chroma-onderzoeken Een chroma geeft een beeld over de kwaliteit van bijvoorbeeld een bodem of compost. Een chroma bestaat uit 4 zones. Uit elke zone is een bepaald kwaliteitsaspect

Nadere informatie

Multi user Setup. Firebird database op een windows (server)

Multi user Setup. Firebird database op een windows (server) Multi user Setup Firebird database op een windows (server) Inhoudsopgave osfinancials multi user setup...3 Installeeren van de firebird database...3 Testing van de connectie met FlameRobin...5 Instellen

Nadere informatie

NCTS - INFORMATIE INZAKE NIEUWIGHEDEN VOOR 2010

NCTS - INFORMATIE INZAKE NIEUWIGHEDEN VOOR 2010 NCTS - INFORMATIE INZAKE NIEUWIGHEDEN VOOR 2010 Op basis van het nieuwe artikel 365, lid 4 (NCTS) en het nieuwe artikel 455bis, lid 4 (NCTS-TIR) van het Communautair Toepassingswetboek inzake douane 1

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

[BP-ebMS-H-000] Welke versie van Hermes moet er gebruikt worden?

[BP-ebMS-H-000] Welke versie van Hermes moet er gebruikt worden? [BP-ebMS-H-000] Welke versie van Hermes moet er gebruikt worden? Gebruik altijd de laatste versie omdat er serieuse bug-fixes in kunnen zitten. Check altijd de release notes en openstaande bugs. Er is

Nadere informatie

In deze aflevering van deze serie zal ik proberen een groot gebrek van Turbo Pascal weg te nemen, namelijk het gemis aan Random Access Files.

In deze aflevering van deze serie zal ik proberen een groot gebrek van Turbo Pascal weg te nemen, namelijk het gemis aan Random Access Files. Turbo Pascal deel 7 Erik van Bilsen MSX Club Magazine 40 Scanned, ocr ed and converted to PDf by HansO, 2001 In deze aflevering van deze serie zal ik proberen een groot gebrek van Turbo Pascal weg te nemen,

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

SQL is opgebouwd rond een basisinstructie waaraan één of meerdere componenten worden toegevoegd.

SQL is opgebouwd rond een basisinstructie waaraan één of meerdere componenten worden toegevoegd. BASISINSTRUCTIES SQL SQL : Structured Query Language is een taal gericht op het ondervragen van een relationele database en die aan veel klassieke databasemanagementsystemen kan worden gekoppeld. SQL is

Nadere informatie

Genetische algoritmen in Java met JGAP

Genetische algoritmen in Java met JGAP Genetische algoritmen in Java met JGAP Inleiding JGAP, uitgesproken als "jee-gep", is een framework voor het implementeren van genetische algoritmen en het gebruik ervan in Java. Genetische algoritmen

Nadere informatie

SQL datadefinitietaal

SQL datadefinitietaal SQL datadefinitietaal We kunnen er het schema van de database mee bepalen: metadata toevoegen, wijzigen en verwijderen uit een database. Basiscommando's: CREATE : toevoegen van metagegevens DROP : verwijderen

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

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

Stel dat u 15 tellers nodig heeft. Dat kunt u een array van tellers als volgt declareren: V. Arrays A. Wat zijn arrays? Een array is een verzameling van variabelen. Ze hebben allen dezelfde naam en hetzelfde type. Men kan ze van elkaar onderscheiden door een volgnummer, index genoemd. Enkele

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

C in plaats van Pascal

C in plaats van Pascal C in plaats van Pascal Jeroen Fokker januari 1993 3e, herziene druk INF/DOC-92-01 Vakgroep Informatica Inhoudsopgave 1 Inleiding 1 2 Opbouw van een programma 1 3 Lexicale structuur 3 4 Statements 3 5 Expressies

Nadere informatie

Een handleiding bij het gebruik vind je door te klikken op de link Help : Handleiding LexisNexis Academic (=basis van tekst hieronder).

Een handleiding bij het gebruik vind je door te klikken op de link Help : Handleiding LexisNexis Academic (=basis van tekst hieronder). ZOEKEN IN LEXISNEXIS INHOUD ZOEKEN IN LEXISNEXIS... 1 Toegang?... 1 Wat?... 1 Hoe?... 1 Stap 1: kies een zoekformulier... 1 Stap 2: maak een bronnenselectie... 2 Stap 3: geef één of meer zoektermen op...

Nadere informatie

! GeoNetwork INSPIRE Atom!

! GeoNetwork INSPIRE Atom! GeoNetwork INSPIRE Atom GeoNetwork INSPIRE Atom 1 Configuration 2 Metadata editor 3 Services 3 Page 1 of 7 Configuration To configure the INSPIRE Atom go to Administration > System configuration and enable

Nadere informatie

Faculteit Economie en Bedrijfskunde

Faculteit Economie en Bedrijfskunde Faculteit Economie en Bedrijfskunde Op dit voorblad vindt u belangrijke informatie omtrent het tentamen. Voordat u met het tentamen t: lees dit voorblad! Tentamen: V&O IV: Programmeren Tentamendatum &

Nadere informatie

Inhoud leereenheid 7c. JavaScript: Objecten en functies. Introductie 59. Leerkern 60. Samenvatting 82. Opdrachten 83. Zelftoets 89.

Inhoud leereenheid 7c. JavaScript: Objecten en functies. Introductie 59. Leerkern 60. Samenvatting 82. Opdrachten 83. Zelftoets 89. Inhoud leereenheid 7c JavaScript: Objecten en functies Introductie 59 Leerkern 60 1 Functies 60 1.1 Syntax - samenvatting 60 1.2 Functies definiëren 61 1.3 Functie als parameter (facultatief) 64 1.4 Functie

Nadere informatie

Verslag Opdracht 4: Magische Vierkanten

Verslag Opdracht 4: Magische Vierkanten Verslag Opdracht 4: Magische Vierkanten Stefan Schrama, Evert Mouw, Universiteit Leiden 2007-08-14 Inhoudsopgave 1 Inleiding 2 2 Uitleg probleem 2 3 Theorie 2 4 Aanpak 2 5 Implementatie 4 6 Experimenten

Nadere informatie

Zelftest Programmeren in Java

Zelftest Programmeren in Java Zelftest Programmeren in Java Document: n0883test.fm 22/01/2013 ABIS Training & Consulting P.O. Box 220 B-3000 Leuven Belgium TRAINING & CONSULTING INLEIDING BIJ DE ZELFTEST PROGRAMMEREN IN JAVA Deze test

Nadere informatie

Uitleg. Welkom bij de Beverwedstrijd 2006. Je krijgt 15 vragen, die je in maximaal 45 minuten moet beantwoorden.

Uitleg. Welkom bij de Beverwedstrijd 2006. Je krijgt 15 vragen, die je in maximaal 45 minuten moet beantwoorden. Uitleg Welkom bij de Beverwedstrijd 2006 Je krijgt 15 vragen, die je in maximaal 45 minuten moet beantwoorden. Je krijgt 5 vragen van niveau A, 5 vragen van niveau B en 5 vragen van niveau C. Wij denken

Nadere informatie

Het relaas van de beginnende programmeur. Het hoe en waarom van de assistent

Het relaas van de beginnende programmeur. Het hoe en waarom van de assistent Het relaas van de beginnende programmeur Het hoe en waarom van de assistent 1. Help, mijn code doet niks... Mogelijke oplossingen: Heb je op run geduwd (groene pijltje)? Zolang je niet op 'run' duwt, kent

Nadere informatie

Gebruik van het LOGO in geautomatiseerde verkiezingen

Gebruik van het LOGO in geautomatiseerde verkiezingen BIJLAGE 1 S.A. STERIA Benelux N.V. Gebruik van het LOGO in geautomatiseerde verkiezingen Technische bepalingen voor de weergave van het logo op de schermen. Versie 1.2 Guy JASPERS Revisions Revision Description

Nadere informatie

Plotten. technisch tekenwerk AUTOCAD 2000

Plotten. technisch tekenwerk AUTOCAD 2000 Inleiding Voor het plotten van uw bent u bij Lifoka aan het juiste adres. Snel, betrouwbaar en dat in grote of kleine oplagen. Niet alleen het plotten, maar ook vergaren en verzenden kan Lifoka voor u

Nadere informatie

Datastructuren college 10

Datastructuren college 10 we hadden Backtracking verbetering i i Datastructuren college 0 0: : : 0: : : P r r r r r b r b r P r r r b r b r backtracking we hoeven vaak de kandidaat niet helemaal af te maken om hem te kunnen verwerpen

Nadere informatie

FOR DUTCH STUDENTS! ENGLISH VERSION NEXT PAGE

FOR DUTCH STUDENTS! ENGLISH VERSION NEXT PAGE FOR DUTCH STUDENTS! ENGLISH VERSION NEXT PAGE Tentamen Analyse 8 december 203, duur 3 uur. Voeg aan het antwoord van een opgave altijd het bewijs, de berekening of de argumentatie toe. Als jeeen onderdeel

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

maplev 2012/5/1 15:47 page 469 #471 Procedures (vervolg)

maplev 2012/5/1 15:47 page 469 #471 Procedures (vervolg) maplev 2012/5/1 15:47 page 469 #471 Module 30 Procedures (vervolg) Onderwerp Voorkennis Expressies Procedures: Bereik van lokale variabelen, call by evaluated name, level-1-evaluatie van lokale variabelen,

Nadere informatie

DBMS. DataBase Management System. Op dit moment gebruiken bijna alle DBMS'en het relationele model. Deze worden RDBMS'en genoemd.

DBMS. DataBase Management System. Op dit moment gebruiken bijna alle DBMS'en het relationele model. Deze worden RDBMS'en genoemd. SQL Inleiding relationele databases DBMS DataBase Management System!hiërarchische databases.!netwerk databases.!relationele databases.!semantische databases.!object oriënted databases. Relationele databases

Nadere informatie

ARGO DATA SYSTEMS BV DE OPLOSSING VOOR TOTALE EXPEDITIE EN TRANSPORT AUTOMATISERING. Document Instellingen

ARGO DATA SYSTEMS BV DE OPLOSSING VOOR TOTALE EXPEDITIE EN TRANSPORT AUTOMATISERING. Document Instellingen ARGO DATA SYSTEMS BV DE OPLOSSING VOOR TOTALE EXPEDITIE EN TRANSPORT AUTOMATISERING Document Instellingen Document Instellingen 1. Introductie Met deze optie krijgt u de mogelijkheid om de documentinstellingen

Nadere informatie

ASRemote WebService. Via deze webservice kunt u:

ASRemote WebService. Via deze webservice kunt u: ASRemote WebService De ASRemote WebService is een SOAP Webservice die softwarematige communicatie met Exact Globe mogelijk maakt vanaf een willekeurige locatie op het internet. Via deze webservice kunt

Nadere informatie

17. Scalaire functies

17. Scalaire functies 17. Scalaire functies Je hebt al regelmatig gewerkt met het SELECT-statement. In dit hoofdstuk ga je een aantal scalaire functies bekijken. 17.1. Wat zijn scalaire functies? Scalaire functies worden gebruikt

Nadere informatie

liniled Cast Joint liniled Gietmof liniled Castjoint

liniled Cast Joint liniled Gietmof liniled Castjoint liniled Cast Joint liniled Gietmof liniled is een hoogwaardige, flexibele LED strip. Deze flexibiliteit zorgt voor een zeer brede toepasbaarheid. liniled kan zowel binnen als buiten in functionele en decoratieve

Nadere informatie

extra oefening algoritmiek - antwoorden

extra oefening algoritmiek - antwoorden extra oefening algoritmiek - antwoorden opgave "Formule 1" Maak een programma dat de gebruiker drie getal A, B en C in laat voeren. De gebruiker zorgt ervoor dat er positieve gehele getallen worden ingevoerd.

Nadere informatie

DOMjudge teamhandleiding

DOMjudge teamhandleiding judge DOMjudge teamhandleiding Samenvatting /\ DOM DOM judge Hieronder staat de belangrijkste informatie kort samengevat. Dit is bedoeld om snel aan de slag te kunnen. We raden echter ten zeerste aan dat

Nadere informatie

Hieronder volgt een overzicht van relevante contactpersonen binnen KPN Telecom.

Hieronder volgt een overzicht van relevante contactpersonen binnen KPN Telecom. 1. Contact personen 2. Rent-a-Switch service 3. Validaties 4. Afhandeling Rent-a-Switch orders 5. Foutmeldingen 1. Contact personen Hieronder volgt een overzicht van relevante contactpersonen binnen KPN

Nadere informatie

Het beheren van mijn Tungsten Network Portal account NL 1 Manage my Tungsten Network Portal account EN 14

Het beheren van mijn Tungsten Network Portal account NL 1 Manage my Tungsten Network Portal account EN 14 QUICK GUIDE C Het beheren van mijn Tungsten Network Portal account NL 1 Manage my Tungsten Network Portal account EN 14 Version 0.9 (June 2014) Per May 2014 OB10 has changed its name to Tungsten Network

Nadere informatie

Maillijsten voor medewerkers van de Universiteit van Amsterdam

Maillijsten voor medewerkers van de Universiteit van Amsterdam See page 11 for Instruction in English Maillijsten voor medewerkers van de Universiteit van Amsterdam Iedereen met een UvAnetID kan maillijsten aanmaken bij list.uva.nl. Het gebruik van de lijsten van

Nadere informatie

Indirecte adressering

Indirecte adressering Indirecte adressering 1 pagina 1 Absolute adressering - Directe adressering Operand Operand- Supplementaire Beschrijving adres toegangsbreedte (voorbeeld) I 37.4 byte, woord, Ingangen dubbelwoord Q 27.7

Nadere informatie

Omschrijf bij ieder onderdeel van de methode de betekenis ervan. Java kent twee groepen van klassen die een GUI kunnen maken: awt en swing.

Omschrijf bij ieder onderdeel van de methode de betekenis ervan. Java kent twee groepen van klassen die een GUI kunnen maken: awt en swing. irkel (met Jpanel) ij de onderstaande opdracht behoort het bestand Panels: JPanels_1.java (map Panel) in de map irkel. pplicaties in Java hebben altijd een publieke klasse waarin een methode main voorkomt.

Nadere informatie

DDS chips. DDS = Direct Digital (frequency) Synthesis. Output = sinusvormig signaal. Maximum frequentie = ½ klokfrequentie

DDS chips. DDS = Direct Digital (frequency) Synthesis. Output = sinusvormig signaal. Maximum frequentie = ½ klokfrequentie www.arduino.cc Arduino en DDS DDS chips DDS = Direct Digital (frequency) Synthesis Output = sinusvormig signaal Maximum frequentie = ½ klokfrequentie Frequentie bepaald door tuning word Grootste fabrikant:

Nadere informatie

Handleiding beheer lijst.hva.nl. See page 11 for Instruction in English

Handleiding beheer lijst.hva.nl. See page 11 for Instruction in English Handleiding beheer lijst.hva.nl See page 11 for Instruction in English Maillijsten voor medewerkers van de Hogeschool van Amsterdam Iedereen met een HvA-ID kan maillijsten aanmaken bij lijst.hva.nl. Het

Nadere informatie

Inleiding Software Engineering! Unit Testing, Contracten, Debugger! 13 Februari 2014!

Inleiding Software Engineering! Unit Testing, Contracten, Debugger! 13 Februari 2014! Inleiding Software Engineering Unit Testing, Contracten, Debugger 13 Februari 2014 Beknopte info over Unit Testing en Contracten kan je vinden op het einde van dit document. Eclipse beschikt over een handige

Nadere informatie

Informatie Voor algemene vragen/opmerkingen omtrent de inhoud van deze site kunt u bellen of e-mailen met: Cargo Data Systems BV

Informatie Voor algemene vragen/opmerkingen omtrent de inhoud van deze site kunt u bellen of e-mailen met: Cargo Data Systems BV Rapportgenerator Gebruikershandleiding Versie 1.0 Disclaimer Niets uit deze uitgave mag worden verveelvoudigd en/of openbaar worden gemaakt, op welke wijze dan ook, zonder voorafgaande schriftelijke toestemming

Nadere informatie

29 november 2012 Hashing. Een tijd-ruimte afweging Hashfuncties

29 november 2012 Hashing. Een tijd-ruimte afweging Hashfuncties Hashing Ferd van Odenhoven Fontys Hogeschool voor Techniek en Logistiek Venlo Software Engineering 29 november 2012 ODE/FHTBM Hashing 29 november 2012 1/30 Hashing Een typisch gebruik van de implementatie

Nadere informatie

Om te kijken of x, y, z samen een driehoek specificeren hoeven we alleen nog maar de driehoeksongelijkheid te controleren: x, y, z moeten voldoen

Om te kijken of x, y, z samen een driehoek specificeren hoeven we alleen nog maar de driehoeksongelijkheid te controleren: x, y, z moeten voldoen Feedback Software Testing, Opdrachten Week 1 Driehoek-test Deze opdracht is in het algemeen zeer goed uitgevoerd. Algemeen valt in vergelijking met vorig jaar op dat de ingeleverde oplossingen veel minder

Nadere informatie

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

Inhoud leereenheid 4. Inleiding JavaScript. Introductie 99. Leerkern 100. Zelftoets 108. Terugkoppeling 109 Inhoud leereenheid 4 Inleiding JavaScript Introductie 99 Leerkern 100 1 Leren programmeren in JavaScript 100 2 Chapter 1: Introduction 101 3 Chapter 2, paragrafen 1 t/m 5 102 4 Chapter 2, paragrafen 6

Nadere informatie

WWW.EMINENT-ONLINE.COM

WWW.EMINENT-ONLINE.COM WWW.EMINENT-OINE.COM HNDLEIDING USERS MNUL EM1016 HNDLEIDING EM1016 USB NR SERIEEL CONVERTER INHOUDSOPGVE: PGIN 1.0 Introductie.... 2 1.1 Functies en kenmerken.... 2 1.2 Inhoud van de verpakking.... 2

Nadere informatie

Quality requirements concerning the packaging of oak lumber of Houthandel Wijers vof (09.09.14)

Quality requirements concerning the packaging of oak lumber of Houthandel Wijers vof (09.09.14) Quality requirements concerning the packaging of oak lumber of (09.09.14) Content: 1. Requirements on sticks 2. Requirements on placing sticks 3. Requirements on construction pallets 4. Stick length and

Nadere informatie

Tentamen Object Georiënteerd Programmeren TI1206 29 oktober 2014, 9.00-11.00 Afdeling SCT, Faculteit EWI, TU Delft

Tentamen Object Georiënteerd Programmeren TI1206 29 oktober 2014, 9.00-11.00 Afdeling SCT, Faculteit EWI, TU Delft Tentamen Object Georiënteerd Programmeren TI1206 29 oktober 2014, 9.00-11.00 Afdeling SCT, Faculteit EWI, TU Delft Bij dit tentamen mag je geen gebruik maken van hulpmiddelen zoals boek of slides. Digitale

Nadere informatie

How to install and use dictionaries on the ICARUS Illumina HD (E652BK)

How to install and use dictionaries on the ICARUS Illumina HD (E652BK) (for Dutch go to page 4) How to install and use dictionaries on the ICARUS Illumina HD (E652BK) The Illumina HD offers dictionary support for StarDict dictionaries.this is a (free) open source dictionary

Nadere informatie

Een mechaniekje met mogelijkheden in forth (2002) Albert Nijhof

Een mechaniekje met mogelijkheden in forth (2002) Albert Nijhof TO Een mechaniekje met mogelijkheden in forth (2002) Albert Nijhof 1. Inleiding Forth is een low-level en tegelijkertijd een high-level programmeertaal. Datawoorden zetten een adres op stack waar je vervolgens

Nadere informatie

Interaction Design for the Semantic Web

Interaction Design for the Semantic Web Interaction Design for the Semantic Web Lynda Hardman http://www.cwi.nl/~lynda/courses/usi08/ CWI, Semantic Media Interfaces Presentation of Google results: text 2 1 Presentation of Google results: image

Nadere informatie

Handleiding Installatie ADS

Handleiding Installatie ADS Handleiding Installatie ADS Versie: 1.0 Versiedatum: 19-03-2014 Inleiding Deze handleiding helpt u met de installatie van Advantage Database Server. Zorg ervoor dat u bij de aanvang van de installatie

Nadere informatie