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

З-2

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


Даны два целых числа. Поменять местами их значения.

 Рассмотрим два способа обмена значений двух переменных a и b.

1-ый способ. В этом способе мы используем третью вспомогательную переменную.  

Представьте, что у вас имеются два стакана; один, наполненный Фантой, другой Кока-Колой. Требуется   поменять содержимое этих стаканов. Очевидно надо использовать дополнительный пустой стакан. Точно так же надо поступать и с переменными:

Сначала запоминаем      a (c:=a;  в пустой стакан переливаем Фанту), затем b переносим в a (a:=b;  в освободившийся стакан переливаем Коку),  c  переносим в b (b:=c; в пустой стакан переливаем содержимое вспомогательного стакана – Фанту)

 

Program A1_2a;

var a,b,c:integer;

begin

 readln(a,b);

 c:=a;  a:=b;  b:=c;

 writeln(a,' ',b);

 readln;

end.

// Program A1.2a;

#include <iostream>

 

using namespace std;

 

int main()

{  int a,b,c;

    cin>>a>>b;

    c=a;     a=b;     b=c;

    cout << a<<" "<<b << endl;

    return 0;

}

 

2-ой способ. В этом способе не используется дополнительная переменная. Посмотрите сначала программу, а потом мы дадим пояснение.

 

Program A1_2b;

var a,b,c:integer;

begin

 readln(a,b);

 a:=a+b; b:=a-b; a:=a-b;

 writeln(a,' ',b);

 readln;

end.

// Program A1.2b;

#include <iostream>

 

using namespace std;

 

int main()

{  int a,b,c;

    cin>>a>>b;

    a=a+b; b=a-b; a=a-b;

   cout << a<<" "<<b << endl;

    return 0;

}

Пояснение. На первый взгляд удивительно, но эти три оператора (a:=a+b; b:=a-b; a:=a-b; или a=a+b; b=a-b; a=a-b;) выполняют требуемый нам обмен. Проверим: пусть a=5  и b=7. Тогда после первого оператора a:=a+b; получим a=5+7=12. После второго оператора   b:=a-b; получим b=12-7=5. А после третьего оператора a:=a-b; получим a=12-5=7. Все, обмен значениями состоялся. 

Примечание. Вообще этот способ какой то выкрутасный. Ну, подумаешь, сократили на одну переменную. И, кстати, даже не для всех целых переменных этот способ годится. (Кто скажет: для каких не годится?). Но все таки красиво!