C-Aufgabe. Ich peil nix :(



  • CarstenJ schrieb:

    der Lehrer sieht ja, dann dass du mitdenkst

    Warst du jemals inner Schule? Da ist nix mit mitdenken und dafür noch gute Noten einkassieren.....

    Dann hab ich den falschen Lehrer im IT Unterricht 😃

    #include <stdio.h>
    
    int main (void) {
    
      int zahl = 10;
      int ergebnis = 1;
      int exp = 5;
      int i;
      for (i = 0; i < exp; i++){
       	ergebnis *= zahl;
      }
      printf ("%d",ergebnis);
      getchar ();
      return 0;
    }
    


  • Dann hab ich den falschen Lehrer im IT Unterricht

    Tja, ich leider auch.....aber was sag ich dazu immer: Hauptsache gesund 🤡



  • ahhh. danke!!! ich glaub ich registrier mich mal 🙂 gutes gefühl von so vielen profis umgeben zu sein 😉



  • Nochmal ne Frage: wofür isn die variable zahl genau? also was genau ist ihre bedeutung???



  • hmm. blöde frage eigentlich. hmm. ich glaube ich werds selbst mal versuchen...
    thx

    cya



  • Also ich habs jetz mal versucht, aber irgendwie klappts immer noch net 😞

    # include <stdio.h>
    # include <ctype.h>
    
    int main()
    {
    float k, n, p, klammer, i, hintere=1, b;
    scanf("%d", &k);
    scanf("%d", &n);
    scanf("%d", &p);
    klammer=p/100+1;
    for (i = 0; i < n; i++)
    {
    hintere=hintere*klammer;
    b=hintere*k;
    printf("%d", b);
    }
    scanf ("%d", k);
    return 0;
    }
    


  • versuch mal

    scanf("%d\n",&x);
    

    btw. solltest du eine genaue Fehler Beschreibung mitliefern. "geht nicht" sorgt nicht dafür, dass man dir gut helfen kann.

    lies dir am besten mal http://www.catb.org/~esr/faqs/smart-questions.html durch



  • Ich verstehe nicht genau was Du mit der Schleife da versuchst... Aber ne Potenzierung ist es nicht wirklich...

    Potenz = x mal mit sich SELBST Multipliziert, ich sehe aber kein selbst*selbst, sondern nur selbst*anders

    Die Potenzier SChleife muss so aussehen:

    for(i=1; i<=n; i++)
    {
      potenz=potenz*potenz;
    }
    

    AUSSERHALB der Schleife multiplizierst Du das dann mit dem anderen kram



  • k. danke 🙂
    werd gleich ausprobieren.



  • Ich würde das auch eher in eine Funktion packen:

    int myPow(int zahl, int exp)
    {
        int i;
        if(exp == 0)
            return 1; // Sonderfall: zahl hoch 0 ist immer 1....
    
        for(i = 1; i<exp; i++)
            zahl *= 2;
    
        return zahl;
    }
    

    Das hat den Vorteil, dass es übersichtlicher ist. Die würdest du dann z. B. so aufrufen:

    printf("%i\n", myPow(2,5));
    


  • hihi. funktionen kommen erst nach den sommerferien...^^

    also ich hab das jetz so gemacht, aber egal was ich eingebe, es kommt immer 0 raus =((

    # include <stdio.h>
    # include <ctype.h>
    
    int main()
    {
    float k, n, p, klammer, i, b;
    scanf("%d", &k);
    scanf("%d", &n);
    scanf("%d", &p);
    klammer=p/100+1;
    for (i = 0; i < n; i++)
    {
    klammer=klammer*klammer;
    b=klammer*k;
    printf("%d", b);
    }
    scanf ("%d", k);
    return 0;
    }
    


  • ups. hab das mitm ausserhalb nich gemacht. hach ich hohle birne..^^



  • hmm. aber warum ausserhalb? es soll ja immer zu dem zeitpunkt ausgegeben werden...! oder etwa nicht?



  • int myPow(int zahl, int exp)
    {
        int i;
        if(exp == 0)
            return 1; // Sonderfall: zahl hoch 0 ist immer 1....
           
        for(i = 1; i<exp; i++)
            zahl *= 2;
           
        return zahl;
    }
    

    Das stimmt aber nicht! Das multipliziert die Zahl exp-1 mal mit zwei.

    for(i=1; i<=n; i++)
    {
      potenz=potenz*potenz;
    }
    

    Ist auch nicht richtig. Hier wird 4^3 :
    44=16
    16
    16=256
    ausgerechnet.

    Aber eine korekte Schleife für die Potenz war ja auch schon zu sehen:

    #include <stdio.h>
    
    int main (void) {
    
      int zahl = 10;
      int ergebnis = 1;
      int exp = 5;
      int i;
      for (i = 0; i < exp; i++){
           ergebnis *= zahl;
      }
      printf ("%d",ergebnis);
      getchar ();
      return 0;
    }
    


  • Wie definiert ihr 0^0, eingie definieren es ja als 1, andere als undefiniert.



  • warum wird bei der richtigen schleife der variable der wert 1 als erstes zugewiesen???



  • Entyl_Sa schrieb:

    Das stimmt aber nicht! Das multipliziert die Zahl exp-1 mal mit zwei.

    Also die Ergebnisse stimmen, außer bei zahl == 1. Wie auch immer, sollte eigentlich mehr den Nutzen einer Funktion zum Ausdruck bringen. 😃



  • hmm. nur wenn ich anfange, warum ist dann der wert von ergebnis am anfang 1?



  • also ich hab den code jetz ma auf die richtige angepasst. aber egal was ich eingebe als ergebnis kommt immer 0..

    # include <stdio.h>
    # include <ctype.h>
    
    int main()
    {
    float k, n, p, klammer, i, b, hinter=1;
    scanf("%d", &k);
    scanf("%d", &n);
    scanf("%d", &p);
    klammer=p/100+1;
    for (i = 0; i < n; i++)
    {
    hinter=hinter*klammer;
    b=hinter*k;
    printf("%d", b);
    }
    scanf ("%d", k);
    return 0;
    }
    


  • CarstenJ schrieb:

    Also die Ergebnisse stimmen, außer bei zahl == 1. Wie auch immer, sollte eigentlich mehr den Nutzen einer Funktion zum Ausdruck bringen.

    Eigentlich stimmt es nur bei zahl==2 .
    Aber den nutzen einer Funktion stellt es sicher dar.
    Was ich hier auch auf jeden Fall für angebracht halte.

    ergebnis ist am Anfang 1 weil x^0 immer eins ist, und sonst ist er für die erste multiplikation ja auch ganz praktisch, so bekommt man beim ersten Schleifendurchlauf zahl in ergebnis.

    PS.: hälst du hinter und klammer für aussagekraeftige Variablennamen?


Anmelden zum Antworten