for schleife in while umwandeln

Siedler2

Grünschnabel
Hallo habe Probleme eine for Schleife in eine while Schleife umzuwandeln. Vielleicht könnt ihr mir helfen :D

Bei :
for (i=0; i < ende; ++i)//
Wenn ich diese for Schleife in Zeile 47 anstelle der while Schleife einsetzte funktionert das Programm
Dachte zunächst das es in einer while Schleife so heißen müsste:

Int i=0; // in Zeile 47 eingesetzt anstelle der for Schleife
While (i < ende)
{i++}

Wenn ich dass jedoch so einsetze werden meine Zahlen nicht mehr richtig sortiert.
Also kann ja irgendwas an meiner Interpretation von for in while nicht stimmen.


C++:
#include <iostream>
#include <iomanip>
using namespace std;

int main ()

{int i, a ,b;
const int max=100;
double zahl [max];


cout << "Ganze Zahlen sortieren" << endl;

//zahlen einlesen

cout << "Bis zu 100 ganze Zahlen eingeben" << endl;
cout << "Abbruch mit einem Buchstaben" << endl;
cin >> b;



i=0;
while (i < b)
{	
	cin >> zahl[i];
	++i;
	a=i;
}

//zahlen sortieren
int falsch,richtig;
falsch=0;
richtig=1;


bool sortiert = falsch; // Noch nicht sortiert ..... sortiert = 0 ... anfangswert 0
long hilf;				

int ende= a;			// ende eines durchlaufs  ..... a wird zu ende ... a war unser i ... also wird  a zu ende

while ( !sortiert)		// solange noch nicht

{
	sortiert = richtig;		//sortiert ........ sortiert = 1
	--ende;						// von ende das früher i war wird jeden durchgang einer abgezogen

int i=0;
While (i < ende)
{i++}




	{ if (zahl [i] > zahl [i+1])
	{ sortiert = falsch;
	hilf = zahl [i];
	zahl [i] = zahl [i+1];
	zahl [i+1]=hilf;
	}}}

// zahlen ausgeben
cout << "Die sortierten Zahlen" << endl;

for (i=0; i < a ; ++i)
	cout << setw(10) << zahl [i];
cout << endl;

system ("PAUSE");}
 
Zuletzt bearbeitet:
Willkommen bei tutorials.de :)

Vorneweg: Bitte benutze Die Codetags ([code=cpp]...[/code]), sonst ist das kaum lesbar.

Und um zu sagen, was falsch ist, wäre der Rest vom Programm hilfreich, falls es nicht zu lang ist, sonst die relevanten Codeteile.
 
Hi.

Du hast doch nicht wirklich den Code an den linken Rand geschrieben, oder?! Rücke ordentlich ein.

An welcher Stelle tritt denn das Problem auf? Welche Schleife hast du denn ersetzt?

Aber das hier:
C++:
    int falsch,richtig;
    falsch=0;
    richtig=1;
 bool sortiert = falsch;
 ...
 sortiert = richtig;
ist nicht wirklich sinnvoll. Warum machst du denn soetwas? Es gibt doch schon true und false... Falls dir die deutsche Bezeichnung lieber ist:
C++:
bool richtig = true, falsch = false;
Gruß
 
Hi
dass Problem tritt in Zeile 47 auf

for (i=0; i < ende; ++i)// Benachbarte Zahlen

diese for Schleife möchte ich in eine while Schleife umwandeln
 
Hi.

Evtl. wäre es sinnvoller das Programm hier reinzustellen, welches nicht funktioniert, anstatt der funktionierenden Version... ?

Bei deiner Umformung aus Beitrag #1 ist der einzige Unterschied, dass du bei der Variante mit while eine weitere Variable anlegst.

Warum verwendest du denn ein double Array, wenn du eigentlich mit ganzen Zahlen arbeitest?

Gruß
 
Hi
hab das Programm jetzt so geändert das es nicht mehr funktioniert
Jetzt läßt sich das Programm nicht mehr kompilieren. Das Schlüsselwort while wird klein geschrieben.

Und was hast du denn erwartet? Du hattest vorher diesen Schleifenblock:
C:
{
            if (zahl [i] > zahl [i+1])
            {
                sortiert = falsch;
                hilf = zahl [i];
                zahl [i] = zahl [i+1];
                zahl [i+1]=hilf;
}
Jetzt hast du nur noch diesen Schleifenblock:
C:
{ ++i; }
Das ist ja nicht wirklich das Gleiche.

Gruß
 
ich glaube ich habe es hinbekommen :)


C++:
 while ( !sortiert)      // solange noch nicht
 
{
 i=0;
	sortiert = richtig;     //sortiert ........ sortiert = 1
    --ende;                     // von ende das früher i war wird jeden durchgang einer abgezogen
 

 
	
 while (i < ende)
	 

 
    { if (zahl [i] > zahl [i+1])

    { sortiert = falsch;
    hilf = zahl [i];
    zahl [i] = zahl [i+1];
    zahl [i+1]=hilf;
	
	}i++;}}
 
Hallo Siedler2.

ich glaube ich habe es hinbekommen :)

Ja, du hast es geschafft ;)
Wenn du jetzt noch ein bisschen an deinem stil arbeitest kannst du dir die sache auch etwas einfacher machen, habe dir mal einen Vorschlag angehängt:

C++:
 while ( !sortiert){      // solange noch nicht
    int suchindex = 0;
    sortiert = richtig;     //sortiert ........ sortiert = 1
    --ende;                     // von ende das früher i war wird jeden durchgang einer abgezogen
 
    while (suchindex  < ende){
        if (zahl [suchindex ] > zahl [suchindex +1]){
            sortiert = falsch;
            int hilf = zahl [suchindex ];
            zahl [suchindex ] = zahl [suchindex +1];
            zahl [suchindex + 1] = hilf;
	
        }// if zahl [suchindex ] > zahl [suchindex + 1]
        ++suchindex ;
     }// While suchindex  < ende
 }// While !sortiert

Gruß, random-access.
 
Zuletzt bearbeitet:
Formatierungen sind sehr wichtig, fuer die Uebersicht. Direkt angewoehnen :D Genau wie Kommentare :)

Man sieht ja den extremen Unterscheid von random zu deinem code
 
Zurück