Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Object Pascal: кроссплатформенные технологии > задача на Паскале


Автор: Aleche 4.11.2004, 21:45
Привет!!!!!Необходима помощь опытных программистов!!! Нужна программа.Задача следущая:
Пусть дано натуральное число k.Напечатайте k-ю цифру последовательности 1123581321 ...,в которой выписаны подряд числа Фибоначчи.Фика втом,что использовать можно только простейшие операторы(нельзя применять массивы,функции...)

Автор: Zero 4.11.2004, 22:52
Aleche, ничего проще я просто не видел... smile
Пиши вот так:
Код

program Fib;
var
  k:integer;
  i,p0,p1,p:integer;
begin
    write('Введите k='); read(k);
    k:=k-2;  {Установить реальное число, с учётом остования чисел от начала}
    p0:=1;   {Начальное значение}
    p1:=1;   {Второе значение}
    for i:=1 to k do
        begin
             p:=p0+p1;
             p0:=p1;  
             p1:=p;
        end;
    writeln(p);
end.

Автор: maxim1000 5.11.2004, 11:55
этот код выдаст k-тое число последовательности, а не k-ю цифру
Код

function Degree(n:integer):integer;
var
 d:integer;
begin
 d:=0;
 while(n>0)do
 begin
   n:=n div 10;
   inc(d);
 end;
 Degree:=d;
end;
function GetDigit(k:integer):integer;
var
 a,b,c:integer;
 deg:integer;
begin
 a:=1;
 b:=1;
 k:=k-2;
 while(true)do
 begin
   c:=a+b;
   deg:=Degree(c);
   if(k<deg)then
     break;
   k:=k-deg;
   a:=b;
   b:=c;
 end;
 k:=deg-1-k;
 while(k>0)do
 begin
   c:=c div 10;
   dec(k);
 end;
 GetDigit:=k mod 10;
end;
только у меня Delphi нету, не проверял

Автор: Zero 5.11.2004, 21:14
Действительно, maxim1000, я что-то непредусмотрел, осталось узнать у автора, сможет ли он разобратся в твоём коде... smile

Автор: maxim1000 5.11.2004, 23:51
Цитата
Действительно, maxim1000, я что-то непредусмотрел, осталось узнать у автора, сможет ли он разобратся в твоём коде...

так все просто smile
хотя я сам не люблю разбираться в чужом коде, поэтому немного облегчу эту задачу:
функция Degree возвращает количество цифр в числе
k считает цифры последовательности (точнее сколько осталось до нужной цифры)
проверка (k<deg) означает, что искомая цифра принадлежит текущему числу
если нет - пропускаем текущее число (сдвигаемся на deg цифр) и берем следующее число
когда в конце концов доходим до нужного числа, начинаем вытаскивать из него нужную цифру
цифры числа определяются так: берется остаток от деления на 10, потом число делится на 10 и опять
только в этом случае числа получаются в порядке младший-старший
а в указанной последовательности порядок другой, для этого и делается "разворот" k:=deg-1-k

Автор: Zero 5.11.2004, 23:58
Ну мне то просто, только он ещё такое написал:
Цитата
Фика втом,что использовать можно только простейшие операторы(нельзя применять массивы,функции...)

Возможно он только начал изучать паскаль, и скорее всего ещё не проходил использования подпрограмм, поэтому, давай лучше подождём что он ответит... smile

Автор: maxim1000 6.11.2004, 00:32
тут использование функции непринципиально, скорее для понятности
можно просто вставить ее код в основную

Автор: Aleche 6.11.2004, 16:45
Спасибо,ребята!Я действительно только начала изучать Паскаль.

Автор: VingradFan 22.5.2007, 22:05
Всем привет.
У меня аналогичная задача, с той лиш разницей, что нужно написать первые к чисел ряда фибоначчи с помощью процедуры и ее рекурсивного вызова.
Только не надо кидать мне код, так не интересно...лучше намекните непрозрачно, как это организовать
Заранее спасибо.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)