1

C Programmieren - Programm zur Zinseszinsberechnung funktioniert nicht :(

Frage von DasZehneck DasZehneck

Hallo! Nachdem ich gestern erfolgreich ein Programm zur einfachen Zinsberechnung geschrieben habe, versuche ich heute ein Programm in Zinseszinsberechnung zu schreiben.

Man soll die Variablen: Zinssatz in Prozent, Summe und Jahre eingeben können.

Das Programm sieht wie folgt aus:

#include <stdio.h>
#include <stdlib.h>
#include <math.h>

int main(int argc, char *argv[])
{
    float Zins = 0.0f, Ergebnis = 0.0f;
    int Summe = 0, Jahre = 0;
    double result = pow(Ergebnis,Jahre);


printf("Zinseszinsrechnung\n");
printf("Zinssatz in Prozent\n");
printf("(Ohne Prozentzeichen):\n");
scanf("%f",&Zins);
fflush(stdin);
printf("Summe\n");
scanf("%d",&Summe);
fflush(stdin);
printf("Anzahl der Jahre\n");
scanf("%d",&Jahre);
fflush(stdin);
Ergebnis=Summe*(1+Zins);
printf("Ergebnis: %f\n",&result ); 
  system("PAUSE");  
  return 0;
}

Ich kann es ausführen und die Variablen eingeben, aber das Ergebnis ist, egal bei welchen Variablenwerten 0.0000. Erkennt jemand den Fehler? :)

Fragen zu gleichen Themen finden

Antworten (8)

  • 1
    Antwort von Juliahn Juliahn

    Du hast vergessen result zu berechnen nach dem zu Ergebnis und die Jahre hast.

    Ergebnis=Summe*(1+Zins);
    
    result = pow(Ergebnis,Jahre);
    
    printf("Ergebnis: %f\n",&result ); 
    
    Kommentar von DasZehneck DasZehneck

    und muss das double result = pow(Ergebnis,Jahre); trotzdem oben noch stehen bleiben? (Sorry, bin absoluter Anfänger)

    Kommentar von DasZehneck DasZehneck

    So ist die Antwort aber immer 2293600 :(

    Kommentar von Sucellus SucellusSucellus

    Auch kein Wunder wenn du &result anstatt result ausgibst. Was willst auch mit der Adresse? :P

    Kommentar von DasZehneck DasZehneck

    Scheiße stimmt! Wann muss man nochmal & davor machen?

    Und: Vielen dank! So:

    Ergebnis=Summe*(1+Zins);
    
    double result = pow(Ergebnis,Jahre);
    
    printf("Ergebnis: %f\n",result ); 
    

    gehts :D

    Vielen Dank!

  • 1
    Antwort von D4rkScr43m D4rkScr43m

    Dein Problem ist, dass "result" schon ganz am anfang einen Wert zugewiesen bekommt, der Wert ändert sich aber nicht mehr und wird dann ausgegeben.

    Du musst

    result = pow(Ergebnis,Jahre);
    

    vor die Ausgabe von result setzen.

    Kommentar von DasZehneck DasZehneck

    Okay, vielen Dank :)

    Aber wie meinst du das jetzt, ich versteh das noch nicht ganz (hab erst gestern angefangen, C zu lernen :( ): Wo genau muss ich jetzt
    result = pow (Ergebnis,Jahre); hinpacken? Was meinst du mit Ausgabe von result?

    Kommentar von D4rkScr43m D4rkScr43mD4rkScr43m

    Naja du hast doch deine Zeile, in der der Wert von der Variable "result" ausgegeben wird. Du musst nur daran denken, dass dein Programm immer von oben nach unten abläuft.

    In deinem Programm werden also zu erst deine Variablen auf 0 gesetzt , dann rechnest du Ergebis hoch Jahre, aber an der Stelle ist das das selbe wie 0 hoch 0 dann steht in deiner Variable "result" ein undefinierter Wert (es kann auch sein, das pow() immer 0 zurück gibt, wenn der erste Wert 0 ist) oder 0 Und den gibst du am Ende deines Programms aus.

    Du musst darauf achten, dass du deine Rechnung, von der du das Ergebnis dann in "result" speicherst, erst dann machst, wenn du auch schon Werte hast, mit denen du rechnen kannst.

    Ich hoffe das ist einigermaßen verständlich, sonst frag nochmal nach.

    Kommentar von DasZehneck DasZehneck
    #include <stdio.h>
    #include <stdlib.h>
    #include <math.h>
    
    int main(int argc, char *argv[])
    {
    float Zins = 0.0f, Ergebnis = 0.0f;
    int Summe = 0, Jahre = 0;
    double result = pow(Ergebnis,Jahre);
    
    
    printf("Zinseszinsrechnung\n");
    printf("Zinssatz in Prozent\n");
    printf("(Ohne Prozentzeichen):\n");
    scanf("%f",&Zins);
    fflush(stdin);
    printf("Summe\n");
    scanf("%d",&Summe);
    fflush(stdin);
    printf("Anzahl der Jahre\n");
    scanf("%d",&Jahre);
    fflush(stdin);
    Ergebnis=Summe*(1+Zins);
    result = pow(Ergebnis,Jahre);
    printf("Betrag: %d\n",&result );
    
      system("PAUSE");  
      return 0;
    }
    

    Meinst du das so? So kommt immer 2293600 raus :/

    Kommentar von D4rkScr43m D4rkScr43mD4rkScr43m

    Ja, weil du falsch rechnest, aber so bekommst du immerhin schonmal ein Ergebnis heraus ;)

    Die Berechnung für Zinseszins lautet übrigens:

    Ergebnis = Anfangssumme * (Zinssatz+1) hoch Jahre

    Du rechnest bis jetzt:

    Ergebnis = (Anfangssumme * (Zinssatz+1)) hoch Jahre

    Kommentar von D4rkScr43m D4rkScr43mD4rkScr43m

    Achso genau und du gibst die Adresse von result aus und nicht den Wert

    mit & referenzierst du auf die Adresse der Variable (also den Ort, an dem sie im Speicher liegt)

  • 0
    Antwort von supernicky supernicky

    Hallo,

    Ich programmiere zwar nicht in C aber auch sowas in der Art...

    Hier mal ein Tipp: Schreibe (gerade als Anfänger) hinter jede Zeile einen Kommentar, was dort genau passiert. Allein daran könntest du schon sehen wo ein Fehler liegt.

    Bei so kleinen Programmen mag das vielleicht noch so gehen, aber ein paar Zeilen mehr und du weißt am nächsten Tag nichts mehr davon...

    MfG

    Nicky

  • 0
    Antwort von Sucellus Sucellus
    double result = pow(Ergebnis,Jahre);
    

    Die Zeile führst du aus, bevor der Nutzer die Werte eingibt. Das muss genau vor die Ausgabe von result.

    printf("Ergebnis: %f\n",&result ); 
    

    Damit übergibst du die Adresse der Variable result, anstat den eigentlichen Wert. das müsste result anstatt &result sein.

    Kommentar von Sucellus SucellusSucellus

    Achja, und lass dir nicht einreden es sei %d anstatt %f, das ist schlichtweg falsch. %d ist für Integer, %f für floats UND double.

    Kommentar von DasZehneck DasZehneck

    Ja, ich hab auch gedacht: hää? Warum %d? Mit %f funktionierts einwandfrei, mit %d gar nicht :)

    Kommentar von DasZehneck DasZehneck

    Eine Sache noch:

    #include <stdio.h>
    #include <stdlib.h>
    #include <math.h>
    
    int main(int argc, char *argv[])
    {
    float Zins = 0.0f, Ergebnis = 0.0f;
    int Summe = 0, Jahre = 0;
    
    printf("Zinseszinsrechnung\n");
    printf("Geben sie nun bitte den Zinssatz in Prozent ein\n");
    printf("(Ohne Prozentzeichen):\n");
    scanf("%f",&Zins);
    fflush(stdin);
    printf("Geben sie nun bitte die Summe in Euro/Dollar/Yen... ein.\n");
    scanf("%d",&Summe);
    fflush(stdin);
    printf("Geben sie nun bitte die Dauer der Verzinsung an\n");
    printf("(Euro/Dollar/Yen/...\n");
    scanf("%d",&Jahre);
    fflush(stdin);
    Ergebnis=Summe*(1+(Zins/100));
    double result = pow(Ergebnis,Jahre);
    printf("Ihr Endbetrag:%f\n",result);
    
    system("PAUSE");    
    return 0;
    }
    

    Jetzt funktioniert alles, wenn die Zahlen ganz sind, zb als Ergebnis 103. Aber wenn es mit Kommazahlen losgeht, kommt als ergebnis nicht zb 102,010000 sondern 10201,00000

    Warum??? :S

  • 0
    Antwort von Wutklumpen Wutklumpen

    Erstens wird result nur am Anfang berechnet, und zweitens printf("Ergebnis: %f\n",&result );

    dein result ist ein double, und du wilst es in eine float (%f) stecken, das wid nix, mach

    printf("Ergebnis: %d\n",&result ); 
    

    draus.

    Kommentar von D4rkScr43m D4rkScr43mD4rkScr43m

    %d ist für Dezimalzahlen (Ganzzahlen) vorgesehen, da wird man den double noch schlechter hinein bekommen, als in einen float

    %f sollte aber reichen, da die überschüssigen Nachkommastellen abgeschnitten werden und es hier um Berechnung von Geld handelt, mehr als 2(3) Nachkommastellen machen hier also wenig Sinn

  • 0
    Antwort von gfuser9283 gfuser9283
    printf("Ergebnis: %f\n",&result );
    

    Du gibst result aus, aber hast du der Variable überhaupt irgendwo ein Ergebnis zugewiesen? Nein.

  • 0
    Antwort von skomp skomp

    alter, das hab ich dir gestern schon gesagt, du musst die berechung ans ende packen. geh das programm doch mal logisch durch: setzen der variablen (die man übrigens klein schreiben sollte) auf 0, dann Ergebnis ^ jahre, also 0^0 (also = 1), dann ein bisschen rumgeraffel mit werte lesen und sonem foo, und dann ausgabe des wertes, der an der stelle steht, wo result hinzeigt. so, und nun die quizfrage: welcher wert steht an &result? ich sags dir, der ist undefiniert, kannst froh sein, dass es überhaupt bis zu ende läuft, normalerweise bekommste da einen segmentation fault, weil du versuchst auf 0x1 zuzugreifen. das ist zwar nicht die nullpage, aber in der regen steht da trotzdem nichts.

  • 0
    Antwort von DellConagher DellConagher

    Du hast result am anfang einmal einen wert zugewiesen das beim ausführn dort nicht gemeckert wurd, wundert mich eigentlich, aber vllt hab ich die pow-funktion falsch im kopf. jedenfalls ist result zu diesem zeitpunkt null und der wert wechselt im programmverlauf nicht mehr, also bleibt es null

    [Edit] Zu langsam gewesen. Das was die andern sagen

Diese Frage

Verwandte Fragen

Noch nicht den richtigen Rat gefunden?

Einfach und schnell viele hilfreiche Ratschläge von Deutschlands aktivster Ratgeber-Community erhalten!

Einfach und schnell einen Tipp erstellen und Ihren guten Rat mit anderen teilen!

Einfach und schnell ein Video hochladen und anschaulichen Rat an alle geben!

Die unter gutefrage.net angebotenen Dienste und Ratgeber Inhalte werden nicht geprüft. Die Richtigkeit der Inhalte wird nicht gewährleistet. Rechtliche Hinweise finden Sie hier.