C++ Anfänger_Schleifen

Masher

Lt. Junior Grade
Registriert
Dez. 2008
Beiträge
511
Lerne mithilfe eines buches sowie eines meiner meinung nach gut verständlichen site, blicke aber beim folgenden code nicht durch, warum hier potenziert wird-

Code:
 #include<iostream>
  using namespace std;

  int main()
  {
    int a;
    int b;
    int erg=1;
    cout<<"Geben sie eine Zahl ein: ";
    cin>>a;
    cout<<"Und jetzt eine andere: ";
    cin>>b;

    for(int i=0;i<b;i=i+1)
    {
      erg=erg*a;
    }

    cout<<a<<" hoch "<<b<<" ist "<<erg<<"\n";
    cin.get();
  }

Die Variable erg ist anfangs mit 1 definiert, nach dem Befehl for wird sie mit a multipliziert, wo wird hier potenziert?
 
a ist die Basis

b ist der Exponent

in der Schleife wird nun die Variable erg, welche am Anfang 1 ist, bei jedem Durchlauf einmal mit a multiplizert, also insgesamt b-mal, was als a^b definiert ist.

Beispiel:

a=2

b=3

Nach 1. Schleife:

erg==2

Nach 2. Schleife:

erg==4

Nach 3. Schleife:

erg==8

ausserdem gilt:
8 == 2^3== a^b

also passt es in diesem Fall
 
Zuletzt bearbeitet:
Danke!!
Aber woher weiß ich das B der Exponent ist und nicht eine normale Zahl...an dem befehl i<b?
 
Die Variable i sagt aus, wie oft man die Variable a an dem Ende eines Schleifendurchlaufs bereits mit sich multipliziert hat.
Die Variable b sagt aus, bei was für einen Wert von i man die Schleife terminiert, also wie oft man insgesamt a mit sich selbst multipliziert.
 
Das Potenzieren von 2 Zahlen (Basis und Exponent) läßt sich in der Mathematik auf das Multiplizieren von Zahlen "herunterbrechen". Das ganze würde wie folgt aussehen: 2 hoch 3 = 2 * 2 * 2

Nun kann man in dem Programm die Multiplikation der Basis schlecht hart codieren, weil Basis und Exponent jeweils am Anfang vom Programm abgefragt werden und somit dynamisch sind. Jedoch kann man eine Schleife verwenden, in der jeweils immer das Ergebnis der letzen Multiplikation wieder mit der Basis multipliziert wird. Beim erstmaligen Durchlaufen der Schleife muss das Ergebnis 1 sein, weil bei 0 * Basis das Ergebnis immer 0 wäre und bei 1 * Basis bekanntlich die Basis als Ergebnis herauskommt. Das Ende der Schleife ist dann auch erreicht, wenn die Anzahl der Läufe gleich dem Exponenten ist.
 
Zuletzt bearbeitet:
Habe schon verstanden warum, aber nicht wo der befehl ist das a b-mal multipliziert werden muss, i<b?
 
Die gesamte Schleife ist notwendig um a b-mal zu multiplizieren ( siehe Rossibaer ).
i<b sagt der Schleife, dass sie so lange laufen soll, bis i nicht mehr kleiner b ist.

Gruß
BlackMark
 
Der Schleifenkopf ist in C++ wie folgt aufgebaut:

for ( initialisierung der Laufvariablen (oft i) ; Bedingung, dass der Code in der Schleife ausgeführt wird ; erhöhung bzw. verkleinerung der Laufvariablen (oft i++ also i = i + 1) )

Zum Beispiel:
Code:
for (int i = 0; i < 10; i++)
{
   // irgendwelche ominösen anweisungen die irgendwas machen...
}
Als erstes wird Die Laufvariable i von Typ int mit dem Startwert 0 initialisiert.
Der zweite Teil gibt an, dass der Code innerhalb der geschweiften Klammern ({ }) solange ausgeführt werden soll wie i kleiner als (<) 10 ist.
Der dritte Teil gibt schließlich an, dass i bei jedem Durchlauf um eins erhöht wird ( i++, was i += 1 bzw i = i +1 entspricht).
Die einzelnen Teile werden durch ein Semikolon ( ; ) getrennt.

In deinem Beispiel wird für die Bedingung nun die vorher definierte Variable b verwendet, die Schleife wird also so lange durchlaufen wie i kleiner als b ist.
Da i bei jedem Durchlauf um eins erhöht wird und mit 0 als Startwert initialisiert wurde, wird die Schleife b-mal durchlaufen.

Klar soweit?
 
Zuletzt bearbeitet:
Da i bei jedem Durchlauf um eins erhöht wird und mit 1 als Startwert initialisiert wurde, wird die Schleife b-mal durchlaufen.
Möchte zwar nicht wegen jeder Kleinigkeit meckern, aber i wurde mit 0 und nicht mit 1 als Startwert initialisiert ;)
Wenn i mit 1 initialisiert werden würde und die Schleife bis i<b läuft, dann würde sie nur b-1 mal durchlaufen und nicht b-mal.

Gruß
BlackMark
 
Zurück
Oben