2

以下は BASIC でのプログラム例です。マークされた条件が真でない場合、この関数が何を返すか教えてもらえますか? プログラムを C++ に移植する必要があり、それを理解する必要があります。私は基本的な知識がありません - 簡単な質問でご容赦ください。

FUNCTION CheckPoss (u)
  tot = tot + 1
  f = 0
  SELECT CASE u
    CASE 2
      f = f + CheckIntersection(1, 3, 2, 1)     'A
    CASE 3
      f = f + CheckIntersection(2, 3, 3, 1)     'B
  END SELECT 
  IF f = 0 THEN        <============== This condition if true, 
    CheckPoss = 1      <==============     then return value is 1 
    IF u = 9 THEN
      PrintSolution
    END IF
  END IF
END FUNCTION
4

2 に答える 2

2

これは悪いプログラミングの良い例です。最初に、この関数で不明なグローバル変数が変更されます。「トータル=トータル+1」!2 行目の "F" は、別の未知のグローバル変数に "0" が割り当てられています。それとも、この変数が使用される唯一の場所ですか? その場合、ここで暗黙的に宣言されたバリアントです。宣言するには、dim を使用します。これを行うことは基本的に合法です。グローバルは、次のように関数に引数として渡す必要があります。

function CheckPoss(u as integer, tot as integer) as integer
dim f as integer
f=0

入力と出力が明確であり、すべての変数の割り当てが関数に渡された引数を介して行われる必要があるため、これはすべて良い習慣に関するものです。戻り値の型も宣言されていません。これはビジュアルベーシックですか?それとも古い基本ですか?とにかく、戻り値の型は、ビジュアル ベーシックの場合はバリアントです。古い基本は整数型になります。

条件が満たされない場合、この関数からの出力はほとんどの場合ゼロになります。それもコードで明確にする必要がありますが、そのままでは明確ではありません。なぜあなたが尋ねるのか理解しています。このコードが実際のプログラムから来ていることに驚いています。

あなたのプロジェクトで頑張ってください!

于 2013-09-25T10:40:05.447 に答える
1

この関数が何をするのか正確にはわかりません。

VB.net では、関数は次の構造に従います。

Public function CheckPoss(Byval u as integer)
     ...       ' Just commands
     return u  ' Or other variable
end function

「return」コマンドが存在しない場合、関数の戻り値は「null」文字になります。

C では、関数は次のようになります。

int CheckPoss(int u){
  tot++; // Increment tot variable (need be declared)
  int f = 0;
  switch(u){
      case 2:
            f += CheckIntersection(1, 3, 2, 1); // A
            break;
      case 3:
            f += CheckIntersection(2, 3, 3, 1); // B
            break;
  }
  if (f == 0){
        if (u == 9){
             PrintSolution();
        }
        return 1;
  }
}

return コマンドは、この関数の最後のコマンドである必要があります。f != 0 の場合、関数はゴミ (何らかの値または文字) を返さなければなりません。

私の提案は次のとおりです。
int CheckPoss(int u){
  tot++; // I think that this must count how times you call this function
  int f;
  if(u == 2){
    f = CheckIntersection(1, 3, 2, 1); // A
  }else if(u == 3){
    f = CheckIntersection(2, 3, 3, 1); // B
  }else{
    f = 1; // Case else
  }
  if (f == 0){
    if (u == 9)
      PrintSolution();
    return 1;
  }
}

于 2013-10-16T04:01:41.330 に答える