• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:必要な変数について)

プログラムの処理で必要な変数とは?初心者のコツとは?

mokichi3216の回答

  • ベストアンサー
回答No.4

 「状況によって変化するので、ある時点での値を記憶しておかないとプログラムが機能しなくなってしまうもの」があったら、それを変数として準備しなければならないと思います。この「状況によって変化するので」と「ある時点での値を記憶しておかないと」いう部分が重要です。そうでないものは、必ずしも変数を定義する必要はありません。これが変数を設置する最低ラインの条件です。変数を決めるのにコツはありません。きちんと変数を定義していないとプログラムが動かないわけですから。  でも質問者様が意図されている「コツ」はそういうものでは無いですよね。。。  私は思う「コツ」の一つは、質問文中に例として挙げられている「パラメータ」を上手に使うことと関連していると思います。「パラメータ」も、状況によって異なる値が入る性質のものです。  例えばの話で、中学校でやった二次関数を例に出します。 x^2 + 3x + 1 この場合、xが変数と呼ばれます。xをどんどん変えていくと放物線が描ける式です。「簡単すぎるよ」と思うかも知れませんが、ちょっと待ってください。  x^2で使われているxと、3xで使われているxは同じ値ですか? もし違っていたら、この二次関数は正しく計算できません。言い換えれば、「xは変数でなければならない」ということになります。「状況によって変化するので」と「ある時点での値を記憶しておかないと」が重要だ、というのはこういうことです。  この式では、x^2の係数1とxの係数3、それから切片1は決まってしまっています。これらは変数ではありません。プログラム上でも定数として扱うことができます。 ですが、プログラムの目的を「任意の係数と切片をもった二次関数を計算する」と変えて、汎用性を持たせたときには、先ほどの式は、 ax^2 + bx + c  と書き換えられます。このa,b,cを「パラメータ」という訳です。  人間が見れば、xとa,b,cとでは使われている目的が違うと言うことは一目瞭然なのですが、プログラム上ではxとa,b,cとは区別無く「変数」として扱うことになります。 というわけで、私の考えるコツの一つは「必要最低限の変数のほかに、どの値を変数(=パラメータ)とすれば処理に汎用性を与えられるか」ということです。  他の人のプログラムを読みながら勉強しているということなので、「なぜこの変数は定義されなければならなかったのか」「絶対に必要な変数なのか、意外とそうでもないのか」という視点で見てみてはどうでしょうか。

ymoshimoshi
質問者

お礼

分かりやすく丁寧に教えていただきまして、ありがとうございました。

関連するQ&A

  • 変数のパターン処理

    配列ではありませんが次のような番号がついた変数に連番の値を入れる処理をしたいときどうするのが一番賢いやり方でしょうか $parameter1="taro1号"; $parameter2="taro2号"; $parameter3="taro3号"; $parameter4="taro4号"; … $parameter100="taro100号"; for文を使ったりして、もっとスッキリ表すこととかできないでしょうか? そのときの考え方やヒントを教えてほしいです

    • ベストアンサー
    • PHP
  • インスタンス変数の値の保持に関して

    お世話になります。現在Rubyのプログラムを生成しております。 CSVを出力加工するプログラムで、処理の流れは以下のとおりです。 1) 処理対象となるCSVファイルより、値を1つずつ取り出す  records = Array.new(1)  test_field_1 = PARAMETER.new(records[1].to_s)  test_field_2 = PARAMETER.new(records[2].to_s)  ...  ... 2) initializeメソッドへ渡し、インスタンス変数「@parameter」   へ上書きし渡す。   def initialize(p)     @parameter = p   end 3) 出力時に(オブジェクト名.メソッド名)にて、メソッド処理を   行う。   printf(test_field_1.TEST_FIELD_1)   printf(test_field_2.TEST_FIELD_2)  ...  ... 概ねの処理は、これで解決できるのですが、一箇所だけ前パラメータ 値を保持させたまま、次のパラメータを処理させたいのです。 具体的に申し上げますと、 1) test_field_100 = PARAMETER.new(records[100].to_i)   def TEST_FIELD_100     @parameter = @parameter / 100   end  ⇒ ここの@parameterの値を保持したまま、次のメソッドの処理を    行いたいのです。 うまいプログラムの書き方があれば、ご教示頂ければ助かります。 よろしくお願いいたします。

  • 確率変数

    X~N(30,6^2) Y~N(20,4^2)である変数X,Yがあり、互いに独立とする。 確率変数3X-13の取る値が確率変数6Y+17のとるあたい以上となる確率を求めなさい。 という問題がどのような流れで解いていったらいいのか分かりません。 どなたか計算の流れを教えてください。 お願いします。

  • 従属変数yと独立変数xを用意します。

    従属変数yと独立変数xを用意します。 xの2乗という演算を行い、その結果をyに格納します。 このときyが非負となるxの条件何か? またyが非正となるxの条件は何か? 算数や数学の初歩的なレベルで回答をお願いします。 質問者のレベルをいくつか想定して回答もらえると嬉しいです。

  • メンバ変数に関して

    現在、C++にてプログラム作成しております。 1点プログラミングを行っている中で疑問になった点があります。 アイデア・方法等があれば教えて頂けると幸いです。 現在、メンバ変数として配列を定義したプログラムを作成しております。 そのメンバ変数を同クラス内のたくさんのメソッドから呼び出して処理を行っているのですが、そのメンバ変数の配列数を固定配列数ではなく、可変な配列数にしたいと考えております。 プログラムの実行後に取得した値をメンバ変数の配列数にしたいのです。 このように、メンバ変数の配列数の可変可を実施することは可能でしょうか?

  • エクセルVBA 変数の値を別の変数に格納するには?

    Xという変数に格納した値を Y1,Y2,Y3という変数にいれて Y値を操作するという作業をすることが目的です。 最初は Y1 = X としてみましたがうまくいかず、苦し紛れに Worksheets(1).Cells(1, 1) = X Y1 = Worksheets(1).Cells(1, 1) Y2 = Worksheets(1).Cells(1, 1) Y3 = Worksheets(1).Cells(1, 1) X値をいったんセルにいれて そこからY値をとるという われながらなかなかセンスのない処理をしています。 だれか美しいコードを教えてください。

  • グローバル変数について

    言語:Visual c++ 2008 Express Edition OS:win xp pro Win用イベント処理から呼ばれるプログラムをコンパイルすると以下のメッセージが表示される。 グローバル変数、静的変数、または gc ヒープのオブジェクトを参照しているネイティブ型のメンバを宣言することはできません。 プログラムの中で、1次元の配列として以下のように array<System::String ^> ^output = gcnew array<String^>(MAX_PAT_LEN); // OUTPUT Table とグローバル変数を定義している。 関数aの中で position[cnt][0] = i - output[ state]->Length +1 ; /* 位置 */ position[cnt][1] = output[ state]->Length ; /* パターン長さ*/ とか参照して、 関数bの中で output[ state] = gcnew String( reinterpret_cast<char*>(pat) ) ;/* パターンの設定*/ とか設定しているだけなんです。 最上位の関数で確保して,パラメタで渡してもいいんですが、最上位と目的の関数にある途中の関数にパラメタを追加しなければならないので、大変です。 どうすればいいか,分かる方がおりましたら教えて下さい。 よろしくお願いします

  • C#で共有変数の定義をするには

    C#で共有変数の定義をするには、どうしたらよいでしょうか。具体的には、起動パラメータで、任意の文字列(3~4バイト)を渡して、C#アプリケーションを、起動し、プログラムの任意の場所で、そのパラメータを参照したいと考えています。起動パラメータの受け取りは、できるのですが、そのパラメータを、プログラムのどこからも参照できる領域(ここの定義方法が不明)に格納するには、どうしたらよいでしょうか。(2重起動を許す前提です。実行時に1つの目のプログラムにはパラメータ"XYZ"を渡し、2つ目のプログラムを起動時にはパラメータ"ABCD"を渡し、その値により、プログラムの動作を制御したいと思っています) Windows-xp visual-studio2008 C#でwindowsアプリケーションを作成しています。

  • RPGのプログラム感のパラメーター

    サブプロにパラメーターを渡し、処理をさせたいのですが、 サブプロは曜日計算をさせるもので、 パラメーターはA(4桁の西暦),B(2桁の月),C(2桁の日付)の変数で、 それぞれ桁数が4,2,2小数点桁数はすべて0です。 この3つを渡し、処理をさせWEEKという変数に曜日を算出させ、元のプログラムにその値を返したいのですが、受け渡しと値の戻し方がわかりません。 受け渡し側のパラメーターの宣言の仕方、CALLの仕方、WEEKの値の受け取り方 受け渡される側のパラメータの宣言の仕方、値の戻し方を教えてください。 よろしくお願い致します。

  • バッチファイルの変数をパラメーター化

    お世話様です。 WindowsXP環境に下記バッチファイルがあります。 バッチコード内は以下の通りです。 ------------------------------------------------ set TARGET_FILE=test.txt ------------------------------------------------ この【TARGET_FILE】という変数内に格納されている【test.txt】という値を パラメーターとしてあるVBS内の変数Aがそれを受け取って処理をする・・・。 という事は可能でしょうか? 上記バッチは数種類あり、【TARGET_FILE】変数内の値がそれぞれ違います。 VBSコード内は以下の通りです。 ------------------------------------------------ Option Explicit Dim FILE FILE = ○○○←ここに上記バッチ内の【TARGET_FILE】変数の値を受け取る。 MsgBox FILE ------------------------------------------------ 各バッチは上記VBSで実行したいのです。 Msgbox程度の処理は当然バッチでも可能ですが、何個もVBSを作成するのは厳しいので、 パラメーターが可能であれば、このVBS1個で済みます。 ご存知の方がおりましたら、お知恵を拝借しても宜しいでしょうか? 何卒宜しくお願い致します。