Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Помогите решить задачу

™°•°Mr.eClip'S°•°™ Ученик (78), закрыт 11 лет назад
Циклы с предусловием и постусловием
1. Рассмотрим последовательность, образованную дробями: 1/1, 2/1, 3/2,…, в которой числитель (знаменатель) следующего члена последовательности получается сложением числителей (знаменателей) двух предыдущих членов. Числители двух дробей равны 1 и 2, знаменатели 1 и 1. Найти первые член такой последовательности, который отличается от предыдущего члена не более чем на 0,001.
Лучший ответ
Миоко Таканава Гений (51590) 11 лет назад
Цикл с предусловием:

namespace N81590383;

interface

type
   ConsoleApp = class
   public
      class method Main(args: array of string);
   end;

implementation

class method ConsoleApp.Main(args: array of string);
begin
   var num1: Int32 := 1;
   var den1: Int32 := 1;
   var num2: Int32 := 2;
   var den2: Int32 := 1;
   var prev: Double := (num1 as Double) / den1;
   while Math.Abs(prev - (num2 as Double) / den2) > 0.001 do
   begin
      prev := (num2 as Double) / den2;
      num1 := num1 + num2;
      den1 := den1 + den2;
      num1 := num1 xor num2;
      num2 := num1 xor num2;
      num1 := num1 xor num2;
      den1 := den1 xor den2;
      den2 := den1 xor den2;
      den1 := den1 xor den2
   end;
   Console.WriteLine("{0} / {1} = {2}", num1, den1, prev);
   Console.WriteLine("{0} / {1} = {2}", num2, den2, (num2 as Double) / den2);
   Console.ReadKey
end;

end.

Цикл с постусловием:

program N81590383;

uses System;

begin
   var num1: Int32 := 1;
   var den1: Int32 := 0;
   var num2: Int32 := 1;
   var den2: Int32 := 1;
   var prev: Double;
   repeat
      num1 += num2;
      den1 += den2;
      num1 := num1 xor num2;
      num2 := num1 xor num2;
      num1 := num1 xor num2;
      den1 := den1 xor den2;
      den2 := den1 xor den2;
      den1 := den1 xor den2;
      prev := num1 / den1
   until Math.Abs(prev - num2 / den2) <= 0.001;
   Console.WriteLine('{0} / {1} = {2}', num1, den1, prev);
   Console.WriteLine('{0} / {1} = {2}', num2, den2, num2 / den2);
   Console.ReadKey
end.

Обе программы выводят две подряд идущие дроби из последовательности, разность между которыми не более 0,001.
Вторая выведенная в консоль дробь и есть "первый член последовательности, который отличается от предыдущего члена не более чем на 0,001".

P.S. Это же отношение соседних чисел Фибоначчи - ряд, который стремится к золотому сечению.
Остальные ответы
Похожие вопросы