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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 12.12.2010, 21:55   #1
Alteran
 
Аватар для Alteran
 
Регистрация: 12.12.2010
Сообщений: 1
По умолчанию Снова про числа Фибоначчи на Pascal

Здравствуйте.
Прошу помощи в решении задачи: "Вывести ЛЮБОЕ, даже самое большое, число Фибоначчи. При решении использовать символьную арифметику."
Я сам просто не представляю, как это сделать.
Nos ani Antiquitas
Alteran вне форума Ответить с цитированием
Старый 13.12.2010, 04:49   #2
Mad_Cat
Made In USSR!
Старожил
 
Аватар для Mad_Cat
 
Регистрация: 01.09.2010
Сообщений: 3,657
По умолчанию

Цитата:
Я сам просто не представляю, как это сделать.
Реализуй длинную арифметику в частности сложение для положительных чисел. Кстати в числе фибоначчи №50000 10449 цифр
"...В жизни я встречал друзей и врагов.В жизни много всего перевидал.Солнце тело мое жгло, ветер волосы трепал,но я смысла жизни так и не узнал..."
(c) Юрий Клинских aka "Хой"

Последний раз редактировалось Mad_Cat; 13.12.2010 в 12:34.
Mad_Cat вне форума Ответить с цитированием
Старый 13.12.2010, 15:37   #3
Mad_Cat
Made In USSR!
Старожил
 
Аватар для Mad_Cat
 
Регистрация: 01.09.2010
Сообщений: 3,657
По умолчанию

Цитата:
Вывести ЛЮБОЕ, даже самое большое, число Фибоначчи. При решении использовать символьную арифметику
Код:
var
  kk:Integer;
  f:TextFile;
  s:string;
  Fa:array of string;
  ncf:integer;
  (*функция нахождения максимума из 2 чисел*)
function max(a,b:integer):Integer;
  begin
    if a>b then result:=a
    else result:=b;
  end;
  (*перевод символа в цифру*)
function ChToCi(a:char):Integer;
  begin
    Result:=ord(a)-ord('0');
  end;
(*перевод цифры в символ*)
function CiToCh(a:byte):char;
  begin
    Result:=chr(a+ord('0'));
  end;
 (*суммирование двух строк столбиком*)
function SUM(a,b:string):string;
var
  um,LenMax:Integer;
  n,LenA,LenB:Integer;
  buf:string;
  pr:integer;
begin
  LenA:=Length(a);LenB:=Length(b);LenMax:=max(LenA,LenB);
  um:=0;buf:=''; n:=LenMax;
  for pr := 1 to LenMax - LenA do
    a:='0'+a;
  for pr := 1 to LenMax - LenB do
    b:='0'+b;
  while n>=1 do begin
    um:=ChToCi(a[n])+ ChToCi(b[n])+(um mod 10);
    buf:=CiToCh(um mod 10)+buf;
    Dec(n);
    um:=um div 10;
  end;
  if um<>0 then buf:= CiToCh(um)+buf;
  result:=buf;
end;
(*получение n-го числа фибоначчи*)
function Fib_dl(n:integer):string;
begin
  if n=1 then Fa[n]:='0'
  else if n<=3 then Fa[n]:='1'
  else
    Fa[n]:=SUM(Fa[n-1],fa[n-2]);
  result:=Fa[n];
end;
(*====Основная программа======*)
begin
  writeln('input number of fibonacci quantity');
  readln(ncf);
  Writeln('=============================================');
  WRiteln('Begin...');
  Assign(f,'c:\fib1.txt');
  Writeln('calc...#',ncf);
  Rewrite(f);
  SetLength(Fa,ncf);
  for kk := 1 to ncf do
    begin
      s:=Fib_dl(kk);
      writeln(f,'#',kk,'==>',s);
    end;
  Close(f);
  Writeln('End. Result in c:\fib1.txt');
  writeln('In #',ncf,'==>',length(s),' digits');
  Writeln('=============================================');
  Readln;
end.
"...В жизни я встречал друзей и врагов.В жизни много всего перевидал.Солнце тело мое жгло, ветер волосы трепал,но я смысла жизни так и не узнал..."
(c) Юрий Клинских aka "Хой"
Mad_Cat вне форума Ответить с цитированием
Старый 13.12.2010, 17:54   #4
Kingdom_Reborn
Форумчанин
 
Регистрация: 21.10.2010
Сообщений: 130
По умолчанию

Код:
uses
  Crt;

const
  Nmax   = 1001;

type
  TNumber = Array[0..Nmax] of Integer;

function max(const A, B: Integer): Integer;
begin
  if A > B then Max := A else Max := B;
end;

procedure One(var X: TNumber);
begin
  FillChar(X, SizeOf(X), 0);
  X[0] := 1;
  X[1] := 1;
end;

procedure Print(X: TNumber);
var
  i: Integer;
begin
  for i := X[0] downto 1 do
    Write(X[i]);
  WriteLn;
end;

procedure Add(A, B: TNumber; var C: TNumber);
var
  i, d: Integer;
begin
  FillChar(C, SizeOf(C), 0);
  d := 0;
  for i := 1 to max(A[0], B[0]) do begin
    Inc(d, A[i] + B[i]);
    C[i] := d mod 10;
    d := d div 10;
  end;
  C[0] := max(A[0], B[0]);
  if d > 0 then begin
    Inc(C[0]);
    C[C[0]] := d;
  end;
end;

var
  num, N: Integer;
  A, B, C: TNumber;
begin
  ClrScr;
  Read(N);
  One(A);
  One(B);
  num := 2;
  while num < N do begin
    Add(A, B, C);
    Inc(num);
    A := B;
    B := C;
  end;
  if N <= 2 then One(C);
  Print(C);
  ReadKey;
end.
Kingdom_Reborn вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Числа Фибоначчи zerc Помощь студентам 1 22.10.2010 19:50
Числа Фибоначчи vasyapupkin Помощь студентам 3 12.04.2010 11:27
Числа Фибоначчи. (WHILE) RUSSTUDENT Помощь студентам 2 02.03.2010 02:10
[Pascal] Задача про натуральные числа Knife Помощь студентам 1 22.04.2009 02:04
Числа Фибоначчи Witaliy Помощь студентам 1 26.02.2009 12:18