• ベストアンサー

メインルーチンとサブルーチンについて。

これについてご教授下さい。例を示していただきたいです。後、以下のURL、はなぜ、メンルーチンしか使っていないのでしょうか?ご教授下さい。 Link: http://codepad.org/Oxfd5gz9

質問者が選んだベストアンサー

  • ベストアンサー
  • OK_WAVE
  • ベストアンサー率17% (22/124)
回答No.8

関数分けが必要な理由は変数の局所化の為です sub_1に渡された変数iはsub_1でしか操作出来ません #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; } 並列処理は同時に変数をいじられると破綻するので局所化します http://www.ncad.co.jp/~komata/c-kouza28.htm クイックソート関数も局所化しないとできません https://www.codereading.com/algo_and_ds/algo/quick_sort.html 小難しく考えないでも色んなソースを書いてれば関数分け理解できますよ

zasx1098
質問者

補足

#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; これは、どう言う意味になるのでしょうか?ご教授下さい。すみませんが。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (7)

  • shiren2
  • ベストアンサー率47% (139/295)
回答No.7

これは量がどうのというより、単に説明用に書いたからだと思いますよ。 普通はプログラミングで、こんなコードは書きません(メインルーチンがどうの以前に、GOTO文を使わない)。 コメントを見る限り、恐らくですが、「別の言語で書かれた問題をCで書き直すとこうなるよ」というサンプルではないでしょうか。

zasx1098
質問者

補足

#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; これは、どう言う意味になるのでしょうか?ご教授下さい。すみませんが。

全文を見る
すると、全ての回答が全文表示されます。
  • OK_WAVE
  • ベストアンサー率17% (22/124)
回答No.6

ソースの書き方は人それぞれお好みでいいですよ URLはgotoを使いメイン関数で制御分けする方法です メイン関数のみで完結するなら関数分けする必要ありません ただ再帰関数や並列処理はメイン関数のみで作るのは困難です 拡張性を求められるライブラリーもメイン関数だけでは出来ません

zasx1098
質問者

補足

サブルーチンを使った関数分けとは、どう言うことでしょうか?ご教授下さい。すみませんが。

全文を見る
すると、全ての回答が全文表示されます。
  • asuncion
  • ベストアンサー率33% (2126/6288)
回答No.5

>メインルーチンだけとはどういうことでしょうか? C言語でいうと、質問者さんが提示された サンプルコードのように、main関数「のみで」 処理が完結しているということです。

zasx1098
質問者

補足

ではなぜ今回のは、メインルーチンだけでも大丈夫なのでしょうか?ご教授下さい。すみませんが。 メインルーチンだけと言える理由は、なんでしょうか?No.1 の方は、たいした量じゃないからと言っていましたが、どのくらいの量だったら、サブルーチンを使うのでしょうか?これについても、 ご教示願います。

全文を見る
すると、全ての回答が全文表示されます。
  • asuncion
  • ベストアンサー率33% (2126/6288)
回答No.4

>これをメインルーチンにするとどうなるのでしょうか? 添付図のとおり、メインとサブに分かれています。 前に投稿したソースコードと、今回の図とを 見比べてください。 ところで、C言語の文法についてはどのくらいご存じなのですか?

zasx1098
質問者

補足

メインルーチンだけとはどういうことでしょうか?C言語については、全くの初めてです。ご教授下さい。すみませんが。

全文を見る
すると、全ての回答が全文表示されます。
  • asuncion
  • ベストアンサー率33% (2126/6288)
回答No.3

C言語ではメインルーチンやサブルーチンという用語は ほとんど使いません。すべて関数です。 以下の例では、main関数からf0, f1, f2の各関数を 呼び出しています。main関数に何でもゴチャゴチャと押し込むのは あまり適切とはいえない設計です。 呼ばれた側であるf0, f1, f2の各関数では、適当な文字列を 出力しています。 #include <stdio.h> void f0(void) { printf("hello, world!\n"); } void f1(void) { printf("Hello, World!\n"); } void f2(void) { printf("HELLO, WORLD!\n"); } int main(void) { f0(); f1(); f2(); return 0; }

zasx1098
質問者

補足

これをメインルーチンにするとどうなるのでしょうか?ご教授下さい。すみませんが。

全文を見る
すると、全ての回答が全文表示されます。
  • t_ohta
  • ベストアンサー率38% (5125/13384)
回答No.2

サブルーチンと言うのは、一連の処理の中で同じ処理を繰り返す場合に、繰り返し行う処理を集約したモノです。 繰り返す回数が少なかったり内容が単純ならワザワザ集約しなくても可読性が高いので、無理に集約する必要は無いと言う事ですね。

zasx1098
質問者

補足

例えば、サブルーチンを使う場合はどの様な場合でしょうか?例を出していただけないでしょうか?ご教授下さい。すみませんが。

全文を見る
すると、全ての回答が全文表示されます。
  • bardfish
  • ベストアンサー率28% (5029/17765)
回答No.1

たいした量じゃないから。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • メインルーチンとサブルーチンについて。

    これについてご教授下さい。例を示していただきたいです。後、以下のURL、はなぜ、メンルーチンしか使っていないのでしょうか?ご教授下さい。 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; これは、どう言う意味になるのでしょうか?ご教授下さい。すみませんが。 このURLからです。 https://sp.okwave.jp/qa/q9852335.html

  • メインルーチンとサブルーチンについて。

    すみません。メインルーチンは、どの言語でもどのプログラムでも必ずあるものなのでしょうか?ご教授頂けると幸いです。すみませんが。

  • メインルーチンについて。

    メインルーチンとは何でしょうか?メインルーチン単体で使う事はあるのでしょうか?ご教授下さい。すみませんが。サブルーチンがない場合は、どうなるのでしょうか?ご教授下さい。すみませんが。

  • このサブルーチン間違っておりませんか?

    以下のサブルーチンを記述したらエラーになります。 どこか間違っておるのでしょうか? 宜しくお願いします。 #------------------------------------------------- sub head { print <<"EOM"; <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <title>メールフォーム</title> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> </head> EOM } #-------------------------------------------------

  • ちょっと複雑なURL分解について

    http://hoge.com/test.php?mode=link&id=3& url=http://hogehoge.com/ (表示上の問題でURLを途中で改行しています) 上記のようなURLを取得($_GET)した場合に、URLを分解して下記の値を得るスクリプトを作成しています。 $mode値:link $id値:3 $url値:http://hogehoge.com/ これだけであれば特に悩む必要はないのですが、問題は$url値に以下のようなデータが与えられた場合です。 http://hoge.com/test.php?mode=link&id=3& url=http://hogehoge.com/index.php?mode=abc&id=123 (表示上の問題でURLを途中で改行しています) このようなURLを取得($_GET)した場合に、以下の値を得るにはどう処理すれば良いのでしょうか。 $mode値:link $id値:3 $url値:http://hogehoge.com/index.php?mode=abc&id=123 どなたか詳しい方がいらっしゃいましたら、ご教授お願い致します。

    • ベストアンサー
    • PHP
  • Javascriptでマウスポインタの画像操作は可能でしょうか?

    教えてください! WinIE6.0でHPを作ってます。 テーブルのセル単位でリンクが出来るように作ろうとしてます。 <td id="link" onMouseover="over_color(*);" onMouseout="out_color(*);" onClick="td_link(*);"></td> とかしておいて、 var link_url = new Array(); link_url[0] = "http://***"; link_url[1] = "http://***";"; link_url[2] = "http://***";"; link_url[3] = "http://***";"; function over_color(no) { link[no].bgColor = "#000000"; } function out_color(no,col) { link[no].bgColor = ""; } function td_link(no) { location.href = link_url[no]; } 上の例ではマウスをセルのせると黒くなり、クリックで指定のURLに飛ぶようになります。一応動きます。 が! マウスポインタが「手」の形にならないんです! あたりまえと言えばあたりまえなんですが…。 やってみて気づいたのですが、これだとクリッカブルであることが非常に分かりづらいんです。 なんとかonMouseoverの処理の中でマウスポインタの表示を制御することは可能でしょうか? (全く他の方法で<td>をクリッカブルにする方法でも構いません!) 教えてください!よろしくお願いいたします!

  • Googleの「リンク元検索(link:http://~~)」の性能が悪いのはなぜ?

    Googleの「リンク元検索(link:http://~~)」の性能が悪いのはなぜ? 一部の検索サイトでは、検索窓に「link:+URL」、具体例では、 link:http://www.amitaj.or.jp/~yamamoto/sumo.htm などと入れることで、そのページにリンクしているサイトを検索できます。 しかし、http://www.google.co.jp/でそれをやっても1件もヒットしません。 上のURLでも、http://www.yahoo.co.jp/では111件もヒットするのですが。 なぜでしょうか?使い方がわるいのでしょうか?

  • バックリンクを取得したい

    バックリンクを取得したい ヤフーで link:URL とすると、URLのバックリンクが取得できると思います。 それをPHPで実現するにはどうすればよいでしょうか? ご存知の方ご教授ください。

    • 締切済み
    • PHP
  • mvコマンドでリネームするときに、長いファイル名の一部だけを変更したい場合の簡単なやり方

    ファイル名として、 long_filename_ver001.tar.gz を long_filename_ver001.tar.gz.org にしたいときなど、 mv long_filename_ver001.tar.gz long_filename_ver001.tar.gz.org と打ち込みますが、 mv long_filename_ver001.tar.gz から、 mv long_filename_ver001.tar.gz long_filename_ver001.tar.gz まで簡単に打ち込むショートカットなどありませんか? まず、 mv ファイル名 ファイル名 と左右のファイル名を同じにして、変更先(右側)のファイル名に.orgをつけたり、Ver002にしたり、と一部だけ修正したいのです。 ※似たようなファイル名がたくさんあるので、TAB補完は使わない方法を探しています。 よろしくお願いいたします。

  • このカスペルスキー本物ですか?

    http://link-web.org/?pid=55616382 随分と安いけれど本物で、買っても大丈夫でしょうか? 何故にこんなに安いんでしょうか?

このQ&Aのポイント
  • 商業施設の喫煙室について問題点があります。
  • 「電子たばこ専用喫煙スペース」とは文字通り電子たばこ専用であり、加熱式タバコは該当しません。
  • さらに「一般喫煙室」や誤解を招く表記についても法的な問題があるか検証が必要です。
回答を見る