Do-While schleife umwandeln....
-
ich glaube, 17_56 hat da was falsch bei dir gelesen, weil du dich weigerst, cpp-tags zu nutzen...
ABCD-Waffe schrieb:
int i=0 if (i<x) { do { // do something i++; } while (i<x) }
würde bei mir zu
for(int i=0; i<x; i++)
das if kannst du dir dann ja sparen
Dem kannst du da schon eher glauben ^^
bb
-
Das Problem ist aber das ich keine for-Schleife gegeben habe die ich dann in eine do-while Schleife umwandeln soll sonder ich habe eine do-while Schleife gegeben die ich in eine for-Schleife umwandeln soll....
-
Soll ich das jz noch ma hier hinkopieren?
Wo ist denn dein Problem?
if (i < x) { do { // do something i++; } while (i<x); }
=>
wenn i kleiner x ist, dann: punkt a: incrementiere i wenn i kleiner als x ist, dann gehe wieder zu punkt a
das könnte man auch so schreiben:
punkt a: wenn i >= x, gehe zu punkt b incrementiere i wenn i < x, zu punkt a punkt b:
jz sieht man ja schon, dass die bedingungen zwar nicht gleich sind, aber etwas gemeinsam haben: sie schließen sich gegenseitig aus - also reicht es ja, auf eine von beiden zu untersuchen...
punkt a wenn i >= x, gehe zu punkt b increment i punkt b:
dafür könnte man auch das schreiben:
punkt a: wenn _nicht_ (i < x), gehe zu punkt b increment i punkt b:
und für so was hat man eine for-schleife:
for (/*ggf. deklarierung und initialisierung der variablen*/; /*Bedingung (so lange die Bedingung erfüllt ist weitermachen*/; /*in jedem Durchgang zu erfüllenden (trivialen) Aufgaben - z.Bsp. i++*/)
also:
/*punkt a:*/ for (/*nichts*/; i < x /*so lange i kleiner x ist soll er weitermachen*/; i++) { //hier kommt in dem bsp. nichts hin } /*punkt b:*/
also ist die Lösung diese:
for (; i < x; i++) {}
was man auch oft so sieht (der anweisungsblock ist leer, also kann man ihn auch weglassen und dafür ein semikolon nach der schließenden klammer der for-schleife machen; ++i ist allgemein i++ vorzuziehen (was dir aber (zumindest zur Zeit noch) völlig egal sein kann ^^)):
for (; i < x; ++i);
bb
-
Hallo unskilled,
vielen herzlichen Dank für deine ausführliche Erklärung.
Leider haben wir aneinender vorbei geredet.
Ich habe eine ganz normale do-while schleife gegeben. ( OHNE EINE IF Anweisung davor)do { // do something i++; } while (i<x); }
Diese soll mit einer FOR Schleife realisiert werden. Ist das möglich???Wenn ja denke ich das es nur mit einer bool- schen Information möglich ist.
-
Wo ist das Problem?
do { // do something i++; } while (i<x); }
->
for( i = 0; i < x; i++ ) { // do something }
-
1. in deinem ersten post is das if (...) aber mit dabei
2. [@Guest1]
Guest1 schrieb:
do { // do something i++; } while (i<x); }
!=
for( i = 0; i < x; i++ ) { // do something }
weil bei der do-while geschichte auf jeden fall einmal i incrementiert wird, bei der for-schleife aber nicht...
bb
-
Huch. Mein Fehler. Ich bitte um Entschuldigung.
-
In meinem 1.Post habe ich geschrieben das es möglich ist eine for-Schleife als do-while Schleife auszudrücken.( mit Hilfe der IF Funktion )
Ich möchte aber eine gewöhnliche Do-While-Schleife ( OHNE IF ) als FOR- Schleife ausdrücken.
Wäre euch wirklich sehr dankbar um Tipps. Wäre wichtig. Vielen Dank.
-
Wäre wirklich sehr wichtig. Vielen Dank
-
dann geb doch mal ein Beispiel im Formart
DO-While:
//Hier kommt deine Loop rein
->
//hier kommt dann deine for rein
dann können wir dir ein System entwickeln...
-
bool first = true; // geht nicht in Schleifenkopf, deshalb Deklaration vorher for (int i = 0; i < x || first; ++i, first = false) { // do something }
Aber was bezweckst du damit? Do-While-Schleifen haben ihren eigenen Anwendungsbereich, und man sollte nicht krampfhaft versuchen, sie in For-Schleifen umzubiegen...
-
Nexus schrieb:
Aber was bezweckst du damit? Do-While-Schleifen haben ihren eigenen Anwendungsbereich, und man sollte nicht krampfhaft versuchen, sie in For-Schleifen umzubiegen...
Das hat er bereits erwähnt. Ich habe ihn auch gefragt (=> Seite 1).
-
Also ich persönlich stehe auf das hier:
int N = ... for (int i = 0; i < N; ++i) { if (BedingungErfüllt) { .... break; } }
-
Zur Not einfach den Schleifenkörper einmal davor ausschreiben und danach die for-Schleife, so ist die Eigenschaft der do-while-Schleife auf jeden Fall erfüllt.
Und du siehst ja an den vorgeschlagenen Lösungen wie furchtbar diese sind, ich halte es auch für recht unwahrscheinlich, dass sowas mit einer sonderlich komplizierten Schleife dran kommt.
Du sollst wahrscheinlich nur wissen, dass man alle Schleifenvarianten durch einen jeweils anderen Typ ausdrücken kann.
-
Höchstwahrscheinlich bekommst du eine Do-While-Schleife vorgesetzt und dann sollst du den Algorithmus in eine For-Schleife umwandeln und musst das nicht hässlich zusammenkleben wie hier vorgeschlagen sondern kannst einfach einen Algorithmus mit For-Schleife angegeben der das gleiche tut.
Je nachdem wie tiefgründig ihr das handhabt vllt. noch beweisen.
-
_matze schrieb:
Das hat er bereits erwähnt. Ich habe ihn auch gefragt (=> Seite 1).
Sorry, da hab ich wohl zu wenig genau gelesen...
Aber ist das nicht ein Witz, dass einem beigebracht wird, wie man Schleifen ineinander umwandelt? Abgesehen davon, dass jede Schleife einen spezifischen Einsatzbereich hat und solche Umwandlungen kaum nützlich sind, kann man das durch kurzes logisches Überlegen (mit genauer Kenntnis der Schleifentypen) auch selber herausfinden.