Funktion "Tausch" gesucht
-
Hallo!
Ich hoffe ihr könnt mir bei dieser Aufgabe helfen...
Aufgabenstellung:
Entwickeln Sie eine Funktion tausch(...), der ein int-Feld mit 10 Komponenten und eine
positive int-Zahl n übergeben werden. Die Funktion soll die Feldelemente um n Stellen nach
rechts zyklisch durchtauschen.Beispiele:
1. Feld a vor Funktionsaufruf:
1 2 3 4 5 6 7 8 9 10
Feld nach Aufruf tausch(a,1):
10 1 2 3 4 5 6 7 8 92. Feld a vor Funktionsaufruf:
1 2 3 4 5 6 7 8 9 10
Feld nach Aufruf tausch(a,2):
9 10 1 2 3 4 5 6 7 83. Feld a vor Funktionsaufruf:
1 2 3 4 5 6 7 8 9 10
Feld nach Aufruf tausch(a,3):
8 9 10 1 2 3 4 5 6 7Lösungsidee: Bei Eingabe von n den zyklischen Tausch um eine Stelle mit Hilfe einer
Schleife n mal wiederholen.Was ich brauche ist diese Funktion "Tausch"
-
Und wie weit bist du schon? Respektive wo ist das Problem?
Selbst denken ist erlaubt und es ist ja DEINE Hausaufgabe, nicht unsere.
-
std::swap
Aber selber schreiben ist besser! Ist wirklich nicht schwer!
lg, freakC++
-
naja sagen wir es so.. ich hab das außendrum aber nicht die funktion weil ich mit array[..] nicht klarkomme

wäre es nicht in ordnung, wenn ihr mir wenigstens die funktion geben könntet?^^
#include<iostream>
using namespace std;int main(void)
{int array[10];
int n,i;
i=0;while(i<10)
{
array[i]=i+1;
i=i+1;cout << i << endl;
}i=0;
ist noch net ganz fertig...
-
Probier das ganze mal mit std::swap zu lösen. Wenn du das dann hast schaust du, wie swap implementiert ist, verstehe es und bau es nach. Und dann bist du fertig.
-
was zum henker ist std::swap??? so weit sind wir garnet XD
wir lösen das meiste eher mit while schleifen, if, etc.
-
std::swap tausch den Inhalt von 2 Variablen.
Und auf der Seite siehst du auch, wie du das am einfachsten implementieren kannst.
-
puh.. ganz ehrlich das ist mir zu hoch.
du musst wissen, dass wir erst an den anfängen der programmierung sind..
nunja. wenn ihr mir die funktion nicht geben wollt bleibt mir wohl nix anderes übrig nach "trial and error" die funktion zu basteln

danke dennoch^^
-
Hallo? Wir haben dir die Funktion bereits gegeben!!! Schau dir bitte mal das Beispiel an.
#include <iostream> using namespace std; int main() { int arr[2] = {1,2}; for (int i = 0; i < 2; ++i) cout << arr[i] << " "; //nicht getauscht cout << endl; swap(arr[0],arr[1]); for (int i = 0; i < 2; ++i) cout << arr[i] << " "; //getauscht cout << endl; return 0; }Was willst du mehr?

lg, freakC++
-
WOW!!
Ihr seid die Besten.. ich danke euch vielmals!!!
Jetzt mach ich mich mal drum es noch zu verschönern =))
Vielen dank!!!!
-
Siehste! geht doch

Jetzt kannst Du dir ja mal überlegen, wie dieser Tauschvorgang funktioniert. Dazu solltest Du am besten wissen, was eine Referenz ist!
lg, freakC++
-
Die Frage ist noch, wie ich das mit zehn zahlen mache und die reihenfolge immernoch stimmt...
also swap tauscht ja eigentlich nur zwei zahlen.. aber ich muss ja zyklisch tauschen sodass dann alles nach rechts verschiebt.
-
Die Frage ist wohl eher wie du das mit n zahlen machst. Das geht genauso. Du musst nur einen gescheiten Schleifenkopf erstellen und innerhalb von wenigen Zeilen hast Du dein Ergebnis. Dann hast Du deinen kleinen Algorithmus.
lg, freakC++
-
Ich würd da wahrscheinlich einfach mal die letzte zahl mit der zweitletzten tauschen, dann die zweitletzte mit der drittletzten usw. Für mehrere Stellen machst du das halt ein paar mal hintereinandern. Ist wahrscheinlich nicht das effizienteste, aber man hat das in wenigen Zeilen.
-
Naja, ich weiß zwar nicht, ob das realsitisch ist, doch wenn Du etwas effizientes haben möchtest, dann schau dir mal Sortieralgorithmen an (von BubbleSot, InserSort...) und Du kannst ja versuchen, ob Du den Algorithmus einfach an deine Bedürfnisse angleichen kannst.
Ist nur so eine Idee. Ob die funktioniert, weiß ich nicht

lg, freakC++
-
Warum das Rad neu erfinden ?
#include <iostream> #include <algorithm> #include <vector> #include <iterator> using namespace std; void tausche(vector<int> &vec,int a) { rotate(vec.begin(),vec.begin()+(vec.size()-a),vec.end()); } int main () { vector<int> myvec; for (int i=1; i<=10; ++i) myvec.push_back(i); for(int j=0;j<3;j++) { tausche(myvec,1); copy (myvec.begin(),myvec.end(),ostream_iterator <int> (cout," ")); cout << endl; } return 0; }
-
na deine funktion ist etwas zu komplex.. da wird der prof schon nachfragen woher ich DAS weiß
ich muss schon nach meinen Wissensstand diese Funktion machen...ich hab das so gemacht:
while (n<10)
{
swap(arr[0+1],arr[1+n]);
n++;
}aber dann kommt immer das doppelte raus XDD
ich glaub ich überseh da etwas
-
Schau dir doch einfach die STL Implementierung an:
-
Shuyin schrieb:
da wird der prof schon nachfragen woher ich DAS weiß =)...
Das wird dein Prof unter Garantie auch schon für std::swap nachfragen. Ich gehe eher davon aus das du es händisch machen musst.
Ansatz um 2 Arraywerte (Position 0 und 1) händisch zu tauschen, ich liefere absichtlich keine vollständige Lösung:
int zwischenspeicher = array[0]; array[0] = array[1]; array[1] = zwischenspeicher;
-
Ja genau, und Du dafür brauchst Du Referenzen. Dann ist deine Funktion genau drei Zeilen lang.
weil heute der 3.1 ist:
void swap (int &a, int &b) { int tmp = a; a = b; b = tmp; }Es gibt sicherlich noch ganz viele andere Lösungen, aber das wäre eine ;9
lg, freakC++