Ik ben nog bezig met hetzelfde programma, stukje verder en ik krijg die pointers niet helemaal goed. Ik heb nu de volgende code:
Delphi:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
| program StudDatabase;
uses wincrt;
type verwijzing = ^vakken;
vakken = record
vak:string;
link:verwijzing;
end;
student = array [1..10] of verwijzing;
database = object
studenten:student;
hulpPointer:verwijzing;
getal,i:integer;
vak2,vak3,vak4,vak5,vak6:string;
antwoord:char;
constructor init;
procedure voegStudentToe;
procedure haalStudentWeg;
procedure voegVakToe;
procedure laatVakZien;
procedure overzicht;
end;
Constructor database.init;
begin
getal:=0;
While getal <= 10 do
begin
Studenten[getal]:=NIL;
getal:=getal+1;
end;
end;
procedure database.overzicht;
begin
getal:=1;
While getal <= 10 do
begin
writeln('Student nmr: ',getal,' heeft de volgende vakken:');
if studenten[getal]^.link = nil then
begin
write(studenten[getal]^.vak,' ');
end;
if studenten[getal]^.link^.link = nil then
begin
write(studenten[getal]^.vak,' ');
write(studenten[getal]^.link^.vak,' ');
end;
if studenten[getal]^.link^.link^.link = nil then
begin
write(studenten[getal]^.vak,' ');
write(studenten[getal]^.link^.vak,' ');
write(studenten[getal]^.link^.link^.vak,' ');
end
else
begin
writeln('De student heeft 0 of meer dan 3 vakken');
end;
getal:=getal+1;
end;
end;
procedure database.voegStudentToe;
begin
writeln('U wilt een student toevoegen');
writeln('Geeft het nummer dat u aan de student wil toevoegen');
readln(getal);
new (hulpPointer);
hulpPointer^.vak:='Nederlands';
hulpPointer^.link:=nil;
studenten[getal]:=hulpPointer;
dispose (hulpPointer);
Writeln('Student nmr ',getal, ' heeft al 1 Vak, Nederlands (dit is namelijk verplicht)');
end;
Procedure database.voegVakToe;
begin
antwoord:='j';
new(studenten[getal]);
writeln('Geef het nummer van de student');
readln(getal);
while antwoord = 'j' do
begin
writeln('Geef het vak');
readln(vak2);
new(hulppointer);
hulppointer^.vak:=(vak2);
hulppointer^.link:=studenten[getal];
studenten[getal]:=hulppointer;
dispose(hulppointer);
writeln('nog een vak toevoegen? (j/n)');
readln(antwoord);
end;
writeln(studenten[getal]^.vak);
writeln(studenten[getal]^.link^.vak);
end;
procedure database.laatVakZien;
Begin
Writeln('Van welke student wilt u de vakken zien?');
readln(getal);
if studenten[getal]^.link = nil then
begin
write(studenten[getal]^.vak,' ');
end;
if studenten[getal]^.link^.link = nil then
begin
write(studenten[getal]^.vak,' ');
write(studenten[getal]^.link^.vak,' ');
end;
if studenten[getal]^.link^.link^.link = nil then
begin
write(studenten[getal]^.vak,' ');
write(studenten[getal]^.link^.vak,' ');
write(studenten[getal]^.link^.link^.vak,' ');
end
else
begin
writeln('De student heeft 0 of meer dan 3 vakken');
end;
getal:=getal+1;
end;
procedure database.haalStudentWeg;
begin
writeln('U wilt een student weghalen');
writeln('Geeft het nummer dat u aan de student wil toevoegen');
readln(getal);
studenten[getal]:=nil;
Writeln('Student nmr ',getal, ' bestaat niet meer');
end;
var d:database;
getal2,antwoord1:integer;
antwoord:char;
begin
d.init;
antwoord:='j';
while antwoord = ('j') do
begin
writeln('Er is/zijn momenteel ',getal2,' studenten in de database');
writeln;
writeln('Wilt u - 1. een student toevoegen');
writeln('Wilt u - 2. een student weghalen');
writeln('Wilt u - 3. een vak toevoegen/verwijderen bij een student');
writeln('Wilt u - 4. De vakken van een student bekijken?');
writeln('Wilt u - 5. Een overzicht van alle studenten en hun vakken');
writeln('Wilt u - 6. Afsluiten');
writeln;
Writeln('Maak uw keuze');
readln(antwoord1);
if antwoord1 = 1 then
d.voegStudentToe;
If antwoord1 = 2 then
d.haalStudentWeg;
If antwoord1 = 3 then
d.voegVakToe;
If antwoord1 = 4 then
d.laatVakZien;
If antwoord1 = 5 then
d.overzicht;
If antwoord1 = 6 then
antwoord:='n';
Writeln('Wilt u nogmaals een actie uitvoeren? (J/N)');
Readln(antwoord);
end;
end. |
Hij parst alles, alleen alles wat ik doe met de pointers in de linked list. Daar krijg ik een foutmelding van windows. Uiteraard iets met het geheugen, maar dat is logisch. Mijn vragen zijn de volgende (losstaand van, wtf doe ik fout):
Als ik vakken in de linked list smijt, en ik wil ze dan zien, dan kan hij er niet door heen. Ik heb eigenlijk ook geen idee hoe je op een nette manier de gegevens van een linked list kan tonen. (als er meerdere items inzitten dan). Alvast bedankt!