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.

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