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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 03.12.2009, 13:20   #1
Dmitry333
Пользователь
 
Аватар для Dmitry333
 
Регистрация: 13.11.2009
Сообщений: 60
По умолчанию "Перевернуть число" рекурсией

Добрый день.

Есть задание:
Рекурсивно найти число, которое образуется из данного натурального числа при записи его цифр в обратном порядке.

В голову не приходит нормального решения, есть наработка, работает, и вороде всё норм, но не оптимально т.е надо сделать так чтобы не передавать второй параметр в Na();

У кого какие мысли? Делитесь, заранее благодарю.

Вот то что у меня есть, но меня это не устраивает:

Код:
function Na(x,y:integer):integer;
begin
     if (x div 10) = 0 then
     begin
          na:=(x mod 10)*y;
     end else
         begin
              na:=(x mod 10)*y+na(x div 10, y div 10);
         end;
end;
begin
     writeln(na(1234,1000));
     readln;
end.
Dmitry333 вне форума Ответить с цитированием
Старый 03.12.2009, 13:32   #2
notHaker
Форумчанин
 
Аватар для notHaker
 
Регистрация: 01.12.2009
Сообщений: 569
По умолчанию

Цитата:
Сообщение от Dmitry333 Посмотреть сообщение
Добрый день.

Есть задание:
Рекурсивно найти число, которое образуется из данного натурального числа при записи его цифр в обратном порядке.

В голову не приходит нормального решения, есть наработка, работает, и вороде всё норм, но не оптимально т.е надо сделать так чтобы не передавать второй параметр в Na();

У кого какие мысли? Делитесь, заранее благодарю.

Вот то что у меня есть, но меня это не устраивает:

Код:
function Na(x,y:integer):integer;
begin
     if (x div 10) = 0 then
     begin
          na:=(x mod 10)*y;
     end else
         begin
              na:=(x mod 10)*y+na(x div 10, y div 10);
         end;
end;
begin
     writeln(na(1234,1000));
     readln;
end.
А как это у тя работает, если ты к функции значение присвоить пытаешся??
Код - это работа, а работа стоит денег.

pz-game.ru. 2d зомби-сурвивал для олдфагов.
notHaker вне форума Ответить с цитированием
Старый 03.12.2009, 13:39   #3
Dmitry333
Пользователь
 
Аватар для Dmitry333
 
Регистрация: 13.11.2009
Сообщений: 60
По умолчанию

Цитата:
А как это у тя работает, если ты к функции значение присвоить пытаешся??
Ну вообще-то так возвращается значение функции!!!
Если не веришь то проверь...
Dmitry333 вне форума Ответить с цитированием
Старый 03.12.2009, 13:44   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
А как это у тя работает, если ты к функции значение присвоить пытаешся??
Если ты основы паскаля не знаешь то это не значит что их незнает никто.
В паскале присвоение имени функции чего-то означает возврат результата - не флуди пожалуйста.
Цитата:
т.е надо сделать так чтобы не передавать второй параметр в Na();
Сделай рассчет этого параметра в глобальную переменную, хотя помоему достаточно оптимален и такой вариант, ибо он поуниверсальнее и помобильнее
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 03.12.2009, 13:47   #5
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

ну, если задача стоит избавиться от второго параметра,
то это можно сделать.
Но проблема в том, что число всё равно надо сдвигать влево (умножая на 10^нужной степени)
это можно сделать, например, так:
Код:
function Na(x:integer):integer;
var y,x0 : integer;
begin
  if (x div 10) = 0 then
  begin
     na:=(x mod 10);
  end else
    begin
      y := 1;
      x0 := x div 10;
      while x0>0 do begin
        x0 := x0 div 10;
        y := y * 10;
      end;
      na:=(x mod 10)*y+na(x div 10);
    end;
end;
begin
  writeln(na(1234));
  readln;
end.
только я не уверен, что это решение более эффективно, чем Ваше первоначальное! да, кстати, в первоначальном, когда дошли до единиц уже на y можно не умножать: na:=(x mod 10);
Serge_Bliznykov вне форума Ответить с цитированием
Старый 03.12.2009, 13:47   #6
notHaker
Форумчанин
 
Аватар для notHaker
 
Регистрация: 01.12.2009
Сообщений: 569
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Если ты основы паскаля не знаешь то это не значит что их незнает никто.
В паскале присвоение имени функции чего-то означает возврат результата - не флуди пожалуйста.
ссори... я их попросту забыл, давненько это было...
Код - это работа, а работа стоит денег.

pz-game.ru. 2d зомби-сурвивал для олдфагов.
notHaker вне форума Ответить с цитированием
Старый 03.12.2009, 14:33   #7
Dmitry333
Пользователь
 
Аватар для Dmitry333
 
Регистрация: 13.11.2009
Сообщений: 60
По умолчанию

спасибо
Dmitry333 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
при вводе на листе "магазин"- код товара появлялось "описание" товара из "склада" с "продажной ценой" aleksei78 Microsoft Office Excel 13 25.08.2009 12:04
Pascal - Игра "Угадай число" d_b Помощь студентам 8 16.02.2009 09:33
[Delphi] Игра "Угадай число" Bomber Помощь студентам 15 05.06.2008 09:34
Помогите реалезовать условие - "Если x целое число то" Кронос Общие вопросы Delphi 5 04.05.2008 16:07
Оператор амперсанд "&" или число внутри текста dotvz Microsoft Office Excel 2 02.04.2008 14:33