たすけてください!

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
ERK。

たすけてください!

#1

投稿記事 by ERK。 » 15年前

学校の課題で出たんですが、全くサッパリわかりません…

~問題~
キーボードから元金、返済回数(月数)、利率(年利)を入力し、元金均等払いの1回から指定回数までの支払額、利息、残高を以下のように表示せよ。

元金?100000
回数?10
利率(%)?3
回数 支払額 利息  残高
 1  10250  250 90000
 2  10225  225 80000
 3  10200  200 70000
 4  10175  175 60000
 5  10150  150 50000
 6  10125  125 40000
 7  10100  100 30000
 8  10075  75 20000
 9  10050  50 10000
10  10025  25   0
合計 101375 1375

たかぎ

Re:たすけてください!

#2

投稿記事 by たかぎ » 15年前

> キーボードから元金、返済回数(月数)、利率(年利)を入力し

キーボードから入力するための一般的な方法はありません。
そもそも、対象としたハードウェアにキーボードが存在することは期待してもよいのでしょうか?
入力には、I/Oポートを直接制御するのでしょうか?
あるいは、(あるのかないのか、あったとしても何か知りませんが)OSの助けを借りられるのでしょうか?

たかぎ

Re:たすけてください!

#3

投稿記事 by たかぎ » 15年前

もうひとつついでに...

> 以下のように表示せよ。

表示するための一般的な方法はありません。
対象としているハードウェアには、表示デバイスが存在することを期待してもよいのでしょうか?
表示には、VRAMに直接書きこむとか、LCDのセグメントを直接制御するとか、その他、I/Oを直接制御する必要があるのでしょうか?
あるいは、(あるのかないのか、あったとしても何か知りませんが)OSの助けを借りられるのでしょうか?

バグ

Re:たすけてください!

#4

投稿記事 by バグ » 15年前

えっと、この課題の何が分かりませんか?

1:キーボードからの値の入力

2:支払額、利息、残高の計算

3:結果の表示

ERK。

Re:たすけてください!

#5

投稿記事 by ERK。 » 15年前

前のスレに

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

int main(void)
{
int gankin, kaisuu, pay, pri_bal, total = 0, odd, i;
double riritsu;

scanf("%d %d %lf", &gankin, &kaisuu, &riritsu);
printf("\n元金 %d, 回数 %d, 利率 %.3f\n\n", gankin, kaisuu, riritsu);
riritsu /= 12;
odd = gankin % kaisuu;
pri_bal = gankin;
puts("回数 支払額 利息 残高");
for(i = 1; i <= kaisuu; i ++){
pay = (int)floor(gankin / kaisuu + pri_bal * riritsu + (odd > 0) + 0.5);
printf("%4d %10d %5d %10d\n",
i,
pay,
(int)floor(pri_bal * riritsu + 0.5),
pri_bal - gankin / kaisuu - (odd > 0));
total += pay;
pri_bal -= gankin / kaisuu + (odd -- > 0);
}
printf("\n合計 %d\n", total);
return 0;
}


というのがあり、参考にさせていただいたのですが、
これだと3%の利率を入力した場合3ではなく0.03と入力しなければならず、
また入力する際の元金?回数?利率(%)?という文字が出ません。

この2点を変えるにはどうすればいいですか?

softya

Re:たすけてください!

#6

投稿記事 by softya » 15年前

お助けしたいのですが、今の質問内容では詳しいことが分からず回答が困難です。
「規約と注意事項」にある「よくわからない人はテンプレを」にあるテンプレートを使って詳細を教えてください。そうすればスムーズに回答を行えますので。
http://dixq.net/board/board.html
それと規約の「宿題の質問はOK!でも丸投げは×」に該当すると思いますので、勉強方法のアドバイスをすると言うことでよろしいですか?
[flash 600,100]http://dixq.net/flash/kiyaku4.swf[/flash]

たかぎさんが聞いているのは、コンソールで動くのか、それともまったく別の入出力なのかと言うことです。ERK。さんが一般的に使っているキーボードからの入力と表示を方法を例を挙げて説明してください。

たかぎ

Re:たすけてください!

#7

投稿記事 by たかぎ » 15年前

規約も守らず、回答も読んでいただけないようですので、一応これだけ貼っておきます。

[flash 600,100]http://dixq.net/flash/kiyaku4.swf[/flash]

バグ

Re:たすけてください!

#8

投稿記事 by バグ » 15年前

>>これだと3%の利率を入力した場合3ではなく0.03と入力しなければならず

上記のソースではdouble型という浮動小数型変数で入力を受け付けていますから、いったんint型などの整数型の変数で入力を受け付けておいて、キャストしてやればいいかと思います。
int a = 0;
double b = 0.0;
scanf("%d", a);
b = (double)a;
こんな感じでしょうか?


>>入力する際の元金?回数?利率(%)?という文字が出ません。

これは表示してから入力を受け付ければOKです。

たかぎ

Re:たすけてください!

#9

投稿記事 by たかぎ » 15年前

softyaさんとかぶったので、こちらも貼っておきます。

回答者様用テンプレート

● 対 宿題の丸投げ用 ●

 ・ 自分はどこまで理解しているのか、学校ではどこまで習ったのか明確にしましょう
 ・ 自分で書いたソースプログラムがあるなら提示しましょう
 ・ (提示してある場合)自分が書いたソースプログラムはどこからどこまでなのか教えて下さい
 ・ ソースコードは< pre>と< /pre>のタグで囲んでください
 詳しくはこの掲示板の使い方をご覧ください→ http://dixq.net/board/board.html

バグ

Re:たすけてください!

#10

投稿記事 by バグ » 15年前

失礼、前述のコードに修正です…

int a = 0;
double b = 0.0;
scanf("%d", a);
b = (double)(a) / 100.0;

やそ

Re:たすけてください!

#11

投稿記事 by やそ » 15年前

現在規約遵守推進期間(無期限)となっております(笑)


printf("元金 ");
scanf("%d", &gankin);
のようにすれば入力時に項目の表示ができると思いますよ。
利率もint型の変数で入力して、必要なときにfloatなどに代入してやればいいだけでは?

たかぎ

Re:たすけてください!

#12

投稿記事 by たかぎ » 15年前

2.5%とかの金利はないのでしょうか?
通貨単位が円とは書かれていませんので、例えば米ドルであれば100分の1まで計算対象にする必要があります。
また、お金の計算に浮動小数点数を使うべきではないのは基本ですね。

バグ

Re:たすけてください!

#13

投稿記事 by バグ » 15年前

>>たかぎさん
なるほど。
最初からdouble型変数に入力値を受けておいて、計算する際に100分の1にして計算するほうがスマートですね。

たかぎ

Re:たすけてください!

#14

投稿記事 by たかぎ » 15年前

> 最初からdouble型変数に入力値を受けておいて、計算する際に100分の1にして計算するほうがスマートですね。

それだと誤差が出ます。
自分で文字列を解析して、100倍した整数に変換する必要があります。

softya

Re:たすけてください!

#15

投稿記事 by softya » 15年前

>>たかぎさん
そうですね。
金融業界ならBCDとかCOBOLで言うところのPACKED-DECIMALが基本ですよね。
浮動小数点は誤差が付きまといますので使うのは危険ですね。
C言語の標準規格に無いのが問題ですが(^^ゞ

バグ

Re:たすけてください!

#16

投稿記事 by バグ » 15年前

スレ主さんがそこまで厳密な値が必要かどうかはさておき…
そうですね、誤差を気にするならばそこまでやるべきでしょうね。

たかぎ

Re:たすけてください!

#17

投稿記事 by たかぎ » 15年前

100倍した整数を使う場合、int型を使うと、(処理系不明なので)327.67までしか表現できません。
これでは(円の場合)子供の小遣いにも満たない金額です。韓国ウォンなら...
long型を使っても、約2147万程度しか表現できませんので、円であれば住宅ローンの計算を行うことすらできなくなります。
long long型を使えば、国債の計算でもできるかと思います。
ただし、処理系不明なのでlong long型が使えるかどうかわかりません。
多倍長演算を視野に入れる必要があるかもしれませんね。

たかぎ

Re:たすけてください!

#18

投稿記事 by たかぎ » 15年前

> スレ主さんがそこまで厳密な値が必要かどうかはさておき…

それは、質問者さんが前提条件を提示してくれない限り、勝手に設定することはできませんね。

Dixq (管理人)

Re:たすけてください!

#19

投稿記事 by Dixq (管理人) » 15年前

>やそさん

思わず笑いましたw


>ERKさん

最近、説明不足でどう答えていいかわからない投稿が多く、
回答者の皆さんでどうしたらいいですかねって話していたところだったんですね。

質問して頂くとき、質問者さんが何に困ってて、何で作ってて、質問者さんのスキルがどれ位なのかが解らないと
答えようが無い場合が多いんです。
どう答えていいか解らない時は一度規約を読んで頂ければと思います。

さて、最初の質問としては、文字の表示の仕方が解らないということでしょうか?
Cの基本はわかっていらっしゃいますか?

hello world

と画面に表示させるプログラムならかけますか?

閉鎖

“C言語何でも質問掲示板” へ戻る