[PASCAL] hulp met programma nodig

Status
Niet open voor verdere reacties.

DimitriB

Nieuwe gebruiker
Lid geworden
9 feb 2011
Berichten
2
Ik wil een programma maken waarmee ik de hoofdsteden aan hun land kan koppelen en omgekeerd.
2 vraagjes:

1) Er zit een fout in de 2 keuzeoptie(hoofdsteden krijgen en land geven) maar ik vind deze niet, kan je mij hier mee helpen
2) Kan ik dit programma op een of andere manier kleiner maken en vereenvoudigen? Ik was al aan het denken om een type aan te maken of via een tabel te werken maar mijn ervaring gaat nog niet zo ver, graag hulp hiermee.

Dank bij voorbaat.



PROGRAM BENELUX;

USES CRT;

VAR
Keuze : integer;
DeHoofdstad,DeJuisteHoofdstad : String;
HetLand, HetJuisteLand : String;



PROCEDURE VraagKeuze;
BEGIN
WriteLn('Kies uit de volgende mogelijkheden:');
WriteLn('Druk 1 voor Benelux: Land: Gegeven ; Hoofdstad: Gevraagd');
WriteLn('Druk 2 voor Benelux: Land: Gevraagd ; Hoofdstad: Gegeven');
ReadLn(Keuze);
CLRSCR;
END;


PROCEDURE VraagBENELUXHoofdstad1(VAR Hoofdstad : STRING); // optie 1: Begin BENELUX land --> hoofdstad
BEGIN
WriteLn('Geef de hoofdstad van dit land.');
ReadLn(Hoofdstad);
END;

PROCEDURE ControleerBENELUXHoofdstad1( Hoofdstad, JuisteHoofdstad: STRING);
BEGIN
IF UPCASE(JuisteHoofdstad) = UPCASE(Hoofdstad) THEN
BEGIN
WriteLn('Je hebt het juist! Proficiat');
END
ELSE
WriteLn('Probeer opnieuw...');
END;

PROCEDURE ToonBENELUXLand1(VAR juisteHoofdstad: STRING);
VAR Teller: INTEGER;
BEGIN
FOR Teller := 1 To 3 Do
BEGIN
CASE Teller OF

1:
BEGIN
WriteLn('Het land is België');
JuisteHoofdstad := 'Brussel';
VraagBENELUXHoofdstad1(DeHoofdstad);
ControleerBENELUXHoofdstad1(DeHoofdstad, DeJuisteHoofdstad);
DELAY(1000);
CLRSCR;
END;

2:
BEGIN
WriteLn('Het land is Nederland');
JuisteHoofdstad := 'Amsterdam';
VraagBENELUXHoofdstad1(DeHoofdstad);
ControleerBENELUXHoofdstad1(DeHoofdstad, DeJuisteHoofdstad);
DELAY(1000);
CLRSCR;
END;

3:
BEGIN
WriteLn('Het land is Groothertogdom Luxemburg');
JuisteHoofdstad := 'Luxemburg';
VraagBENELUXHoofdstad1(DeHoofdstad);
ControleerBENELUXHoofdstad1(DeHoofdstad, DeJuisteHoofdstad);
DELAY(1000);
CLRSCR;
END;
END;
END;
END; // optie 1: Einde BENELUX land --> hoofdstad


PROCEDURE VraagBENELUXLand2(VAR Land : STRING); // optie 2: Begin BENELUX Hoofdstad --> Land
BEGIN
WriteLn('Geef het land dat bij deze hoofdstad hoort.');
ReadLn(Land);
END;

PROCEDURE ControleerBENELUXLand2( Land, JuisteLand: STRING);
BEGIN
IF UPCASE(JuisteLand) = UPCASE(Land) THEN
BEGIN
WriteLn('Je hebt het juist! Proficiat');
END
ELSE
WriteLn('Probeer opnieuw...');
END;

PROCEDURE ToonBENELUXHoofdstad2(VAR juisteLand: STRING);
VAR Teller: INTEGER;
BEGIN
FOR Teller := 1 To 3 Do
BEGIN
CASE Teller OF

1:
BEGIN
WriteLn('De hoofdstad is Brussel');
JuisteLand := 'België';
VraagBENELUXLand2(DeHoofdstad);
ControleerBENELUXLand2(HetLand, HetJuisteLand);
DELAY(1000);
CLRSCR;
END;

2:
BEGIN
WriteLn('De hoofdstad is Amsterdam');
JuisteLand := 'Nederland';
VraagBENELUXLand2(DeHoofdstad);
ControleerBENELUXLand2(HetLand, HetJuisteLand);
DELAY(1000);
CLRSCR;
END;

3:
BEGIN
WriteLn('De hoofdstad is Luxemburg');
JuisteLand := 'Groothertogdom Luxemburg';
VraagBENELUXLand2(DeHoofdstad);
ControleerBENELUXLand2(HetLand, HetJuisteLand);
DELAY(1000);
CLRSCR;
END;
END;
END;
END; // optie 2: Einde BENELUX Hoofdstad --> Land




PROCEDURE ControleerKeuze;
BEGIN
CASE Keuze OF
1:ToonBENELUXLand1(DeJuisteHoofdstad);
2:ToonBENELUXHoofdstad2 (HetJuisteLand);
END;
END;


BEGIN
VraagKeuze();
ControleerKeuze();
ReadLn();
END.
 
Hallo Dimitri,

Weet niet of je al een oplossing had (neem aan van wel na een maand zoeken...) maar voor hen die nieuwsgierig zijn:

in je PROCEDURE ToonBENELUXLand1(VAR juisteHoofdstad: STRING);
zet je var juisteHoofdstad:
JuisteHoofdstad := 'Brussel';

deze gebruik je echter niet meer:
VraagBENELUXHoofdstad1(DeHoofdstad);
ControleerBENELUXHoofdstad1(DeHoofdstad, DeJuisteHoofdstad);

zie je? je vult DeJuistehoofdstad in in plaats van JuisteHoofdstad, wat een globale var is, en niet je 'JuisteHoofdstad' (Brussel)

Dit doe je voor AL je ControleerBENELUXxxx() functie aanroepen (hoofdstad en land!) en gaat dus mis.


Gebruik dus als het maar even kan GEEN globale variabelen! Kunnen overal en nergens veranderd worden, buiten de scope van je functie, en moeilijk te vinden fouten opleveren.

Ter info.

PascalVG
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan