______________________________________________________________________
//1_10 Die for-Schleife
/* Mit "// neu" gekennzeichnete Zeilen wurden in Bezug auf Programm 1_9
ergänzt, mit "// geändert" gekennzeichnete Zeilen wurden in Bezug auf Programm
1_9 geändert.
*/
#include <stdio.h>
char optionsnummer;
float wert1, wert2, wert3;
int wert1a, wert2a, Max_Rechnungen = 1000, potenzzaehler; // geändert
void main(void)
{
printf("Wie viele Rechnungen wollen sie durchfuehren?\n"); // neu
scanf("%d", &Max_Rechnungen); // neu
for(int Anzahl_Rechnungen=0; Anzahl_Rechnungen < Max_Rechnungen; Anzahl_Rechnungen++) // geändert
{
printf("Welche Rechenart wollen sie anwenden?\n"
"1 Addition\n"
"2 Subtraktion\n"
"3 Multiplikation\n"
"4 genaue Division\n"
"5 Division mit Rest\n"
"6 Potenzieren\n" // neu
"7 PROGRAMM VORZEITIG BEENDEN\n" // geändert
"Geben sie die entsprechende Nummer ein\n");
scanf("%d", &optionsnummer);
if(optionsnummer < 5)
{
printf("Geben sie 2 Dezimalbrueche ein\n");
scanf("%f %f", &wert1, &wert2);
}
if(optionsnummer == 5)
{
printf("Geben sie 2 ganze Zahlen ein\n");
scanf("%d %d", &wert1a, &wert2a);
}
if(optionsnummer == 6) // neu
{ // neu
printf("Geben sie einen Dezimalbruch als Basis und einen\n" // neu
"ganzzahligen Exponenten ein\n"); // neu
scanf("%f %d", &wert1, &wert2a); // neu
wert3 = wert1; // neu
} // neu
switch(optionsnummer)
{
case 1:
printf("Die Summe der beiden Werte %f und %f ist %f\n",
wert1, wert2, wert1+wert2);
break;
case 2:
printf("Die Differenz der beiden Werte %f und %f ist %f\n",
wert1, wert2, wert1-wert2);
break;
case 3:
printf("Das Produkt der beiden Werte %f und %f ist %f\n",
wert1, wert2, wert1*wert2);
break;
case 4:
printf("Der Quotient der beiden Werte %f und %f ist %f\n",
wert1, wert2, wert1/wert2);
break;
case 5:
printf("Der Quotient der beiden Werte %d und %d ist %d,\n"
"der Rest betraegt %d\n",
wert1a, wert2a, wert1a/wert2a, wert1a%wert2a);
break;
case 6: // neu
for(potenzzaehler=1; potenzzaehler < wert2a; // neu
potenzzaehler++, wert3 *= wert1); // neu
printf("%f hoch %d ist %f", wert1, wert2a, wert3); // neu
break;
case 7: // geändert
printf("PROGRAMM WURDE VORZEITIG BEENDET\n"); // geändert
break;
default:
printf("Falsche Eingabe\n");
break;
}
printf("\n\n\n\n\n");
if(optionsnummer == 7) // neu
break; // neu
} // Ende der for-Schleife // geändert
if(optionsnummer != 7) // neu
printf("Die gewuenschte Zahl Rechnungen ist verbraucht\n"); // neu
printf("PROGRAMM WURDE BEENDET\n"); // neu
}
______________________________________________________________________
| Eine weitere interessante Schleife ist die for()-Schleife.
Sie ist nache dem Prinzip for(startwert;bedingung;schritt)
aufgebaut und dient nicht wie die while()-Schleife dazu, einen
Programmabschnitt solange zu wiederholen, bis eine Bedingung nicht
mehr stimmt, sondern einen Programmabschnitt eine festgelegte
Anzahl an Durchläufen lang zu wiederholen. In den meisten
Fällen wird der for()-Schleife beim ersten Aufruf der Startwert
eines Zählers übergeben, dann bei jedem Durchlauf
geprüft, ob dessen aktueller Wert in einem bstimmten Bereich
liegt und der Zähler-Wert gändert, in der Regel um einen
bestimmten Wert oft 1 erniedrigt oder (häufiger) erhöht.
for(int zaehler=0;zaehler<1000;zaehler++); würde z.B. die
Schleife 1000 Mal durchlaufen. Diesmal wird der Benutzer also am
Anfang des Programmes gefragt, wie viele Rechnungen er
durchführen will. So oft wird die Rechenschleife nun als
for()-Schleife durchlaufen. Am Ende der For()Schleife kur vor der
schließenden geschweiften Klammer wird noch per if
überprüft, ob man das Programm nicht doch vorzeitig
beenden will. Ausserdem wurde, um die Fähigkeiten von for() zu
demonstrieren noch eine neue Rechenart, das Potenzieren,
ergänzt. Für diesen Fall muss das if Konstrukt erweitert
werden, da wir als Basis eine Kommazahl, als Exponenten aber nur
eine Ganzzahl erlauben. Ausserdem setzen wir noch eine 3. Variable
auf den Wert der ersten. Vor allem aber benötigen wir noch
einen weiteren switch-Zweig für die neue Rechnung. In diesem
nehmen wir den Wert der 3. Variablen mit dem Wert der 1. mal und
weisen das Ergebnis der 3. als neuen Wert zu. Dies machen wir nun
per for() so lange, wie die Potenz es uns angibt. Nach dem letzten
Schleifendurchlauf hat die 3.Variable genau das Ergebnis als Wert!
|
|
Zurück
|