![]() |
|
|
Регистрация | << Правила форума >> | 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. |