В заданных строках матрицы все чётные элементы увеличить на младшую цифру первого элемента строки - Pascal
Формулировка задачи:
Дана целочисленная матрица размером NxN. В строках,содержащих наибольшее количество положительных элементов , все четные элементы увеличить на младшую цифру первого элемента этой строки
Решение задачи: «В заданных строках матрицы все чётные элементы увеличить на младшую цифру первого элемента строки»
textual
Листинг программы
const N = 5;
const M = N;
const MIN_ELEM = 0;
type item_t = integer;
type line_t = array[1..M] of item_t;
type tabl_t = array[1..N] of line_t;
procedure printLine( const l: line_t );
var
i: integer;
begin
for i:= 1 to M do
write(l[i] :5);
writeln;
end;
procedure printTabl( const t: tabl_t );
var
i: integer;
begin
for i:= 1 to N do
printLine(t[i]);
end;
procedure init_2d( var a: tabl_t );
var
x,y: integer;
begin
for y:=1 to N do
for x:=1 to M do
a[y][x] := random(-100 , 100);
end;
function getCountP( const a: line_t ):integer;
var
r,x: integer;
begin
r := 0;
for x:=1 to M do
if a[x] > MIN_ELEM then
r := r + 1;
getCountP := r;
end;
function getCountMIndex( const a: tabl_t ):integer;
var
i,y: integer;
begin
i := 1;
for y:=2 to N do
if getCountP(a[y]) > getCountP(a[i]) then
i := y;
getCountMIndex := i;
end;
var
a: tabl_t;
x,y,minR,minD: integer;
const ALR_FRIST_ITEM = 1;
const ALR_ABS_MODE = true;
begin
init_2d(a);
printTabl(a);
Writeln('-------------------------------');
minD := getCountP( a[ getCountMIndex(a) ] );
for y:=1 to N do
if getCountP(a[y]) = minD then begin
minR := a[y][1] mod 10;
if ALR_ABS_MODE then minR := abs(minR);
writeln(y , ' # ' , minR);
for x:=ALR_FRIST_ITEM to M do
if a[y][x] mod 2 = 0 then
a[y][x] := a[y][x] + minR;
end;
printTabl(a);
end.
Объяснение кода листинга программы
- Переменная
Nинициализируется значением 5. - Переменная
Mинициализируется значениемN. - Создается тип данных
item_t, который представляет целое число. - Создается тип данных
line_t, который представляет массив изitem_t. - Создается тип данных
tabl_t, который представляет массив изline_t. - Определяется процедура
printLine, которая выводит элементы массиваlпострочно. - Определяется процедура
printTabl, которая выводит все строки массиваtпострочно. - Определяется процедура
init_2d, которая инициализирует каждую ячейку массиваaслучайным числом от -100 до 100. - Определяется функция
getCountP, которая подсчитывает количество элементов в строке массиваa. - Определяется функция
getCountMIndex, которая находит индекс строки с минимальным количеством элементов в массивеa. - Инициализируется переменная
a. - Выводится таблица массива
aс помощью процедурprintTabl. - Выводится строка с минимальным количеством элементов и ее индекс.
- Если значение переменной
ALR_ABS_MODEравноtrue, то выводится абсолютное значение числа. - Выводится номер строки и само число.
- Если значение переменной
ALR_ABS_MODEравноtrue, то выводится абсолютное значение числа. - Выполняется цикл, который увеличивает все четные числа в строке на младшую цифру первого элемента этой строки.
- Выводится обновленная таблица массива
aс помощью процедурprintTabl.