AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Arrays vertauschen

Offene Frage von "jonsen2.0.0.9"
Ein Thema von jonsen2.0.0.9 · begonnen am 27. Jan 2010 · letzter Beitrag vom 29. Jan 2010
Antwort Antwort
Seite 1 von 2  1 2      
jonsen2.0.0.9

Registriert seit: 5. Dez 2009
67 Beiträge
 
Delphi 7 Personal
 
#1

Arrays vertauschen

  Alt 27. Jan 2010, 13:17
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
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.149 Beiträge
 
Delphi 12 Athens
 
#2

Re: Arrays vertauschen

  Alt 27. Jan 2010, 13:21
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
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#3

Re: Arrays vertauschen

  Alt 27. Jan 2010, 20:39
Nennt man auch Deieckstausch.
Markus Kinzler
  Mit Zitat antworten Zitat
blink182

Registriert seit: 19. Jun 2007
126 Beiträge
 
Delphi 5 Standard
 
#4

Re: Arrays vertauschen

  Alt 27. Jan 2010, 21:55
man kanns auch eleganter lösen
Delphi-Quellcode:
a[i]= a[i] xor a[j];
a[j]= a[i] xor a[j];
a[i]= a[i] xor a[j];
kurze erklärung:

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
  Mit Zitat antworten Zitat
MStoll

Registriert seit: 15. Nov 2005
131 Beiträge
 
Turbo Delphi für Win32
 
#5

Re: Arrays vertauschen

  Alt 27. Jan 2010, 22:44
@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.
"Man soll nie mehr essen als mit Gewalt reingeht!" (n.n.)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.149 Beiträge
 
Delphi 12 Athens
 
#6

Re: Arrays vertauschen

  Alt 27. Jan 2010, 22:49
Zitat von MStoll:
langsamer als die Standard-Variante, da letztere vom Compiler gut optimiert werden kann.
Jupp

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.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
gammatester

Registriert seit: 6. Dez 2005
999 Beiträge
 
#7

Re: Arrays vertauschen

  Alt 27. Jan 2010, 22:56
Zitat von blink182:
man kanns auch eleganter lösen ;)
Delphi-Quellcode:
a[i]= a[i] xor a[j];
a[j]= a[i] xor a[j];
a[i]= a[i] xor a[j];
kurze erklärung:

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
Zusätzlich zu dem was MStoll bereits geschrieben hat:

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.
  Mit Zitat antworten Zitat
blink182

Registriert seit: 19. Jun 2007
126 Beiträge
 
Delphi 5 Standard
 
#8

Re: Arrays vertauschen

  Alt 28. Jan 2010, 12:01
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
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#9

Re: Arrays vertauschen

  Alt 28. Jan 2010, 13:18
Zitat:
Okay vllt nicht sehr rechenzeit optimiert, dafür weniger speicherplatz
Was bei modernen Rechner ein absolutes Problem ist
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von Sherlock
Sherlock

Registriert seit: 10. Jan 2006
Ort: Offenbach
3.763 Beiträge
 
Delphi 11 Alexandria
 
#10

Re: Arrays vertauschen

  Alt 28. Jan 2010, 14:46
Jetzt habt Ihr Jonsen erschreckt...

Sherlock
Oliver
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:19 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz