Programmeren in Pascal/Procedure
Stel, we willen ons programma dat de gebruiker om zijn naam vraagt wat mooier maken. In plaats van gewoon domweg om de naam te vragen, tekent het een mooi hok. Dat kan bijvoorbeeld met het volgende programma. Het onderstaande programma is wat langer, maar zou geen geheimen meer voor je mogen hebben met de tot nog toe behandelde onderwerpen. Kijk of je het begrijpt, en zo nee, blader terug:
Pascal-code: Vraag naam in hok
program vraag_naam_in_hok;
uses crt;
var naam:string;
begin
{Het volgende commando maakt het scherm schoon.}
clrscr;
{Het volgende commando verplaatst de cursor naar de 10e kolom
en de 10e regel van het scherm}
gotoxy(10,10);
write('************************************************************');
{En nu naar de 10e kolom en de 11e regel van het scherm}
gotoxy(10,11);
write('* *');
{En nu naar de 10e kolom en de 12e regel van het scherm}
gotoxy(10,12);
write('************************************************************');
{Dan zetten we de cursor nu op de 12 kolom van de 11e regel van het scherm.}
gotoxy(12,11);
{En dan vragen we nu om de naam van de gebruiker.}
write('Voor uw naam alstublieft in: ');
readln(naam);
{De gebruiker heeft nu zijn naam ingevoerd, maar nu willen we die weer
op het scherm zetten..}
{Het volgende commando maakt het scherm schoon.}
clrscr;
{Het volgende commando verplaatst de cursor naar de 10e kolom
en de 10e regel van het scherm}
gotoxy(10,10);
write('************************************************************');
{En nu naar de 10e kolom en de 11e regel van het scherm}
gotoxy(10,11);
write('* *');
{En nu naar de 10e kolom en de 12e regel van het scherm}
gotoxy(10,12);
write('************************************************************');
{Dan zetten we de cursor nu op de 12 kolom van de 11e regel van het scherm.}
gotoxy(12,11);
{Toon een bedankje en de naam die de gebruiker intypt heeft.}
write('Dank u! U heeft ingevoerd: ',naam);
{Zet de cursor aan de onderkant van het scherm.}
gotoxy(1,24);
writeln('Programma is afgelopen!');
end.
Het programma doet wat het moet doen, maar... we hebben een hoop dingen dubbel moeten schrijven, namelijk we moesten het hok twee keer tekenen, één keer om de vraag te stellen, en de tweede keer om de naam weer op het scherm te zetten.
Dat is bijzonder vervelend, want niet alleen typen we alles twee keer, als we iets veranderen, bijvoorbeeld de sterretjes in streepjes willen veranderen, moeten we dat weer dubbel doen. Als we nog meer hokken zouden willen tekenen, zouden we nog meer dubbel moeten doen.
In programmeerjargon zeggen we dat zo'n programma slecht onderhoudbaar is.
Het middel om er iets aan te doen is de procedure. Met een procedure kunnen we zorgen dat
Een procedure is een deeltje van een programma, dat je los kunt oproepen, dit kan je zoveel keer doen als je zelf wil. Een procedure heeft een naam. Door de naam die je aan je procedure gegeven hebt gevolgd met een punt-komma.
De voordelen om een procedure te gebruiken zijn:
- Een duidelijkere code, de onderverdeling in bv. invoer, verwerking en uitvoer.
- Een kleiner programma aangezien opdrachten die meer dan een keer voorkomen in je programma maar één keer geschreven worden (+ aanroeping in de effectieve code).
Een procedure is zoals eerder gezegd een apart geheel, het dient dus ook zoals het programma benoemt te worden (titel geven) en heeft een begin en end nodig.
Als we ons voorbeeld aanpassen zodat we een procedure gebruiken, dan zou het er als volgt uit zien:
Pascal-code: Vraag naam in hok met procedure
program vraag_naam_in_hok;
uses crt;
procedure teken_hok;
begin
{Het volgende commando maakt het scherm schoon.}
clrscr;
{Het volgende commando verplaatst de cursor naar de 10e kolom
en de 10e regel van het scherm}
gotoxy(10,10);
write('************************************************************');
{En nu naar de 10e kolom en de 11e regel van het scherm}
gotoxy(10,11);
write('* *');
{En nu naar de 10e kolom en de 12e regel van het scherm}
gotoxy(10,12);
write('************************************************************');
end;
var naam:string;
begin
{Maak het scherm schoon en teken een hok.}
teken_hok;
{Plaats de cursor nu op de 12 kolom van de 11e regel van het scherm.}
gotoxy(12,11);
{Vraag nu om de naam van de gebruiker.}
write('Voer uw naam alstublieft in: ');
readln(naam);
{De gebruiker heeft nu zijn naam ingevoerd, maar nu willen we die weer
op het scherm zetten..}
{Maak het scherm opnieuw leeg en teken een hok.}
teken_hok;
{Dan zetten we de cursor weer op de 12 kolom van de 11e regel van het scherm.}
gotoxy(12,11);
{Toon een bedankje en de naam die de gebruiker intypt heeft.}
write('Dank u! U heeft ingevoerd: ',naam);
{Zet de cursor aan de onderkant van het scherm.}
gotoxy(1,24);
writeln('Programma is afgelopen!');
end.
Het programma is nu korter geworden, maar belangrijker er zit veel minder dubbele code in. Eventueel kunnen we ook het commando Gotoxy(12,11) in de procedure plaatsen, maar dat zou de herbruikbaarheid van de procedure verminderen. We zullen dit doen in een procedure als we parameters gaan behandelen. We maken dan een procedure die een tekst in een hok zet en een procedure die een vraag in een hok stelt.