9 Meer over datatypen

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

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

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

Online c++ leren programmeren:

17 Operaties op bits Bitoperatoren en bitexpressies

Variabelen en statements in ActionScript

Tentamen Programmeren in C (EE1400)

10 Meer over functies

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

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

HOGESCHOOL VAN AMSTERDAM Informatica Opleiding. CPP 1 van 10

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

Datastructuren: stapels, rijen en binaire bomen

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

Deeltentamen Grammatica s en ontleden 22 december 2005

Visual Basic.NET. Visual Basic.NET. M. den Besten 0.3 VB. NET

Inleiding C++ Coding Conventions

Programmeermethoden NA. Week 5: Functies (vervolg)

Universiteit van Amsterdam FNWI. Voorbeeld van tussentoets Inleiding programmeren

Introductie in C++ Jan van Rijn. September 2013

Instructies en blokken

Vakgroep CW KAHO Sint-Lieven

1.1 Programmeren en voorbereiding

4 Invoer en uitvoer. 4.1 Toegang tot de standaardbibliotheek

UNIVERSITEIT ANTWERPEN FACULTEIT WETENSCHAPPEN DEPARTEMENT WISKUNDE-INFORMATICA OBERON CODE CONVENTIONS

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

Datastructuren: stapels, rijen en binaire bomen

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

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

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

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

Lineaire data structuren. Doorlopen van een lijst

Programmeermethoden NA. Week 5: Functies (vervolg)

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

Hoofdstuk 0. Van Python tot Java.

Tentamen Programmeren in C (EE1400)

PROS1E1 Gestructureerd programmeren in C Dd/Kf/Bd

compileren & interpreteren - compileren: vertalen (omzetten) - interpreteren: vertolken

Datastructuren Werkcollege Intro

{ auteur, toelichting }

C++ C++ als een verbetering van C. Abstracte datatypen met classes. Constructoren en destructoren. Subklassen. binding van functies

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

VOORBLAD SCHRIFTELIJKE TOETSEN

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

VOORBLAD SCHRIFTELIJKE TOETSEN

Turbo Pascal (deel 1)

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

Examen Software Ontwikkeling I 2e Bachelor Informatica Academiejaar Januari, **BELANGRIJK** : Schrijf je naam onderaan dit blad

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

Aanvullende toets Gameprogrammeren (INFOB1GP) Woensdag 24 december 2014, uur

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

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

Inleiding Een terugblik op C... 3

Optimalisatie technieken

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

JANUARI Yogacollege Tilburg. Telefoon:

Faculteit Economie en Bedrijfskunde

Programmeermethoden. Arrays (vervolg 2) Walter Kosters. week 9: 6 10 november kosterswa/pm/

Pascal uitgediept Data structuren

Programmeren in Java les 3

HANDLEIDING PROGRAMMEREN. (5e en 6e kwartaal natuur- en sterrenkunde) July 20, 2011

Scala. Korte introductie. Sylvia Stuurman

VAN HET PROGRAMMEREN. Inleiding

Objectgeoriënteerd Programmeren in C++

Modelleren en Programmeren

Jörg R. Hörandel Afdeling Sterrenkunde.

Zelftest Inleiding Programmeren

IDP: Labo 2. Given: type int Octaal = {1;2;3;4;5;6;7;8} type int Octaal = {1..4;5;6..8}

Opdrachten numerieke methoden, week 1

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

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

Opdrachten numerieke methoden, serie 2

Uitwerking Aanvullend tentamen Imperatief programmeren Woensdag 24 december 2014, uur

Programmeren A. Genetisch Programma voor het Partitie Probleem. begeleiding:

OEFENINGEN PYTHON REEKS 1

Programmeermethoden. Arrays (vervolg 2) Walter Kosters. week 9: 5 9 november kosterswa/pm/

Programmeermethoden. Arrays. Walter Kosters. week 7: oktober kosterswa/pm/

Totaal

De standaard programmeertaal

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

Instructies en blokken

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

Tentamen Programmeren in C (EE1400)

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

II. ZELFGEDEFINIEERDE FUNCTIES

Boot - DEM/DT/BE_MFAO-BOO, Financieel Advies en Ondersteuning - DEM/DL/BE_TS-MFAO, Fiscaal - DEM/DT/BE_MFAO-FIS, Gespreksvaardigheden Gr.1...

Vraag 1: HashTable [op 2 punten van de 20] Gegeven de header file HashTable.h van een hashtabel die pointers naar strings bijhoudt (in bijlage).

Dynamisch geheugen beheer

3 e jaars GameTech student C++ voor hobby, eerste programmeertaal Assistent bij een heleboel vakken

Jörg R. Hörandel Afdeling Sterrenkunde

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

Teamhandleiding DOMjudge (versie 2.2.0muKP) 31 mei 2008

Programmeermethoden. Pointers. Walter Kosters. week 10: november kosterswa/pm/

Functies. Huub de Beer. Eindhoven, 4 juni 2011

Objectgeoriënteerd Programmeren in C++

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

Programmeren (1) Examen NAAM:

int getaantalpassagiers{): void setaantalpassagiers(int aantalpassagiers);

A.C. Gijssen. 0.3 PHP en MySQL

Transcriptie:

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, zoals in #define AUGUSTUS 8 kunnen we de betekenis van de 'constante' AUGUSTUS zien in plaats van de specifieke waarde. Als het nodig blijkt de waarde van deze constante te veranderen, hoeven we alleen de definitie te veranderen in plaats van het hele programma te doorzoeken naar het voorkomen van de letterlijke constante 8. Om soortgelijke redenen levert C de mogelijkheid van een typedefinitie, waarin de programmeur een type een naam geeft. Deze mogelijkheid wordt in de volgende paragraaf bestudeerd. Tot nu toe hebben we de elementaire datatypen van C gezien. Soms hebben we een grotere keus nodig. We willen misschien een datatype gebruiken waarvan de waarden de dagen van de week zijn. Dan kunnen we op een natuurlijke manier de toekenning dag = MAANDAG; schrijven, waarin MAANDAG een constante is van dit datatype en dag een variabele van datzelfde type. In C kunnen we onze eigen datatypen specificeren. Deze faciliteiten verbeteren de mogelijkheid programma's te formuleren in de abstractie termen van het probleemgebied. Deze concepten bespreken we in paragraaf 9.2. 9.1 De statement typedef De programmeertaal C kent een aantal elementaire datatypen, zoals char en int. In een declaratie voor variabelen van de elementaire typen worden specificators gebruikt als char en int. De declaratie int uren, minuten; specificeert dat de variabelen uren en minuten van type int zijn. De statement typedef int Tijd; 1

specificeert dat de typenaam Tijd equivalent is met het datatype int van C. De opgegeven identifier kan later op de gebruikelijke manier worden gebruikt om een variabele of functie te declareren. De declaratie Tijd uren, minuten; declareert de variabelen uren en minuten als zijnde van het type Tijd, dat equivalent is met het type int. Het voornaamste voordeel van het gebruik van de typedefinitie in bovenstaand voorbeeld ligt in de verbeterde leesbaarheid van de definitie van variabelen. De declaratie laat ook zien waarvoor de variabelen in het programma bedoeld zijn. Als ze op de normale manier als int zouden worden gedeclareerd, zou de bedoeling van de variabelen niet zo duidelijk zijn. Een tweede voordeel is dat op deze manier afkortingen voor lange declaraties mogelijk zijn. Dat zullen we zien als we arrays en structuren gaan gebruiken. Om een nieuwe naam te definiëren, gaat u als volgt te werk. Schrijf een declaratie alsof u een variabele van het bedoelde type declareert. Om bijvoorbeeld een variabele var van type int te declareren, gebruikt u: int var; Vervang de naam van de variabele dan door de nieuwe typenaam: int Tijd; Plaats tenslotte het gereserveerde sleutelwoord typedef voor het geheel: typedef int Tijd; Het gebruik van de statement typedef wordt in programma 9-1 gedemonstreerd. Het programma krijgt als invoer een datum, gerepresenteerd door drie integers voor dag, maand en jaar. Het programma berekent het dagnummer van de datum in het betreffende jaar. In elk jaar heeft 1 januari dag nummer 1. In een schrikkeljaar heeft 3l december dag nummer 366, anders 365. Programma 9-1 Lees een geldige datum in de vorm DD/MM/JJJJ en bepaal het dagnummer binnen het jaar. In elk jaar heeft 1 januari dagnurnmer 1. Het dagnummer van 31 december is in een schrikkeljaar 366 en anders 365. 2

#include <stdio.h> #define IS_SCHRIKKEL(J) ((J % 4 == 0) && (J % 100!= 0) ½½ (J % 400 == 0)) typedef int Dag; // typenamen typedef int Maand; typedef int Jaar; typedef int Dagnummer; typedef int Dagenpermaand; typedef int Boolean; Dagenpermaand dagenpermaand (const Maand, const Jaar); int main() { Dag dag; // ingevoerde waarde Maand maand, m; // m is maandteller Jaar jaar; Dagnummer dagnummer; // berekende waarde scanf("%2d/%2d/%4d", &dag, &maand, &jaar); dagnummer = 0; for (m = l; m < maand; m++) dagnummer += dagenpermaand(m, jaar); dagnummer += dag; printf ("%2d/%2d/%4d heeft dagnummer %d \n", dag, maand, jaar, dagnummer); Dagenpermaand dagenpermaand (const Maand maand, const Jaar jaar) { switch (maand) { case 4: case 6: // april, juni,... case 9: case 11: //... september, november return (30); case 2: /* februari -- speciaal geval if (IS_SCHRIKKEL(jaar)) return (29); else return (28); default: return (31); 3

Een in een typedef-statement ingevoerde typenaam kan in botsing komen met de namen van andere variabelen en functies in het programma. Dit wordt overloading van namen genoemd. In bovenstaand voorbeeld hebben we Dag gebruikt als typenaam en dag als variabele van dat type. Omdat C verschil maakt tussen hoofdletters en kleine letters, worden deze namen door de C compiler natuurlijk als verschillend beschouwd. Maar we mogen ook dezelfde naam voor een type en een variabele of functie gebruiken. Het is dus toegestaan te declareren: typedef int dag; en dag vakantie; long int dag; De compiler lost de dubbelzinnigheid op op grond van de context. Het programma wordt er natuurlijk wel moeilijker leesbaar door en als er problemen zijn, wordt het misschien ook moeilijker de fouten te vinden. Het is beter eigen typenamen met een hoofdletter te laten beginnen, zoals we hierboven hebben gedaan, of namen te gebruiken die verder niet in het programma voorkomen. 9.2 Verder gebruik van de preprocessor - enumerated type #include <stdio.h> #include <stdlib.h> /* om exit te kennen */ #include <values.h> /* om MAXINT te kennen */ #include <conio.h> /* om kbhit te kennen */ #include <iostream.h> /* om de C++ functies cin en cout te kennen */ #define PI 3.1415926536 // Het is goede gewoonte zo'n constante in uppercase te typen: // verschil met een gewone variabele. #define max(i,j) i>j?i:j // Let op: géén blanko tussen max en (!!! #define schrikkeljaar(j) ((j%4==0)&&(j%100!=0) (j%400==0)) // Let op: géén blanko tussen schrikkeljaar en (j)!!! 4

#define CONDCOMP 1 #define PC // Met enum edag definiëren we een nieuw opsommingstype. enum edag {maandag, dinsdag, woensdag, donderdag, vrijdag, zaterdag, zondag; // maandag heeft de integerwaarde 0.... zondag heeft de integerwaarde 6. // Zonder typedef dag enum edag; moet een variabele gedefiniëerd worden als: // enum edag weekdag; // Met typedef definiëren we een 'synoniem' van dit type: typedef enum edag dag; // zodat volgend bevel geldig is: dag dag2; enum erichting {oost=0, noord=90, west=180, zuid=270; // de verschillende richtingen hebben een zinvolle waarde als implementatie. typedef enum erichting richting; int main() { double straal, omtrek; int a,b,m,jaar; dag weekdag, dag1; richting naarwaar; cout << "Geef de straal van de cirkel: " << endl; cin >> straal; omtrek=2.*pi*straal; // \ : een bevel over twee lijnen uitsmeren: cout << "De omtrek van een cirkel met straal " << straal \ << " is " << omtrek << endl; cout << "Geef twee getallen: "; cin >> a >> b; m=max(a,b); // zie #define max(i,j) i>j?i:j cout << "Het grootste cijfer van " << a << " en " << b << \ " is: " << m << endl; 5

// conditioneel compileren: #if CONDCOMP cout << "Geef een jaartal in:"; cin >> jaar; if (schrikkeljaar(jaar)) cout << jaar << " is een schrikkeljaar" << endl ; else cout << jaar << " is geen schrikkeljaar" << endl ; #else // Dit deel is optioneel: indien niet nodig: geen #else! cout << "Geen schrikkeljaardeel gecompileerd." << endl; // In dit programma zal dit stuk code niet gecompileerd worden!! #endif #if! defined(pc) // Als PC niet gedefinieerd is: cout << "Dit programma werkt op geen PC" << endl; #endif cout << "Speciale constanten: " << endl; // DATE en TIME zijn characterstrings. cout << "Compilatiedatum: " << DATE << \ " en tijd :" << TIME << endl; // FILE bevat de filenaam van de sourcecode. cout << endl << "Voorbeelden op constanten: " << endl; weekdag = donderdag; weekdag++; dag1 = zondag; dag1++; // Let op: dag1++ is NIET maandag: integerwaarde=7 en dus onbekend cout << weekdag << endl; cout << dag1 << endl; naarwaar = west; cout << naarwaar << endl; while (!kbhit()); exit((int)0); 6