Заменить нечетный элемент каждой строки матрицы нулем - Pascal

Узнай цену своей работы

Формулировка задачи:

Дан двумерный массив размером n*m, заполненный случайным образом. 1. Заменить нечетный элемент каждой строки нулем 2. Вставить после всех строк, содержащий минимальные значения строку 1,2 ,3 3. Удалить все столбцы, в которых первый элемент четный 4. Поменять местами первый и последний столбцы.

Решение задачи: «Заменить нечетный элемент каждой строки матрицы нулем»

textual
Листинг программы
{$MODE TP}
type
    TLine = Array[Byte] Of ShortInt;
    TArray = Array[Byte] Of TLine;
procedure PrintArray(const a: TArray; const n, m: Byte);
var
    i, j: Byte;
begin
    for i := 0 to n - 1 do
    begin
        WriteLn;
        for j := 0 to m - 1 do
            Write(a[i, j]:4);
    end;
    WriteLn;
end;
procedure GenerateArray(var a: TArray; var n, m: Byte);
var
    i, j: Byte;
begin
    repeat
        Write('n='); ReadLn(n);
    until (n > 0);
    repeat
        Write('m='); ReadLn(m);
    until (m > 0);
    Randomize();
    for i := 0 to n - 1 do
        for j := 0 to m - 1 do
            a[i, j] := Random(199) - 99;
    PrintArray(a, n, m);
end;
procedure Zad1(var a: TArray; const n, m: Byte);
var
    i, j: Byte;
begin
    for i := 0 to n - 1 do
        for j := 0 to m - 1 do
            a[i, j] := a[i, j] * Ord(Not Odd(a[i, j]));
    PrintArray(a, n, m);
end;
procedure Zad2(var a: TArray; var n: Byte; const m: Byte);
    function GetMin(const a: TArray; const n, m: Byte): ShortInt;
    var
        Result: ShortInt;
        i, j: Byte;
    begin
        Result := a[0, 0];
        for i := 0 to n - 1 do
            for j := 0 to m - 1 do
                if (a[i, j] < Result)
                then
                    Result := a[i, j];
        GetMin := Result;
    end;
    function CheckLine(const l: TLine; const m: Byte; const min: ShortInt): Boolean;
    var
        j: Byte;
        Result: Boolean;
    begin
        Result := False; j := 0;
        while ((j < m) And (Not Result)) do
        begin
            Result := (l[j] = min);
            Inc(j);
        end;
        CheckLine := Result;
    end;
var
    i, ii, j: Byte;
    min: ShortInt;
begin
    min := GetMin(a, n, m); i := 0;
    while (i < n) do
    begin
        if (CheckLine(a[i], m, min))
        then
        begin
            for ii := n - 1 downto i + 1 do
                a[ii + 1] := a[ii];
            for j := 0 to m - 1 do
                a[i + 1, j] := j + 1;
            Inc(n);
            Inc(i);
        end;
        Inc(i);
    end;
    PrintArray(a, n, m);    
end;
procedure Zad3(var a: TArray; const n: Byte; var m: Byte);
var
    i, j, jj: Byte;
begin
    j := 0;
    while (j < m) do
        if (a[0, j] = 0)
        then
        begin
            for jj := j to m - 2 do
                for i := 0 to n - 1 do
                    a[i, jj] := a[i, jj + 1];
            Dec(m);
        end
        else
            Inc(j);
    PrintArray(a, n, m);
end;
procedure Zad4(var a: TArray; const n, m: Byte);
procedure SwapElements(var x, y: ShortInt);
var
    z: ShortInt;
begin
    z := x;
    x := y;
    y := z;
end;
var
    i: Byte;
begin
    if (m > 1)
    then
        for i := 0 to n - 1 do
            SwapElements(a[i, 0], a[i, m - 1]);
    PrintArray(a, n, m);
end;
var
    ar: TArray;
    n, m: Byte;
begin
    GenerateArray(ar, n, m);
    Zad1(ar, n, m);
    Zad2(ar, n, m);
    Zad3(ar, n, m);
    Zad4(ar, n, m);
end.

Объяснение кода листинга программы

  1. Объявление типов данных:
    • TLine: массив байтов (ShortInt)
    • TArray: массив байтов, состоящий из TLine
  2. Процедура вывода массива:
    • PrintArray(const a: TArray, const n, m: Byte): выводит значения массива a размером n x m
  3. Процедура генерации массива:
    • GenerateArray(var a: TArray, var n, m: Byte): запрашивает у пользователя размеры массива n и m, инициализирует массив случайными числами и выводит его на экран
  4. Процедура для задачи 1:
    • Zad1(var a: TArray; const n, m: Byte): заменяет нечетные элементы каждой строки массива a нулями и выводит результат
  5. Процедура для задачи 2:
    • Zad2(var a: TArray; var n: Byte; const m: Byte): ищет минимальный элемент в массиве a, затем перемещает все строки, содержащие этот минимальный элемент, вниз и добавляет новую строку со значениями от 1 до m, если это необходимо, и выводит результат
  6. Процедура для задачи 3:
    • Zad3(var a: TArray; const n: Byte; var m: Byte): удаляет столбцы, содержащие хотя бы один ноль, из массива a и выводит результат
  7. Процедура для задачи 4:
    • Zad4(var a: TArray; const n, m: Byte): меняет местами первый и последний элементы каждой строки массива a и выводит результат
  8. Основная часть программы:
    • Инициализирует массив ar, n и m
    • Генерирует массив и выводит его
    • Последовательно вызывает процедуры для решения задач 1-4, передавая массив ar, n и m в каждую из них.

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


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

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

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