De manier waarop de records in een file staan, bepaalt de file-organisatie. Vier gebruikelijke soorten file-organisatie zijn:

Maat: px
Weergave met pagina beginnen:

Download "De manier waarop de records in een file staan, bepaalt de file-organisatie. Vier gebruikelijke soorten file-organisatie zijn:"

Transcriptie

1 14 Files De programma's die we hebben bestudeerd, produceren allemaal uitvoer en lezen in de meeste gevallen invoer. Dat gebeurt via de standaardfiles standaardinvoer en standaarduitvoer. Deze eenvoudige voorbeelden zijn niet representatief voor het grootste deel van de toepassingen van computers. Bij de meeste toepassingen worden grote hoeveelheden permanente data opgeslagen. Om de data tussen verschillende uitvoeringen van programma's te bewaren, worden ze in files in een secundair geheugen opgeslagen, bijvoorbeeld op een magneetschijf. In dit hoofdstuk kijken we nader naar de standaardfiles en andere files. Een file is een verzameling data, geproduceerd door een programma of invoer voor een programma. In het algemeen is een file een collectie records. Het record is de basiseenheid voor het verwerken van files. In het algemeen leest een programma telkens één record uit of naar een file. Afhankelijk van de toepassing kan een record bestaan uit één karakter, een regel tekst, of een andere eenheid. Records bestaan meestal uit een aantal data-elementen, de zogenaamde velden. Een record dat een regel tekst is, kan als velden de woorden van de tekst hebben. De velden kunnen zelf weer te verdelen zijn in ondervelden, bijvoorbeeld de afzonderlijke letters van een woord. De manier waarop de records in een file staan, bepaalt de file-organisatie. Vier gebruikelijke soorten file-organisatie zijn: serieel/sequentieel random geïndexeerd geïnverteerd In dit hoofdstuk zullen we toepassingen bekijken waarin de eerste twee methoden worden gebruikt. Seriële files zijn zo georganiseerd, dat elk record in de file, behalve het laatste, een unieke opvolger heeft; elk record, behalve het eerste, heeft ook een unieke voorganger. In figuur 14-1 ziet u een fragment van een file waarin gegevens over studenten staan; de velden van elk record zijn het nummer van de student, de naam van de student, het vak en de beoordeling. De file is sequentieel georganiseerd in stijgende volgorde van het studentnummer. Bij toevoeging of verwijdering van records, moet de volgorde gehandhaafd blijven. Een nieuw record voor een student met nummer 45 moet onmiddellijk voor student Jansen worden tussengevoegd.

2 Figuur 14-1 NUMMER NAAM VAK PUNT 12 Bruin c 6 23 Smit C Zwart Pascal 5 56 Jansen c 9 67 Arends Pascal 7 Een random fileorganisatie is alleen toepasbaar op files die bewaard worden in geheugen met direct access. Deze methode wordt gebruikt als de records in willekeurige volgorde worden verwerkt en niet in de volgorde waarin ze staan opgeslagen. Een random file is een verzameling records die elk worden aangegeven door een uniek relatief recordnummer. Als de file N records bevat, hebben die elk een uniek integer nummer 1, 2, 3,, N. Als een record in een random file wordt opgeslagen, wordt zijn plaats bepaald door een adresseringsalgoritme, die de sleutelwaarde van het record vertaalt naar een integer in het bereik van 1 tot en met N. Bij het ophalen van hetzelfde record uit de file wordt dezelfde sleutelwaarde opgegeven, waarbij dezelfde adresseringsalgoritme wordt toegepast, die hetzelfde relatieve recordnummer berekent. In figuur 14-2 ziet u de records uit het vorige voorbeeld, maar nu opgeslagen in een random file. De file bevat hoogstens 37 records (het gekozen maximale aantal studenten) en de adresseringsalgoritme is: studentnummer mod waarin mod de restoperator is. Voor het verwerken van files zijn in een hogere programmeertaal diverse operaties beschikbaar die op de file en de records van de file worden uitgevoerd. Met de creatie-operator wordt een nieuwe file met nul records tot stand gebracht. Voordat het verwerken van een file kan beginnen, moet de file eerst worden geopend. Als de verwerking afgelopen is, moet de file weer worden gesloten. Het openen van een file kan volgens verschillende modes gebeuren, bijvoorbeeld invoermode (de file wordt gelezen, maar blijft onveranderd), uitvoermode (er worden nieuwe records in de file geschreven) en invoer/uitvoermode (er worden records gelezen en geschreven).

3 Figuur 14-2 RELATIEF RECORD- NUMMER NUMMER NAAM VAK PUNT Bruin c Jansen C Smit C Arends Pascal Zwart Pascal Op records van een file zijn voornamelijk twee operaties van toepassing. De lees-operatie haalt één record uit de file op. In een sequentieel georganiseerde file leest deze operatie het volgende record uit de rij. Bij een random file bepaalt de opgegeven sleutelwaarde, en daarmee het relatieve recordnummer, welk record er wordt gelezen. De schrijf-operatie plaatst een nieuwe recordwaarde in een file. Bij een sequentiële file wordt het record geschreven als de voorganger van het vorige in de file geschreven record. Bij een random file bepaalt de sleutelwaarde waar een record wordt geschreven. Als er herhaaldelijk uit een sequentiële file wordt gelezen, wordt uiteindelijk het einde van de file bereikt. Om die situatie aan te geven is er een operator end of file nodig. De standaardbibliotheek van C bevat alle functies die nodig zijn om deze fileoperaties te implementeren. De functie fopen opent en fc1ose sluit een file. Varianten van de functies voor invoer uit de standaardinvoer en uitvoer naar de standaarduitvoer werken op files. Functies die invoer doen, leveren ook een indicator end of file. De positie waar de volgende invoer/uitvoeroperatie op een file wordt uitgevoerd, wordt bepaald met de functie fseek. In de rest van dit hoofdstuk houden we ons bezig met toepassingen die deze file functies gebruiken.

4 14.1 Toegang tot files Voordat er uit een file kan worden gelezen of erin kan worden geschreven, moet de file worden geopend. Dat wordt gedaan met de standaardbibliotheekfunctie fopen. De functie fopen heeft twee argumenten. Het eerste argument is de naam van de te openen file, opgegeven als een string die afgesloten is met een nulkarakter. Het tweede argument geeft aan hoe de file moet worden geopend en wordt ook als karakterstring opgegeven. Het tweede argument wordt de openmode genoemd. De volgende modes zijn mogelijk: r" - open een bestaande file om eruit te lezen; w " - creëer een nieuwe file of maak een bestaande leeg om erin te schrijven; a" - creëer een nieuwe file om in te schrijven of maak een bestaande klaar om eraan toe te voegen; r+" - open een bestaande file om te veranderen (lezen en schrijven) en begin bij het begin van de file; w+" - creëer een nieuwe file, of maak een bestaande leeg, om veranderingen aan te brengen (lezen en schrijven); a+" - creëer een nieuwe file om veranderingen aan te brengen of maak een bestaande file klaar om eraan toe te voegen (lezen en schrijven). Bij het openen van een file kan het gebeuren dat er een foutindicator wordt aangezet. Dat kan verschillende redenen hebben. Als een file bijvoorbeeld in een leesmode (11 r " of 11 r+ 11) wordt geopend, moet de betreffende file al in het filegeheugen aanwezig zijn. Als dat niet het geval is, levert f open een foutwaarde af. Als een niet-bestaande file wordt geopend voor schrijven ("w " of "w+") of toevoegen ( a" of "a+ "), wordt de file automatisch gecreëerd. Als de file wel al bestaat, gaat de oorspronkelijke inhoud bij het openen verloren. In sommige systemen wordt onderscheid gemaakt tussen tekstfiles en binaire files. Voor een binaire file moet de letter b achter de modestring worden geplaatst. Als fopen de opgegeven file in de voorgeschreven mode heeft geopend, levert de functie een interne naam af, die dan bij latere invoer/uitvoeroperaties op die file wordt gebruikt. Deze interne naam noemen we een filepointer. Om informatie over een file, of algemener een stroom, te bewaren, wordt het datatype FILE gebruikt. De precieze details van het datatype FILE hoeft ons niet te interesseren. Alle benodigde informatie staat in de standaardheader <stdio.h>. De declaratie voor een filepointer is: FILE *fp;

5 Hier wordt gespecificeerd dat de variabele f p een pointer naar het afgeleide type FILE is. De naam FILE is een typenaam (ingevoerd door middel van een typedef -statement in <stdio.h> zoals elke andere. De prototypedeclaratie voor de functie fopen in <stdio.h> is: FILE *fopen(char *filename, char *mode) Een aanroep van de functie fopen om een file genaamd data te lezen, is: fp = fopen ("data", "r") ; Als bij het openen van de file geen fout optreedt, levert fopen een filepointer af die aan de pointervariabele fp wordt toegekend. Verdere invoeroperaties die op de file worden uitgevoerd, worden geformuleerd in termen van f p. Als er wel een fout optreedt, levert fopen de nulpointer NULL af. Een fout bij het openen van een file wordt meestal opgevangen met een constructie van deze vorm: if ( (fp = fopen ("data", "r") ) == NULL) printf ("Kan datafile niet openen \n") else Als het verwerken van een file afgelopen is, moet de file worden gesloten. Bij het sluiten van de file of stroom worden eventuele interne buffers geleegd. Dit wordt gedaan met de functie fclose: int fclose(file *fp) De functie fclose heeft één argument fp, dat de filepointer is die fopen voor de te sluiten file heeft afgeleverd. Als er een fout optreedt, levert fclose de waarde EOF af, anders de waarde nul. De waarde EOF wordt gebruikt om het eind van een file aan te geven. Het volgende programma opent een file en sluit deze onmiddellijk weer; de naam van de file wordt als argument op de commandoregel opgegeven. Er wordt niet van uitgegaan dat de file al in het filegeheugen voorkomt. Daarom wordt de file in leesmode geopend. Er wordt gecontroleerd of het openen en het sluiten slagen. Programma 14-1 /* Programma om de functies 'fopen' en fclose te demonstreren. De file waarvan de naam als argument op de commandoregel wordt opgegeven, wordt eerst geopend en dan meteen gesloten. De afgeleverde code wordt gecontroleerd. */

6 #include <stdio.h> #define SCHRIJVEN w main(int argc, char *argv[]) { FILE *fp; if(argc!= 2) printf( Gebruik: %s filenaam \n, argv[0]); else if ((fp = fopen(argv[1],schrijven)) == NULL) printf("%s: kan %s niet openen \n,argv[0l, argv[1]); else { printf( openen van %s is geslaagd \n", argv[1]); if(fclose(fp) == EOF) printf ( %s: kan %s niet sluiten \n,argv[ 0],argv[1]); else printf( sluiten van %s is geslaagd \n", argv[1]); 14.2 De functies fgetc, fputc en feof De functie fgetc leest één karakter uit een file. Het gedrag van de functie is gelijk aan dat van de functie getchar die we al hebben gezien. De prototypedeclaratie voor de functie fgetc is: int fgetc(file *fp) waarin fp een filepointer is die door de functie fopen is afgeleverd. Het uitvoeren van de statement c = fgetc(fp); heeft als effect dat er één karakter wordt gelezen uit de stroom die fp aangeeft. Verdere karakters worden uit dezelfde stroom gelezen met volgende aanroepen van fgetc. De functie fgetc levert de waarde EOF af als het einde van de file is bereikt Dit niet-bestaande karakter kan bijvoorbeeld in een besturende conditie van een lus worden gebruikt om de karakters in een file een voor een te lezen en te verwerken: while ((c = fgetc(fp))!= EOF)... Het is wel van belang dat de variabele c die wordt gebruikt voor het door fgetc gelezen karakter, van type int is. Anders werkt de lus niet goed. Neem bijvoorbeeld eens aan dat we werken met een machine met integers van 16 bits en dat EOF de waarde - 1 is. De representatie voor EOF is dan:

7 -1 (decimaal) = (binair) Als fgetc de waarde EOF aflevert en deze aan de variabele c wordt toegekend die ten onrechte is gedeclareerd als een karaktervariabele van bijvoorbeeld 8 bits, dan worden aan c de acht minst significante bits van het resultaat van fgetc (dus van EOF) toegekend, namelijk: c = (binair) De test herkent de waarde EOF dan niet, omdat != de logische waarde TRUE oplevert. De lus gaat dan eeuwig door. Om expliciet aan te geven dat een variabele als karaktervariabele moet fungeren, maar als integer wordt gerepresenteerd om EOF goed te detecteren, raden we u aan de typenaam Karakter of Character in te voeren. De naam suggereert het type van de variabele, maar verbergt de representatie als int: typedef int Character; Character c; while ( (c = fgetc (fp))!= EOF)... De functie fgetc levert EOF af als het einde van de file wordt gedetecteerd of als er een fout is opgetreden. Om te bepalen of het einde van de file inderdaad is bereikt, moet de functie feof worden gebruikt. Het prototype voor feof is: int feof(file *fp) Als het einde van de opgegeven file is bereikt, levert feof een waarde ongelijk aan nul af (voor de logische waarde TRUE), en anders nul (voor FALSE). We kunnen dan met een lus karakter voor karakter door een file gaan tot het einde van de file is bereikt of tot er een fout is opgetreden: while ( (c = fgetc (fp)!= EOF) /* verwerk karakter c */ Vervolgens kunnen we vaststellen of het om een fout of om het echte einde van de file gaat: if(! feof(f)) printf("leesfout\n"); else /* afwerking */

8 De functie getchar, die gebruikt wordt om één karakter uit de standaardinvoer te lezen, levert dezelfde code EOF af. Dus alle tot nu toe geschreven programma's die die karakter voor karakter lazen uit de standaardinvoer en naar een expliciet afsluitend karakter zochten, hadden we ook zo kunnen schrijven dat ze EOF detecteerden. Programma 6-1 echode bijvoorbeeld karakters van de standaardinvoer naar de standaarduitvoer. Het programma gebruikte de punt als afsluiten. Als we het programma herschrijven in termen van EOF en het puntkarakter niet meer gebruiken, zodat dit ook in de invoerdata kan voorkomen, krijgen we programma Programma 14-2 /* Kopieer een stroom karakters uit de standaardinvoer naar de standaarduitvoer. Het kopiëren eindigt als EOF in de invoer wordt gelezen. */ #include <stdio.h> typedef int Character; main() { Character c; while ((getchar())!= EOF) putchar(c); Om dit programma te laten eindigen, moeten we op het toetsenbord het karakter invoeren dat met EOF overeenkomt. Welk karakter dit is, hangt van het systeem af. Op de meeste UNIXsystemen wordt EOF gerepresenteerd door Ctrl-D. In een MS-DOS-omgeving is het Ctrl-Z. De functie fputc schrijft één karakter naar een file. Het gedrag van de functie is verder gelijk aan dat van de functie putchar, die we al uitgebreid hebben gebruikt. De prototypedeclaratie voor de functie f put c is: int fputc(int c, FILE *fp) Als fputc erin slaagt het karakter naar de opgegeven stroom te schrijven, wordt het karakter in de vorm van een waarde van type int als resultaat afgeleverd. Als er een fout optreedt, levert fputc de waarde EOF af. Nu we de nodige voorbereidingen hebben gemaakt, kunnen we een programma kopieer schrijven om de inhoud van de ene file naar de andere file te kopiëren. De twee filenamen worden als argumenten op de commandoregel opgegeven, met de naam van de bronfile voorop. U ziet dat het grootste deel van het programma uit controle op fouten bestaat. Hierop komen we binnenkort terug.

9 Programma 14-3 /* Kopieer de inhoud van een bronfile naar een doelfile. De twee filenamen worden als argumenten op de commandoregel opgegeven. De werking van de primitieve functies wordt volledig gecontroleerd. */ #include <stdio.h> typedef int Character; #define LEZEN r #define SCHRIJVEN w main(int argc, char *argv[]) { FILE *fpbron, *fpdoel; Character c; if(argc!= 3) printf( Gebruik: %s file1 file2\n", argv[0]); else if ((fpbron = fopen(argv[1], LEZEN)) == NULL) printf ( %s: kan %s niet openen \n", argv[0 ], argv[1]); else if ((fpdoel = fopen(argv[2], SCHRIJVEN)) == NULL) { printf ("%s: kan %s niet openen \n, argv[0], argv[2]); if (fclose(fpbron) == EOF) printf("%s: %s is niet correct gesloten\n, argv[0], argv[1]); else { while ((c = fgetc(fpbron))!= EOF) if(fputc(c, fpdoel) == EOF) { printf("%s: fout bij schrijven naar %s\n" argv[0l, argv[2]); break; if (! feof(fpbron)) printf("%s: fout bij lezen van %s\n, argv[0], argv[1]); if(fclose(fpbron) == EOF) printf("%s: %s niet correct gesloten\n", argv[0], argv[1]); if(fclose(fpdoel) == EOF) printf("%s: %s niet correct gesloten\n", argv[0l, argv[2]);

10 14.3 De functies fscanf en fprintf De functies fscanf en fprintf voeren ongeveer hetzelfde als de functies scanf en printf oeen file uit. Deze nieuwe functies hebben beide een extra argument, dat de filepointer naar de gewenste file is. De prototypedeclaraties zijn: int fscanf (FILE *fp, char *format,...) en int fprintf (FILE *fp, char *format,...) Het uitvoeren van fscanf kan vroegtijdig eindigen. Dit kan te wijten zijn aan het lezen van EOF in de gespecificeerde stroom of aan een verschil tussen de besturingsstring (format) en een invoerkarakter. Als de invoer het einde van de file detecteert voordat er een verschil is geconstateerd, levert fscanf de waarde EOF af. Anders levert fscanf het aantal geslaagde toekenningen af. Hier volgt een codefragment dat twee integer waarden uit een file leest en de noodzakelijke controle uitvoert om te zien of het correcte aantal data wordt gelezen en het eind van de file nog niet is bereikt. status = fscanf(fpin, "%d %d", &eerste, &tweede); if (status!= 2) { if (status == EOF) printf( Onverwacht einde van file \n"); else printf( Fout bij lezen uit file \n"); else {. /* verwerk gelezen data */ De door fprintf afgeleverde waarde is negatief als er een fout is opgetreden; anders wordt het aantal geschreven karakters afgeleverd. We kunnen dus als volgt de twee uit een file gelezen waarden naar een file schrijven: status = fscanf (fpin, "%d %d, &eerste, &tweede); if (status! = 2) ( if (status == EOF) printf ("Onverwacht einde van file \n ); else printf ("Fout bij lezen uit file \n ); else if (fprintf (fpuit, "%d %d \n", eerste, tweede) < 0) printf ("Fout bij schrijven naar file \n") ; De foutcodes die fscanf en fprintf afleveren, worden ook door de functies scanf en printf afgeleverd. Dezelfde controle als we zo juist hebben gezien, kan ook op de standaardinvoer en de standaarduitvoer worden toegepast.

11 14.4 De functies fgets en fputs Om hele regels data uit en naar files te lezen kunnen de functies fgets en fputs worden gebruikt. De functie fgets heeft drie argumenten: een string s, een teller n en een stroom fp die geopend moet zijn om uit te lezen: char *fgets(char *s, int n, FILE *fp); Er wordt aangenomen dat het argument s wijst naar het begin van een karakterarray. De karakters worden uit de opgegeven stroom gelezen en in opeenvolgende locaties in de array geplaatst. Het lezen gaat door tot het einde van de file is bereikt, tot er een newline wordt aangetroffen of zolang het aantal ingevoerde karakters niet groter is dan n. Als de invoer afgelopen is, wordt er een afsluitend nulkarakter achter de opgeslagen karakters geplaatst. Als het lezen geslaagd is, wordt er een pointer naar de array s afgeleverd. Als tijdens het lezen een fout optreedt of als het einde van de file wordt bereikt, wordt de nulpointer NULL afgeleverd. Fouten kunnen dus op de gebruikelijke manier worden opgevangen: if (fgets(regel, GROOTTE, fpin) == NULL)... De prototypedeclaratie voor de functie fputs is: int fputs(char *s, FILE *fp); De functie fputs schrijft een door het nulkarakter afgesloten string s naar de string waarnaar fp wijst, die geopend moet zijn om erin te schrijven. Als tijdens het schrijven een fout optreedt levert fputs de waarde EOF af. We hebben in de meeste programma's in dit boek #include gebruikt. In het volgende voorbeeld ziet u hoe we deze nuttige faciliteit kunnen implementeren. De schets voor onze versie van include is: WHILE haal één regel uit de bronfile; niet einde van file DO IF de regel begint met #include THEN neem deze nieuwe file op ELSE schrijf deze regel naar de doelfile ENDIF ENDWHILE Als de ten gevolge van #include opgenomen file zelf weer een #include bevat, leidt dit natuurlijk tot een recursieve oplossing. Een dergelijke nesting is nuttig en wordt in C geïmplementeerd door middel van een recursieve implementatie van de functie.

12 Het programma wordt aangeroepen met de commandoregel: include bronfilenaam doelfilenaam Zoals in het POT-ontwerp beschreven, worden de regels tekst van de bronfile naar de doelfile gekopieerd. Als een regel uit de bronfile de vorm #include filenaam heeft, is de include-operatie van toepassing op deze nieuwe bronfile, en wordt de uitvoer weer naar dezelfde doelfile gezonden. Als de nieuwe bronfile verwerkt is, gaat het kopiëren door bij de oorspronkelijke bronfile of eindigt het programma als het de eerste bronfile is. Programma 14-4 /* Kopieer de inhoud van een bronfile naar een doelfile. De namen van de twee files worden als argumenten op de commandoregel gegeven. Als in de bronfile een tekstregel van de vorm: #include filenaam voorkomt, wordt deze vervangen door de inhoud van de genoemde file. De include-statements mogen genest voorkomen tot een diepte gelijk aan het maximale aantal files dat in het systeem tegelijk open kan zijn. */ #include <stdio.h> #include <string.h> #define LEZEN r #define SCHRIJVEN w #define REGELLENGTE 256 #define INCLUDE "#include" void include_file(file *, FILE *); main(int argc, char *argv[]) { FILE *fpbron, fp*doel; if(argc!= 3) printf( Gebruik: %s filel file2\nl" argv[0]); else if((fpbron = fopen(argv[1], LEZEN)) == NULL) printf ( %s: kan %s niet openen \n" argv[0], argv[1]); else if((fpdoel = fopen(argv[2], SCHRIJVEN)) == NULL) { printf ("%s: kan %s niet openen\n" argv[0l, argv[2]); fclose(fpbron); else {

13 include_file(fpbron, fpdoel); fclose(fpbron); fclose(fpdoel); /* Kopieer de bronfile regel voor regel naar de doelfile. Expandeer regels die met #include beginnen. Nesting van #include is toegestaan. */ void include_file(file *fpin, FILE *fpuit) { char regel[regellengte],woord1[regellengte],woord2[regellengte]; FILE *fp; while (fgets(regel( REGELLENGTE, fpin)!= NULL) /* eof invoer? */ if(sscanf(regel, "%s %s", woord1, woord2)!= 2) /* 2 woorden? */ fputs(regel, fpuit); /* kopieer gewoon */ else if (strcmp(woord1, INCLUDE)!= 0) /* #include-regel? */ fputs(regel, fpuit); /* nee, kopieer */ else if ((fp = fopen(woord2, LEZE)) == NULL) printf( Kan %s niet openen genegeerd \n, woord2); else { include_file(fp, fpuit); /* geneste include */ fclose(fp); 14.5 De files' stdin, stdout en stderr Als een C-programma wordt uitgevoerd, worden drie 'files' automatisch geopend door het systeem, dat er filepointers voor aflevert. Dit zijn de files standaardinvoer, standaarduitvoer en standaardfout. De pointers hebben de namen stdin stdout en stderr. Deze pointers zijn gedefinieerd in de standaardi/0-header <stdio.h>. Het zijn constanten, geen variabelen. We kunnen er dus geen waarde aan toekennen. Normaal horen deze files bij de terminal van de gebruiker. Alle standaard-i/0functies die invoer doen en geen filepointer als argument hebben (getchar, gets en scanf) halen hun invoer uit stdin De aanroep fscanf (stdin, "%d", &getal); leest de volgende integer waarde uit de standaardinvoer en is equivalent met de aanroep

14 scanf("%d, &getal); Alle standaard-i/o-functies die uitvoer doen en geen filepointer als argument hebben (putchar, puts en printf) leveren hun uitvoer in stdout af. De aanroep fprintf (stdout, "Mijn eerste programma \n ) is equivalent met printf("mijn eerste programma \n ); De 'functies' die één karakter uit de standaardinvoer halen of naar de standaarduitvoer brengen, worden meestal als macro's geïmplementeerd. De macro's putc en getc zijn equivalent met de echte functies fputc en fgetc. Ze zijn als macro's geschreven, maar kunnen worden beschouwd als functies met de volgende declaraties: int putc(int c, FILE *fp) en int getc(file *fp) De 'functies' getchar en putchar kunnen als volgt in termen van getc, putc, stdin en stdout worden gedefinieerd: #define getchar() getc(stdin) #define putchar(c) putc((c), stdout) Tenslotte is er nog de filepointer stderr. Het is de bedoeling dat eventuele foutmeldingen die door een programma worden geproduceerd, naar deze 'standaardfoutstroom' worden geschreven. In een interactieve omgeving wordt deze stroom gekoppeld aan de terminal van de gebruiker. De reden voor het bestaan van stderr is dat foutrneldingen naar een ander apparaat kunnen worden gestuurd dan waarheen de normale uitvoer wordt geschreven. Dat is vooral wenselijk als de uitvoer van een programma wordt geleid naar een file of via een pipe wordt doorgestuurd. In de programma's in dit hoofdstuk moeten foutrneldingen daarom eigenlijk worden afgeleverd door middel van statements als: if ((fp = fopen(argv[1]), LEZEN)) == NULL) fprintf(stderr, "%s: kan %s niet openen\n", argv[0l, argv[1]); waarin fprintf en stderr worden gebruikt in plaats van printf en stdout.

15 14.6 De functie exit en de afhandeling van fouten Een programma eindigt automatisch als de laatste statement in de functie main is uitgevoerd. Soms kan het wenselijk zijn een programma geforceerd te beëindigen als er een fout is gedetecteerd. Om een programma expliciet af te breken, kunnen we de functie exit aanroepen. De functieaanroep exit(n); heeft tot gevolg dat het actuele programma wordt beëindigd, dat de open files worden geleegd en gesloten en dat de waarde van de integer n wordt doorgegeven aan het proces in het systeem dat voor het activeren van dit programma verantwoordelijk was (bijvoorbeeld het besturingssysteem). Onder UNIX is het de gewoonte dat de integer waarde 0 aangeeft dat de uitvoering van een programma geslaagd is; een waarde ongelijk aan nul geeft aan dat een programma geëindigd is omdat er een fout is gedetecteerd. De symbolische waarden EXIT- FAILURE en EXIT-SUCCESS kunnen als argument voor de functie worden gebruikt. Deze symbolische waarden zijn in <stdlib.h> gedefinieerd. In alle programma's in dit hoofdstuk hebben we veel aan controle op fouten gedaan, waardoor de logica van het programma enigszins op de achtergrond raakte. We kunnen de code wat overzichtelijker maken door de foutendiagnostiek te delegeren aan een functie genaamd meldfout. Als deze functie wordt aangeroepen, wordt er een foutmelding afgeleverd, worden alle open files gesloten en wordt het programma beëindigd Directe toegang De standaardbibliotheek bevat functies voor een aantal verschillende filestructuren. De eenvoudigste fileorganisatie is de seriële file - dit is het type file waarmee we tot nu toe hebben gewerkt. Een seriële file wordt opgebouwd door aan het eind van de file nieuwe records te schrijven. Als de file daarna wordt gelezen, worden de componenten in dezelfde volgorde ingevoerd als waarin ze er eerst in zijn geschreven. De standaard-i/o-bibliodieek kan ook werken met een andere filestructuur, waarin directe toegang tot een gespecificeerde component van de file mogelijk is. Een file met directe toegang kan worden beschouwd als een aantal datablokken of recordgebieden. Elk recordgebied heeft een vaste omvang, uitgedrukt in bytes. Om een record te lezen (of te schrijven) moeten we eerst de leeskop (of schrijfkop) op de eerste byte van het recordgebied positioneren. Dan wordt het vereiste aantal bytes overgebracht naar (of uit) het geheugen. Met de functie fseek is directe toegang in een file mogelijk. De header voor de functies fseek is:

16 int fseek(file *fp, long offset, int origin) Het eerste argument moet een filepointer zijn naar een file die geopend is voor invoer, uitvoer of beide. Het derde argument moet de waarde SEEK_SET, SEEK_CUR of SEEK_END hebben (gedefinieerd in <stdio.h>). Als het SEEK_SET is, wordt de positie in de file gelijk gemaakt aan de waarde van het tweede argument, gerekend als aantal bytes. De eerste byte van de file heeft het nummer 0. De waarde SEEK_SET van het argument origin wordt gebruikt als we de lees/schrijfkop op een absolute positie in de file willen zetten. Zo zet de aanroep fseek(fp, 0L, SEEK_SET) de kop aan het begin van de file. Als het derde argument SEEK_CUR is, wordt de positie in de file gelijk gemaakt aan de actuele positie plus de van een teken voorziene offset. Een positieve offset verplaatst de positie in de richting tegengesteld aan die van het begin van de file, terwijl een negatieve offset een verplaatsing in de richting van het begin van de file veroorzaakt. De waarde SEEK_CUR voor origin wordt gebruikt voor het relatief positioneren binnen de file. Als het derde argument SEEK_END is, wordt de positie gelijk gemaakt aan het eind van de file plus de (van een teken voorziene) offset. Deze mogelijkheid wordt vaak gebruikt om een file uit te breiden. Om naar het eind van een file te gaan alvorens bijvoorbeeld te schrijven, gebruiken we de aanroep fseek(fp, 0L, SEEK_END) Als de operatie slaagt, levert fseek de waarde 0 af, anders een waarde ongelijk aan nul. Gewoonlijk wordt het resultaat getest met een constructie van de vorm: if(fseek(fp, offset, origin)!= 0) fprintf(stderr, "Fout bij fseek \n ); else Als de gewenste positie in de file met fseek is opgezocht, begint het lezen of schrijven daarna op die positie. De invoer en uitvoer kan worden gedaan met de functies voor file-i/0, zoals fscanf en fprint f of met twee nieuwe functies fread en fwrite. De functie fread leest een blok binaire data naar een gespecificeerde geheugenbuffer. De header van de functie is: size_t fread(void *buffer, size_t size, size_t count, FILE *fp);

17 Het eerste argument is een pointer naar de buffer waarheen de invoer moet worden gelezen. Het tweede argument is de grootte van de elementen in de buffer (size_t is de naam voor een unsigned integer type gedefinieerd in <stddef.h»; als het eerste argument van een type T is, wordt het tweede argument in het algemeen berekend met de expressie sizeof(t). Het totale aantal uit de file gelezen bytes is size* count het vierde argument is een pointer naar een file die geopend is voor invoer. Om bijvoorbeeld twintig karakters in een array in te voeren, gebruiken we de aanroep: char tabel[20]; fread(tabel, sizeof(char), 20, fp); Het volgende voorbeeld leest twintig integers in een array: int stapel [20]; fread(stapel, sizeof(int, 20, fp); Het aantal werkelijk gelezen elementen wordt door de functie fread als resultaat afgeleverd. In het algemeen wordt deze waarde getest om te zien of de operatie geslaagd is. Als de afgeleverde waarde kleiner is dan het aantal in count, moeten de functies foef en ferror worden gebruikt om de status te achterhalen. De functie fread wordt vaak zo gebruikt: if ((aantal_gelezen = fread(stapel, sizeof(int), 20, fp))!= 20 ) { if (feof (fp) ) fprintf(stderr, "Einde file gevonden \n"); else fprintf(stderr, "Leesfout\n"); De tegenhanger van fread - voor het schrijven van een blok binaire data uit een geheugenbuffer naar een file - is fwrite. De header is: size_t fwrite (void *buffer, size_t size,size_t count, FILE *fp) De functie fwrite levert het aantal feitelijk gelezen elementen af. Als er een fout optreedt, is de afgeleverde waarde kleiner dan count.

18 14.8 Samenvatting Een file is een verzameling records van een of ander type. De organisatie van een file bepaalt hoe de records van een file worden verwerkt; twee organisatievormen zijn serieel en random toegang. Een seriële file wordt opgebouwd door nieuwe records aan het eind van de file te schrijven. Als de file later wordt gelezen, worden de element in dezelfde volgorde ingevoerd als waarin ze erin zijn geschreven. Bij een file met directe toegang kan naar/ uit elke positie in de file worden geschreven of gelezen. Voordat er in een file kan worden gelezen of geschreven, moet de file worden geopend. Dat kan gebeuren met de bibliotheekfunctie fopen, die een interne filenaam (filepointer) aflevert, die dan in volgende I/0-operaties wordt gebruikt. Als het verwerken van een file afgelopen is, moet de file gesloten worden met de functie fc1ose. De bibliotheekfunctie exit maakt geopende files leeg en sluit ze alvorens een programma te beëindigen. De functies fgetc, fputc, fscanf, enzovoort zorgen voor seriële verwerking van een file. Directe toegang tot een file is mogelijk met de functies fseek en rewind. In elk C-programma bestaan drie files met de filepointers stdin, stdout en stderr. De aanroep fgetc (stdin) is bijvoorbeeld equivalent met getchar(). Een aantal voorbeelden voor het gebruik van de ANSI C filefuncties kan men vinden in de file use_file.cpp.

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

Operaties op bestanden

Operaties op bestanden Operaties op bestanden C bevat geen speciale taalconstructies voor in- en uitvoer. een verzameling van functies, onderdeel van de standaard C-bibliotheek: fopen fclose fgetc fputc ungetc fscanf fprintf

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

9 Meer over datatypen

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

Nadere informatie

Lineaire data structuren. Doorlopen van een lijst

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

Nadere informatie

10 Meer over functies

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

Nadere informatie

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

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

Nadere informatie

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

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

Nadere informatie

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

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

Nadere informatie

Examen Programmeren 2e Bachelor Elektrotechniek en Computerwetenschappen Faculteit Ingenieurswetenschappen Academiejaar juni, 2010

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.

Nadere informatie

Tentamen Programmeren in C (EE1400)

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

Nadere informatie

Tentamen Programmeren in C (EE1400)

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

Nadere informatie

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

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

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

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

Nadere informatie

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

Waarden persistent (blijvend) opslaan gaat in bestanden (files). Lege tekst: eof Programmeren Blok A Persistente opslag van waarden http://www.win.tue.nl/ wstomv/edu/2ip05/ College 4 Tom Verhoeff Technische Universiteit Eindhoven Faculteit Wiskunde en Informatica Software Engineering

Nadere informatie

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

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

Nadere informatie

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

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

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

Instructies en blokken

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

Nadere informatie

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

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

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

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

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

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

Nadere informatie

Week 3 : Hoofdstukken 7 en 8; extra stof: invoer met scanf() extra aanvulling op het boek: inlezen met scanf() in C

Week 3 : Hoofdstukken 7 en 8; extra stof: invoer met scanf() extra aanvulling op het boek: inlezen met scanf() in C Week 3 : Hoofdstukken 7 en 8; extra stof: invoer met scanf() extra aanvulling op het boek: inlezen met scanf() in C Voorbeeld Extra_4 In dit voorbeeld lezen we in van toetsenbord met scanf(). Let op de

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

Technology, Innovation & Society Delft

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

Nadere informatie

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

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

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

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

Nadere informatie

Lab Webdesign: Javascript 3 maart 2008

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

Nadere informatie

Functioneel programmeren

Functioneel programmeren Functioneel programmeren Practicumopgave 2: Mastermind Het doel van deze opgave is het implementeren van het spel Mastermind; zie http://nl.wikipedia.org/wiki/mastermind voor een uitleg. Het spel is klein

Nadere informatie

Recursie: definitie. De som van de kwadraten van de getallen tussen m en n kan als volgt gedefinieerd worden:

Recursie: definitie. De som van de kwadraten van de getallen tussen m en n kan als volgt gedefinieerd worden: Recursie: definitie Een object wordt recursief genoemd wanneer het partieel bestaat uit of partieel gedefinieerd is in termen van zichzelf. Recursie wordt gebruikt bij wiskundige definities, bijvoorbeeld:

Nadere informatie

Een korte samenvatting van enkele FORTRAN opdrachten

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

Nadere informatie

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

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

Nadere informatie

Tentamen Programmeren in C (EE1400)

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

Nadere informatie

Dynamisch geheugen beheer

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

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

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

Programmeren in C++ Efficiënte zoekfunctie in een boek

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)!

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

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

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

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

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,

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

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

Programmeren /13 Test Tentamen

Programmeren /13 Test Tentamen RADBOUD UNIVERSITEIT NIJMEGEN AFDELING STERRENKUNDE JÖRG R. HÖRANDEL ANNA NELLES Programmeren 1 2012/13 Test Tentamen 17.12.2013 Dit is een test tentamen. De antwoorden moeten niet ingediend worden.ditisalleenvooruomte

Nadere informatie

PROS1E1 Handleiding ( ) Kf/Dd/Bd

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

Nadere informatie

1 Rekenen in eindige precisie

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

Nadere informatie

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

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

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

Controle structuren. Keuze. Herhaling. Het if statement. even1.c : testen of getal even of oneven is. statement1 statement2 Controle structuren De algemene vorm: 1 bloks door middel van indentatie Keuze Herhaling if expressie :...... In de volgende vorm is het else gedeelte weggelaten: if expressie :... Het if keuze- of conditioneel

Nadere informatie

Technology, Innovation & Society Delft

Technology, Innovation & Society Delft Technology, Innovation & Society Delft VOORBLAD SCHRIFTELIJKE TOETSEN OPLEIDING TOETSCODE GROEP : ELEKTROTECHNIEK : RTSYST-co1 : ECV TOETSDATUM : 12 JUNI 2012 TIJD : 11.00 12.30 uur AANTAL PAGINA S (incl.

Nadere informatie

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

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

Nadere informatie

QR-code op aanvoerbrief 2.xx.0: Specificaties

QR-code op aanvoerbrief 2.xx.0: Specificaties QR-code op aanvoerbrief 2.xx.0: Specificaties Door: Bert Velthuijs Datum 1e versie: 5 april 2012 (versie 0.xx) Datum laatste wijziging 20 september 2012 Huidige Versie: 2.xx.0 Wijzigingen 19 juli 2012

Nadere informatie

RADBOUD UNIVERSITEIT NIJMEGEN AFDELING STERRENKUNDE JAN VAN ROESTEL. Programmeren /14 Computer Practicum

RADBOUD UNIVERSITEIT NIJMEGEN AFDELING STERRENKUNDE JAN VAN ROESTEL. Programmeren /14 Computer Practicum 1 RADBOUD UNIVERSITEIT NIJMEGEN AFDELING STERRENKUNDE JÖRG R. HÖRANDEL JAN VAN ROESTEL Programmeren 1 2013/14 Computer Practicum 8 13.01.2014 De antwoorden moeten voor 17.01.2014 op blackboard ingediend

Nadere informatie

Korte uitleg: File descriptors en redirection in de shell (en pipes)

Korte uitleg: File descriptors en redirection in de shell (en pipes) Korte uitleg: File descriptors en redirection in de shell (en pipes) De zogenaamde Redirection faciliteit zoals gebruikt in de shell is soms lastig te overzien. Vooral bash heeft nogal wat uitbreidingen

Nadere informatie

Uitwerking tentamen Analyse van Algoritmen, 29 januari

Uitwerking tentamen Analyse van Algoritmen, 29 januari Uitwerking tentamen Analyse van Algoritmen, 29 januari 2007. (a) De buitenste for-lus kent N = 5 iteraties. Na iedere iteratie ziet de rij getallen er als volgt uit: i rij na i e iteratie 2 5 4 6 2 2 4

Nadere informatie

Examen Programmeren 2e Bachelor Elektrotechniek en Computerwetenschappen Faculteit Ingenieurswetenschappen Academiejaar juni, 2010

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. Lees eerst de volledige opgave (inclusief

Nadere informatie

Programmeermethoden NA

Programmeermethoden NA Programmeermethoden NA Week 4: Files & Functies Kristian Rietveld http://liacs.leidenuniv.nl/~rietveldkfd/courses/prna/ Bij ons leer je de wereld kennen 1 Vorige week: Controlestructuren # gegeven # 0

Nadere informatie

Instructies en blokken

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.

Nadere informatie

BEGINNER JAVA Inhoudsopgave

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

Nadere informatie

1.1 Programmeren en voorbereiding

1.1 Programmeren en voorbereiding Een overzicht van C 1.1 Programmeren en voorbereiding 1.2 Programma-uitvoer 1.3 Variabelen, expressies en toewijzing 1.4 Het gebruik van #define en 1.5 Het gebruik van printf() en scanf() 1.6 Programmabesturing

Nadere informatie

Opdrachten numerieke methoden, week 1

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

Nadere informatie

12 Meer over pointers

12 Meer over pointers 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

Nadere informatie

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

OPDRACHT Opdracht 2.1 Beschrijf in eigen woorden wat het bovenstaande PSD doet. Les C-02: Werken met Programma Structuur Diagrammen 2.0 Inleiding In deze lesbrief bekijken we een methode om een algoritme zodanig structuur te geven dat er gemakkelijk programmacode bij te schrijven

Nadere informatie

Modelleren en Programmeren

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

Nadere informatie

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

start -> id (k (f c s) (g s c)) -> k (f c s) (g s c) -> f c s -> s c Een Minimaal Formalisme om te Programmeren We hebben gezien dat Turing machines beschouwd kunnen worden als universele computers. D.w.z. dat iedere berekening met natuurlijke getallen die met een computer

Nadere informatie

UNIVERSITEIT ANTWERPEN FACULTEIT WETENSCHAPPEN DEPARTEMENT WISKUNDE-INFORMATICA OBERON CODE CONVENTIONS

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

Nadere informatie

Java Les 3 Theorie Herhaal structuren

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

Nadere informatie

Structures. Voorbeeld: een punt in een vlakte heft een x en een y coördinaat struct point{ int x; int y; }

Structures. Voorbeeld: een punt in een vlakte heft een x en een y coördinaat struct point{ int x; int y; } Herhaling 1 Structures 2 Een structuur (structure) is een collectie van variabelen. Met structuren kunnen wij groepen van variabelen vormen. Dit is vooral handig in grote programmaʻs. Voorbeeld: een punt

Nadere informatie

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

Voorbeeldtentamen Inleiding programmeren (IN1608WI), Oktober 2003, , Technische Universiteit Delft, Faculteit EWI, Afdeling 2. Voorbeeldtentamen Inleiding programmeren (IN1608WI), Oktober 2003, 14.00-15.30, Technische Universiteit Delft, Faculteit EWI, Afdeling 2. Dit tentamen bestaat uit twee delen. Deel 1 (14.00-14.45, gesloten

Nadere informatie

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

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

Nadere informatie

Tentamen Computersystemen

Tentamen Computersystemen Tentamen Computersystemen baicosy06 2e jaar bachelor AI, 2e semester 23 september 2013 13u-15u IWO 4.04A (blauw), Academisch Medisch Centrum, Meidreef 29, Amsterdam ZuidOost Het is niet toegestaan communicatieapparatuur

Nadere informatie

De standaard programmeertaal

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

Nadere informatie

Niet-numerieke data-types

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

Nadere informatie

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

Jörg R. Hörandel Afdeling Sterrenkunde

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

Nadere informatie

{ auteur, toelichting }

{ auteur, toelichting } Programmeren Blok A Trilogie van (programmeer)talen http://www.win.tue.nl/ wstomv/edu/ip0/ College Syntaxis (vormleer): Hoe ziet t eruit, hoe schrijf je t? Tom Verhoeff Technische Universiteit Eindhoven

Nadere informatie

Programmeermethoden NA. Week 5: Functies (vervolg)

Programmeermethoden NA. Week 5: Functies (vervolg) Programmeermethoden NA Week 5: Functies (vervolg) Kristian Rietveld http://liacs.leidenuniv.nl/~rietveldkfd/courses/prna2016/ Functies Vorige week bekeken we functies: def bereken(a, x): return a * (x

Nadere informatie

Programmeermethoden. Functies vervolg. Walter Kosters. week 5: 1 5 oktober kosterswa/pm/

Programmeermethoden. Functies vervolg. Walter Kosters. week 5: 1 5 oktober kosterswa/pm/ Programmeermethoden Functies vervolg Walter Kosters week 5: 1 5 oktober 2018 www.liacs.leidenuniv.nl/ kosterswa/pm/ 1 Files manipuleren 1 Deze void-functie telt niet-lege regels in een file invoer: void

Nadere informatie

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

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

Nadere informatie

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

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

Nadere informatie

VBA voor Doe het Zelvers Deel 7

VBA voor Doe het Zelvers Deel 7 VBA voor Doe het Zelvers Deel 7 Handleiding van Auteur: leofact Juni 2014 Vorige aflevering In de vorige aflevering hebben we een timer gecreëerd met gebruik van de OnTime methode. Er werd ook een methode

Nadere informatie

Modelleren en Programmeren

Modelleren en Programmeren Modelleren en Programmeren Jeroen Bransen 13 november 2015 Expressies Functies Ingebouwde functies Variabelenbereik Inleveropgave 1 Terugblik Programma is een lijst van opdrachten Terugblik Programma is

Nadere informatie

Programmeermethoden NA. Week 5: Functies (vervolg)

Programmeermethoden NA. Week 5: Functies (vervolg) Programmeermethoden NA Week 5: Functies (vervolg) Kristian Rietveld http://liacs.leidenuniv.nl/~rietveldkfd/courses/prna/ Bij ons leer je de wereld kennen 1 Functies Vorige week bekeken we functies: def

Nadere informatie

Numerieke benadering van vierkantwortels

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

Nadere informatie

6.2 VBA Syntax. Inleiding Visual Basic

6.2 VBA Syntax. Inleiding Visual Basic 6.2 VBA Syntax Wij gaan de Visual Basic Editor opnieuw openen, om de instructie die wij zojuist getypt hebben, nader te bekijken. Klik te tab Hulpmiddelen voor databases Klik op Maken Macro s en Code -

Nadere informatie

Hutscodering. De techniek: illustratie. een tabel met 7 plaatsen, genummerd van 0 tot en met 6.

Hutscodering. De techniek: illustratie. een tabel met 7 plaatsen, genummerd van 0 tot en met 6. Hutscodering die leeg kunnen zijn, tabel T: abstract stockage middel met plaatsen elementen vd. vorm (K, I) K is de sleutel (of key) en I bijhorende informatie creatie van een lege tabel; een nieuw element

Nadere informatie

Talstelsels en getalnotaties (oplmodel)

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

Nadere informatie

VOORBLAD SCHRIFTELIJKE TOETSEN

VOORBLAD SCHRIFTELIJKE TOETSEN Technology, Innovation & Society Delft VOORBLAD SCHRIFTELIJKE TOETSEN OPLEIDING TOETSCODE GROEP : ELEKTROTECHNIEK : GESPRG-SC1 : EP11/EP12 TOETSDATUM : 23-01-2014 TIJD : 15.00 16.30 uur AANTAL PAGINA S

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

Tentamen Imperatief en Object-georiënteerd programmeren in Java voor CKI

Tentamen Imperatief en Object-georiënteerd programmeren in Java voor CKI Tentamen Imperatief en Object-georiënteerd programmeren in Java voor CKI Vrijdag 22 januari 2010 Toelichting Dit is een open boek tentamen. Communicatie en het gebruik van hulpmiddelen zijn niet toegestaan.

Nadere informatie

AFO 139 Automatische export

AFO 139 Automatische export AFO 139 Automatische export 139.1 Inleiding Vubis Smart beschikt over de mogelijkheid om volledig automatisch beschrijvingen te exporteren naar bestanden op de server. Andere bibliotheken (ongeacht of

Nadere informatie

6,1. Samenvatting door een scholier 1809 woorden 28 oktober keer beoordeeld. Informatica

6,1. Samenvatting door een scholier 1809 woorden 28 oktober keer beoordeeld. Informatica Samenvatting door een scholier 1809 woorden 28 oktober 2005 6,1 16 keer beoordeeld Vak Methode Informatica Turing informatica samenvatting. hst3: algoritme:een beschrijving van stappen die gedaan moeten

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

Inleiding Programmeren 2

Inleiding Programmeren 2 Inleiding Programmeren 2 Gertjan van Noord November 19, 2018 Overzicht Grafische programma s en tekstgebaseerde programma s Stijladviezen (Jeff Knupp, Writing Idiomatic Python) File Processing (Zelle 5.9.2)

Nadere informatie

Uitwerking Tentamen Modelleren en Programmeren - versie 1 Woensdag 1 februari 2017, uur

Uitwerking Tentamen Modelleren en Programmeren - versie 1 Woensdag 1 februari 2017, uur Uitwerking Tentamen Modelleren en Programmeren - versie 1 Woensdag 1 februari 2017, 17 20 uur Schrijf op elk ingeleverd blad je naam. Schrijf op het eerste blad ook je studentnummer en het aantal ingeleverde

Nadere informatie

Tweede college algoritmiek. 12 februari Grafen en bomen

Tweede college algoritmiek. 12 februari Grafen en bomen College 2 Tweede college algoritmiek 12 februari 2016 Grafen en bomen 1 Grafen (herhaling) Een graaf G wordt gedefinieerd als een paar (V,E), waarbij V een eindige verzameling is van knopen (vertices)

Nadere informatie