Как сделать так,чтобы выводился номер первой/последней строки/столбца в массиве,удовлетворяющих определенному условию? Для таких задач,как:
1.Дана целочисленная матрица размера 5 x 10. Вывести номер ее первой|последней строки|столбца, содержащего равное количество положительных и отрицательных элементов (нулевые элементы не учитываются). Если таких строк|столбцовт нет, то вывести 0.
2.Дана матрица размера 5 x 10. Вывести номер ее первой|последней строки|столбца, содержащего только положительные элементы. Если таких строк|столбцов нет, то вывести 0.
Гость
12.01.2006 15:00
Вот общий случай:
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;
begin writeln(get_index(a, true, _first)); { распечатать номер первой строки, в которой ... } writeln(get_index(a, true, _last)); { распечатать номер последней строки, в которой ... } end.
Tribunal
12.01.2006 15:41
а попроще можно это решить?
Гость
12.01.2006 15:49
А тебе "шашечки, или ехать" (С)? Что ты просила, то я и показал. Будет попроще - для того, чтобы изменить условие придется переписывать почти всю программу. В моем случае достаточно переписать одну функцию.
И потом. Не привыкай писать программы по технологии Copy/Paste (попроще - как раз и будет именно по этому принципу)...
Tribunal
12.01.2006 16:03
я не пишу программы таким образом.просто я не поняла некоторые моменты из твоего варианта.в общем,сам принцип решения мне не понятен.
Гость
12.01.2006 17:17
Говори, что именно непонятно...
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.