Computerhilfen.de Logo
Forum
Tipps
News
Frage stellen

Frage zu C (array)

Hi,
hab folgendes Programm geschrieben, das auch bis auf ein Problem funktionier.
Es soll eine integer Zahl n (postitv) eingegeben werden und dann sollen die felder um die anzahl n nach rechts rotieren. Aber der Inhalt des feldes [9] passt nie .
Kann mir jemand sagen warum? Hier das prog zum ausprobieren:

#include <iostream>
using namespace std;
int main (void)
{
int i;
int array[10];
int b;
int n;
int a;
int z;
int f;
i=0;
a=0;
f=10;
z=0;
while (i<10)
{
i=i+1;
array=i;
cout << array << " " << flush;
}
cout << " " << endl;
cout << "n eigeben: "<<flush;
cin >> n;



while (a+1<n)
{
a=a+1;
b=array[9];
array[9]=array[8];
array[8]=array[7];
array[7]=array[6];
array[6]=array[5];
array[5]=array[4];
array[4]=array[3];
array[3]=array[2];
array[2]=array[1];
array[1]=array[0];
array[0]=b;

}

while (z<10)
{
cout << array[z] << " " << flush;
z=z+1;
}
system("pause");
}
 


Antworten zu Frage zu C (array):

Weil du hier:
while (i<10)
{
i=i+1;
array=i;
cout << array << " " << flush;
}
Mist baust.
du erhöst zuerst i um eins und führst dann "inhalt" aus.

  • wurde nie gefüllt und auch falsch angezeigt, feld[9] war bei mir korrekt die 9


Mach das hier draus und zumindest das füllen stimmt.
while (i<10)
{
array=i;
cout << array << " " << flush;
i=i+1;
}

Das hier ist auch murks:
while (a+1<n)

Wenn n = 1 ist, ist immer FALSE der fall, auch ansonsten gilt, das die rotation nur bis n-1 ausgeführt wird.

Hier kannste allerding a=a+1 am anfang lassen, da du weiterhin unabhängig von a arbeitest.

Kleiner tip: Schau dir for schleifen an - die sind optimal designed dafür.

while (i<10)
{
array=i;
cout << array << " " << flush;
i=i+1;
}

wird zu
for(int i = 0; i < 10; i++)
{
array=i;
cout << array << " " << flush;
}
falls du die Zahl 0 nicht im array haben willsT:
for(int i = 0; i < 10; i++)
{
array=i+1;
cout << array << " " << flush;
}

Achja zu deiner Rotationsroutine:
Nicht schön, hier 2 geschachtelte Schleifen nutzen, dann biste unabhängig von der Anzahl der elemente und - stell dir mal vor du würdest das mit 100 elementen machen - viel spass beim tippen ;)

array = array[i-1];
Sagt das gleiche aus wie die Rotation, Sonderfall:
i = ARRAY_MAX -> b = array[ARRAY_MAX];
und
i = 0 -> array[0] = b;
und voila. 

« Letzte Änderung: 22.12.09, 09:56:58 von Klischeepunk »

« Dev++ Fehlereinfache Programmiersprache zum entwickeln kleiner Games »
 

Schnelle Hilfe: Hier nach ähnlichen Fragen und passenden Tipps suchen!

Fremdwörter? Erklärungen im Lexikon!
Internet-Zugriffsprogramm
Ein Internet-Zugriffsprogramm, auch Browser genannt, stellt Internetseiten für den Benutzer dar. Am bekanntesten ist der Microsoft Internet Explorer, gefolgt vom kos...

Programm
Siehe Software...