Tutorial 1_10

Die for-Schleife

______________________________________________________________________
//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