ページ 11

円の面積について

Posted: 2008年11月22日(土) 00:59
by ムンバ
こんばんは。お世話になります。
テンプレート使わせて頂きます。^^

[1] 質問文
 [1.1] 自分が今行いたい事は何か

 自分が今行いたい事
 ・C言語を使ってゲームを作りたい。
 ・職場での個人の労働時間(時給とか)と交通費などを
  簡単に計算できるプログラムを作りたい。(自分個人で使用)
 ・今、読んでるC言語の参考書を最後まで読む。

 質問
  今、参考させて頂いている参考書の「関数」という項目の練習問題で

  「1!, 2!, 3!, 4!, …, 10!」の値を表示するプログラムを作って下さい。

  と、ありました。 

 [1.2] どのように取り組んだか(プログラムコードがある場合記載)

  練習問題に対する自分の解答プログラムを添付させて頂きます。
  (できれば、まだ見ないで下さい。添付しといて、ごめんなさい。)
    
 [1.3] どのようなエラーやトラブルで困っているか(エラーメッセージが解る場合は記載)

  参考書の模範解答と自分の作ったプログラムが、ぜんぜん違ってました。^^;

 [1.4] 今何がわからないのか、知りたいのか

  「1!, 2!, 3!, 4!, …, 10!」の値を表示するプログラムを作って下さい。

  と問題があった場合、皆さんは、どの様なプログラムを書かれますか?

  自分が練習問題の問いと、あまりにもかけ離れた解答をしてたので質問させて頂きました。(涙
  お時間のある方、ご意見よろしくお願い致します。
  管理人さんには、ご迷惑をお掛けする事と思いますが
  可能であれば、こちらの掲示板に解答プログラムを添付頂けるとありがたいです。
  勝手で、すみません。
  この先、勉強するために皆さんのプログラムが自分のと、どのように違うのか知りたいです。
  皆様の優劣とかレベルとかを試したいのではありません。純粋に、お聞きしたいです。
  宜しくお願い致します。(謝

[2] 環境  
 [2.1] OS : Windows
 [2.2] コンパイラ名 : VC++ 2008

[3] その他
 ・どの程度C言語を理解しているか

  参考書の項目で言いますと
  プログラムのしくみ・C言語の基本・変数とデータ型・式と演算子・制御文・関数
  まで、だと思われます。^^;
  この先の勉強は、配列・ポインタ・構造体などです。
  
 ・ライブラリを使っている場合は何を使っているか
  
  標準ライブラリです。

Re:円の面積について

Posted: 2008年11月22日(土) 01:03
by ムンバ
すみません。↑タイトル間違ってました。
パス入れるの忘れてしまったので訂正できません。(激汗
↑タイトルは、「値を表示するプログラム」に訂正です。ごめんなさい。

Re:円の面積について

Posted: 2008年11月22日(土) 01:09
by box
階乗の定義はご存じですか?
定義の中に掛け算をするところがあるのに、
提示のコードには見あたりません。
その1点だけを見ても、正しくないことがわかります。

Re:円の面積について

Posted: 2008年11月22日(土) 01:19
by ムンバ
半径×半径×π ですよね?^^;
すみません。私がタイトルを間違ってしまってます。
ご迷惑おかけします。boxさん、ごめんなさい。

管理人さん、お忙しい所大変申し訳ございませんが
このタイトル、修正して頂けないでしょうか?
今度から、パスワード入れ忘れない様に気をつけますので、すみません。
お時間ある時にでも、宜しくお願い致します。(謝

Re:円の面積について

Posted: 2008年11月22日(土) 05:39
by GPGA
こんなのを書きます。
#include <stdio.h>
int Func(int n) {
	return (n > 0) ? printf("%d!, ", Func(n - 1)), n + 1 : n + 1;
}

int main() {
	Func(10);
	return 0;
}
 

Re:円の面積について

Posted: 2008年11月22日(土) 05:52
by Dixq (管理人)
いや、そうではなくて、階乗の定義をboxさんはお聞きになっているのだと思います。
3!や4!は(√2)のようにある別の数値を表すものです。

「(√2)、(√3)...の数値を表示するプログラムを書きなさい」という問題に対して
「printf("(√2)、(√3)...");」
のように書くのはおかしいですよね。

計算結果を表示させてください。
階乗の定義をご存じなかったらググってください。
これは簡単なので、答えを書かずに自分で解いたほうがためになると思います。

また、これは再帰関数を勉強するよい機会です。
for文などの方が最初わかりやすいでしょうから、まずfor文などのループ文で書き、
できたら再帰関数で作ってみてください。

後、
[1] 質問文
 [1.1] 自分が今行いたい事は何か
には、その質問について限定して書いてください。
話す要点を先に言って、人に伝えやすくする為です。
例えば再帰関数について質問する時、
「自分は今クイックソートについて理解したいのです。その為にまず再帰関数を勉強しようと思っています」
のように冒頭にかけば、これから続く文章を読む助けになります。

もし詳しい理由に興味ありましたら、今日の私のブログご覧ください
http://directxq.blog58.fc2.com/

たとえば自分はクイックソートについて質問しようとしているのに冒頭で

[1.1] 自分が今行いたい事は何か
→「今私はバイクのメンテナンスがしたいです」

とか書いても後に続く文章を読む助けにならないのです。
もちろん他の部分で雑談としてお書きになるのは構わないのですが、[1.1]に書く内容は上で説明したことに限定してください。

Re:円の面積について

Posted: 2008年11月22日(土) 05:55
by Dixq (管理人)
こんな時間だからと思ってのんびり書いてたら・・・^^;

×再帰関数で作ってみてください。
○GPGAさんのプログラムを参考にしてください。

訂正しますw

Re:円の面積について

Posted: 2008年11月22日(土) 10:33
by ムンバ
おはようございます。
早速のご解説ありがとうございます。

すみません。私の勘違いでした。
参考書の解答を見てみたら、皆さんの言われてる階乗でした。
(勉強のため、できるだけ解答は見ないようにしてます。)
お恥ずかしい。^^;

boxさん、GPGAさんありがとうございます。

参考書の解答
#include <stdio.h>

int kaijo(int n)
{
	if (n == 0)
		return 1;
	else
		return n * kaijo(n - 1);
}

int main()
{
	int n;

	for (n = 1; n <= 10; n++) 
		printf("%2d! = %d\n", n, kaijo(n));

	return 0;
}
関数が kaijo になってました。^^;

管理人さん、お騒がせしてすみませんでした。
再帰関数は、この章の解説にありましたが結びつきませんでした。
質問させて頂いて良かったです。
言われる様に、もう1度勉強しなおします。

>[1.1]に書く内容は上で説明したことに限定してください。
また日記みたいな事を書いてしまいました。
了解致しました。以後、気をつけます。ごめんなさい。
&寝不足には注意です。w

また見当違いな質問をしてしまうかもしれませんが
その節は、また宜しくお願い致します。
どうもありがとうございました。

Re:円の面積について

Posted: 2008年11月22日(土) 14:31
by lbfuvab
int fact(int n){
	int ret=1;
	while(n)ret*=n--;
	return ret;
}
とかもありですね。

Re:円の面積について

Posted: 2008年11月22日(土) 14:54
by ムンバ
どうもありがとうございます。
勉強させて頂きます!