C-Aufgabe. Ich peil nix :(



  • 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?



  • Aber ich krieg ja 0 raus... nich 1.

    hmm. stimmt schon. die namen sind dumm. ich habse mal geändert:

    # include <stdio.h> 
    # include <ctype.h> 
    
    int main() 
    { 
    float kapital, jahre, zinssatz, grundklammer, i, endkapital, klammer-potensiert=1; 
    scanf("%d", &kapital); 
    scanf("%d", &jahre); 
    scanf("%d", &zinssatz); 
    grundklammer=p/100+1; 
    for (i = 0; i < jahre; i++) 
    { 
    klammer-potensiert=klammer-potensiert*grundklammer; 
    endkapital=klammer-potensiert*kapital; 
    printf("%d", endkapital); 
    } 
    return 0; 
    }
    


  • Eigentlich stimmt es nur bei zahl==2 .

    Argh....ja klar, du hast natürlich absolut recht :D.

    @Schmank:
    Klammer raff ich immer noch net.....Und du liest Ganzzahlen ein, keine floats. Mach es so:

    scanf("%f", &kapital)
    

    Wobei ich immer noch nicht genau verstehe, was da eigentlich berechnet werden soll.



  • naja das steht ja in der aufgabe im ersten beitrag. das endkapital soll ausgerechnet werden. aber es sollen bei 5 jahren z.b. das kapital nach jedem der 5 jahre extra angezeigt werden. und klammer ist halt die formel p/100+1 die potensiert werden soll. die gesamtformel ist endkapital=(zinssatz/100+1)^n

    hmm. stimmt. ich änder das mitm float mal. aber wenn keine steigen vorhanden ist, müsste doch zumindest das startkapital gezeigt werden und nicht 0 oder?



  • p/100+1
    

    Das ergibt sofern mit INTs gearbeitet wird immer(!!) 1 sofern p<100. Und wo genau zeigt er die "0"?

    *edit*
    %d im printf ist für INTs, für FLOATs musst Du %f verwenden



  • falsch, wenn du das als int einliest, bleibts (das startkapital und der rest) bei der 0. also: %f 🕶



  • Du solltest den Code den du hier postest vielleicht auch schon vorher mal compiliert haben. Bei deiner letzten Version existiert p zum Beispiel garnicht.
    '-' in Variablennamen ist auch nicht drin.
    Variablennamen die sich auf deine Formel beziehen sind nicht sehr aussagekraefitg, wie du an CarstenJ´s Reaktion ja schon gemerkt haben solltest.
    Dann würde ich jahre noch als int anlegen und siehe da, du hast ein funktionierendes Programm.


Anmelden zum Antworten