GESPRG: Uitwerking huiswerk les 3.

© Harry Broeders.

Deze pagina is bestemd voor studenten van de Haagse Hogeschool - Academie voor Technology, Innovation & Society Delft.

Huiswerk les 3:

Uitwerking:

7. Ik heb het programma uit het boek enigszins aangepast (1_12_7.c):

#include <stdio.h>

#define HEIGHT 17
#define OFFSET "                 " /* 17 spaties */

int main(void) {
    int i;
    printf("\n\n\n%slllllll\n", OFFSET);
    for (i = 0; i < HEIGHT; i = i + 1) {
        printf("%s  lll\n", OFFSET);
    }
    printf("%slllllll\n\n\n", OFFSET);
    getchar();
    return 0;
}

Ik heb de volgende aanpassingen gedaan:

In dit programma worden een aantal instructies en technieken gebruikt die ik nog niet heb behandeld:

Als we de #define en het gebruik van %s verwijderen dan krijgen we het volgende eenvoudigere programma dat exact dezelfde uitvoer geeft (1_12_7a.c):

#include <stdio.h>

int main(void) {
    int i;
    printf("\n\n\n                 lllllll\n");
    for (i = 0; i < 17; i = i + 1) {
        printf("                   lll\n");
    }
    printf("                 lllllll\n\n\n");
    getchar();
    return 0;
}

De uitvoer is:

Het is nu niet zo heel moeilijk om een programma te schrijven die een groote C afdrukt:

#include <stdio.h>

int main(void) {
    int i;
    printf("\n\n\n                   ccccccccccccccc\n");
    printf("                  ccccccccccccccccc\n");
    for (i = 0; i < 2; i = i + 1) {
        printf("                 ccc             ccc\n");
    }
    for (i = 0; i < 11; i = i + 1) {
        printf("                 ccc\n");
    }
    for (i = 0; i < 2; i = i + 1) {
        printf("                 ccc             ccc\n");
    }
    printf("                  ccccccccccccccccc\n");
    printf("                   ccccccccccccccc\n\n\n");
    getchar();
    return 0;
}

De uitvoer van dit programma is:

Het maken van afbeeldingen met behulp van ASCII karakters is een kunst op zich. Kijk maar eens hier: http://en.wikipedia.org/wiki/ASCII_art.

10. 1_12_10.c:

#include <stdio.h>

int main(void) {
    int i;
    printf("integer kwadraat 3-de macht 4-de macht 5-de macht\n");
    for (i = 0; i < 20; i = i + 1) {
        printf("%7d %8d %10d %10d %10d\n", i, i * i, i * i * i, i * i * i * i, i * i * i * i * i);
    }
    getchar();
    return 0;
}

Het is even tellen om in de printf statement de juiste veldbreedte voor de integers te bepalen.

De uitvoer van dit programma is:

Hmmm... mijn kolommen zijn aan de rechterkant uitgelijnd en die in het boek zijn aan de linkerkant uitgelijnd. Dat moet vast kunnen met printf maar hoe?

Op http://en.cppreference.com/w/c/io/fprintf heb ik gevonden dat ik getallen links uit kan lijnen op een veld van 10 karakters door %-10d te gebruiken.

Het programma wordt dan 1_12_10a.c:

#include <stdio.h>

int main(void) {
    int i;
    printf("integer kwadraat 3-de macht 4-de macht 5-de macht\n");
    for (i = 0; i < 20; i = i + 1) {
        printf("%-7d %-8d %-10d %-10d %-10d\n", i, i * i, i * i * i, i * i * i * i, i * i * i * i * i);
    }
    getchar();
    return 0;
}

De uitvoer van dit programma is:

In het boek zijn er lijnen om de tabel getekend. Dit is niet zo gemakkelijk vanuit een C programma maar we kunnen het benaderen met het | + en - teken.

Het programma wordt dan 1_12_10b.c:

#include <stdio.h>

int main(void) {
    int i;
    printf("+---------+----------+------------+------------+------------+\n");
    printf("| integer | kwadraat | 3-de macht | 4-de macht | 5-de macht |\n");
    printf("+---------+----------+------------+------------+------------+\n");
    for (i = 0; i < 20; i = i + 1) {
        printf("| %-7d | %-8d | %-10d | %-10d | %-10d |\n", i, i * i, i * i * i, i * i * i * i, i * i * i * i * i);
    }
    printf("+---------+----------+------------+------------+------------+\n");
    getchar();
    return 0;
}

De uitvoer van dit programma is: