C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[28]: プログラミング表参照方法 [1]


(過去ログ 93 を表示中)

[トピック内 34 記事 (21 - 34 表示)]  << 0 | 1 >>

■55569 / inTopicNo.21)  Re[18]: プログラミング表参照方法
  
□投稿者/ PATIO (68回)-(2010/12/06(Mon) 15:17:50)
コードの話はこっちにおいてといて
考え方の話を。

ユーザーが終わるという意思を示すまで繰り返したい場合のパターン


繰り返し始め(無限ループ)

ユーザー入力待ち(調べたい年)

干支の処理

ユーザー入力待ち(終了確認)

if(ユーザー入力値 == 終了条件)
 break;

繰り返し終わり


これが一番単純です。
ユーザーが終了条件を入力するまで無限ループになります。
入力待ちの部分を一つで済ませるなら、調べたい年の入力時に
ありえない値(例えば、-1)を入力したら終了とする手もあります。
ループを一旦固定で無限ループにしてしまうと考えやすいです。

こういう処理に向いた繰り返しの制御文がfor以外にあるので
そっちを使った方がすっきりするかもしれません。


for文は使い方によっていろいろな使い方が出来るので
うまく使うと短い記述ができたりしますけれど。

引用返信 編集キー/
■55573 / inTopicNo.22)  Re[19]: プログラミング表参照方法
□投稿者/ shu (240回)-(2010/12/06(Mon) 17:00:32)
No55566 (まんりな さん) に返信

失礼しました。

> default:
> printf("入力が正しくありません。\n");
> break;
> }
ここの最後の『}』が余計でした。
引用返信 編集キー/
■55595 / inTopicNo.23)  Re[19]: プログラミング表参照方法
□投稿者/ まんりな (13回)-(2010/12/07(Tue) 12:01:38)
No55569 (PATIO さん) に返信
> 繰り返し始め(無限ループ)
>
> ユーザー入力待ち(調べたい年)
>
> 干支の処理
>
> ユーザー入力待ち(終了確認)
>
> if(ユーザー入力値 == 終了条件)
>  break;
>
> 繰り返し終わり
>
>


なるほど。これならわかりやすいです。いろいろやってみます。
わかりやすく説明していただきありがとうございます。
引用返信 編集キー/
■55598 / inTopicNo.24)  Re[20]: プログラミング表参照方法
□投稿者/ まんりな (14回)-(2010/12/07(Tue) 12:24:14)
今、いろいろなアドバイスを参考にして、作ってみました。けれど「続けますか?」が表示されてはいるのですが、
1、2どちらを入力してもreturn文が使われていないようです。

#include <stdio.h>
void main(void)
{
int tosi,amari,ans;
printf("干支とは、十干十二支を組み合わせたものことをいいます。六十年で干支は一巡します。\n");
	for(ans=1;ans==1;){
	printf("あなたが調べたい年は?\n");//干支調べ
scanf("%d",&tosi);
	amari=(60+(tosi-964))%60;
	switch(amari){
case 0:
		printf("%d年は一番目、甲子(きのえ ね)年です。\n",tosi);
		break;
case 1:
		printf("%d年は二番目、乙丑(きのと うし)年です。\n",tosi);
		break;
case 2:
        printf("%d年は三番目、丙寅(ひのえ とら)年です。\n",tosi);
		break;
・・・・・・・・・・・
・・・・・・・・・・・
case 57:
		printf("%d年は五十八番目、辛酉(かのと とり)年です。\n",tosi);
		break;
case 58:
		printf("%d年は五十九番目、壬戌(みずのえ いぬ)年です。\n",tosi);
		break;
case 59:
		printf("%d年は六十番目、癸亥(みずのと い)年です。\n",tosi);
		break;
default:
printf("入力が正しくありません。\n");
break;
}
printf("続けますか?(yes=1,no=2)\n");
scanf("%d",&ans);
printf("Debug:ans = %d\n",ans);
if(ans==1){
	printf("入力を続けます。\n");
return;
}
else{
	printf("入力を終了します。\n");
}
}
}

どうしたらいいのでしょう?
returnしたらどこにつながっているのかが分からなくなっています。
教えてください!!

引用返信 編集キー/
■55600 / inTopicNo.25)  Re[20]: プログラミング表参照方法
□投稿者/ shu (246回)-(2010/12/07(Tue) 12:36:25)
No55595 (まんりな さん) に返信
> ■No55569 (PATIO さん) に返信
>>繰り返し始め(無限ループ)
>>
>>ユーザー入力待ち(調べたい年)
>>
>>干支の処理
>>
>>ユーザー入力待ち(終了確認)
>>
>>if(ユーザー入力値 == 終了条件)
>> break;
>>
>>繰り返し終わり
>>
>>
>
>
> なるほど。これならわかりやすいです。いろいろやってみます。
> わかりやすく説明していただきありがとうございます。
無限ループからのbreakは便利だけど学校の課題なら使わない方が
いい気がします。授業でどう習ったかによりますが、breakを使わずに
ループ構造を完成させることはプログラミングの勉強になると思います。
社会にでてから便利な方法に頼るのは問題ないと思います。

引用返信 編集キー/
■55601 / inTopicNo.26)  Re[21]: プログラミング表参照方法
□投稿者/ shu (247回)-(2010/12/07(Tue) 12:46:18)
No55598 (まんりな さん) に返信

> printf("続けますか?(yes=1,no=2)\n");
> scanf("%d",&ans);


> printf("Debug:ans = %d\n",ans);
ここで入力した値が表示されるはずですが表示されていますか?

> if(ans==1){
> printf("入力を続けます。\n");
ansが1のときこれは表示されていますか?

> return;
続けるのでreturnはいらない。

> }
> else{
> printf("入力を終了します。\n");
ansが2のとき(1以外のとき)これは表示されていますか?

> }
> }
> }
>

引用返信 編集キー/
■55603 / inTopicNo.27)  Re[22]: プログラミング表参照方法
□投稿者/ まんりな (15回)-(2010/12/07(Tue) 12:55:01)
No55601 (shu さん) に返信
> ■No55598 (まんりな さん) に返信
>
>>printf("続けますか?(yes=1,no=2)\n");
>>scanf("%d",&ans);
>
>
>>printf("Debug:ans = %d\n",ans);
> ここで入力した値が表示されるはずですが表示されていますか?
>
>>if(ans==1){
>> printf("入力を続けます。\n");
> ansが1のときこれは表示されていますか?
>
>>return;
> 続けるのでreturnはいらない。
>
>>}
>>else{
>> printf("入力を終了します。\n");
> ansが2のとき(1以外のとき)これは表示されていますか?
>
>>}
>>}
>>}
で、できました〜〜〜〜!!なるほど、続けるならreturnはいらなかったのですね。勉強になりました!!
本当にありがとうございます。やっと1つできました。あと2つ、頑張ります!!
スーツサイズのファイルを一度作ってみます。わからなくなったらまた質問しますね
引用返信 編集キー/
■55611 / inTopicNo.28)  Re[23]: プログラミング表参照方法
□投稿者/ PATIO (69回)-(2010/12/07(Tue) 15:36:52)
2010/12/07(Tue) 15:47:27 編集(投稿者)
2010/12/07(Tue) 15:41:25 編集(投稿者)

解決がついていないのでちょっと一言。

無限ループを使った方が思考を単純化できると思ったんですが、
まずかったですかねぇ。
まずは無限ループで脱出をbreakとする事で基本的な入力待ちの構造を理解して、
その上で繰り返し制御文を使ってうまくループを終わらせるという方向に持っていった方がいいなと思ったんですよ。

できれば、無限ループでできた事をfor制御文の脱出判定を使ってできるように考えてみて下さい。
無限ループでできたのですから、判定位置が変わるだけで基本的な考え方は変わりません。
プログラムの流れを理解してくださいね。
制御文はプログラムの流れを作るためのものです。
forで繰り返しの流れを作り、breakで中断。
returnで関数を終了。

あと、せっかくVisualC++の開発環境を使っているのですから
デバッガの使い方を覚えましょう。
デバッガを使うとソース上でプログラムの動きを追えるので
とても解りやすくなります。
自分で試しに作って見た物を動きを確かめながら進められるので
デバッガを使えない事情が無いのであれば、ぜひ使い方を覚えて
ください。

ちなみにデバッガが使えないのであれば、
printfを途中に入れまくって動きを追うという方法もあります。
デバッガなんて便利な物が無かった頃はこれでデバッグしてました。

引用返信 編集キー/
■55612 / inTopicNo.29)  Re[24]: プログラミング表参照方法
□投稿者/ shu (250回)-(2010/12/07(Tue) 15:42:06)
No55611 (PATIO さん) に返信
> 解決がついていないのでちょっと一言。
干支は解決したようです。


まんりなさん
後2つあるみたいだけど、ここは解決にしてスレを分けた方がいいかもしれないです。
引用返信 編集キー/
■55616 / inTopicNo.30)  Re[24]: プログラミング表参照方法
□投稿者/ ごう (223回)-(2010/12/07(Tue) 16:13:09)
> あと、せっかくVisualC++の開発環境を使っているのですから
> デバッガの使い方を覚えましょう。

PATIOさんの意見に同意。
デバッガの使い方を覚えると、間違いが自力で早く見つけることができるようになりますよ。

Visual C++ 2008 Express Editionなら、ここが参考になると思います。
(「プログラムのデバッグ実行」の項目)
http://cvwww.ee.ous.ac.jp/vc08prog.html#6


# 当方、大学入学後 最初の半年はVisual Studio使っていたにもかかわらず、デバッガの使い方を教わらなかったなあ・・・
# (よその学校はどうなんだろう、最初のうちは教えないものなのかな?)

引用返信 編集キー/
■55617 / inTopicNo.31)  Re[25]: プログラミング表参照方法
□投稿者/ shu (251回)-(2010/12/07(Tue) 16:22:41)
No55616 (ごう さん) に返信

> # 当方、大学入学後 最初の半年はVisual Studio使っていたにもかかわらず、デバッガの使い方を教わらなかったなあ・・・
> # (よその学校はどうなんだろう、最初のうちは教えないものなのかな?)
プログラムを読む力をつける為ではないでしょうか?
引用返信 編集キー/
■55630 / inTopicNo.32)  Re[26]: プログラミング表参照方法
□投稿者/ ごう (224回)-(2010/12/07(Tue) 22:58:47)
No55617 (shu さん) に返信
> ■No55616 (ごう さん) に返信
>
>># 当方、大学入学後 最初の半年はVisual Studio使っていたにもかかわらず、デバッガの使い方を教わらなかったなあ・・・
>># (よその学校はどうなんだろう、最初のうちは教えないものなのかな?)
> プログラムを読む力をつける為ではないでしょうか?

そういう考え方もあるのですね。ご意見ありがとうございます。

当方も、約10年前、デバッガの存在をまったく知らないうちは、
プログラムが動かせなくなると手も足も出なくなってしまうことが多々ありました。
友達に見てもらうとダメだししてもらえたりするんですけどね。
作っている本人は「これで動く(はず)なのに、どうして?」と結構思い込んでるのでバグの発見がなかなかできないんですよね。

周囲の学生は、この時点で「プログラミングわからない」「つまらない」と挫折する人も結構いました。
せっかく勉強した内容が身につかないなんて、すごくもったいない感じもするんですよね。
デバッガの使い方を教えるタイミングが難しいのかもしれませんが、大事なことだとは思います。
(あまり早すぎるタイミングで教えても、「どんな場面で使用すればいいのか」理解できないだろうし…)
自分の学生時代と重ね合わせて、教えることの難しさを改めて感じ、こちらも勉強になりました。
引用返信 編集キー/
■55651 / inTopicNo.33)  Re[27]: プログラミング表参照方法
□投稿者/ PATIO (70回)-(2010/12/08(Wed) 13:14:43)
2010/12/08(Wed) 13:21:38 編集(投稿者)
2010/12/08(Wed) 13:21:05 編集(投稿者)
2010/12/08(Wed) 13:17:55 編集(投稿者)

デバッガに関しては使ったからといってプログラムを読む力がつかなくなる
と言うのはちょっと違うかなと思います。
デバッガに頼りすぎるとコードを書く前にじっくり考える所が
おろそかになるかもとは思いますが。

プログラムをうまくイメージ出来ないというのは
結局の所、自分が書いたプログラムがどういう風に流れていっているのか
がイメージできない所為だと思うんです。
デバッガを使って実際に自分が書いたコード上で動きを追うことで
その部分が補完されてイメージがしやすくなるんじゃないかなと。

printfをゴリゴリ挟んでコンソール上でデバッグと言うやり方もありますし、
そういうやり方をせざるえないケースも有りますけれど、
そういうやり方に関しても知った上でデバッガを使う分には問題無いと思っています。

私としては自分が書いたソースから実際の動きをイメージできるようになる事が
プログラミングの上達には大いにプラスになると思っているので
デバッガが使える環境なのであれば、実際に使わせて自分のプログラムが
どのように動いているのかを実際に見せた方が良いと思っています。
もちろん、自己解決がしやすくなると言う面からも大いに意味があると思っています。

引用返信 編集キー/
■55655 / inTopicNo.34)  Re[28]: プログラミング表参照方法
□投稿者/ shu (258回)-(2010/12/08(Wed) 13:53:51)
No55651 (PATIO さん) に返信

デバッガについて否定したわけではないのですが、なぜ教えないのだろうという
疑問に対し書きました。

デバッガを使わずに何度も何度もプログラムをよく見ればエラーがなくなるころには
かなりプログラム内容を読んでいることになるかと思った次第です。机上デバッグを
行うことにもつながるのかなと思います。

もちろん開発効率を上げる為にデバッガを使うことは大変よいことだと思います。
便利なものは基礎力がついてから使う方が効果を発揮しやすいのかなと思います。


引用返信 編集キー/

<前の20件
トピック内ページ移動 / << 0 | 1 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -