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 "VUB" en het wachtwoord is "azerty". Opgelet: het downloadbare bestand is 8GB 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

Variabelen, arrays en pointers zijn een belangrijk onderdeel in de programmatie met C. De gelijkenissen tussen pointers en arrays worden in dit WPO aangehaald. Ook de gelijkenissen tussen pointers naar pointers en 2D arrays worden hier aangetoond. De af te werken oefeningen zijn alle oefeningen onder "3.5.2 Stringmanipulaties".

WPO 3

In WPO 3 worden de functies besproken. C kent verschillende manieren om functies te maken en aan te spreken. De verschillende methoden worden besproken. De oefeningen die wordfen gemaakt zijn:

  • 4.8.1: Print console
  • 4.8.2: Console input
  • 4.8.3: Read config file
  • 5.4.2: Sudoku

WPO 4

Het combineren van verschillende variabelen in 1 enkele datastructuur laat toe om bij elkaar passende data in 1 clustervariabele (struct) onder te brengen. Naast het clusteren van data wordt ook het concept van unions aangehaald. Van zowel de struct als de union kunnen pointers aangemaakt worden. De af te werken oefeningen zijn:

  • 7.6 Opgave en toepassing: Floating Point emulator
  • 8.4: Opgaven stack, queue en ringbuffer

WPO 5

Binaire bomen en lijsten zijn beide gebaseerd op de structus van voorgaand WPO. Het grote verschil met een klassieke struct is dat bomen en lijsten recursief van aard. Dit wil zeggen dat de struct een element bevat die naar zichzelf wijst d.m.v. een pointer. De oefeningen die gemaakt worden zijn:

  • 9.2.1: Queues
  • 9.2.2: Gesorteerde lijst
  • 9.2.3: Ringbuffer met dubbel gelinkte lijst
  • 10.5.5: Expressiebomen

WPO 6 en 7

Nadat men een aantal programma's heeft geprogrammeerd die voor de doorsnee computer bestemd zijn, kan men ook programma's schrijven voor microcontrollers. Tijdens deze 2 WPO's zal de PIC18F2455 als microcontroller gebruikt worden. De opgaves die gemaakt worden zijn:

  • 13.7.1: Knight rider
  • 13.7.2: Choose LED intensity
  • 13.7.3: Trimpot gestuurde LED
  • 13.7.4: Watchdog timer

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