Programeer opdrachtenOpdracht : opdr2_ptr.txt

Terug naar de inzendingen
Opdracht 2,Peter Postma
25 Jan 2005
 Mijn bijdrage, in C...
 
 PS: Pascal, fix aub die typfouten op je site!! Het zijn er echt ontzettend veel! (programmeer is bijvoorbeeld met 2x M)
 1 
****hotel.c*****
  
 2/*
 3 * Pascal's programmeer opdracht 2 door Peter Postma 
 4 *
 5 * This software is hereby donated to the public domain.
 6 */
 7
 8#include 
 9#include 
 10
 11#define SCHAKELAAR_GEEN         0x00
 12#define SCHAKELAAR_BED_CENTRAAL 0x01
 13#define SCHAKELAAR_BED_SCHEMER  0x02
 14#define SCHAKELAAR_BED_BEIDE    (SCHAKELAAR_BED_CENTRAAL|SCHAKELAAR_BED_SCHEMER)
 15#define SCHAKELAAR_DEUR         0x04
 16#define SCHAKELAAR_BALIE        0x08
 17
 18#define LAMP_UIT                0x00
 19#define LAMP_CENTRAAL           0x01
 20#define LAMP_SCHEMER            0x02
 21#define LAMP_BEIDE              (LAMP_CENTRAAL|LAMP_SCHEMER)
 22
 23static int schakel(int invoer)
 24{
 25        static int lampen = LAMP_UIT;
 26
 27        if (invoer & SCHAKELAAR_DEUR) {
 28                if (lampen == LAMP_UIT)
 29                        lampen |= LAMP_BEIDE;           /* lampen aan */
 30                else if (lampen & LAMP_CENTRAAL)
 31                        lampen &= ~LAMP_BEIDE;          /* lampen uit */
 32                else if (lampen & LAMP_SCHEMER)
 33                        lampen |= LAMP_CENTRAAL;        /* lamp aan */
 34                else
 35                        lampen &= ~LAMP_BEIDE;          /* lampen uit */
 36        }
 37
 38        if (invoer & SCHAKELAAR_BED_CENTRAAL) {
 39                if (lampen & LAMP_CENTRAAL)
 40                        lampen &= ~LAMP_CENTRAAL;       /* lamp uit */
 41                else
 42                        lampen |= LAMP_CENTRAAL;        /* lamp aan */
 43        }
 44
 45        if (invoer & SCHAKELAAR_BED_SCHEMER) {
 46                if (lampen & LAMP_SCHEMER)
 47                        lampen &= ~LAMP_SCHEMER;        /* lamp uit */
 48                else
 49                        lampen |= LAMP_SCHEMER;         /* lamp aan */
 50        }
 51
 52        if (invoer & SCHAKELAAR_BALIE)
 53                lampen &= ~LAMP_BEIDE;                  /* lampen uit */
 54
 55        return (lampen);
 56}
 57
 58int main(void)
 59{
 60        int invoer, status = LAMP_UIT;
 61
 62        for (;;) {
 63                /* Maak het scherm schoon. */
 64                system("clear");
 65                /* Laat de lampen zien. */
 66                printf("Centraal: %s\n", (status & LAMP_CENTRAAL)?"aan":"uit");
 67                printf("Schemer:  %s\n", (status & LAMP_SCHEMER)?"aan":"uit");
 68                /* Print een bericht, vraag invoer. */
 69                printf("\nDruk op een schakelaar:\n");
 70                printf("1. Centrale lamp schakelaar bij het bed.\n");
 71                printf("2. Schemerlamp schakelaar bij het bed.\n");
 72                printf("3. Beide schakelaars bij het bed.\n");
 73                printf("4. Schakelaar bij de deur.\n");
 74                printf("8. Schakelaar bij de balie.\n");
 75                if (scanf("%d", &invoer) != 1)
 76                        break;
 77                /* Schakel de lampen. */
 78                status = schakel(invoer);
 79        }
 80
 81        return (0);
 82}
 
 
Mijn commentaar
 
 Peter,
 Ondanks dat je programma er efficient en strak uitziet,
 Zeker het gebruik van de defines maken je code erg goed leesbaar.
 
 heb ik toch een aantal aanmerkingen.
 Om te beginnen voldoe je niet aan de opdracht.
 n.l. :
 - De programmanaam is mij onbekend, heb het maar hotel.c genoemd,
 maar gezien je declaraties (regel 24 en regel 59) zal dat toch C++ moeten zijn.
 - Het programma is in de huidige hoedanigheid niet gemakkelijk om te bouwen voor meerdere hotelkamers.
 Daavoor zou de overigens erg mooi opgezette functie schakel een instantie van een class moeten worden, of de declaratie op regel 24 zou als parameter meegegeven moeten worden.
 - Tenslote ontbreekt elke vorm van documentatie !
 
 Verder denk ik dat jij toch wel de kwaliteit hebt om de opdracht met de niet verplichte maar wel geprefereerde sockets te laten communiceren.
 Afgezien van deze kritiek mooi werk !