C++ Wie funktioniert der Zyklus in c++

konnichi

Lt. Junior Grade
Registriert
Aug. 2009
Beiträge
412
Hallo,
ich bitte Euch um Rat.

ich verstehe eine Sache nicht. Wie genau funktioniet der Zyklus in C++?? Ich will nämlich mein eigenes Programm aus pascal ins C++ umschreiben. Aber es klappt nicht. Das Programm rechnet nicht so wie es tut in pascal.

Also, in pascal ist es ganz einfach. Die Regel ist so, dass der Innere Zyklus zu erst gemacht wird, dann folgt das nächst-äußere. Die Grenzen werden dabei in pascal sehr einfach durch begin und end definiert. Und wie genau geht das in C++? Ist der Prinzip gleich oder muss man da was beachten?

Können Sie bitte Beispiele geben, wie ein doppel-Zyklus in c++ funktioniet? Dabei soll so ungefähr aussehen (beispiel aus pascal):

in pascal:

for x:=1 to m do
begin

e:=2;

for b:=3 to p do

begin

h:=5;

rechnung 1
rechnung 2
rechnung 3
if d>k then
a=0;

end;
rechnung 1
rechnung 2
rechnung 3
if j>t then
w=0;

writeln (irgendetwas);
end.


Wie würde so ein Zyklus in C++ aussehen?? Wichtig für mich ist dabei die Syntax, Grenzen des Zyklus, die Zeilen Zahl (3 in jedem Zyklus) und alles andere was dabei wichtig zu wissen ist.

VIELEN dank im Voraus ^_^
 
Zuletzt bearbeitet:
Wie hast du es denn in C++ geschrieben? Und bist du dir sicher, dass zuerst die innerste Schleife ausgeführt wird? Das fände ich ungewöhnlich, habe aber keinen blassen Schimmer von Pascal.
Ich würde vermuten, dass es in C++ so aussieht:
Code:
for (int x = 1; x <= m; x++)
{
   rechnung 1;
   rechnung 2;
   rechnung 3;
   
   if (d > k)
      a = 0;

   for (int b = 3; b <= p; b++)
   {
      rechnung 1;
      rechnung 2;
      rechnung 3;
      if (j > t)
         w = 0;
   }

   std::cout << "irgendetwas" << endl;
}
PS: weitere Erklärungen spare ich mir mal, Boron hat ja schon das passende gepostet.
 
der code wurde wegen Urheber Lizensverletzung rausgenommen.
 
Zuletzt bearbeitet:
Ich verstehe zwar überhaupt nicht was dein Code machen soll, aber mir sind ein paar Sachen aufgefallen:
1. Warum verwendest du wcout?
2. Das else kannst du dir sparen wenn du es nicht brauchst!
3. if( sum = max ) ist nicht das was du willst, du willst if( sum == max )

Gruß
BlackMark
 
der code wurde wegen Urheber Lizensverletzung rausgenommen.
 
Zuletzt bearbeitet:
Mal was, dass deinem relativ nahe kommt:
Code:
#include <iostream>

using namespace std;

int main()
{
    int werte[6] = {1, 2, 5, 10, 20, 50};
    int max = 0;

    for (int i = 1; i <= 100; i++)
    {
        cout << i << ": ";
        int moneten = 0;
        int rest = i;
        for (int wertIndex = (sizeof(werte) / sizeof(werte[0])) - 1; wertIndex > 0 && rest > 0; wertIndex--)
        {
            int schrittMoneten = rest / werte[wertIndex];
            rest = rest % werte[wertIndex];
            moneten += schrittMoneten;
            if (schrittMoneten > 0)
                cout << schrittMoneten << "x" << werte[wertIndex] << " ";
        }
        cout << "-> " << moneten << endl;
        if (moneten > max)
            max = moneten;
    }
    cout << "max: " << max << endl;

    return 0;
}
Der zweite Durchlauf zum zählen der maximalwerte fehlt noch, das sollte aber kein problem sein.
Es ist etwas flexibler da man die Münzwerte in ein Array eingeben kann.


PS: Das problem bei dir ist lediglich dass du die Variable sum für zwei verschiedene Zwecke benutzt.
Schlecht ist auch, dass du die Schleifen verschachtelst obwohl das dort keinen Sinn macht.

PPS: So sollte es gehen, habe auch die Variablen aussagekräftiger gemacht.
Allerdings würde ich da noch die wiederholten Teile zumindest in eine Funktion auslagern. Allerdings ist das bei einem Programm dieses Umfangs relativ egal.
Code:
#include <fcntl.h>
#include <io.h>
#include <iostream>
using namespace std;

int main()
{
	_setmode( _fileno( stdout), _O_U16TEXT);
	wcout << L"berechnen bis: ";
	
	int range;
	cin >> range;

	int max = 0;
	for (int wert = 1; wert <= range; wert++)
	{
		int rest = wert;
		ct50 = rest / 50; rest %= 50;
		ct20 = rest / 20; rest %= 20;
		ct10 = rest / 10; rest %= 10;
		ct5 = rest / 5; rest %= 5;
		ct2 = rest / 2; rest %= 2;
		ct1 = rest / 1;
		int sum = ct50 + ct20 + ct10 + ct5 + ct2 + ct1;
		if (sum > max)
			max = sum;
	}
	
	int anzahl = 0;
	for (int wert = 1; wert <= range; wert++)
	{
		int rest = wert;
		ct50 = rest / 50; rest %= 50;
		ct20 = rest / 20; rest %= 20;
		ct10 = rest / 10; rest %= 10;
		ct5 = rest / 5; rest %= 5;
		ct2 = rest / 2; rest %= 2;
		ct1 = rest / 1;
		sum = ct50 + ct20 + ct10 + ct5 + ct2 + ct1;
		if (sum == max)
			anzahl++;
	}
	
	wcout << L"max von 1 bis " << range << L": " << max << endl;
	wcout << L"in disem interval wiederholt sich " << max << L" " << anzahl << L" mal(e)!" << endl;
	
	return 0;
}
 
Zuletzt bearbeitet:
Backslash, vielen dank, dass du viel Zeit für mein Problem gefunden hast!
Thx auch an die anderen.
Ich sehe meine Fehler ein. War sehr unprofessionell von mir.
Ich habe vieles Gelernt dabei.
Also, man musste einfach nur 2 Zyklen nach einander laufen lassen. Ja, in pascal läuft es irgendwie anders, und das hat mir total den Kopf verdreht.
Noch eine Frage. Was ist die Verschachtelung von Schleifen? Ist damit gemeint ein Zyklus im Zyklus? Wenn ja, kann Du mir zumindest ein Beipsiel geben, wie in c++ so eine Verschachtelung von Zyklen aussieht? Das würde mich sehr interessieren.

großes DANKE!
 
In C++ nennt man das was du Zyklus nennst eine Schleife.
Also ist eine Verschachtelung von Schleifen einfach nur eine Schleife in einer Schleife. ( bsp. siehe Boron )

Gruß
BlackMark
 
Mal ein ausführlicheres Beispiel für eine "Schleife in einer Schleife".

Nehmen wir an es gibt es 2-dimensionales Array, also eine ganz normale Tabelle. Dieses Tabelle hat 4 Zeilen. Jede Zeile hat 6 Einträge (Spalten):
PHP:
int table[4][6];
Beginnend mit dem Wert 1 möchte ich die Einträge der ganzen Tabelle mit aufsteigenen Werten füllen. Erst wird die erste Zeile gefüllt, dann die zweite usw.
Dafür kann ich zwei verschachtelte Schleifen nehmen.
Die äußere Schleife durchläuft die Zeilen. Die innere Schleife durchläuft die Einträge einer Zeile:
PHP:
int value = 1;
for( int row = 0; row < 4; row++ )
{
   for( int column = 0; column < 6; column++ )
   {
      table[row][column] = value;
      value++;
   }
}
Das Ergebnis kann man sich so vorstellen:
Code:
 1  2  3  4  5  6
 7  8  9 10 11 12
13 14 15 16 17 18
19 20 21 22 23 24

Angenommen jetzt will man jeden Wert der Tabelle um 2 erhöhen. Dann könnte man wieder diese beiden Schleifen nehmen aber in der inneren Schleife folgendes Schreiben:
PHP:
table[row][column] += 2;
 
Morgen!
ich hoffe Danke-Sagen ist kein Spamm hier in Foren, denn ich bin sehr sehr dankbar für die Hilfe und alle schönen Erklärungen!
^_^
 
Zurück
Oben