![]() |
Re: Arrays vertauschen
hmmm...DANKE für eure tipps...
er hat die aufgabe ein wenig geändert -.- jetzt sollen wir array[1..100] mit zufallszahlen von 1-1000 beschreiben. und dann immer die nebeneinander liegenden tauschen. hab zu folgender lösung eine frage.
Delphi-Quellcode:
dies müssen wir mit den proceduren fuellen und tauschen machen.
unit Unit1;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) Button1: TButton; ListBox1: TListBox; procedure FormCreate(Sender: TObject); procedure Button1Click(Sender: TObject); private { Private-Deklarationen } public { Public-Deklarationen } end; var Form1: TForm1; ar:array[1..100] of integer; implementation {$R *.dfm} procedure TForm1.FormCreate(Sender: TObject); begin randomize; end; procedure fuellen(); Var i:integer; begin for i:=1 to 100 do ar[i]:=random(1000)+1; end; procedure tauschen() ; Var i,j:integer; i2:integer; temp:integer; begin i:=0; j:=0; for i2:=1 to 99 do begin i:=i2; j:=i2+1; temp:=ar[i]; ar[i]:=ar[j]; ar[j]:=temp; end; end; procedure TForm1.Button1Click(Sender: TObject); Var i:integer; begin fuellen; tauschen; for i:=0 to 99 do begin listbox1.Items.Delete(i); listbox1.items.Add(inttostr(ar[i])); end; end; end. diese programm müsste doch wirklich tauschen? also funktioniern, so wie es soll. nachdem ich die anderen zwei teilaufgaben gelöst hab werd ich euch wieder schreiben DANKE nochmal :) MFG Jonsen |
Re: Arrays vertauschen
Zitat:
Das erste Nein zu "Aber selbe zahlen kann man ja trotzdem vertauschen ;-)" Bei deiner obigen Darstellung 11 xor 11 = 00 00 xor 11 = 11 00 xor 11 = 11 machst du einen Denkfehler. Tatsächlich wird (wenn j=i ist) folgendes gerechnet. 11 xor 11 = 00 00 xor 00 = 00 00 xor 00 = 00 Das zweite Nein zu "dafür weniger speicherplatz" Die zusätzliche lokale Variable wird überhaupt nicht angelegt, weil (bei eingeschalteter Optimierung) ein CPU-Register für die Zwischenspeicherung verwendet wird. Auch bei ausgeschalteter Optimierung kostet die zusätzliche Variable im Prinzip keinen Speicherplatz, weil sie auf dem Stack angelegt wird, und der ist (unabhängig von lokalen Variablen) eh' schon vergeben. Aber : bei ausgeschalteter Optimierung ist (in Bytes gemessen) deine Prozedur deutlich länger und das kostet dann tatsächlich Speicherplatz. |
Re: Arrays vertauschen
Und wieder zurück zum Thema *g*. @Jonsen: Du solltest Dir gleich eine nachvollziehbare Einrückung angewöhnen, dann können auch andere Deinen Code besser lesen. Und ich persönlich würde das etwas anders machen:
Delphi-Quellcode:
procedure tauschen(var a, b: integer);
var temp: integer; begin temp := a; a := b; b := temp; end; //der Aufruf könnte dann so aussehen for i := Low(ar) to High(ar) - 1 do tauschen(ar[i],ar[i + 1]); |
Re: Arrays vertauschen
wieso high(ar) -1
wenn ich high richtig verstehe gibt das wenn mein array von 1-100 gehe doch 100 zurück oder? wieso muss dann die minus eins dahin? UND
Delphi-Quellcode:
so rufst du ja auf.
tauschen(ar[i],ar[i + 1]);
aber die ar[i],ar[i+1] sind doch dann eigentlich wenn ich ne procedur aufrufe variablen die vorher
Delphi-Quellcode:
stimmt doch oder?
procedure tauschen() ; //in der klammer hinter tauschen stehen müssten
Var i,j:integer; i2:integer; temp:integer; begin i:=0; j:=0; for i2:=1 to 99 do begin i:=i2; j:=i2+1; temp:=ar[i]; ar[i]:=ar[j]; ar[j]:=temp; end; end wenn nich...sorry aber so hab ichs gelernt . DANKE trotzdem MFG Jonsen |
Re: Arrays vertauschen
Zitat:
Smallint/Word reicht doch völlig aus. Die restlichen 2 Byte sind doch überflüssig. |
Re: Arrays vertauschen
Zitat:
Liebe Grüße, Valle |
Re: Arrays vertauschen
Zitat:
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:30 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz