2016-09-16 5 views
-2

Ich habe Probleme, einen Weg zu finden, um das Programm von mehr als 5 $ 1.000 Stipendien und 10 $ 500 Stipendien "abzuschneiden". Wie würde ich es nach 5 und 8 abschneiden von dem, was ich bereits habe? Mein Code ist unter dem ProblemWie kann ich maximal Stipendien vergeben?


Eine Abteilung von Programmierern für ein besseres Morgen ist ihre Stipendien Stiftung Fonds. Sie bieten jährliche Stipendien für Studenten, die eine Hand in Mengen von 1000, 500 und 250 Dollar benötigen. Das Geld für diese Stipendien kommt von Zinsen, die auf früheren Spenden und Investitionen getätigt wurden.

Sie werden ein Programm erstellen, um die jährlichen Zinsen in den Fonds zu berechnen und bestimmen, wie viele $ 1000, $ 500 und $ 250 Stipendien vergeben werden können. Zum Beispiel, wenn der Fonds am 30. September 2016 500.000 Dollar hatte und der jährliche Zinssatz 3 Prozent betrug, dann hat der Fonds 515.000 Dollar am Ende dieses Septembers. Dies gibt ihnen 15.000 $ als Stipendium Geld auszuzahlen.

Wenn möglich, bevorzugt der Fonds 5 $ 1000 Stipendien, 10 $ 500 Stipendien und so viele $ 250, wie sie Geld übrig haben. Mit $ 15.000 kann der Fonds 5 $ 1000 Stipendien, 10 $ 500 Stipendien und 20 $ 250 Stipendien vergeben. Ihr Programm sollte diese Informationen für den Benutzer ausdrucken.

Wenn dies nicht möglich ist, wird der Fonds so viele Stipendien im Wert von $ 1000 und $ 500 vergeben, wie sie können.

Zum Beispiel, wenn sie $ 4,750 hatten, würden sie 4 $ 1000 Stipendien, 1 $ 500 Stipendium und 1 $ 250 Stipendium vergeben.

Eingang Spezifikation

  1. Die Menge an Geld in dem Fond, n, wie von vor einem Jahr, wobei n größer oder gleich auf 0 (n Dezimalstellen enthalten kann)
  2. Die jährliche Prozentrate, p, als eine ganze Zahl, wobei p größer als Null ist.

Ausgabespezifikation
Ausgabe das Ergebnis im folgenden Format:

X $1000 scholarships will be awarded. 
Y $500 scholarships will be awarded. 
Z $250 scholarships will be awarded 

Mein Code so weit:

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


//main function 
int main() { 

     int ten, five, twofive, leftovers_ten, leftovers_five, scholarship_money; 
     float fund, interest; 

printf("How much was in the fund last year?\n"); 
scanf("%f", &fund); 

printf("What is the yearly percentage rate?\n"); 
scanf("%f", &interest); 

    scholarship_money = fund * (interest/100); 

    { 
    if(ten < 5) { 
    ten = scholarship_money/1000; 
    printf("%d $1000 scholarships will be awarded.\n", ten); 

    } 
    else { 
     ten = 5; 
     printf("5 $1000 scholarships will be awarded.\n"); 
    } 
    } 

     leftovers_ten = scholarship_money - (ten * 1000); 
    { 

    if(five < 10) { 
    five = leftovers_ten/500; 
    printf("%d $500 scholarships will be awarded.\n", five); 

    } 

    else { 
      five = 10; 
     printf("10 $500 scholarships will be awarded.\n"); 
    } 
    } 

    leftovers_five = leftovers_ten - (five * 500); 

    twofive = leftovers_five/250; 
    printf("%d $250 scholarships will be awarded.\n", twofive); 

    return 0; 
} 
+0

Wie [diese Hausaufgabe] (http: //cboard.cprogramming.com/c-programming/171235-can-jemand-help-cant-get-workings.html)? Dies ist eines der zahlreichen Geldprobleme, die hier gepostet werden, der Newbie-Fehler besteht darin, in Gleitkomma zu arbeiten. –

+1

@Weather Vane Geld hat Probleme, sollte man in irgendeinem Datentyp arbeiten. [verschiedene Ausgaben] (http://stackoverflow.com/a/32214586/2410359) – chux

+0

@chux gute Antwort aber hat Ihre Kristallkugel sagen unsere lokalen Sparzinssatz würde auf 0,5% fallen? –

Antwort

0

Das einfachste Werkzeug für die Fehlersuche ist gerade aus der Zwischenergebnisse drucken . So hättest du herausgefunden, was die Kommentatoren dir zu sagen versuchten. Wenn ich mir die Freiheit nehmen können, um Ihnen eine kurze Skizze:

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

// ALL CHECKS OMMITTED! 

/* 
If possible, the Fund prefers to award 5 $1000 scholarships, 10 $500 scholarships, and as many $250 as they have money left for. With $15,000 the Fund can award 5 $1000 scholarships, 10 $500 scholarships, and 20 $250 scholarships. 

If that is not possible, the Fund will award as many $1000 and $500 scholarships as they can. 

Input Specification 
    1. The amount of money in the fund, n, as of one year ago where n is greater than 
    or equal to 0. (n may include decimal places) 
    2. The yearly percent rate, p, as an integer where p is greater than zero. 

Output Specification 

    Output the result using the format below: 
     X $1000 scholarships will be awarded. 
     Y $500 scholarships will be awarded. 
     Z $250 scholarships will be awarded 
*/ 

int main() 
{ 

    int ten, five, twofive, interest; 
    int res; 
    float fund, leftovers_ten, leftovers_five, scholarship_money; 

    printf("How much was in the fund last year?\n"); 
    // scanf returns the number of elements it had read 
    res = scanf("%f", &fund); 
    if (res != 1) { 
    // just bail out here for simplicity 
    fprintf(stderr, "Input for fund incorrect\n"); 
    exit(EXIT_FAILURE); 
    } 
    // 1. The amount of money in the fund, n, as of one year ago where n is greater than 
    // or equal to 0. (n may include decimal places) 
    if (fund < 0.0) { 
    fprintf(stderr, "Fund must be bigger than or equal to zero but is %f\n", 
      fund); 
    exit(EXIT_FAILURE); 
    } 

    printf("What is the yearly percentage rate?\n"); 
    res = scanf("%d", &interest); 
    if (res != 1) { 
    // just bail out here for simplicity 
    fprintf(stderr, "Input for interrest incorrect\n"); 
    exit(EXIT_FAILURE); 
    } 
    // 2. The yearly percent rate, p, as an integer where p is greater than zero. 
    if (interest <= 0) { 
    fprintf(stderr, "Interest must be bigger than zero but is %d\n", interest); 
    exit(EXIT_FAILURE); 
    } 

    // some of the casts that have been added for clarity are redundant 
    scholarship_money = fund * (1.0 + (float) interest/100.0); 
    printf("scholarship_money: %.20f\n", scholarship_money); 
    ten = (int) floor(scholarship_money/1000.0); 
    // the Fund prefers to award 5 $1000 scholarships... 
    if (ten > 5) { 
    scholarship_money = scholarship_money - (5000.0); 
    ten = 5; 
    } 
    printf("ten:    %d\n", ten); 

    leftovers_ten = scholarship_money - (ten * 1000.0); 
    printf("leftovers_ten:  %.20f\n", leftovers_ten); 
    five = (int) floor(leftovers_ten/500.0); 
    // ... 10 $500 scholarships ... 
    if (five > 10) { 
    leftovers_ten = leftovers_ten - (5000.0); 
    five = 10; 
    } 
    printf("five:    %d\n", five); 

    leftovers_five = scholarship_money - (float) (ten * 1000 + five * 500); 
    printf("leftovers_five:  %.20f\n", leftovers_five); 
    // ... and as many $250 as they have money left for 
    twofive = (int) floor(leftovers_five/250.0); 
    printf("twofive:   %d\n", twofive); 

    printf("%d $1000 scholarships will be awarded.\n", ten); 
    printf("%d $500 scholarships will be awarded.\n", five); 
    printf("%d $250 scholarships will be awarded.\n", twofive); 
    printf("Sum: %d\n", ten * 1000 + five * 500 + twofive * 250); 
    printf("Rest: %.20f\n", 
     scholarship_money - (float) (ten * 1000 + five * 500 + twofive * 250)); 

    exit(EXIT_SUCCESS); 
} 

Einer Ihrer größten Probleme ist, dass Sie Punkt für Geld Operationen verwenden schwimmen, aber ich werde es dich verlassen (oder Ihr Prof., wer kann diese Probleme später aufzeigen oder nicht.

Es gibt noch viele andere Möglichkeiten, wie dieser Code fehlschlagen kann, Sie müssen alle diese Löcher stopfen!

Verwandte Themen