Найти номер первой строки, все элементы которой кратны 5 - Turbo Pascal
Формулировка задачи:
Здравствуйте, такая задача. Есть матрица (n на 2n) . Найти номер первой строки все элементы которой кратны 5. Использовать только цикл while. Поиск решения сделать с процедурой. Входные данные и результат выписать в текстовый файл.
Я написал саму программу. Однако появилась такая проблема. После считывания данных программа не закрывается (остается висеть черным окном). После пошаговой проверки оказалось, что проблема в процедуре. Наверное, нет выхода из цикла. Помогите, пожалуйста найти ошибку.
Листинг программы
- Type Matrix = array[1..5, 1..10] of integer;
- Procedure Check(var n : integer; X : matrix; var Result : integer);
- var i, j, k, n2 : integer;
- U, Y : boolean;
- begin
- i := 1; j := 1; Result := 0; U := true; n2 := 2 * n;
- while U = true do
- begin
- Y := true;
- if i < n + 1 then
- begin
- k := 0;
- while Y = true do
- begin
- if j < (n2 + 1) then
- begin
- if (x[i, j] mod(5) = 0) then
- k := k + 1;
- j := j + 1;
- end;
- if j = n2 then Y := false;
- end;
- if (k = n2) then
- begin
- Result := i;
- U := false;
- end;
- Y := false;
- i := i + 1;
- end;
- if i = 6 then U := false;
- end;
- end;
Решение задачи: «Найти номер первой строки, все элементы которой кратны 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.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д