Exitcode 201 - Free Pascal (2334)
Формулировка задачи:
наверно уже избитая тема(сорри если уже было что то похожее). Не могли бы вы помочь найти ошибку в задаче.
условие:
Дано целое число N. Пусть М -Число записанное теми же цифрами, что и N, но в порядке возрастания, Найдите сумму N+M.
Вот мое решение:
Программа при запуске выдает "Exitcode201"(это вроде бы выход за пределы массива). не могу найти ошибку. Если не сложно объясните в результате чего вообще возникает данная ошибка(не первый раз сталкиваюсь).
p.s.:Язык free Pascal
Type
IntArray = array of LongInt;
Function GetNamber(x: IntArray): LongInt;
Var
i, n: LongInt;
begin
n:=0;
For i:=Length(x)-1 DownTo 0 Do
Begin
n:=10*n+(x[i]);
end;
GetNamber:=n;
end;
Function GetDigits (n: LongInt): IntArray;
Var
x: IntArray;
Begin
While (n<>0) do
begin
SetLength(x, Length(x)+1);
x[Length(x)-1] := n mod 10;
n:= n div 10;
end;
GetDigits:=x;
end;
Var
n, i, t, res, j: LongInt;
x, a: IntArray;
Begin
Readln(n);
x:=GetDigits(n);
For i:=0 to Length(x)-1 do
begin
For J:=0 to Length(x)-1 do
begin
If (x[j]>x[j+1]) then
begin
t:=x[j];
x[j]:=x[j+1];
x[j+1]:=t;
end;
end;
end;
For I:=0 to Length(x)-1 do
begin
write(x[i], ' ');
end;
Readln;
End.Решение задачи: «Exitcode 201»
textual
Листинг программы
uses crt;
var n,m,a,p,k,i:longint;
begin
clrscr;
repeat
writeln('Введите натуральное число до 2 147 483 647');
readln(n);
until(n>0)and(n<2147483647);
a:=n;m:=0;
for i:=0 to 9 do{начиная с 0 ищем в числе цифры по возрастанию}
begin
p:=n;{запоминаем число}
while p>0 do
begin
k:=p mod 10;{ищем цифру 0..9}
if k=i then m:=m*10+k;{если есть, домножаем число на 10 и + цифра}
p:=p div 10;{сокращаем число на 10 и повторяем пока не проверим все цифры}
end;
end;
writeln('M=',m);
write('N+M=',n+m);
readln
Объяснение кода листинга программы
Код на языке Free Pascal выполняет следующие действия:
- Запрашивает у пользователя натуральное число до 2 147 483 647 и сохраняет его в переменную
n. - Проверяет, что введенное число больше 0 и меньше 2 147 483 647.
- Инициализирует переменные
a,m,p,kиiзначениемn. - Начиная с 0, ищет в числе цифры по возрастанию.
- Пока число
pбольше 0, выполняет следующие действия: a. Находит цифру от 0 до 9 в числеpи сохраняет ее в переменнуюk. b. Еслиkравноi, то прибавляет цифру кmи умножает на 10. c. Сокращает числоpна 10. - Выводит значение переменной
m. - Выводит сумму
nиm. - Запрашивает у пользователя ввод.