Помощь - Поиск - Пользователи - Календарь
Полная версия: Задачи на вывод номера первой строки в массиве,удовлетворяющей условию...
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
Tribunal
Как сделать так,чтобы выводился номер первой/последней строки/столбца в массиве,удовлетворяющих определенному условию?
Для таких задач,как:

1.Дана целочисленная матрица размера 5 x 10. Вывести номер ее первой|последней строки|столбца, содержащего равное количество положительных и отрицательных элементов (нулевые элементы не учитываются). Если таких строк|столбцовт нет, то вывести 0.

2.Дана матрица размера 5 x 10. Вывести номер ее первой|последней строки|столбца, содержащего только положительные элементы. Если таких строк|столбцов нет, то вывести 0.
Гость
Вот общий случай:
const
rows = 4;
cols = 3;

_first = 1;
_last = -1;

type
matrix =
array[1 .. rows, 1 .. cols] of integer;

{ Это - условие, которое необходимо проверять }
function condition(const mx: matrix;
is_row: boolean; n: integer): boolean;
var i, count: integer;
begin
count := 0;
if is_row then begin
for i := 1 to cols do
if mx[n, i] < 0 then dec(count)
else if mx[n, i] > 0 then inc(count)
end
else begin
for i := 1 to rows do
if mx[i, n] < 0 then dec(count)
else if mx[i, n] > 0 then inc(count);
end;

condition := (count = 0);
end;

function get_index(const mx: matrix;
is_row: boolean; is_first: shortint): integer;
var i: integer;
begin
if is_row then begin
if is_first = _first then i := 1 else i := rows;
while (not condition(mx, is_row, i)) and (i > 0) and (i <= rows) do
inc(i, is_first);
if i > rows then i := 0;
end
else begin
if is_first = _first then i := 1 else i := cols;
while (not condition(mx, is_row, i)) and (i > 0) and (i <= cols) do
inc(i, is_first);
if i > cols then i := 0;
end;

get_index := i
end;

const
a: matrix =
(
(0, 2, -1),
(2, -1, 2),
(0, 2, -1),
(2, -1, 2)
);

begin
writeln(get_index(a, true, _first)); { распечатать номер первой строки, в которой ... }
writeln(get_index(a, true, _last)); { распечатать номер последней строки, в которой ... }
end.
Tribunal
а попроще можно это решить? unsure.gif
Гость
А тебе "шашечки, или ехать" (С)? Что ты просила, то я и показал. Будет попроще - для того, чтобы изменить условие придется переписывать почти всю программу. В моем случае достаточно переписать одну функцию.

И потом. Не привыкай писать программы по технологии Copy/Paste (попроще - как раз и будет именно по этому принципу)...
Tribunal
я не пишу программы таким образом.просто я не поняла некоторые моменты из твоего варианта.в общем,сам принцип решения мне не понятен.
Гость
Говори, что именно непонятно...
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.