iİnformatikanın məktəbdə tədrisi

З-10

Задачи на целые числа без использования цикла

Даны действительные числа X, Y (Y  ≠   X). Меньшее из этих двух чисел заменить их полу суммой, а большее – их удвоенным произведением.

 

Задача кажется очень простой, но в ней имеется очень интересный нюанс. Разберем лучше на примере:

Пусть число x  равно 4, а   y равен 6. Тогда согласно условию задачи x  должно стать равным (4+6)/2 = 5, а  y   должно стать равным 2*4*6 = 48.

Но если мы в программе сделаем x равным 5, а затем будем вычислять  y, то получим

 y = 2*x*y = 2*5*6=60 – а должно было 48! Дело в том, что мы при вычислении y использовали измененное значение  x.

Поэтому в программе мы предварительно вычисляем и запоминаем в вспомогательных переменных a и b значения полу суммы и удвоенного произведения чисел  x  и  y, а уж затем присваиваем им новые значения.

 

Program A1_10;

var

a,b,x,y:real;

begin

 readln(x,y);

 a:=(x+y)/2;

 b:=2*x*y;

 if x<y then

     begin x:=a; y:=b; end

        else

     begin x:=b; y:=a; end;

   writeln(x:0:6,'  ',y:0:6);

 readln;

end.

//Program A1.10

#include <iostream>

 using namespace std;

 int main()

{  double x,y,a,b;

    cin>>x>>y;

    a=(x+y)/2;

    b=2*x*y;

    if(x<y) {x=a; y=b;}

    else      {x=b; y=a;}

    cout<<x<<" "<<y<<endl;

    return 0;

}