- ベストアンサー
メインルーチンとサブルーチンについて
- メインルーチンとサブルーチンについてご教授ください。例を示していただきたいです。
- また、以下のURLのコードではなぜメインルーチンしか使っていないのでしょうか?ご教授ください。
- URLからのコードの意味についても教えてください。
- みんなの回答 (9)
- 専門家の回答
質問者が選んだベストアンサー
>160のRETURNはどこに行くのでしょうか? サブルーチンを呼び出した"GOSUB 110"の直後へ戻ります。 実行順序を行番号で示すと以下のようになります。 10→20(GOSUB)→ 110→140("奇数"とPRINT)→160(RETURN)→ 30→40(GOSUB)→ 110→120("偶数"とPRINT)→160(RETURN)→ 50(ここで実行終了)
その他の回答 (8)
- _kappe_
- ベストアンサー率68% (1583/2308)
>そのGOSUBとRETURNは、どうやって使うのでしょうか? 「BASIC GOSUB RETURN 使い方」でネット検索すればいくらでもサンプルが出てきます。ただし、BASICは方言が激しいのでどのBASICを対象とするかによって書き方が違います。 簡単な例を挙げておきます。変数Nに整数を入れてから呼ぶと、Nが偶数か奇数かをPRINTするサブルーチンです。 10 N=3 20 GOSUB 110 30 N=10 40 GOSUB 110 50 END 100 REM Nが偶数か奇数かをPRINTするサブルーチン 110 IF MOD(N, 2) = 0 THEN 120 PRINT "偶数" 130 ELSE 140 PRINT "奇数" 150 END IF 160 RETURN
- _kappe_
- ベストアンサー率68% (1583/2308)
>なぜ以下のURLでメインルーチンしか使っていないと言えるのでしょうか? リンク先のBASICプログラムにはGOSUB・RETURNがないからです。古いBASICの場合は、GOSUBでサブルーチンを呼び出し、サブルーチンからRETURNで戻ります。 回答No.6のprintf()の場合と同じようにMOD()やPRINTをサブルーチンと見なすことも不可能ではありませんが、そういうことを言う人はあまりいないと思います。 http://codepad.org/Oxfd5gz9の変換元っぽいですが、BASICでしたか。
補足
そのGOSUBとRETURNは、どうやって使うのでしょうか?ご教授下さい。すみません。
- _kappe_
- ベストアンサー率68% (1583/2308)
>なぜ、3だと言えるのでしょうか? ある程度のC言語の知識を持っている人がプログラムを読めばそうなることは予想できますし、実際にプログラムを実行してもprintf("%d\n",i+2);によって"3"が出力されるのを見ることができます。 >なぜ、出力が3になるのでしょうか? 逆にお尋ねしますが、printf("%d\n",i+2);の出力結果が"3"でないとしたら何が出力されると思っていますか? その辺を突き詰めていけば質問者さんが理解できていない部分が明確になるかもしれません。 main()の中の変数iの値はi=1;で初期化された後、printf("%d\n",i+2);を実行する段階まで変化していません。iの値が1のままなので当然i+2の値は3であり、printf()によって"3"が出力されます。 >sub 1 のiとmain ()のi は違う変数なのですよね? そうです。だから、sub_1()の中の変数iの値が++iによって2に変化してもmain()の中の変数iの値はその影響を受けず1のままなのです。 >サブルーチンとメインルーチンを使うものの例としてどんなのがあるのでしょうか? ちょっと見方を変えるとhttp://codepad.org/Oxfd5gz9のプログラムだってサブルーチンを使っているプログラムです。printf()というサブルーチンを使っています。printf()の定義が見えないところにある(C言語の標準機能として用意されているので、プログラマーは気にしなくていい)だけです。
- _kappe_
- ベストアンサー率68% (1583/2308)
>++iとは、どこでしょうか? sub_1()の中にprintf("%d\n",++i);という行があります。その++iのことです。 このprintf()で出力された結果が"2"なので、ここの変数iの値は++によって1から2に変わったことが分かります。 「++って何?」と思った場合はC言語の入門書を読んでください。 >main ()のほうのiの値は、1のままであることを示すとはどういうことでしょうか? main()の中のprintf("%d\n",i+2);の行で出力された結果が"3"でした。i+2の値が3なので、こちらのiの値はこの時点で1であることが分かります。 >末尾の}が欠落とは、どこの末尾でしょうか? 質問文にはreturn 0;の次の行に}がありません。 元の質問の回答No.8にはちゃんと}があります。
お礼
main()の中のprintf("%d\n",i+2);の行で出力された結果が"3"でした。なぜ、3だと言えるのでしょうか?ご教授下さい。すみませんが。なぜ、出力が3になるのでしょうか?sub 1 のiとmain ()のi は違う変数なのですよね?
補足
サブルーチンとメインルーチンを使うものの例としてどんなのがあるのでしょうか?後、メインルーチンしか使っていない理由がやっぱりよく分かりません。ご教授下さい。すみませんが。メインルーチン単体で使う場合とそうでない場合の違いとは何なのでしょうか?
- _kappe_
- ベストアンサー率68% (1583/2308)
質問文が分かりにくいです。 先頭の「これについてご教授ください。」の「これ」は何を指すのでしょうか。 >以下のURL、はなぜ、メンルーチンしか使っていないのでしょうか?ご教授下さい。 >Link: http://codepad.org/Oxfd5gz9 プログラムを書いた人が、サブルーチンを作る必要性を感じなかったからだと思います。考えられる理由の例を挙げておきます。 ・main()関数内の複数の場所で同じ処理を繰り返していればそれをサブルーチンとして切り分けるべきだが、そのような部分がない ・main()関数は54行で、サブルーチンを分けたくなるほど読みにくい長さというわけではない(このあたりの感覚は人によって異なります) 算法1とか算法2というコメントが見えるので、何かの本や教材に書かれている内容をプログラム化したものだろうかと想像できます。しかし、gotoを多用していて教科書的には良いプログラムではありません。あまり参考にしないほうがいいでしょう。 >これは、どう言う意味になるのでしょうか? sub_1()を使っているプログラムのほうは、特に意味のあるプログラムではありません。main()の中の変数iとsub_1()の中の変数iは名前が同じであっても別の変数であって、sub_1()の中の++iで変数の値を変更しても、main()のほうのiの値は変わらず1のままであることを示すための例だと思います。 末尾の}が欠落しているのを直して実行すると 1 2 3 という出力結果が得られます。このうち"2"はsub_1()内のprintf()で出力されたもの、"1"と"3"はmain()内の2ヶ所のprintf()で出力されたものです。
補足
sub_1()の中の++iで変数の値を変更しても、main()のほうのiの値は変わらず1のままであることを示すための例だと思います。 末尾の}が欠落しているのを直して実行すると ++iとは、どこでしょうか? main ()のほうのiの値は、1のままであることを示すとはどういうことでしょうか?それぞれどこのことか、何行目の所かご教授下さい。すみませんが。 また、末尾の}が欠落とは、どこの末尾でしょうか?これについてもご教授下さい。
- BuriBuri4
- ベストアンサー率28% (150/525)
サブルーチン sub_1 をメインルーチンから呼び出してますから サブルーチンとメインルーチンが使われています。 やってる事は値渡しされた変数のサブルーチン内での変更が呼び出し元の変数に影響を与えない事を確認するテストです。
補足
Link: http://codepad.org/Oxfd5gz9 で、#include<stdio.h> void sub_1(int i){ printf("%d\n",++i); } int main(void){ int i = 1; printf("%d\n",i); sub_1(i); printf("%d\n",i+2); return 0; これについてご教授下さい。すみませんが。これの意味は、どういう意味でしょうか?
- asuncion
- ベストアンサー率33% (2127/6289)
とりあえず メインルーチン サブルーチン あたりで検索して、各々が何をしているかを 勉強してみてください。 現状では、だれがどんなサンプルコードを提示しても 「これじゃわからん。例を示せ」となりそうで、 らちがあきません。
- asuncion
- ベストアンサー率33% (2127/6289)
>後、以下のURL、はなぜ、メンルーチンしか使っていないのでしょうか? 使い捨てのプログラムで、作者が関数を分割する必要性を 感じなかったからでは? 推測。 あと、今回の提示コードの中身を知るには、 C言語の最低限の素養が必要です。 いつかの投稿でC言語の知識は皆無、とあったみたいなので、 まずは文法を覚えることから始めては?もし興味があるなら。
補足
サブルーチンを使う時ってどんな時なのでしょうか?プログラムと、その意味についてご教授下さい。すみませんが。
補足
160のRETURNはどこに行くのでしょうか?ご教授下さい。すみませんが。