Определить номер первого из столбцов, содержащих хотя бы один нулевой элемент - 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 и решает задачу определения номера первого столбца, содержащего хотя бы один нулевой элемент в массиве. Вот список действий, представленный в виде циклов и функций:

  1. В функции GenerateArray создается массив ar, заполненный случайными числами от 0 до 99. Затем вызывается функция PrintArray, которая печатает содержимое массива.
  2. Функция FindColumnWithZero ищет первый столбец с хотя бы одним нулевым элементом. Она возвращает номер этого столбца, если такой столбец найден, и -1, если нет.
  3. Функция SumNegative суммирует все отрицательные элементы в заданном столбце.
  4. В функции Sort вызывается функция SwapLines, которая меняет местами элементы двух строк. Затем массив ar сортируется по возрастанию.
  5. В основной части кода сначала генерируется случайный массив, затем находится первый столбец с хотя бы одним нулевым элементом, затем этот столбец сортируется, и наконец выводится результат.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

14   голосов , оценка 4.214 из 5
Похожие ответы