Jednakowe wartości w rzędzie lub po skosie w tablicy dwuwymiarowej

0

Jak w najprostszy sposób sprawdzić, czy w tablicy dwuwymiarowej jest ułożonych w rzędzie lub po skosie przykładowo 5 jedynek?

1

Możesz to sprawdzić w pętli.

1

Napisz sobie funkcję, która w parametrach przyjmie:

  • tablicę,
  • znak do zliczenia,
  • współrzędne komórki początkowej,
  • przesunięcie w poziomie,
  • przesunięcie w pionie.

W środku tej funkcji napisz pętlę w rodzaju while, która zliczać będzie komórki o zadanych danych oraz inkrementować współrzędne x i y o wartości z dwóch ostatnich parametrów. W ten sposób będziesz mógł użyć jednej funkcji do walidowania wierszy, kolumn i przekątnych, w obu kierunkach.

W Pascalu wyglądałoby to tak:

const
  ARR_SIZE = 5;

type
  TArray2D = array [0 .. ARR_SIZE - 1, 0 .. ARR_SIZE - 1] of Char;

  function CountCells(const AArray: TArray2D; AChar: Char; AX, AY, AStepX, AStepY: Integer): Integer;
  begin
    Result := 0;

    while (AX >= 0) and (AX < ARR_SIZE) and (AY >= 0) and (AY < ARR_SIZE) do
    begin
      if AArray[AX, AY] = AChar then
        Result += 1;

      AX += AStepX;
      AY += AStepY;
    end;
  end;

I teraz przykład wywołania:

// zliczanie jedynek w pierwszym wierszu od góry
Count := CountCells(Array2D, '1', 0, 0, 1, 0);

// zliczanie wykrzykników od lewego dolnego rogu do prawego górnego rogu
Count := CountCells(Array2D, '!', 0, 4, 1, -1);  

I tak dalej.

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