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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 04.04.2011, 18:20   #1
Neitrosha
Пользователь
 
Регистрация: 26.10.2010
Сообщений: 29
По умолчанию Фибоначчиева система счисления. Вывод чисел

Как сделать, чтобы он выводил кроме коэффициетов еще и числовые значения?
число 31.
последовательность до него-
1>2>3>5>8>13>21.
берется число 21, оно уже автоматически попадает, так как меньше 31
остаток 10. 10 сравниваем с 13, число 13 отпадает. 10 сравниваем с 8, берем, остаток 2. и сравнивая с 2, получим остаток 0.

в итоге, если использовать 0 и 1:
1*21+0*13+1*8+0*5+0*3+1*2+0*1. т.е. 31=21+8+2
работает-то правильно. но хотелось бы, чтобы он выводил это еще и суммой, и чтобы в самом начале отображал саму последовательность


Код:
program fibo;

{$APPTYPE CONSOLE}

uses
  SysUtils;


    Var
        i,n,x,s,m,a:integer;
        f:string;
         p:boolean;
     begin
           Writeln('vvedite chislo');
           readln(x);
           p:=true;
           while x<>0 do
                 begin
                      n:=1;
                      s:=0;
                      i:=0;
                      while n<x do
                            begin
                              s:=s+n;
                              n:=s+n;
                              inc(i,2);
                              end;
                              if x<=s then
                                            begin
                                                x:=x-(n-s);
                                                dec(i,2);
                                                end
                                                else
                                                if x=n then
                                                x:=x-n
                                                else
                                                      begin
                                                        x:=x-s;
                                                        dec(i,1);
                                                      end;
                                                      if p then
                                                begin
                                                  a:=i;
                                                  f:='1';
                                                  for m:=2 to i do
                                                      begin
                                                      f[m]:='0';
                                                      f:=f+f[m];
                                                      end;
                                                  p:=false
                                                  end
                                                  else
                                                        begin
                                                        delete(f,a-i,1);
                                                        insert('1',f,a-i+1);
                                                        end;
                                                  end;
                                        writeln('pol chislo' ,f);
                                        readln;
end.

Последний раз редактировалось Neitrosha; 04.04.2011 в 18:25. Причина: немного исправил
Neitrosha вне форума Ответить с цитированием
Старый 05.10.2020, 18:53   #2
canadamoscow
Пользователь
 
Аватар для canadamoscow
 
Регистрация: 16.05.2020
Сообщений: 57
По умолчанию

На PascalABC.NET
Код:
begin
 var n := Readinteger('n =');
 var f := SeqWhile(1,1, (a,b) -> a + b, fib -> fib <= n).toArray; //ряд Фибоначчи от числа <=n до 1
 f.Println;
 var s := n + ' = ' + f.Last.toString;
 n -= f.Last;
 For var j := f.High-1 downto 1 do //пробегаем по всем разрядам от большего к меньшему
   if n >= f[j] then  begin 
      s += ' + ' + f[j].ToString;
      n -= f[j] 
   end; 
 s.Println;
end.
canadamoscow вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Система счисления medic357 Помощь студентам 2 29.09.2010 17:05
Система счисления artemavd Общие вопросы Delphi 10 04.07.2010 19:00
система счисления с 2 в 16 never smile Помощь студентам 0 19.03.2010 16:30
Паскаль! Система счисления! Перевод чисел Darf Помощь студентам 9 20.06.2009 13:23