Модуль, который удаляет строки матрицы, содержащие не менее 3 четных чисел (найдите ошибку в коде) - Free Pascal
Формулировка задачи:
С клавиатуры вводятся размеры двумерного массива и его элементы. Составить главную программу и подпрограмму. В подпрограмме удалить строки матрицы, содержащие не менее 3 четных чисел.Нужно составить модуль, в который включить эту подпрограмму. Реализовать главную программу, подключив модуль.
Главная программа
молуль
Всем заранее спасибо!
uses crt, modudal; var a,b:ta; i,j,k,m:byte; begin clrscr; writeln('k, m:'); readln(k,m); writeln('vvedite massiv:'); for i:=1 to k do for j:=1 to m do read(a[i,j]); proc(b); readkey end.
unit modudal; interface type ta=array[1..10,1..10] of integer; procedure proc(b:ta); implementation procedure proc; var a,s,n:integer; var i,j,k,m:byte; begin for a:=1 to k do begin n:=0; for s:=1 to m do if (b[a,s] mod 2)=0 then inc(n); if n>=3 then continue; for s:=1 to m do write(b[a,s]:5); end; end; end.
Решение задачи: «Модуль, который удаляет строки матрицы, содержащие не менее 3 четных чисел (найдите ошибку в коде)»
textual
Листинг программы
unit modudal; interface const nmax=20; type ta=array[1..nmax,1..nmax] of integer; procedure proc(var b:ta;k,m:integer); implementation procedure proc(var b:ta;k,m:integer); var a,s,n,k1,i,j:byte; begin a:=1; k1:=k; while a<=k do begin n:=0; for s:=1 to m do if b[a,s] mod 2=0 then inc(n); if n>=3 then begin if a=k then dec(k) else begin for i:=a to k-1 do for j:=1 to m do b[i,j]:=b[i+1,j]; dec(k); end; end else inc(a); end; if k=0 then write('Все строки удалены') else if k=k1 then write('Нет строк для удаления') else begin writeln('Удалены строки где не менее 3 четных элементов'); for i:=1 to k do begin for j:=1 to m do write(b[i,j]:4); writeln; end; end; end; end.
Объяснение кода листинга программы
- Ввод заголовка модуля
modudal
- Объявление константы
nmax
равной 20 - Объявление типа
ta
как массива 2-х измерений (1..nmax, 1..nmax) целочисленного типа - Объявление процедуры
proc
с тремя параметрами:var b:ta
,k,m:integer
- Определение первой локальной переменной
a
типаbyte
и инициализация ее значением 1 - Инициализация переменной
k1
значениемk
- Ввод цикла
while
отa
доk
- Внутри цикла: инициализация переменной
n
равной 0 - Ввод вложенного цикла
for
отs
доm
- Внутри вложенного цикла: проверка, является ли элемент
b[a,s]
четным (остаток от деления на 2 равен 0) - Если условие выполняется, то увеличивается значение переменной
n
- Если значение переменной
n
становится равным 3, то выполняется удаление строк - Если значение переменной
a
равноk
, то значениеk
уменьшается на единицу - Если значение переменной
a
не равноk
, то выполняется перенос элементов из следующей строки в текущую - Если значение переменной
k
равно нулю, то выводится сообщениеВсе строки удалены
- Если значение переменной
k
равноk1
, то выводится сообщениеНет строк для удаления
- Если условие не выполняется, то выводится сообщение
Удалены строки где не менее 3 четных элементов
- Ввод цикла
for
отi
доk
- Внутри цикла: ввод цикла
for
отj
доm
- Внутри вложенного цикла: вывод значения элемента
b[i,j]
в шестнадцатеричной системе счисления - Вывод символа новой строки
\n
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д