• 締切済み

ルーチンとライブラリについて。

プログラムがあって、ABCBCDが、あってこのプログラム全体を、メインルーチン、BCをEとしてまとめたものを、サブルーチンで、AやDをルーチンとなっていますが、 状況によって(別プログラム)で 考えた時には、AやDがサブルーチンとなるプログラムは、どんなものでしょうか?教えていただけると助かります。すみません。意味不明でしたら、聞き返してください。教えていただけると助かります。

みんなの回答

回答No.4

> AやDは、ただのルーチンとは言わないのでしょうか? 「サブルーチン」か「ルーチン」かというという分け方をすることはないですね。 サブルーチンの中にだって、特定の範囲をルーチンと呼ぶことはあるのですし。 ただ、前後の文脈として、 サブルーチンにしないでメインルーチンに直接記述してある部分を指して、 ここは「ただのルーチン」と説明してあっても ニュアンスとしては分かるかと思います。(正確な表現ではないにしても)

回答No.3

> Aをメインルーチン置いて、また、a b c b c dとなっていた場合、bとcをサブルーチンになって、a やdはルーチン(ただの)というのは、正しいのでしょうか? メインルーチン内で A E E Dと 記述してあるが Eは、処理BとCを行うサブルーチンの呼び出しになっていて これを実行すると、処理として A B C B C D の順で実行される という解釈で正しいか?という意味なら、それで 正しいです。 もしかして補足でのご質問の内容は、メインルーチン内で A E E D (Eは B とCを行うサブルーチン) と記述したとき  AやDのことを「ルーチン」  Eのことを「サブルーチン」 と呼んでいるのは、正しいのかという意味なのでしょうか? もし、参考にされている記事かなにかで、 AやDのように メインルーチンに直接、処理を記述することを 「ルーチン」と呼んでいるのであれば、 (つまり、サブルーチンの対義語としてルーチンという言葉を使っているのであれば) 一般的な使い方でなく、その文章を書かれた人の独特な言い回しかなと思います。 ルーチンとは 処理の塊のことなので、 サブルーチンの中であっても、アルゴリズム単位で分けて 「このルーチンにバグがある」なんていう言い方もするし、 なので、メインルーチンに直接記述することを、ルーチンとは言わないと思いますよ。 (もしかして、その文書の但し書きで、略語としての「ルーチン」の定義を説明してあるとか、  事前の文章によっては 辻褄あうのかもしれませんが)

zasx1097
質問者

補足

そうです。そういうことです。AやDは、ただのルーチンとは言わないのでしょうか?教えていただけると助かります。すみません。

回答No.2

たとえば、  処理Aが初期化  処理Bがデータの入力  処理Cが計算  処理Dが結果の出力 があって、それを A B C B C D という順に処理を行う必要がある プログラムがあったとき、 処理Bと処理Cを Eというサブルーチンにまとめておけば メインルーチンに A E E Dの順で記述すれば 実際はA B C B C D の処理が行われます。 こうすることで、処理B と 処理Cを わざわざ2回も記述しないですみますし メンテナンスもしやすくなります。 > AやDがサブルーチンとなるプログラムは、どんなものでしょうか? 上記の 処理AをFというサブルーチン にし 処理DをGサブルーチンにしておいて メインルーチンでは、 F E E G と記述することで 実際には、A B C B C Dが処理されるようにするとことも可能です。 処理AやDは、1度し使わない処理ではありますが、 こうするメリットは  機能ごとにサブルーチンに分かれるのでプログラムの見通しがよくなる  チームでプログラム開発するとき、担当者や機能ごとにファイルを分けることができる  他のプログラムでも使えそうなサブルーチンならば、共通ライブラリ化できる といったことでしょう。 演習での例題プログラムとか、小規模なプログラムなら、 わざわざ サブルーチンに分けたりしないこともありますけど、 基本的には、 機能のまとまりでサブルーチン化して 構造化する癖を付けておくと、よいかと思います。

zasx1097
質問者

補足

すみません。Aをメインルーチン置いて、また、a b c b c dとなっていた場合、bとcをサブルーチンになって、a やdはルーチン(ただの)というのは、正しいのでしょうか?教えていただけると助かります。すみません。

  • watanabe04
  • ベストアンサー率18% (295/1597)
回答No.1

メインルーチンは最初に呼び出されて これが終わるとプログラム全体が終わるものを言います。 サブルーチンはメインルーチンやサブルーチンから呼び出されて これが終わると呼び出されたメインルーチンやサブルーチンに帰るものを言います。 ライブラリーはサブルーチンの塊で1つの作業をするものを言います。

関連するQ&A

  • ルーチンとライブラリについて。

    例えば、ABCBCDというプログラムがあって、BCをEというサブルーチンにしておいて、Aは、abcbcdというプログラムになっているので、Aは、メインルーチンといってもいいのでしょうか?Dも同様でしょうか?教えていただけると幸いです。すみません。

  • ルーチンについて。

    例えば、ABCBCDというプログラムがあって、BCをサブルーチン化して、Eとおいて、AEEDとした時、AとDは、ただのルーチンというのでしょうか?それとも、メインルーチンと言ってもいいのでしょうか?教えていただけると幸いです。すみません。

  • ルーチンについて。

    例えば、ABCBCDというプログラムがあって、BCをEというサブルーチンにしておいて、Aは、abcbcdというプログラムになっているので、Aは、ルーチンといってもいいのでしょうか?Dも同様でしょうか?教えていただけると幸いです。すみません。

  • DB切断のタイミング(perlでは切断されない?)

    perlのDBIからMySQLに接続しています。 一連の処理の中で、disconnectをしても実際には暗黙的にプログラム終了時に切断されるので、厳密にはdisconnectは不要とのこと(この認識が間違っていたらご指摘ください)。 実際に試してみたら、切断した後でも同じデータベースハンドルが使用できました。 で、問題は、一連の処理の中でセッションはどのように扱われるのでしょう。切断されることなく同じセッションが使いまわされるのでしょうか? 具体的には、以下のようなことで悩んでいます。 接続→SELECTで必要データを取得→切断 という処理をするサブルーチンがあり、このサブルーチンをメインルーチンから複数回呼び出しています。つまりロジック的には接続と切断を何度も繰り返すような流れになっています。 これはこれで期待通りの動作をするのですが、何度も接続・切断を繰り返すより、メインルーチンで一度だけ接続しておいて、そのデータベースハンドルを引数と一緒にサブルーチンに渡す、そしてメインルーチンで最後に切断、という仕様に変更したほうが、効率が良いのでは、と考えました。 しかし、ロジック的には接続・切断を繰り返しているように見えても、実際にはそれぞれ一回ずつしか行われていないのなら、カプセル化という意味ではサブルーチンの中で接続・切断を書いた方が良さそうに思えます。 実際のところ、終了処理などのタイミングが良く解っていないのがいけないのですが、どなたか、どちらが良いのか、実際に切断がいつ行われるのか、ご存知でしたら、よろしくお願いいたします。

    • ベストアンサー
    • Perl
  • モジュールとなったライブラリ集の利用法

    以下、長文ですみません。 サブルーチンとか関数に関するプログラム集というものがあり、自分でメインを適当に作ってそれらを呼び出して使うというライブラリ集のようなものがあります。昔からあるもので各言語に応じた本なども多数出版されています。 Fortranなのですが、F77の頃は以下のパターンが1つのファイルで延々と1万行ぐらい続くものです。ファイル名:A.f ---------------- 以下の形式のサブルーチン群の羅列 subroutine abc() いろいろ return end ---------------- このようなものは、例えば、 gfortran -c A.f としてリンクなしでコンパイルし、オブジェクトA.oが出力され、 メインプログラム(B.f)から呼び出す場合、 gfortran B.f -o A.o とすると、実行形式が出力されます(ここまで前置きが長くてすみません)。 さて、Fortran95だと状況が一変します。 A.f95だと以下のように変更されています(A.fの後継としてのA.f95)。 ------------- module A interface.... public... private... そしてサブルーチン群 subroutine abc() いろいろ return end subroutine abc end module A ------------ これを gfortran -c A.f95 とリンクなしでコンパイルすると、A.mod, A.oという2つのファイルが出力されます。 その後、メイン(B.f95)の作成ですが、モジュールA.modを読み込むため、 USE A を先頭にし,中身をF95のフォーマットにしています。その後、 gfortran B.f95 -o A.o あるいは gfortran B.f95 とするのですが、B.f95からcallしているA.f95の中のサブルーチンが発見できないというエラーになります。これら(A.f95, B.f95, A.o, A.mod)はすべて同一フォルダ内部のファイルです。 ここで万事休すなのですが、何かFortran95の処理で間違っているところがあるでしょうか。私がFortran95の処方を間違っているからではないかと思いますが、対処方法についてもしご存じでしたら、よろしくお願いします。 ※カテゴリ違いかもですが、ここしか聞く当てがないと思っています。

  • VBのEXEから他のVBのEXEのファンクションを実行したい

    メインルーチンからサブルーチンを呼ぶような イメージで VBののEXE‥(1)(メインプログラム)から 他のVBののEXE‥(2)のファンクションを呼び出して値を返したいのですが どうすればよいでしょうか? (1)はバッチファイルのような感じで コマンドライン引数が○○のとき(2)の××と△△を実行するという内容のもの (2)はマスタを更新するプログラムがマスタごとに いくつかのファンクションにわかれたものです。 説明不足で伝わりにくいかとおもいますが、 よろしくおねがいいたします。

  • awkについて

    vine4.1でg77を使用しています. いままで,ひとつのファイルで g77 -o aaa a.f(サブルーチン含む)などとしていたのですが,サブルーチンが別のファイルにあるとき,どのようなコマンドで実行すればよいでしょうか? 例えば,main.f(メインプログラム),sub.f(サブルーチン)の場合のコンパイルはどのようにすればよいでしょうか?

  • C言語のプログラミングで文字コードを表示する方法を教えてください。

    ファイル名<sample-utf8.txt> 32 30 30 38 e5 b9 b4 35 e6 9c 88 32 37 e6 97 a5 0d 0a ef bc 92 ef bc 90 ef bc 90 ef bc 98 e5 b9 b4 ef bc 95 e6 9c 88 ef bc 92 ef bc 97 e6 97 a5 0d 0a e8 a8 88 e7 ae 97 e6 a9 9f e3 82 b7 e3 82 b9 e3 83 86 e3 83 a0 ef bc 91 テキストメモの文字を表示するプログラムをC言語で作りたいのですがわかりません。どなたかソースコードを教えていただけると助かります。よろしくお願いします。

  • VisualBasicで外サブってできるんですか?

    プログラミングについてですが VBのプログラミングの方法として外部サブルーチンは作れるのでしょうか? 例えば、ある値をメインのプログラムから別のプログラムに投げ 処理した結果をメインのプログラムに投げ返すといった処理が出来ないのでしょうか? COBOLでいう外部サブルーチンのような考えです。(以前COBOLをやっていたので・・・) こういったプログラミング方法がVBでもできるのでしょうか?

  • エクセルで数字を認識して、行をコピーして挿入するマクロ

    エクセルのマクロでこんなことは可能でしょうか? (1)あるセルに(数字)が入ったとき    (そのセルの列は固定) (2)自動的にそのセルの「行」全体をコピーして    その数字が5なら4行、1なら0行 (入力値より-1行) (3)ひとつ下の行に「コピーしたセルの挿入」で行の追加をする 例 列 A.B.C.D.E a.b.c.d.2 "a.b.c.d.2" a.b.c.d.3 "a.b.c.d.3" "a.b.c.d.3" Eの列に2とある場合下に2行-(1行)追加コピー "a.b.c.d.2"の部分。 無理を言いますが可能であれば お詳しい方、ご教授宜しくお願い致します。