Gevorderde Programmeertechnieken

Laurent Segers - laurent.segers@vub.ac.be

Cursusmateriaal van de WPO's.

Cursusmateriaal

Technische vereisten

Linux (vitueel) machine met de volledige GCC compiler en de QT community edition geïnstalleerd. Kan hier gedownload worden (VMWare Player). De username is "rapptor" en het wachtwoord is "azerty". Opgelet: het downloadbare bestand is 15GB groot en de virtuele machine neemt in totaal 60GB in op de harde schijf.

Indien men toch verkiest om zelf Linux te installeren, kan men als volgt te werk gaan. De installatie van de gcc compiler (+ make) wordt a.d.h.v. onderstaand codefragment gedaan.

sudo apt-get install build-essential

Nadien volstaat het om Qt Community Edition in downloaden en te installeren. Qt kan hier gevonden worden. Naast Qt gebruiken we ook Atom om C-code te schrijven die we niet met QT aanmaken.

Sommige oefeningen kunnen ook op WIndows uitgevoerd worden. Hiervoor wordt een oude (niet meer ondersteunde) OpenGL API gegeven om de oefeningen onder Visual Studio te kunnen uitvoeren (VS 2010 en 2012).

Download Windows OpenGL API

Indienen oplossingen

Tijdens de Kerstperiode zal een uploadmap beschikbaar gesteld worden op PointCarrë. Alle oplossingen worden in 1 enkele *.zip opgeslagen. Als naamgeving voor de oplossingen wordt volgende structuur gehanteerd:

  • Elk oefening wordt in een aparte map opgeslagen. Deze map bevat het nummer van het hoofdstuk tesamen met het nummer van de betrokken opgave (bv. H3.2).
  • Alle programmabestanden hebben een zinnige naam. Hiervoor wordt verwezen naar het eerste hoofdstuk over het opdelen van een programma in logische subblokken.
  • De volledige *.zip bevat naam en voornaam van de student gevolgd door GPT(bv. segers_laurent_GPT.zip).

WPO 1

In het eerste WPO wordt de basis gelegd van het schrijven en compileren van een programma in Linux. Tijdens deze les wordt getoond hoe men een programma in verschillene bestanden kan opdelen en het programma d.m.v. een makefile kan compileren.

Tijdens deze eerste les worden enkel gezamelijke opdrachten uitgevoerd en zijn er geen af te geven opdrachten.

WPO 2

In dit WPO behandelen de basiselementen wat betreft pointers en arrays. Ook wordt de link gelegd tussen de array in C en de equivalente pointernotatie. De oefeningen die gemaakt worden zijn de 3 oefeningen van 3.5.2 (stringmanipulaties).

WPO 3

Functies in C zijn van groot belang. Het is ook belangrijk om te begijpen hoe o.a. de ellipsfuncties werken. In dit WPO worden oefeningen 4.8.1 en 4.8.3 gemaakt.

WPO 4

De kracht van C is dat er ook met complexe datastructuren gewerkt kan worden. Hieronder vallen de gewone structs, de unions en de bitfields. Als enige oefening wordt in dit WPO de oefening over de floating point emulator verwacht (7.6).

WPO 5

C wordt op verschillende platformen gebruikt. Dit kan zowel een PC zijn, maar ook een ingebedde microcontroller. Communicatie tussen verschillende systemen is hierbij ook belangrijk. Door omstandigheden kan een platform niet steeds alle aandacht schenken aan de communicatiemogelijkheden. Om dit tijdelijk op te vangen worden vaak buffermechanismes voorzien zodat de dataverwerking even uitgesteld kan worden. In dit WPO zullen we bijgevolg een aantal buffermechanismes programmeren. De oefeningen die aan bod komen zijn alle oefeningen van 8.4.

WPO 6

Binaire (gesorteerde) bomen laten toe om snelle zoekoperaties uit te voeren. Bomen kunnen ook gebruikt worden om het oplossen van wiskundige vergelijkingen te kunnen doen. In dit laatste geval wordt de binaire boom ook een expressieboom genoemd. Tijdens dit WPO worden de bomen geïntroduceerd en worden de oefeningen rond expressiebomen opgelost. De opgaven voor dit WPO zijn: 10.5.5 en 10.5.6.

WPO 7

Als afsluiter van oefeningenreeksen zullen we de fractaalboom behandelen. Dit geeft meteen ook een eerste inleiding tot het tekenen in OpenGL. OpenGl wordt gebruikt in o.a. CAD-software en games. De opdracht die in dit WPO opgelost worden is oefening 5.4.1.

Tekenen in OpenGL

Recursie is een belangrijke stap richting recursie datastructuren zoals lijsten en (binaire) bomen. Tijdens dit WPO zullen we de fractaalboom programmeren (6.4.1). Hiervoor wordt gebruik gemaakt van OpenGL. Hieronder worden de nodige stappen wergegeven om OpenGL te gebruiken onder Linux. Eerst moeten de OpenGL bibliotheken aan onze Linux-Mint machine toegevoegd worden.

sudo apt-get install g++ cmake
sudo apt-get install freeglut3 freeglut3-dev

Een eenvoudig OpenGL programma ziet er als volgt uit:

#include <GL/freeglut.h>
#include <GL/gl.h>

void renderFunction()
{
    glClearColor(0.0, 0.0, 0.0, 0.0); // maak volledig zwart
    glOrtho(-5.0, 5.0, -5.0, 5.0, -5.0, 5.0); // geeft hoogte en breedte in pixels weer
    glLineWidth(2.5); // teken 2.5 pixels breed
    glColor3f(1.0, 0.0, 0.0); // maak volgens RGB (volledig rood hier)
    glBegin(GL_LINES); // begin met tekenen met voorgaande settings
    glVertex2f(0.0, 0.0); // punt 1
    glVertex2f(3, 0); // punt 2
    glVertex2f(3, 0); // punt 2
    glVertex2f(0, 5); // punt 3
    glVertex2f(0, 5); // punt 3
    glVertex2f(0.0, 0.0); // punt 1
    glEnd(); // eindig het tekenen hier.
    glFlush();
}

int main(int argc, char** argv)
{
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_SINGLE);
    glutInitWindowSize(500,500);
    glutInitWindowPosition(100,100);
    glutCreateWindow("OpenGL - First window demo");
    glutDisplayFunc(renderFunction);
    glutMainLoop();

    return 0;
}

Als laatste wordt om het compileren met OpenGl mogelijk te maken de bibliotheken via een speciale make-directief (project.PRO -bestand) toegegevoegd (QT):

LIBS += -lglut -lGLU -lGL