![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
|
|
#1
|
|||
|
|||
|
Здравствуйте!
Решаю задачу из сборника Кордемского "Математическая смекалка". Я-то решил её на бумаге, но хотелось бы пойти дальше... Сама задача тут: https://ibb.co/Gp59ZdZ Исходник консольной проги на FreePascal - во вложении. Суть проблемы: я сделал прогу, которая разбивает (исходное) число на цифры, возводит каждую цифру в квадрат, складывает результаты, и получает новое число. Которое заносится в массив. И так итерируем 30 раз. Потом, массив с этими итерационными результатами проверяем на наличие цикла. То есть, получаем массив такой: 256 65 61 37 58 89 145 42 20 4 16 37 58 89 145 42 20 4 16 37 58 89 145 42 20 4 16 37 58 89 145 ... И почему-то проверка, в отладчике FPC, даёт нужное число (если исходное - 256, то результат должен быть 145). А без отладчика, в "свободном полёте" - 0 получается. Пожалуйста, подскажите, что я делаю не так? Или я не вижу рядом открытой двери? Спасибо! Последний раз редактировалось Krypton, 20.08.2023 в 13:15. |
|
#2
|
|||
|
|||
|
Так, на первый взгляд, все нормально.
А при компиляции не выводится никаких варнингов типа неинициализированная переменная или что-то подобное? Просто под отладчиком память переменных может чиститься, а без отладчика - нет. |
|
#3
|
|||
|
|||
|
нет, вообще ничего не пишет в сообщениях компилятора.
|
|
#4
|
|||
|
|||
|
может баг FPC?
Вот переписал твой алгоритм на Delphi XE3 (сорри, но твой код написан просто через жопу). Что под дебагером, что без - результат одинаковый. Код:
program Project1;
{$APPTYPE CONSOLE}
{$R *.res}
uses
System.SysUtils;
function GetNextNumber(SrcNumber : Integer) : Integer;
begin
Result := 0;
Repeat
Result := Result + Sqr((SrcNumber mod 10));
SrcNumber := SrcNumber div 10;
Until (SrcNumber = 0);
end;
const
Iterations = 30;
var
I : Integer;
InitNumber : Integer;
RepeatCount : Integer;
NumbersArray : Array Of Integer;
begin
try
InitNumber := 256;
SetLength(NumbersArray,Iterations+1);
NumbersArray[0] := InitNumber;
For I := 1 To Iterations Do
NumbersArray[i] := GetNextNumber(NumbersArray[I-1]);
RepeatCount := 0;
For I := High(NumbersArray)-1 DownTo Low(NumbersArray) Do
If NumbersArray[i] = NumbersArray[High(NumbersArray)] Then Inc(RepeatCount);
WriteLn('Initial number: ',InitNumber);
WriteLn('Number of iterations: ',Iterations);
WriteLn('Array:');
For I := Low(NumbersArray) To High(NumbersArray) Do
Write(NumbersArray[i],' ');
WriteLn;
WriteLn('Iteration line count (0 means that row of iteration is too short): ',RepeatCount);
WriteLn;
WriteLn('Press ENTER to close the window...');
ReadLn;
except
on E: Exception do
begin
Writeln(E.ClassName, ': ', E.Message);
WriteLn('Press ENTER to close the window...');
ReadLn;
end;
end;
end. |
| Этот пользователь сказал Спасибо lmikle за это полезное сообщение: | ||
Krypton (22.08.2023)
| ||
|
#5
|
|||
|
|||
|
спасибо, ща попробую.
Да, я согласен. Я только по хобби программирую. Рукожоп ещё тот ![]() UPD ДА! Под D7 оно тоже работает! Благодарствую, lmikle :-) Последний раз редактировалось Krypton, 22.08.2023 в 10:15. |