Lupuz.de: Artikel-Portal / Magazin

Zurück   Postpla.net - die Forum Community > PC, Internet und Technik > Coder's Area

Werte vertauschen in C

Anzeigen:

Thema geschlossen
 
Themen-Optionen Thema durchsuchen
dErJaSa
Alt 02.10.2004, 12:31   #1
Standard Werte vertauschen in C

Hi,

und zwar habe ich 2 Variablen, wert1 und wert2

wert2 soll den Wert von wert1 bekommen und umgekehrt das ganze mit wert1... das besondere: ich möchte keine 3. Variable zur Hilfe nehmen.

Wäre nett wenn mir jemand helfen könnte!
 
 
Nach oben
ANSI Lady
Alt 02.10.2004, 13:48   #2
Standard

Code:
#include <stdio.h>

void tausch(short*, short*);

void main() {
   short *Zeiger1;
   short *Zeiger2;
   short Wert1 = "1"
   short Wert2 = "2"
   Zeiger1 = &Wert1;
   Zeiger2 = &Wert2;
   tausch(Zeiger1, Zeiger2);
   printf("Wert1 : %d\n", Wert1);
   printf("Wert2 : %d\n", Wert2);
}

void tausch(short *WertZeiger1, short *WertZeiger2) {
   short h;
   h = *WertZeiger1;
   *WertZeiger1 = *WertZeiger2;
   *Wertzeiger2 = h;
}
Ausgabe :
Wert1 = 2
Wert2 = 1


Besser krieg ichs nicht hin... hat aber auch ne 3. Variable

Gruß &&
ANSI
 
 
Nach oben
marsupilami
Alt 02.10.2004, 14:33   #3
Standard

das geht nicht ohne 3. variable, soweit ich weiß...

wie auch, wert2 wird sofort mit wert1 überschrieben, und somit hast du 2x wert1 und wert2 ist weg...

du könntest (theoretisch) wert1 in eine datei schreiben, die werte tauschen, und die datei für wert2 wieder auslesen. dann hast du keine 3. variable, aber sowas macht eigentlich keiner

oder du schickst ein tcp/ip-paket mit wert1 los, tauschst in der zwischenzeit schnell den einen wert1 mit wert2, und nimmst für dann für wert2 das, was dir das tcp/ip-paket liefert.

das wird aber auch keiner machen, wozu auch????
 
 
Nach oben
BoEhSeR OnKeL
Alt 02.10.2004, 16:28   #4
Standard

is doch ganz einfach, so wie die ANSI Lady das gemacht hat. mit zeigern eben. Einfacher gehts meines wissens nach nicht.
Ohne 3. Variable gehts auch nicht.
Wenn doch dann verbessert mich.
 
 
Nach oben
Zacharias
Alt 02.10.2004, 19:07   #5
Standard

Dafür brauchst du nichtmal Zeiger, aber ohne 3te Variable wird es nicht gehen.
 
 
Nach oben
Gothmogh
Alt 02.10.2004, 20:13   #6
Standard

bei zeigern wirste dir die zeiger auch merken müssen von daher auch zusätzliche Variablen.
Würde sich nur lohnen wenn man grössere Stacks austauschen möchte die aktion mit denn zeigern.
 
 
Nach oben
marsupilami
Alt 02.10.2004, 20:47   #7
Standard

ich hab mal nen kumpel gefragt, ihm ist das eingefallen:
Code:
a = 10; b = 5;
a = a + b; -->	a = 15;
b = a - b; -->	b = 15 - 5 = 10;
a = a - b; -->	a = 15 - 10 = 5;

==> a = 5; b = 10;
das ganze klappt eigentlich mit allen datentypen, weil ja alles im prinzip nur aus zahlen besteht. allerdings ist schluss, wenn a + b über dem maximum des datentyps liegt
 
 
Nach oben
dErJaSa
Alt 02.10.2004, 21:57   #8
Standard

dankeschön! so geht`s!
 
 
Nach oben
Hammer Unslieb
Alt 02.10.2004, 22:09   #9
Standard

Es gibt noch ne schnellere Methode, wenn man direkt auf dem Speicher operiert... hatten wir letztes Jahr in der Info-Übung. Weiß aber jetzt nicht mehr wie's ging und die Dateien sind inzw. gelöscht da das nächste Semester beginnt (und die neuen Studis ja nicht abschreiben sollen ).

Edit: http://www.userchannel.de/wissen/docs/ProgrammierTipp1
 
 
Nach oben
Zacharias
Alt 03.10.2004, 01:26   #10
Standard

Das sind dann allerdings mathematische Besonderheiten die du zB bei nem String nicht mehr verwenden kannst.
 
 
Nach oben
dErJaSa
Alt 03.10.2004, 03:05   #11
Standard

Also... hier jetzt mal der Source

funktioniert super... könnt ihn ja noch was aufbohren *g* dann kann ich bei meinem Lehrer bisschen prollen :P

Code:
#include <stdio.h>
#include <conio.h>

int main()
{
        printf ("\t\t\t\t*** Willkommen ***\n\n");
        printf ("In diesem Programm werde ich Werte vertauschen:\n");
        printf ("\t\t- normale Vertauschung\n");
        printf ("\t\t- Vertauschung ohne 3. Hilfsvariable ;)\n");
        printf ("\t\t- Vertauschung ohne 3. Hilfsvariable v2.0\n");
        printf ("weiter mit beliebiger Taste...\n");
        getch();
        clrscr();
        int wert1 = 10;
        int wert2 = 5;
        printf ("Normale Vertauschung:\n\n");
        printf ("\t\t Wert1: %i\n", wert1);
        printf ("\t\t Wert2: %i\n\n", wert2);
        printf ("vertauschen durch beliebige Taste...\n\n");
        getch();
        int hilfe;
        hilfe = wert1;
        wert1 = wert2;
        wert2 = hilfe;
        printf ("\t\t Wert1: %i\n", wert1);
        printf ("\t\t Wert2: %i\n\n", wert2);
        printf ("weiter mit beliebiger Taste...");
        getch();
        clrscr();
        wert1 = 10;
        wert2 = 5;
        printf ("Vertauschung ohne 3. Hilfsvariable:\n\n");
        printf ("\t\t Wert1: %i\n", wert1);
        printf ("\t\t Wert2: %i\n\n", wert2);
        printf ("vertauschen durch beliebige Taste...\n\n");
        getch();
        wert1 = wert1 + wert2;
        wert2 = wert1 - wert2;
        wert1 = wert1 - wert2;
        printf ("\t\t Wert1: %i\n", wert1);
        printf ("\t\t Wert2: %i\n\n", wert2);
        printf ("weiter mit beliebiger Taste");
        getch();
        clrscr();
        int a;
        int b;
        a = 10;
        b = 5;
        printf ("Vertauschung ohne 3. Hilfsvariable(andere Moeglichkeit):\n\n");
        printf ("\t\tWert1: %i\n",a);
        printf ("\t\tWert2: %i\n\n",b);
        printf ("vertauschen durch beliebige Taste...\n\n");
        getch();
        a ^= b ^= a ^= b;
        printf ("\t\tWert1: %i\n",a);
        printf ("\t\tWert2: %i\n\n",b);
        getch();
        return 0;
}
 
 
Nach oben
Zacharias
Alt 03.10.2004, 14:13   #12
Standard

Preisfrage, welche compiler benutzt du denn?
Iss nämlich komisch, dass er das initialisieren von Variablen mitten im Programm zulässt.

In Ansi C muss das immer am Anfang passieren.
 
 
Nach oben
marsupilami
Alt 03.10.2004, 17:01   #13
Standard

Original geschrieben von Zacharias
Das sind dann allerdings mathematische Besonderheiten die du zB bei nem String nicht mehr verwenden kannst.
doch...
du musst das dann halt nur elementweise machen... also jeden buchstabend einzeln

Original geschrieben von Zacharias
Preisfrage, welche compiler benutzt du denn?
Iss nämlich komisch, dass er das initialisieren von Variablen mitten im Programm zulässt.

In Ansi C muss das immer am Anfang passieren.
ich nehme schon immer visual c++, da kann man das überall machen.
dass man vars am anfang der fkt definieren muss, kenne ich so nur aus delphi, bzw aus pascal
 
 
Nach oben
Zacharias
Alt 03.10.2004, 17:06   #14
Standard

ne ist bei Ansi C genau das gleiche
Aber Strings elementweise vertauschen ist doch scheiße, da gehts mit ner Hilfsvariablen schneller.
 
 
Nach oben
marsupilami
Alt 03.10.2004, 18:31   #15
Standard

mit ner hilfsvariable gehts eh schneller und besser, aber er will ja keine!!!
 
 
Nach oben
dErJaSa
Alt 04.10.2004, 00:42   #16
Standard

Ja... war die Aufgabe vom Lehrer

Ich benutze Borland C++ 6
 
 
Nach oben
chris
Alt 04.10.2004, 17:05   #17
Standard

oder so:

#include <stdio.h>

void main(void) {
int i=5, j=10;
printf("i=%d j=%d\n", i, j);

i = i^j;
j = i^j;
i = i^j;

printf("i=%d j=%d\n", i, j);
}
 
 
Nach oben
Anzeigen:
Thema geschlossen

Lesezeichen

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche



Alle Zeitangaben in WEZ +2. Es ist jetzt 04:00 Uhr.


Lupuz.de - wir können auch anders!
©1998 - 2008, Lupuz:Information-Network
Powered by vBulletin Version 3.7.1 (Deutsch), Jelsoft Enterprises Ltd.
Grüne Links?

SEO by vBSEO 3.2.0 ©2008, Crawlability, Inc.