for-Schleife Exponentialfunktion



  • Hallo, ich muss ein Programm schreiben in der man eine Zahl (bei mir: number) und einen Exponenten (bei mir: exponent) eingibt. Durch diese zwei Angaben soll das programm per "for"-schleife die zahl ausrechnen. Also number^exponent.
    Soweit so gut, ich habe aber das problem, das ich nicht wirklich einen plan habe wie ich das machen soll, ich habe mal folgendes geschrieben, was aber irgendwie nicht funktioniert, er führt vermutlich die Schleife nicht aus 😞 :

    //Einbinden der Standard Input/Output Bibliothek
    #include <stdio.h>
    
    main(void)
     {
    //Deklarierung+Initialisierung der Zahl und des Exponenten
     int exponent;
     float number;
     printf("Gebe eine Basis ein: \n");
     scanf("%f",&number);
     printf("Gebe einen Exponenten ein: \n");
     scanf("%i",&exponent);
    //Deklarierung der Variable i
     int i;
    //for Schleife die hochzählen soll bis der exponent erreicht worden ist und bei jeder Zählstufe Zahl*Zahl machen soll (ich hab halt ehrlich gesagt kein wirklichen plan was die funktion jetzt genau macht, was ich weiß ist: Ich hab eine Zahl i oben als eine ganze Zahl deklariert, diese Zahl soll nun in der for schleife gleich 1 gesetzt werden. Dann soll sie hochzählen. Nun hab ich mir gedacht, das bei jedem mal bei dem eins hochgezählt wird, das Programm Zahl*Zahl nimmt. Weiter dachte ich mir: Er soll das solange machen, bis die Variable i gleich dem Exponenten ist, dann soll er die Zahl ausspucken.
    
     for(i=1;i<0;i++){
       number=number*number;
       if((i)=(exponent))
     printf("Ergebnis: %d\n",number); 
     }
     return 0;
    }
    

    Hab schon gegoogled, und habe auch schon funktionen gefunden, die genau das machen was ich will, das problem ist, das da befehle wie atoi und argv benutzt werden, welche wir in der Vorlesung noch nicht hatten. In der Regel ist es aber so, dass man nur aus der Vorlesung bekannte Sachen verwenden darf.
    Wenns irgendwie machbar ist, möchte ich nicht direkt eine Lösung sondern eher Lösungsansätze, sprich, sagen wo ich ein denkfehler habe und besser nochmal nachdenken sollte.

    Vielen Dank schonmal für eure Hilfe,

    gruß kentiata



  • Sorry, da ich nicht angemeldet bin, kann ich mein beitrag nicht editieren sonst würd ich die zeile in mehre machen:

    Zeile 15: //for Schleife die hochzählen soll bis der exponent erreicht worden ist und bei jeder Zählstufe Zahl*Zahl machen soll (ich hab halt ehrlich gesagt kein wirklichen plan was die funktion jetzt genau macht, was ich weiß ist: Ich hab eine Zahl i oben als eine ganze Zahl deklariert, diese Zahl soll nun in der for schleife gleich 1 gesetzt werden. Dann soll sie hochzählen. Nun hab ich mir gedacht, das bei jedem mal bei dem eins hochgezählt wird, das Programm Zahl*Zahl nimmt. Weiter dachte ich mir: Er soll das solange machen, bis die Variable i gleich dem Exponenten ist, dann soll er die Zahl ausspucken.

    Habe grad gemerkt, dass ich beim Ergebnis Double eingetragen habe, habs bereits in float geändert, hilft aber leider nichts 😞



  • So, habe jetzt endlich mal die for-Schleife zum laufen bekommen.
    Allerdings funktioniert bisher nur die Zahl zu Quadrieren.

    D.h. wenn ich z.b. Basis 5 eingebe, und Exponent 4 kommt 25 raus, statt 625 😞
    Zweiter Test mit Basis 3 und Exponent 30 gemacht, Ergebnis 9 😞

    //Einbinden der Standard Input/Output Bibliothek
    #include <stdio.h>

    main(void)
    {
    //Deklarierung+Initialisierung der Zahl und des Exponenten
    int exponent;
    float number;
    printf("Gebe eine Basis ein: \n");
    scanf("%f",&number);
    printf("Gebe einen Exponenten ein: \n");
    scanf("%i",&exponent);
    //Deklarierung der Variable i
    int i;
    //for Schleife die hochzählen soll bis der exponent erreicht worden ist und bei //jeder Zählstufe Zahl*Zahl machen soll (ich hab halt ehrlich gesagt kein //wirklichen plan was die funktion jetzt genau macht, was ich weiß ist: Ich hab //eine Zahl i oben als eine ganze Zahl deklariert, diese Zahl soll nun in der //for schleife gleich 1 gesetzt werden. Dann soll sie hochzählen. Nun hab ich //mir gedacht, das bei jedem mal bei dem eins hochgezählt wird, das Programm //Zahl*Zahl nimmt. Weiter dachte ich mir: Er soll das solange machen, bis die //Variable i gleich dem Exponenten ist, dann soll er die Zahl ausspucken.

    for(i=1;i<exponent;i++){
    number=number*number;
    if((i)=(exponent))
    printf("Ergebnis: %f\n",number);
    }
    return 0;
    }



  • Sorry, vergessen den C/C++ Button zu klicken

    //Einbinden der Standard Input/Output Bibliothek
    #include <stdio.h>
    
    main(void)
    {
    //Deklarierung+Initialisierung der Zahl und des Exponenten
    int exponent;
    float number;
    printf("Gebe eine Basis ein: \n");
    scanf("%f",&number);
    printf("Gebe einen Exponenten ein: \n");
    scanf("%i",&exponent);
    //Deklarierung der Variable i
    int i;
    //for Schleife die hochzählen soll bis der exponent erreicht worden ist und bei //jeder Zählstufe Zahl*Zahl machen soll (ich hab halt ehrlich gesagt kein //wirklichen plan was die funktion jetzt genau macht, was ich weiß ist: Ich hab //eine Zahl i oben als eine ganze Zahl deklariert, diese Zahl soll nun in der //for schleife gleich 1 gesetzt werden. Dann soll sie hochzählen. Nun hab ich //mir gedacht, das bei jedem mal bei dem eins hochgezählt wird, das Programm //Zahl*Zahl nimmt. Weiter dachte ich mir: Er soll das solange machen, bis die //Variable i gleich dem Exponenten ist, dann soll er die Zahl ausspucken.
    
    for(i=1;i<exponent;i++){
    number=number*number;
    if((i)=(exponent))
    printf("Ergebnis: %f\n",number);
    }
    return 0;
    }
    


  • Und jetztz musste nur noch ins richtige Forum...



  • Ich bin in C zwar nicht drin (bin C++ Entwickler), habe aber einige Anmerkungen.

    #include <stdio.h>
    
    int main(void) // Den Rückgabewert sollte man auch unter C angeben
    {
        // Sinnvolle Einrückung wäre auch nicht verkehrt.
        int exponent;
        float number;
        printf("Gebe eine Basis ein: \n");
        scanf("%f",&number);
        printf("Gebe einen Exponenten ein: \n");
        scanf("%i",&exponent);
    
        // Deklarierung der Variable i <- Solche Kommentare kann man sich wirklich
        // sparen. Zumal ich Zählvariablen, die nur in einer for-Schleife benötigt
        // werden auch nur dort deklarieren würde.
    
        for(int i=1; i<exponent; ++i){ // Hier zwar nicht relevant, würde aber immer
                                       // Preincrement dem Postincrement vorziehen*
            number *= number; // Kurzschreibweise
            if(i == exponent) // == nicht = (letzteres ist Zuweisung) **
                printf("Ergebnis: %f\n",number);
        }
    
        return 0;
    }
    

    * Wenn du irgendwann mal mit C++ in Kontakt kommst, kann es sein das sich hinter einen Typ auch mal eine komplexe Klasse verbirgt. Und dann kann es einen Unterschied machen ob man mit dem Precrement (++i) oder dem Postcrement (i++) arbeitet, da letzteres mit einer zusätzlichen temporären Kopie arbeiten muss (Bei den Basisdatentypen irrelevant, dennoch würde ich Konsistent bleiben).

    ** Sehr häufig gemachter Fehler, zudem waren deine Klammerungen auch unnötig

    P.S: Bitte ins C-Forum verschieben.



  • Erstmal sorry, dass ich ins falsche forum gepostet hatte, dachte C# steht für das normale C, habe jetzt geblickt, dass ANSI C das ist mit dem ich programmiere 🙂

    Habs nun endlich geschafft, allerdings ein bisschen anders als dein vorschlag asc, dennoch war dein Beitrag von entscheidender Bedeutung 😉

    Der Kommentar bei der Deklarierung i müssen wir machen, das sind ja übungsaufgaben und wir sollen eigentlich so ziemlich alles kommentieren, was zu kommentieren geht 😉 Und da wir letztes mal Punktabzug wegen zu wenig Kommentierung bekommen habe, tu ich diesmal lieber zuviel kommentieren als zuwenig

    Hier mal mein fertiges Produkt 🙂

    //Einbinden der Standard Input/Output Bibliothek
    #include <stdio.h>
    
    int main(void)
     {
    	//Deklarierung+Initialisierung der Zahl und des Exponenten 
    	int exponent;
    	float number;
    	printf("Gebe eine Basis ein: \n");
    	scanf("%f",&number);
    	printf("Gebe einen Exponenten ein: \n");
    	scanf("%i",&exponent);
    	//Deklarierung der Variable speicher, welche auf die eingegebene Zahl
     	//festgesetzt wird, sowie Deklarierung der Variable i
    	const float speicher=number;
     	int i;
    	//for-Schleife zur Berechnung von number^exponent
    	for(i=1;i<=exponent;++i){
    	   number=speicher*number;
    	   if((i+1)==(exponent))
    		 printf("Test %f\n",number); 
    	}
    
     return 0;
    

Anmelden zum Antworten