Indeksowanie tablicy przekazanej do funkcji.

0

Mam coś takiego:

TYPE
  Table = RECORD
    NumberOfBalls, NumberOfColours, NumberOfRounds, Round: Word;
    Board: ARRAY[1..12, 1..10] OF Word;
    Code: ARRAY[1..5] OF Word
  END;

[...]

PROCEDURE CheckCode(VAR T: Table; VAR C: ARRAY OF Word);
VAR
  i, j: Integer;
  x, o: Integer;
BEGIN
  x := 0;
  o := 0;
  FOR i := 1 TO T.NumberOfBalls DO
    FOR j := 0 TO T.NumberOfBalls - 1 DO
      IF C[j] = T.Code[i] THEN
      BEGIN
        IF i  = j + 1 THEN
        BEGIN
          inc(x);
          C[j] := 0;
          BREAK
        END
        ELSE
        BEGIN
          inc(o);
          C[j] := 0;
          BREAK
        END;
      END;
  WriteLn('x: ', x, ',o: ', o)
END; 

[...]

Tablica jest indeksowana od wartości 0, natomiast tablica, ale w rekordzie od wartości 1. Denerwujące trochę. To jest cecha języka Pascal, tak? Można zmienić jakąś coś gdzieś, by obie tablice były indeksowane od wartości 1?

2

Czytam to któryś raz i zastanawiam się o co Tobie chodzi? Przecież tablice dynamiczne są zawsze indeksowane od zera. Jakoś to programistom nie przeszkadza. A to że tablica O STAŁEJ WIELKOŚCI w tym Twoim rekordzie, jest indeksowana od jeden to tak sobie założyłeś kodem, to tak masz.

I kto Tobie w ogóle takich bzdur nagadał, że to koniecznośc przy rekordach? Poczytaj lepiej kursy z podstawami. Posumowując. Należało by zmienić albo deklaracje tablicy/funkcji lub sam kod dla pętli i tyle.

1
PROCEDURE CheckCode(VAR T: Table; VAR C: ARRAY OF Word);

Tablica C będzie indeksowana od zera.
Jeśli rozmiar tablicy jest znany, możesz zdefiniować osobny typ:

type TTable = array[1..100] of word;
...
PROCEDURE CheckCode(VAR T: Table; VAR C: TTable);

Jeśli rozmiar tablicy nie jest znany w momencie kompilacji, tablica musi być od zera.

Przecież tablice dynamiczne są zawsze indeksowane od zera
To akurat jest „tablica otwarta” (open array) a nie dynamiczna (dynamic array).

1

A nie lepiej dać Low i High i nie przejmować się jak jest indeksowana tablica?

0

Może i można. Ale może w NumberOfBalls, nie zawsze jest High(Code). Dlatego za pewne pytający tak "kombinuje".

1 użytkowników online, w tym zalogowanych: 0, gości: 1