![]() |
Arrays vertauschen
Schreibe eine procedure vertausche( i, j:integer), welche den Inhalt der zwei Arrayelemente i und j eines Arrays zahl vertauscht.
gegeben sei dazu: a) ein global deklariertes Array zahl. zahl:Array[1..100] of integer; dies ist eine aufgabe die ich in der schule bekommen habe. leider weiss ich und der rest der klasse nicht genug um diese zu lösen. hoffe ihr habt eine lösung oder tipps für mich. MFG Jonsen |
Re: Arrays vertauschen
Vertauschen:
- man nehme eine temporäre Variable vom Typ der zu tauschenden Felder > also var temp: Integer; - man "kopiere" den Inhalt einen Feldes in diese temporäre Variable - nun ist das eine Feld frei und kann mit dem Inhal des anderen feldes gefüllt werden - und nun muß nur noch der zwischengespeicherte Inhalt in das 2. Feld rein |
Re: Arrays vertauschen
Nennt man auch Deieckstausch.
|
Re: Arrays vertauschen
man kanns auch eleganter lösen ;)
Delphi-Quellcode:
kurze erklärung:
a[i]= a[i] xor a[j];
a[j]= a[i] xor a[j]; a[i]= a[i] xor a[j]; a=5 b=7 a=101 b=111 a= a xor b = 101 xor 111 = 010 b= a xor b = 010 xor 111 = 101 a= a xor b = 010 xor 101 = 111 blink |
Re: Arrays vertauschen
@blink182:
man mag damit Speicher sparen, ok. Aber es ist a) schwerer zu lesen und b) langsamer als die Standard-Variante, da letztere vom Compiler gut optimiert werden kann. Von daher bringt es für den TE wohl nichts, da er - wie man an der Fragestellung sieht - sicherlich andere, eher elementare Probleme hat, als sich mit solchen mathematischen Tricks zu befassen. |
Re: Arrays vertauschen
Zitat:
Dreieck: 3 Lese- und 3 Schreiboperationen ... optimiert je 2 Lese-/Schreiboperationen XOR: 6-mal Lesen, 3-mal Verknüpfen und 3-mal Schreiben ... läßt sich im Vergleich nur unwesendlich optimieren und wenn, dann wird's nur nochunübersichtlicher Also maximal dann geeignet, wenn man viele zusamenhängende Daten tauschen muß und dazu noch Zeit, aber ungenügend Speicher hat. Aber ein von der Logik her, isses schon irgendwie OK. |
Re: Arrays vertauschen
Zitat:
a und b als nicht arrays zu nehmen ist doch wohl auch nicht sehr sinnreich. Weiter: nimm mal ein arrays a[0]=3 und a[1]=4. Dann vertausche mit Deinem xorcode die Elemente a[0] und a[0]. Augen reiben, wundern, Erklärung suchen. |
Re: Arrays vertauschen
Okay vllt nicht sehr rechenzeit optimiert, dafür weniger speicherplatz
ja das macht wenig Sinn... Muss man halt checken, dass j<>i ist. Aber selbe zahlen kann man ja trotzdem vertauschen ;-) 11 xor 11 = 00 00 xor 11 = 11 00 xor 11 = 11 aber okay, der dreieckstausch ist da sinnvoller. Ist auch das was man normal macht |
Re: Arrays vertauschen
Zitat:
|
Re: Arrays vertauschen
Jetzt habt Ihr Jonsen erschreckt...
Sherlock |
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:07 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