Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 03.04.2018, 16:30   #1
Kamelok
Пользователь
 
Регистрация: 19.11.2017
Сообщений: 36
По умолчанию Выдает ошибку - рекурсия, цифры числа в обратном порядке [Turbo Pascal].

В Turbo Pascal выдает ошибку, а в ABC нет. Сдавать то надо на TurPas скажите, в чем проблема пожалуйста, а то завтра сдавать. Самое интересное в ABC не требует это присваивание и всё работает, также и ставил эти скобки и всё равно ошибка. Программа для написание целово положительного числа в обратном поряде

Код:
uses crt; 
procedure EnteringNumber(var x: integer);{Procedure for entering a number}
begin
  repeat
    write('Enter the number = '); 
    readln(x);
  until x > 0;
  writeln; 
end;

function InvertedNumber(x: integer; var new: integer): integer;{function of number revolution}

begin
  if X <> 0 then
  begin
    new := new * 10 + (x mod 10);
    InvertedNumber:=(x div 10, new); 
  end;
  InvertedNumber := new;
end;

procedure OutputtingNumber(new: integer);{Display procedure}
begin
  writeln('Inverted number = ', new);
end;

var{Main program}
  g, new, x: integer;

begin
  repeat
    clrscr;
    writeln;
    writeln('The program is designed to write the whole number in reverse order.');
    writeln;
    EnteringNumber(x);
    InvertedNumber(x, new);
    OutputtingNumber(new);
    writeln;
    writeln('To exit the program, enter the number 0,');
    writeln('if you want to restart a positive integer');
    repeat
      write('Your choice: ');
      readln(g);
      if (g < 0) then
        writeln('Error! Please try again!');
    until (g >= 0);
  until g = 0;
end.
Изображения
Тип файла: png 2018-04-03_16-24-39.png (7.3 Кб, 87 просмотров)

Последний раз редактировалось Kamelok; 03.04.2018 в 16:32.
Kamelok вне форума Ответить с цитированием
Старый 03.04.2018, 17:08   #2
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,515
По умолчанию

необходим рекурсивный вызов себя?
Код:
   InvertedNumber:=(x div 10, new); 
   InvertedNumber:=InvertedNumber(x div 10, new);
программа — запись алгоритма на языке понятном транслятору
evg_m вне форума Ответить с цитированием
Старый 03.04.2018, 17:15   #3
Kamelok
Пользователь
 
Регистрация: 19.11.2017
Сообщений: 36
По умолчанию

Цитата:
Сообщение от evg_m Посмотреть сообщение
необходим рекурсивный вызов себя?
Код:
   InvertedNumber:=(x div 10, new); 
   InvertedNumber:=InvertedNumber(x div 10, new);
Да.
Kamelok вне форума Ответить с цитированием
Старый 03.04.2018, 17:39   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

PascalABC и Pascal ABC.NET, конечно, ещё те мутанты-уродцы,
но этот кривой код и в них не компилируется, зря наговаривайте!
pabc_error1.png
pabc_error2.jpg
Serge_Bliznykov вне форума Ответить с цитированием
Старый 03.04.2018, 17:45   #5
Kamelok
Пользователь
 
Регистрация: 19.11.2017
Сообщений: 36
По умолчанию

А из-за чего теперь идет арифметическое переполнение?
Изображения
Тип файла: png 2018-04-03_17-41-54.png (5.2 Кб, 82 просмотров)
Kamelok вне форума Ответить с цитированием
Старый 03.04.2018, 17:55   #6
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

Цитата:
Сообщение от Kamelok Посмотреть сообщение
А из-за чего теперь идет арифметическое переполнение?
наверное, сильно большое число пытаетесь ввести, забыв о размере Integer

замените все Integer на LongInt

ДОБАВЛЕНО.

а переменную NEW кто будет иницилизировать перед первым обращением - Пушкин?!!!

Последний раз редактировалось Serge_Bliznykov; 03.04.2018 в 17:57.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 03.04.2018, 18:11   #7
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

я бы вообще такой вариант решения предложил (если в задании не задано строго "получить новое число", а есть формулировка "вывести цифры в обратном порядке"):
Код:
procedure EnteringNumber(var x: integer);{Procedure for entering a number}
begin
  repeat
    write('Enter the number = '); 
    readln(x);
  until x > 0;
  writeln;
end;

procedure PrintInvertedNumber(x: integer);
begin
  if X > 0 then begin
    Write(x mod 10);
    PrintInvertedNumber(x div 10);
  end
end;

procedure OutputtingNumber(x: integer);{Display procedure}
begin
  write('Inverted number = ');
  PrintInvertedNumber(x);
  WriteLn;
end;

{Main program}
var
  g, x: integer;

begin
  repeat
    writeln;
    writeln('The program is designed to write the whole number in reverse order.');
    writeln;
    EnteringNumber(x);
    OutputtingNumber(x);
    writeln;
    writeln('To exit the program, enter the number 0,');
    writeln('if you want to restart a positive integer');
    repeat
      write('Your choice: ');
      readln(g);
      if (g < 0) then
        writeln('Error! Please try again!');
    until (g >= 0);
  until g = 0;
end.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 03.04.2018, 18:22   #8
Kamelok
Пользователь
 
Регистрация: 19.11.2017
Сообщений: 36
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
а переменную NEW кто будет иницилизировать перед первым обращением - Пушкин?!!!
Я не превышал пределы числа типа Integer, но замечание про инициализацию переменной перед первым обращением-это вы правы. Всегда забываю их занулить перед работой с ними.
Число требуют.
Спасибо большое.

Последний раз редактировалось Kamelok; 03.04.2018 в 18:24.
Kamelok вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вывести цифры числа по отдельности. Выводятся в обратном порядке Alim- Общие вопросы C/C++ 2 03.01.2017 21:57
Рекурсия.С++.Текст в обратном порядке. Wunschpunsch Помощь студентам 5 10.05.2014 17:44
Цифры заданного натурального числа запишите в обратном порядке Radius100 Помощь студентам 2 09.02.2012 11:39