12 Meer over pointers
|
|
|
- Theodoor de Wit
- 10 jaren geleden
- Aantal bezoeken:
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
Examen Programmeren 2e Bachelor Elektrotechniek en Computerwetenschappen Faculteit Ingenieurswetenschappen Academiejaar juni, 2010
Examen Programmeren 2e Bachelor Elektrotechniek en Computerwetenschappen Faculteit Ingenieurswetenschappen Academiejaar 2009-2010 16 juni, 2010 **BELANGRIJK** 1. Schrijf je naam onderaan op elk blad. 2.
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
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
Dynamisch geheugen beheer
Dynamisch geheugen beheer + Normaal wordt laats in het werkgeheugen gereserveerd tijdens de comilatie aan de hand van de declaraties van de variabelen. + Deze geheugenreservering is statisch: in het bronbestand
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
Instructies en blokken
Herhaling 1 Instructies en blokken 2 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.
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
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
EE1400: Programmeren in C BSc. EE, 1e jaar, , 4e college
EE1400: Programmeren in C BSc. EE, 1e jaar, 2012-2013, 4e college Arjan van Genderen, Computer Engineering 11-12-2012 Delft University of Technology Challenge the future Mededelingen Voortgangstoets: Woensdagmiddag
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
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;
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
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
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
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)
ALGORITMIEK: answers exercise class 7
Problem 1. See slides 2 4 of lecture 8. Problem 2. See slides 4 6 of lecture 8. ALGORITMIEK: answers exercise class 7 Problem 5. a. Als we twee negatieve (< 0) getallen bij elkaar optellen is het antwoord
Programmeren in C++ Efficiënte zoekfunctie in een boek
Examen Software Ontwikkeling I 2e Bachelor Informatica Faculteit Wetenschappen Academiejaar 2010-2011 21 januari, 2011 **BELANGRIJK** 1. Lees eerst de volledige opgave (inclusief de hints/opmerkingen)!
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
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
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
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,
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
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
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
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,
UNIVERSITEIT ANTWERPEN FACULTEIT WETENSCHAPPEN DEPARTEMENT WISKUNDE-INFORMATICA OBERON CODE CONVENTIONS
UNIVERSITEIT ANTWERPEN FACULTEIT WETENSCHAPPEN DEPARTEMENT WISKUNDE-INFORMATICA OBERON CODE CONVENTIONS Laatste aanpassing: 15 oktober 2003 Inhoudsopgave 1 Bestandsnamen 3 2 Organizatie Bestanden 3 3 Indentatie
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
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
Add the standing fingers to get the tens and multiply the closed fingers to get the units.
Digit work Here's a useful system of finger reckoning from the Middle Ages. To multiply $6 \times 9$, hold up one finger to represent the difference between the five fingers on that hand and the first
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
Modelleren en Programmeren
Modelleren en Programmeren Jeroen Bransen 6 december 2013 Terugblik Programma en geheugen Opdrachten Variabelen Methoden Objecten Klasse Programma en geheugen Opdrachten Variabelen zijn gegroepeerd in
Modelleren en Programmeren
Modelleren en Programmeren Jeroen Bransen 11 december 2015 Ingebouwde datastructuren Meer boomstructuren Access specifiers Gebruikersinvoer Codestijl Packages SAT-solver Ingebouwde datastructuren Ingebouwde
After that, the digits are written after each other: first the row numbers, followed by the column numbers.
Bifid cipher The bifid cipher is one of the classical cipher techniques that can also easily be executed by hand. The technique was invented around 1901 by amateur cryptographer Felix Delastelle. The cipher
EE1400: Programmeren in C BSc. EE, 1e jaar, , 2e college
EE1400: Programmeren in C BSc. EE, 1e jaar, 2012-2013, 2e college Arjan van Genderen, Computer Engineering 20-11-2012 Delft University of Technology Challenge the future Agenda A.s. woensdagmiddag 14.00
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.
Programmeermethoden. Pointers. Walter Kosters. week 10: november kosterswa/pm/
Programmeermethoden Pointers Walter Kosters week 10: 13 17 november 2017 www.liacs.leidenuniv.nl/ kosterswa/pm/ 1 Pointers Introductie Een pointer is in feite gewoon een geheugenadres. Het geheugen kun
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
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
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
Programmeermethoden. Recursie. week 11: november kosterswa/pm/
Programmeermethoden Recursie week 11: 21 25 november 2016 www.liacs.leidenuniv.nl/ kosterswa/pm/ 1 Pointers Derde programmeeropgave 1 Het spel Gomoku programmeren we als volgt: week 1: pointerpracticum,
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
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
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
Programmeermethoden NA. Week 6: Lijsten
Programmeermethoden NA Week 6: Lijsten Kristian Rietveld http://liacs.leidenuniv.nl/~rietveldkfd/courses/prna2016/ Getal opbouwen Stel je leest losse karakters (waaronder cijfers) en je moet daar een getal
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
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
Programmeermethoden NA
Programmeermethoden NA Week 6: Lijsten Kristian Rietveld http://liacs.leidenuniv.nl/~rietveldkfd/courses/prna/ Bij ons leer je de wereld kennen 1 Getal opbouwen Stel je leest losse karakters (waaronder
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
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
Classification of triangles
Classification of triangles A triangle is a geometrical shape that is formed when 3 non-collinear points are joined. The joining line segments are the sides of the triangle. The angles in between the sides
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,
Introductie in flowcharts
Introductie in flowcharts Flow Charts Een flow chart kan gebruikt worden om: Processen definieren en analyseren. Een beeld vormen van een proces voor analyse, discussie of communicatie. Het definieren,
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:
int getaantalpassagiers{): void setaantalpassagiers(int aantalpassagiers);
bestand voertuig.h biz. 1 van 2 #ifndef VOERTUIG H #define VOERTUIG H #include using std::string; class Voertuig { public: Voertuig(); Voertuig(const string& inschrijvingsnumrner, const string&
C++ programmeermethoden Bachelor Kunstmatige Intelligentie
C++ programmeermethoden Bachelor Kunstmatige Intelligentie 1e Deeltentamen Datum: 28 maart 2016 Tijd: 13.00-14.30 Aantal pagina s: 8 (inclusief voorblad) Aantal vragen: 5 Maximaal aantal te behalen punten:
Datastructuren Werkcollege Intro
Bart Hijmans, Universiteit Leiden. Universiteit Leiden The Netherlands Focus 1 19 ˆ Ervaring in gebruik en implementatie van datastructuren ˆ Kennis van mogelijkheden ˆ Programmeren voor andere programmeurs
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
SAMPLE 11 = + 11 = + + Exploring Combinations of Ten + + = = + + = + = = + = = 11. Step Up. Step Ahead
7.1 Exploring Combinations of Ten Look at these cubes. 2. Color some of the cubes to make three parts. Then write a matching sentence. 10 What addition sentence matches the picture? How else could you
Een gelinkte lijst in C#
Een gelinkte lijst in C# In deze tutorial ga demonstreren hoe je een gelinkte lijst kan opstellen in C#. We gaan een klasse schrijven, die een gelijkaardige functionaliteit heeft als een ArrayList, namelijk
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
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
Zelftest Programmeren in PL/I
Zelftest Programmeren in PL/I Document: n0830test.fm 26/03/2012 ABIS Training & Consulting P.. Box 220 B-3000 Leuven Belgium TRAINING & CNSULTING INLEIDING BIJ DE ZELFTEST PRGRAMMEREN IN PL/I m de voorkennis
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
Uitwerking Tweede deeltentamen Imperatief programmeren - versie 1 Vrijdag 21 oktober 2016, uur
Uitwerking Tweede deeltentamen Imperatief programmeren - versie 1 Vrijdag 21 oktober 2016, 13.00-15.00 uur 1. De situatie die ontstaat door class A : B C D; kan beschreven worden door (a) B is een A (b)
Deel 8: stappenmotoren en interrupts
Deel 8: stappenmotoren en interrupts Stappenmotor Kan hoek van as instellen zonder een gesloten feedbacksysteem. Het is een simpel en precies open loop systeem. Werkt met discrete stappen, dus schokkerig
In de tweede regel plaatsen we in het gereserveerde stukje geheugen een getal.
4. Array s Een array is een geïndexeerde variabele. Deze zin zal de nodig vragen oproepen, waarop enige uitleg van toepassing is. Met variabelen hebben we al kennis gemaakt. In een variabele kun je iets
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
Introductie in C++ Jan van Rijn. September 2013
Introductie in C++ Jan van Rijn September 2013 Inhoud Classes Overerving Const correctness Standard C++ library Templates Classes Voordelen van classes: Modelleren Modulariteit Informatie afschermen Makkelijk(er)
Calculator spelling. Assignment
Calculator spelling A 7-segmentdisplay is used to represent digits (and sometimes also letters). If a screen is held upside down by coincide, the digits may look like letters from the alphabet. This finding
MyDHL+ Van Non-Corporate naar Corporate
MyDHL+ Van Non-Corporate naar Corporate Van Non-Corporate naar Corporate In MyDHL+ is het mogelijk om meerdere gebruikers aan uw set-up toe te voegen. Wanneer er bijvoorbeeld meerdere collega s van dezelfde
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
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/
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
colleges recursieve datastructuren college 9 prioriteit van operatoren prioriteit in recursive descent parser
colleges recursieve datastructuren college 9 interpreteren: waarde van bomen bepalen transformeren: vorm van bomen veranderen parseren herkennen van expressie in de tekst herkennen van functies onderwerp
Programmeermethoden. Recursie. Walter Kosters. week 11: november kosterswa/pm/
Programmeermethoden Recursie Walter Kosters week 11: 20 24 november 2017 www.liacs.leidenuniv.nl/ kosterswa/pm/ 1 Vierde programmeeropgave 1 De Grote getallen programmeren we als volgt: week 1: pointerpracticum,
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
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 :..............................................................
Datastructuren: stapels, rijen en binaire bomen
Programmeermethoden : stapels, rijen en binaire bomen Walter Kosters week 12: 26 30 november 2018 www.liacs.leidenuniv.nl/ kosterswa/pm/ 1 en Vierde programmeeropgave Othello programmeren we als volgt:
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
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
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
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 [email protected] en [email protected]
Inleiding Programmeren 2
Inleiding Programmeren 2 Gertjan van Noord en Leonie Bosveld December 19, 2016 Vandaag Naar aanleiding van de opdrachten Zelle hoofdstuk 11 Boolean variabelen: niet checken met == Fout: if clicked == True
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
Tips & Trucs ARCHICAD 117: Programma van Eisen add-on voor KeyMembers
Tips & Trucs ARCHICAD 117: Programma van Eisen add-on voor KeyMembers Met de Programma van Eisen add-on kan eenvoudig een programma van eisen worden ingelezen vanuit een excel bestand, waarbij snel zones
Zevende college algoritmiek. 24 maart Verdeel en Heers
Zevende college algoritmiek 24 maart 2016 Verdeel en Heers 1 Verdeel en heers 1 Divide and Conquer 1. Verdeel een instantie van het probleem in twee (of meer) kleinere instanties 2. Los de kleinere instanties
