Manoj Awasthi
Manoj Awasthi

Reputation: 3520

Default return value of a function in BASIC

Following is an example program in BASIC. Can someone tell me what this function returns if the marked condition is not true? I have to port the program to C++ and need to understand it. I have no BASIC knowledge - please bear with simple question.

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

Upvotes: 2

Views: 673

Answers (2)

Mingut
Mingut

Reputation: 101

I don't know exactly that this function do.

On VB.net, the function follow the structure:

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

If not exist the 'return' command, the return of function will be 'null' character.

On C, The function will be:

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;
  }
}

The return command need be the last command of this function. At case f != 0, the function must return trash (some value or character).

My suggestion is:
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;
  }
}

Upvotes: 1

Fastgeek
Fastgeek

Reputation: 19

This is a good example of bad programming. First some unknown global variable is changed in this function. "tot = tot + 1"! Second line "F" is another unknown global variable is assigned "0". Or is this the only place this variable is used? In that case it is a variant implicitly declared here. Use a dim to declare it. It is legal in basic to do this. Globals should be passed as arguments to the function like this:

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

It is all about good practice so the input is clear and output is clear and all variable assignments should be through arguments passed to the function. The return type is not declared either. Is this visual basic? or is it some older basic? Anyway the return type is a variant in case of visual basic. Older basic would be an integer type.

The output from this function will mostly likely be a zero if the condition is not met! That should also be clear in the code and it is not clear as it is, and I understand why you ask. I am amazed this piece of code comes from a working program.

Good luck with your project!

Upvotes: 1

Related Questions