for x:=1 to b do
IMO sollte das so aussehen:
for x := 1 to b - 1 do
PS: Wenn du schon so überdimensionale Einrückung verwendest, dann benutze sie bitte auch richtig
.
[edit]Der eigentliche Fehler:
Wenn eine Zahl schon enthalten ist, generierst du eine neue. Du prüfst aber nur, ob sie mit a[i] übereinstimmt, nicht aber mit den Elementen 0..i-1.
Optimiert:
Du generierst eine Zufallszahl und prüfst, ob sie in den bisherigen Elementen vorhanden ist. Sobald das zutrifft, brichst du die Schleife ab und generierst eine neue, usw.
Die Implementierung überlasse ich dir
.