• ベストアンサー

プログラムの手法について

プログラム初心者です。同僚の書いたVBAのプログラムを勉強のために見ていました。彼のプログラムは X=-1 関数1 ・・・・・関数の処理 X=1 関数1終 もしX=1じゃなければエラー処理へ。 もしX=1ならばプログラムは続く。 といった内容です。 関数直前で変数に値を持たして、関数脱出後にその変数が変わっていなければエラー処理へといった手法はよく使われるんでしょうか?自分はそんな処理の仕方をおもったことすらなかったので、そんな手法があるんだ。それって一般的なのかな?と思って質問させて頂きました。お願いいたします。

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

  • ベストアンサー
  • D-Matsu
  • ベストアンサー率45% (1080/2394)
回答No.2

一つの関数内で起こったエラー状態を、その関数でのみ有効な変数(ローカル変数)で保持して制御する、というのはよくある手法です。 が、質問にあるようなものは#1でも言われている通り「関数の戻り値で制御する」のが普通です。 というかグローバル変数自体「滅多なことでは使わない」ように気をつける類のものですが。

mellow91
質問者

お礼

ご回答ありがとうございます!!

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

その他の回答 (2)

  • mpro-gram
  • ベストアンサー率74% (170/228)
回答No.3

それは、変数にlocalとglobalの区別がなかったN88BASIC時代の書き方ですね。 N88BASICでは、関数1とあるのは単にひと塊のサブルーチン処理の開始点マーカーで、xを引数兼返値用の変数につかうので、処理構造がスパゲッティになりやすかったです。 いまでも、activeBasicというwindows上でN88BASICを動作させるアプリもあるけど。 関数構造が作れて、変数にlocalとglobalの区別がある言語ではあんまりまねしない方がいいと思います。

mellow91
質問者

お礼

ありがとうございます!

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

グローバル変数でエラー制御…なんてのは普通はやらない…かと。 # まぁ、WindowsのGetLastError()はある意味グローバル変数か…とも取れますが。 関数なのですから、戻り値とか使うのが一般的でしょう。 ネストされていたり、関数コールが深かったりするとグローバル変数では処理できないでしょう。

mellow91
質問者

お礼

ご回答ありがとうございます!!

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

関連するQ&A

  • プログラムの組み方が分かりません。

    ある課題で以下の問題が出題されました。 >>>> 2つのint型変数x,yにキーボードから値を入力し、その大小を判定する関数funcを作成せよ。この課題では、大きいと判定された数が代入された変数のアドレスがmain関数に戻されるものとする。 ============ #include<stdio.h> int *func(int *a,int *b) { /* 2つの値の大小判定を行い、アドレスを返す */ } main(void) { int x, y, *z; /* 変数 x,yにキーボードからデータを入力する */ /* 関数funcの呼び出し */ /* 変数zを用いて値の出力を行う */ } ============ <<<< 2行目の*funcというように、関数の頭に*が付くプログラムは初めてで、 どういう意味かもさっぱりわかりません。 それも含め、この問題はどういう風解けばいいのか、教えてください。 お願いします。

  • 多変数関数の最小値を求めるプログラム

    複雑な関数の最小値を求めるためのプログラムを製作しています。 4つの独立な変数からなる関数を最小にする変数を探し出したいのですが、 効率の良いプログラムがなかなか作れません。 これまで試してみたのは、まずある適当な変数の組み合わせを任意に決め、 それを基準にそこから変数を少しだけずらしたとき、 関数の値が元よりも小さくなったら、ずらした変数を新たな基準として より小さな関数値になる変数を探していく…… というものですが、どうも関数が複雑な曲線を描いているらしく、 極値を数多く持っているようで、この手法ではすぐ極値につかまってしまい、 最小値にたどりつけません。 結局、変数の取りうる組み合わせを全てしらみつぶしに調べる方法にしたのですが、 充分な精度をもたせるためには膨大な計算量が必要となってしまいまったく実用的でありません。 このような多変数関数の最小値を求めるために有効なアルゴリズムはありませんでしょうか?

  • 3つほどプログラムをおしえてください。

    (1)100までの整数をいくつか入力し、10刻みでの個数を表示し、負の数が入力されると整数の入力を終わるプログラムです。各範囲の個数は配列に格納する。 実行結果 65 30 21 95 5 -1 0--- 9 : 1 10--- 19 : 0 20--- 29 : 1 30--- 39 : 1 40--- 49 : 0 50--- 59 : 0 60--- 69 : 1 70--- 79 : 0 80--- 89 : 0 90---100 : 1 (2)数字の文字列を入力し、その文字列に含まれる各数字(文字)'0','1',~'9'の個数を表示するプログラムの作成。 実行結果 1231234567 0: 0 1: 2 2: 2 3: 2 4: 1 5: 1 6: 1 7: 1 8: 0 9: 0 (3) 変数xは、0~1までの0.01刻みの値(101個)を取るとする。このとき、2次関数 f(x)=3x^2+2x+1の値が2.0<f(x)<3.0となるxの値をの個数を求めるプログラムの作成。ただし、xを引数としf(x)の値を返す関数を作成して、それを使用する。 実行結果 number=21 やってるうちにわけがわからなくなってしまいます。どなたかよろしくおねがいします。

  • 関数を使ったプログラムについてなのですが・・・

    ・変数a,bの内容を入れ換える処理を関数を用いて実行するためのプログラム と ・変数a,bを与えたときa+bとa-bを計算する処理を関数を用いて行い、和と差を表示させるためのプログラム はどう作ればいいか分かりません…。 教えてください。

  • 16進をASCIIコードに変換する手法

    16進をASCIIコードに変換する手法を教えて下さい。 *例 もしchar型変数aに0x0aが入っていたら0x41(大文字にしたい) aの値が1~fどれがきても対応できるようにしたいのですが・・・ if文とかswitchを多用しなくても簡潔に記述できますか?

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

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

  • C言語のStatic変数について

    現在、C言語の勉強しながらゲームプログラムにチャレンジしています。 二つの関数で利用する変数を作りたかったので、Static宣言された変数を容易しました。 ですが、この変数、一度処理が終わると当面使わない変数なのです。 (ただし、処理途中は何度も呼び出されるので値は保持しなければいけません) よって、メモリ上に延々居座られるのが邪魔に思えて仕方ありません。 実際、大したことないだろうとは思うのですが。 このStaticで宣言された変数を、自分の好きなタイミングでメモリ上から解放するような処理はできませんか? もしくはメモリ上に居座ることのない処理の仕方などありましたら、 考え方を教えていただけるとうれしいです。よろしくお願いします。

  • Mathematicaのプログラム

    Mathematicaの以下のプログラムでエラーがでてしまうのですが どこが間違っているのか教えてほしいです f[x_]:=x g[x_,y_]:=Integrate[f[x+y],x] Plot3D[g[x,y],{x,-3,3},{y,-3,3},PlotPoints->200] やりたいことはf(x)=xとしてf(x+y)をxで不定積分しその結果を変数x,yの2変数関数g(x,y)としてPlot3Dで表示したいのですが

  • 見た目が華やかなプログラム

    変数、制御文、関数、構造体くらいまでの基礎を一通り終えたC言語初心者です このレベルの内容を使ってある程度見た目が華やかなプログラムを作りたいと思います。 以前、左上からスタート、右下がゴール、0なら進めて1のマスは進めないという迷路を作って、脱出するまでの最短距離を求めるプログラムを作ってみました。 しかし、入力に時間がかかる上に出力結果が「最短距離は=>X」と出るだけで地味です DOS画面動作なので限界はあるとは思いますが、それでももう少し華やかなものはないでしょうか? 出来れば完成品のソースコードなどがあるとベストです。 宜しくお願いいたします

  • 変数など厳密なプログラムが書きたいのですが、どうすればよいでしょうか?

    PHPで関数の引数に渡すとき、以下のように$aaを$aとしてしまった場合に 関数内の$idは値がありませんが、関数内でこれを検出することができるのでしょうか? Perlなら use strict;とし、my等で定義されていない変数はすべて警告表示されますが、PHPはスルーです。 変数など厳密なプログラムが書きたいのですが、どうすればよいでしょうか? $aa = 1; test($a) function test($id){ ... }

    • ベストアンサー
    • PHP