Jak w najprostszy sposób sprawdzić, czy w tablicy dwuwymiarowej jest ułożonych w rzędzie lub po skosie przykładowo 5 jedynek?
0
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.