2017-10-29 2 views
0

Ich arbeite an einigen Hausaufgaben in Pascal für den Unterricht, und ich habe einen Haken gefunden. Meine Arbeit funktioniert im Grunde genommen, aber unsere Hausaufgaben-Einreichungsseite hat mir nicht volles Vertrauen geschenkt. Ich habe meinem Professor eine E-Mail geschickt und er hat mich in die Direktive {$ r +} eingewiesen. Wenn ich das einschließe, erhalte ich den Laufzeitfehler 201. Ich weiß, dass das Problem mit der Bereichsprüfung zusammenhängt, aber ich kann nicht herausfinden, welche Änderungen das Problem beheben. Jede Hilfe wird sehr geschätzt, danke.Array Range Fehler in Pascal

{$mode Delphi} 
{$r+} 
program InversePerm; 
var 
    N: integer; // Size of set of numbers 
    i: integer; // counter 
    x: integer; // array-slot counter 
    perm: array of integer; // THE array 

begin 
    read(N); 
    setlength(perm, N); // sets array size to user input 
    for i := 1 to N do 
     begin 
     read(x); 
     perm[x] := i; 
     end; 
    for i := 1 to N do              
     write(perm[i], ' '); 
    end. 
+0

Ist ein Array-Index Null in Pascal nicht basiert? – Hintham

+2

@Hintham: Nicht unbedingt, aber in diesem Fall ja. Op würde es besser machen mit 'für i: = Niedrig (Perm) bis Hoch (Perm) ...' – MartynA

+0

Ich schaltete die Loop-Bedingungen zu Ihrem Vorschlag, danke. Könnte es sein, dass eine meiner Variablen zu klein ist? Ich dachte, die Anweisung {$ mode Delphi} würde sich um so etwas kümmern ... – Reccho

Antwort

1

Ich denke, Ihr Problem auf der Linie:

perm[x] := i;

Ich denke, was Sie war zu schreiben bedeutete:

perm[i] := x;

Andernfalls, wenn ich 100 eingeben, um x dann verwendet Ihr Code perm [100] = 1 für die erste Iteration. Wenn 10 für N eingegeben würde, würde das einen Bereichsfehler ergeben.

+0

Ah danke eine Tonne. Das hat es behoben, ich bekomme den Laufzeitfehler nicht mehr. – Reccho

+0

Das Array verwendet nullbasierte Indizes. Sie müssen das in der Antwort erwähnen. –

+0

Nein, ich nicht. Diese Frage wurde in den Anmerkungen zur Frage selbst behandelt. Das OP hatte bereits erklärt, dass sie dieses Thema angesprochen hätten, bevor ich geantwortet habe. Jemand anderes hätte mich für das Kopieren anderer Arbeiten abgelehnt, wenn ich Pascals variables Basissystem erwähnt hätte. –