Forum: Object-Pascal / Delphi-Language
by himitsu,
10. Mai 2020
Man könnte es jetzt so lösen und die Prüfung deaktivieren.
procedure RotateRight(var A: TArray<String>);
begin
{$RANGECHECKS OFF}
Insert(A, A, 0);
Delete(A, High(A), 1);
//{$RANGECHECKS ON} = Default ist OFF
end;
procedure RotateRight(var A: TArray<String>);
Forum: Object-Pascal / Delphi-Language
by himitsu,
10. Mai 2020
Hatte nicht nachgesehn, aber würde dann das hier bestätigen.
Forum: Object-Pascal / Delphi-Language
by himitsu,
10. Mai 2020
Gute Frage: Copy&Paste-Error oder "es knallt nicht" weil Indexprüfung nicht aktiv.
Forum: Object-Pascal / Delphi-Language
by himitsu,
10. Mai 2020
Vermutlich weil A nicht existiert. :wink:
Forum: Object-Pascal / Delphi-Language
by himitsu,
9. Mai 2020
var
A: TArray<Integer>;
T: Integer;
i: Integer;
begin
// Hoch - BubbleMode
for i := High(A) - 1 downto 0 do begin
T := A;
A := A;
A := T;
Forum: Object-Pascal / Delphi-Language
by himitsu,
9. Mai 2020
Ohh, eigentlich sollte der Wert vorher kopiert und als Parameter übergeben werden,
aber könnte wirklich sein, dass hier die Compilermagic und Codeoptimierung durchschlägt, da Insert und Delete nicht wirklich so richtige "normale" Prozeduren sind. :shock:
Über die Record-Operatoren hast hier dann mehr Glück, weil die komplett extrem unoptimierbar sind.
Nja, direkt ist es so eigentlich...
Forum: Object-Pascal / Delphi-Language
by himitsu,
8. Mai 2020
Ja, aber dort entspricht das SetLength zusammen mit dem := einem Insert.
Hier hast du Insert+Delete und die SetLength (ohne eine Zuweisung).
Da man leider an dynamische Arrays (noch) keine Record-Helper hägen kann, um sich direkt solche Funktionen nachzurüsten
und da es unmöglich ist bestehende Record-Helper zu erweitern,
hab ich mir einen Record genommen, dort ein TArray<string>...
Forum: Object-Pascal / Delphi-Language
by himitsu,
8. Mai 2020
Du machst da auch am Anfang ein SetLength+1, also ist am Ende natürlich auch ein SetLength-1 nötig, oder du lässt die SetLength in diesem Fall komplett weg. :zwinker:
Forum: Object-Pascal / Delphi-Language
by himitsu,
8. Mai 2020
Auch Insert und Delete funktionieren nun endlich auch mit Arrays. (auch wenn CodeInsight das schon seit Jahrzehnten behauptete es aber nie funktionierte)
SetLength(A, 3);
A := 'Auto';
A := 'Fahrrad';
A := 'Flugzeug';
Insert(A, A, 1);
Delete(A, 3, 1);