Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

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

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

Ответ
 
Опции темы
Старый 03.04.2018, 17:30   #1
Kamelok
Пользователь
 
Регистрация: 19.11.2017
Сообщений: 36
Репутация: 10
По умолчанию Выдает ошибку - рекурсия, цифры числа в обратном порядке [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 Кб, 22 просмотров)

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

необходим рекурсивный вызов себя?
Код:

   InvertedNumber:=(x div 10, new); 
   InvertedNumber:=InvertedNumber(x div 10, new);

__________________
программа — запись алгоритма на языке понятном транслятору
evg_m вне форума   Ответить с цитированием
Старый 03.04.2018, 18:15   #3
Kamelok
Пользователь
 
Регистрация: 19.11.2017
Сообщений: 36
Репутация: 10
По умолчанию

Цитата:
Сообщение от evg_m Посмотреть сообщение
необходим рекурсивный вызов себя?
Код:

   InvertedNumber:=(x div 10, new); 
   InvertedNumber:=InvertedNumber(x div 10, new);

Да.
Kamelok вне форума   Ответить с цитированием
Старый 03.04.2018, 18:39   #4
Serge_Bliznykov
МегаМодератор
СуперМодератор
 
Регистрация: 09.01.2008
Сообщений: 24,057
Репутация: 5241
По умолчанию

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

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

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

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

ДОБАВЛЕНО.

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

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

я бы вообще такой вариант решения предложил (если в задании не задано строго "получить новое число", а есть формулировка "вывести цифры в обратном порядке"):
Код:

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, 19:22   #8
Kamelok
Пользователь
 
Регистрация: 19.11.2017
Сообщений: 36
Репутация: 10
По умолчанию

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

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

Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

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


09:54.


Powered by vBulletin® Version 3.8.8 Beta 2
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.

RusProfile.ru


Справочник российских юридических лиц и организаций.
Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru