Определить номер первого из столбцов, содержащих хотя бы один нулевой элемент - Turbo Pascal
Формулировка задачи:
Ребятки всем привет. Помогите пожалуйста,я конечно новенький на форуме,и не очень соображаю в паскале а тут вообще затруднение. Буду развиваться.
Дана целочисленная прямоугольная матрица.
1. Определить номер первого из столбцов, содержащих хотя бы один нулевой элемент.
2. Характеристикой строки целочисленной матрицы назовем сумму ее отрицательных четных элементов. Переставляя строки заданной матрицы, расположить их в соответствии с убыванием характеристик.
Решение задачи: «Определить номер первого из столбцов, содержащих хотя бы один нулевой элемент»
textual
Листинг программы
type TLine = Array[Byte] Of Integer; TArray = Array[Byte] Of TLine; procedure PrintArray(const ar: TArray; const n, m: Byte); var i, j: Byte; begin for i := 0 to n - 1 do begin for j := 0 to m - 1 do Write(ar[i, j]:4); WriteLn; end; WriteLn; end; procedure GenerateArray(var ar: TArray; var n, m: Byte); var i, j: Byte; begin repeat Write('Input n (>0)='); ReadLn(n); until (n > 0); repeat Write('Input m (>0)='); ReadLn(m); until (m > 0); for i := 0 to n - 1 do for j := 0 to m - 1 do ar[i, j] := Random(199) - 99; PrintArray(ar, n, m); end; function FindColumnWithZero(const ar: TArray; const n, m: Byte): Integer; var Result: Integer; //удалить строку при ошибке повторного объявления i, j: Byte; begin Result := -1; j := 0; i := 0; while ((j < m) And (Result = -1)) do begin while ((i < n) And (Result = -1)) do begin if (ar[i, j] = 0) then Result := j else Inc(i); end; Inc(j); end; FindColumnWithZero := Result; end; function SumNegative(const l: TLine; const m: Byte): Integer; var Result: Integer; //удалить строку при ошибке повторного объявления j: Byte; begin Result := 0; for j := 0 to m - 1 do if (l[j] < 0) then Inc(Result, l[j]); SumNegative := Result; end; procedure Sort(var ar: TArray; const n, m: Byte); var i, j: Byte; sums: TLine; procedure SwapLines(var x, y: TLine; var xx, yy: Integer); var z: TLine; zz: Integer; begin z := x; zz := xx; x := y; xx := yy; y := z; yy := zz; end; begin for i := 0 to n - 1 do sums[i] := SumNegative(ar[i], m); for i := 0 to n - 2 do for j := i + 1 to n - 1 do if (sums[i] < sums[j]) then SwapLines(ar[i], ar[j], sums[i], sums[j]); PrintArray(ar, n, m); end; var ar: TArray; n, m: Byte; ans: Integer; begin Randomize(); GenerateArray(ar, n, m); ans := FindColumnWithZero(ar, n, m); if (ans <> -1) then WriteLn('First column with zero: ', ans) else WriteLn('No one zero element!'); Sort(ar, n, m); end.
Объяснение кода листинга программы
Этот код написан на Turbo Pascal и решает задачу определения номера первого столбца, содержащего хотя бы один нулевой элемент в массиве. Вот список действий, представленный в виде циклов и функций:
- В функции
GenerateArray
создается массивar
, заполненный случайными числами от 0 до 99. Затем вызывается функцияPrintArray
, которая печатает содержимое массива. - Функция
FindColumnWithZero
ищет первый столбец с хотя бы одним нулевым элементом. Она возвращает номер этого столбца, если такой столбец найден, и -1, если нет. - Функция
SumNegative
суммирует все отрицательные элементы в заданном столбце. - В функции
Sort
вызывается функцияSwapLines
, которая меняет местами элементы двух строк. Затем массивar
сортируется по возрастанию. - В основной части кода сначала генерируется случайный массив, затем находится первый столбец с хотя бы одним нулевым элементом, затем этот столбец сортируется, и наконец выводится результат.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д