pascalfreepascal

How to use a variable in an array?


I'm using PASCAL for a course i'm doing and i'm having trouble with an assignment, in my program i'm using 2 arrays that uses a variable from a user's input but when i go to run the program it comes up with, Error: Can't evaluate constant expression. The code for the array is:

Var
        x : integer;
        s : array[1..x] of real;
        n : array[1..x] of string[30];

Here x is the user's input, is there a way for an array to go from 1 to x?


Solution

  • If x is a variable, that won't work indeed. The range of a so called static array must be a constant expression, i.e. it must be known at compile time.

    So what you want won't work, as is.

    In FreePascal, you can use dynamic arrays, though. Their lengths can be set and changed at runtime.

    var
      x: Integer;
      s: array of Real;
      n: array of string[30]; // why not just string?
    

    and later:

      x := someUserInput(); // pseudo code!
      SetLength(s, x);
      SetLength(n, x);
    

    You should be aware of the fact that dynamic arrays are 0-based, so your indexes run from 0 up to x - 1. But for the limits of the array, you should rather use Low() and High() instead:

      for q := Low(s) to High(s) do
        // access s[q];
    

    (Low() and High() are not the topic, but just know they can also be used for static arrays, and that they return the actual array bounds -- I always use High and Low for this)