Найти номер первой строки, все элементы которой кратны 5 - Turbo Pascal
Формулировка задачи:
Здравствуйте, такая задача. Есть матрица (n на 2n) . Найти номер первой строки все элементы которой кратны 5. Использовать только цикл while. Поиск решения сделать с процедурой. Входные данные и результат выписать в текстовый файл.
Я написал саму программу. Однако появилась такая проблема. После считывания данных программа не закрывается (остается висеть черным окном). После пошаговой проверки оказалось, что проблема в процедуре. Наверное, нет выхода из цикла. Помогите, пожалуйста найти ошибку.
Решение задачи: «Найти номер первой строки, все элементы которой кратны 5»
textual
Листинг программы
Type Matrix = array[1..5, 1..10] of integer;
Procedure Check(n:integer;X: matrix;var Result:integer);
var n2,i,j,k:integer;
begin
Result:=0;
n2:=2*n;
i:=1;
while(i<=n)and (Result=0) do
begin
j:=1;
k:=0;
while (j<=n2)and(k=0) do
if X[i,j] mod 5<>0 then k:=1
else j:=j+1;
if k=0 then Result:=i
else i:=i+1;
end;
writeln('Номер первой строки, элементы которой кратны 5=',Result)
end;
var a:matrix;
n,nstr,i,j:integer;
begin
while not(n in [1..5]) do
begin
write('Количество строк от 1 до 5 n=');
readln(n);
end;
writeln('Введите элементы матрицы, в том числе строки с числами, кратными 5');
i:=1;
while i<=n do
begin
j:=1;
while j<=2*n do
begin
write('a[',i,',',j,']=');
readln(a[i,j]);
j:=j+1;
end;
i:=i+1;
end;
writeln('Матрица');
i:=1;
while i<=n do
begin
j:=1;
while j<=2*n do
begin
write(a[i,j]:4);
j:=j+1;
end;
writeln;
i:=i+1;
end;
Check(n,a,nstr);
end.
Объяснение кода листинга программы
- Создается тип данных
Matrix, который представляет собой массив целых чисел размером 5х10. - Создается процедура
Check, которая принимает в качестве параметровn- количество строк, иX- матрицу. Она инициализирует переменнуюResultзначением 0. Затем она вычисляетn2как 2 умноженное наn. Далее, внутри циклаwhile, проверяется условиеi<=nиResult=0. Если это условие выполняется, то переменныеi,jиkинициализируются значениями 1, 1 и 0 соответственно. Затем, внутри циклаwhile, проверяется условиеj<=n2иk=0. Если это условие выполняется, тоkустанавливается равным 1. Если условиеk=0выполняется, тоResultустанавливается равнымi. Если условиеk=0не выполняется, тоiувеличивается на 1. После окончания внутреннего циклаwhile, переменнаяiустанавливается равнойi+1. - Создается переменная
aтипаmatrixи инициализируется значениями из введенной пользователем матрицы. - Выполняется цикл
while, покаnне будет равно 5. В каждой итерации цикла пользователю предлагается ввести количество строк от 1 до 5. - В каждой итерации цикла
whileпользователь вводит элементы матрицы, включая строки с числами, кратными 5. - Выводится сообщение с номером первой строки, все элементы которой кратны 5.