Миоко Таканава
Гений
(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. Это же отношение соседних чисел Фибоначчи - ряд, который стремится к золотому сечению.
1. Рассмотрим последовательность, образованную дробями: 1/1, 2/1, 3/2,…, в которой числитель (знаменатель) следующего члена последовательности получается сложением числителей (знаменателей) двух предыдущих членов. Числители двух дробей равны 1 и 2, знаменатели 1 и 1. Найти первые член такой последовательности, который отличается от предыдущего члена не более чем на 0,001.