§ 4. Аператар галінавання

4.2. Рашэнне задач з выкарыстаннем аператара галінаваннянием оператора ветвления

 

Прыклад 4.2. Таня і Каця жывуць у розных дамах. Ім стала цікава, хто з іх жыве бліжэй да школы. Яны змясцілі на карце прамавугольную сістэму каардынат так, каб школа мела каардынаты (0, 0). Вядома, што Танін дом мае каардынаты (x1; y1), а Кацін — (x2; y2). Дзяўчынкі ходзяць у школу па прамой і праходзяць розныя адлегласці. Напісаць праграму, якая вызначыць, чый дом знаходзіцца бліжэй да школы.

Этапы выканання задання

 I. Зыходныя даныя: каардынаты дамоў дзяўчынак x1, y1, x2, y2.

II. Вынік: паведамленне пра тое, чый дом бліжэй.

III. Алгарытм рашэння задачы.

1. Увод каардынат дамоў.
2. Вылічэнне адлегласцей r_T  — ад Танінага дома і r_K  —  ад Кацінага дома да школы. Для вылічэння адлегласці выкарыстаем тэарэму Піфагора:

«math xmlns=¨http://www.w3.org/1998/Math/MathML¨»«msub»«mi»r«/mi»«mi»T«/mi»«/msub»«mo»§#160;«/mo»«mo»=«/mo»«msqrt»«msubsup»«mi»x«/mi»«mn»1«/mn»«mn»2«/mn»«/msubsup»«mo»§#160;«/mo»«mo»+«/mo»«mo»§#160;«/mo»«msubsup»«mi»y«/mi»«mn»1«/mn»«mn»2«/mn»«/msubsup»«/msqrt»«mo»§#160;«/mo»«/math»     и     «math xmlns=¨http://www.w3.org/1998/Math/MathML¨»«msub»«mi»r«/mi»«mi»K«/mi»«/msub»«mo»§#160;«/mo»«mo»=«/mo»«msqrt»«msubsup»«mi»x«/mi»«mn»2«/mn»«mn»2«/mn»«/msubsup»«mo»§#160;«/mo»«mo»+«/mo»«mo»§#160;«/mo»«msubsup»«mi»y«/mi»«mn»2«/mn»«mn»2«/mn»«/msubsup»«/msqrt»«mo»§#160;«/mo»«mo».«/mo»«/math»

3. Параўнанне адлегласцей і вывад адказу.

IV. Апісанне пераменных: x1, y1, x2, y2, r_T, r_K  —  тып double.

Прыклад 4.3. Праверыць, ці з’яўляецца ўведзены лік трохзначным, і калі так, то вывесці цотныя лічбы гэтага ліку.

Этапы выканання задання

 I. Зыходныя даныя: a (трохзначны лік).

II. Вынік: пераменныя a1, a2, a3 (лічбы ліку) або паведамленні: «не трохзначны», «няма цотных лічбаў»..

III. Алгарытм рашэння задачы.

1. Увод зыходнага ліку. 
2. Праверка ліку. Лік a з’яўляецца трохзначным, калі 99 < a < 1000. 
3. Калі лік трохзначны — вылучаем яго лічбы.

3.1. Для вылучэння першай лічбы a1 знаходзім цэлую частку ад дзялення ліку a на 100. 
3.2. Для вылучэння другой лічбы a2 ліку a знаходзім астачу ад яго дзялення на 100, а затым цэлую частку ад дзялення атрыманай астачы на 10. 
3.3. Апошняя лічба ліку a3 з’яўляецца астачай ад дзялення ліку a на 10. 
3.4. Для праверкі лічбы на цотнасць трэба праверыць, ці роўна нулю астача ад дзялення лічбы на 2. 
3.5. Калі ні адна з лічбаў ліку не з’яўляецца цотнай, то вывесці адпаведнае паведамленне.

4. Вывад выніку.

IV. Апісанне пераменных: a, a1, a2, a3 – int.

Прыклад 4.4. Вылічыць значэнне функцыі для зададзенага x.

«math xmlns=¨http://www.w3.org/1998/Math/MathML¨»«mi»f«/mi»«mo»(«/mo»«mi»x«/mi»«mo»)«/mo»«mo»§#160;«/mo»«mo»=«/mo»«mo»§#160;«/mo»«mfenced open=¨{¨ close=¨¨»«mtable columnalign=¨left¨»«mtr»«mtd»«mi»x«/mi»«mo»§#160;«/mo»«mo»§#8212;«/mo»«mo»§#160;«/mo»«mn»2«/mn»«mo»,«/mo»«mo»§#160;«/mo»«mi»§#1082;§#1072;§#1083;§#1110;«/mi»«mo»§#160;«/mo»«mi»x«/mi»«mo»§#160;«/mo»«mo»§#60;«/mo»«mo»-«/mo»«mn»2«/mn»«/mtd»«/mtr»«mtr»«mtd»«mi»x«/mi»«mo»,«/mo»«mo»§#160;«/mo»«mi»§#1082;§#1072;§#1083;§#1110;«/mi»«mo»§#160;«/mo»«mo»§#8212;«/mo»«mo»§#160;«/mo»«mn»2«/mn»«mo»§#160;«/mo»«mo»§#8804;«/mo»«mo»§#160;«/mo»«mi»§#1093;«/mi»«mo»§#160;«/mo»«mo»§#8804;«/mo»«mn»2«/mn»«/mtd»«/mtr»«mtr»«mtd»«mn»2«/mn»«msqrt»«mi»§#1093;«/mi»«mo»§#160;«/mo»«mo»+«/mo»«mo»§#160;«/mo»«mn»2«/mn»«/msqrt»«mo»,«/mo»«mo»§#160;«/mo»«mi»§#1082;§#1072;§#1083;§#1110;«/mi»«mo»§#160;«/mo»«mi»§#1093;«/mi»«mo»§#160;«/mo»«mo»§#62;«/mo»«mn»2«/mn»«/mtd»«/mtr»«/mtable»«/mfenced»«/math»

Этапы выканання задання

I. Зыходныя даныя: пераменная х (значэнне пераменнай).

II. Вынік: пераменная f (значэнне функцыі).

III. Алгарытм рашэння задачы.

1. Увод зыходных даных. 
2. Праверка значэння x і вылічэнне значэння функцыі ў залежнасці ад значэння аргумента.

2.1. Спачатку праверым праўдзівасць умовы x < –2.  Калія яна праўдзівая, то вылічым значэнне функцыі па формуле  f = x – 2. Інакш (гэта значэнні, для якіх x ≥ –2) праверым наступную ўмову.
2.2. Правяраем умову x ≤ –2. Калі яна правільная, то значэнне функцыі вылічым па формуле f = x3, інакш (застаюцца значэнні, для якіх x > 2) значэнне функцыі вылічваецца па формуле «math style=¨font-family:Arial¨ xmlns=¨http://www.w3.org/1998/Math/MathML¨»«mstyle mathsize=¨16px¨»«mi»f«/mi»«mo»§#160;«/mo»«mo»=«/mo»«mo»§#160;«/mo»«mn»2«/mn»«msqrt»«mi»x«/mi»«mo»§#160;«/mo»«mo»+«/mo»«mo»§#160;«/mo»«mn»2«/mn»«/msqrt»«mo».«/mo»«/mstyle»«/math»

3. Вывад выніку.

IV. Апісанне пераменных: x, f — double.

Прыклад 4.5. Вызначыць, ці належыць пункт a(x, у) дадзенай вобласці.

Этапы выканання задання

I.Зыходныя даныя: пераменныя x і y (каардынаты пункта).

II. Вынік: слова «так» або «не» ў залежнасці ад прыналежнасці пункта зафарбаванай вобласці.

III. Алгарытм рашэння задачы.

1. Увод зыходных даных.
2. Вобласць абмежавана трыма прамымі:  y = x , y = –x, y = a. Пункт належыць вобласці, калі адначасова выконваюцца тры ўмовы:  y ≥ x, y ≥ –x, y ≤ a. Каб вызначыць, які са знакаў («≤», «≥») паставіць ва ўраўненне замест знака «=», дастаткова ўзяць адвольны пункт, які належыць вобласці, і паглядзець, як будуць выконвацца ўмовы для гэтага пункта. Напрыклад, пры a = 5 пункт з каардынатамі (1; 3) належыць вобласці і выконваюцца наступныя ўмовы: 3 ≥ 1, 3 ≥ –1 , 3 ≤ 5.

3. Вывад выніку.

IV. Апісанне пераменных: x, y – double.

Прыклад 4.2.

V. Праграма:

#include <iostream>

#include <cmath>

 

using namespace std;

 

int main()

{

  setlocale(0,"");

  double x1, y1, x2, y2;

  cout << "Танін дом" << endl;

  cin >> x1 >> y1;

  cout << "Кацін дом" << endl;

  cin >> x2 >> y2;

  double r_T = sqrt(x1 * x1 + y1 * y1);

  double r_K = sqrt(x2 * x2 + y2 * y2);

  if (r_T < r_K)

    cout << "Танін дом бліжэй" << endl;

  else

    cout << "Кацін дом бліжэй" << endl;

  return 0;

}

VI. Тэсціраванне.

Танін дом — x1 = 2.3, y1 =  4.5, Кацін дом — x2 = −2.1, y2 = 4.9.

Вынік:

Танін дом — x1 = −6.1, y1 = 4.5, Кацін дом — x2 = −1.71, y2 = −3.2.

Вынік:

Прыклад 4.3.

V. Праграма:

#include <iostream>

 

using namespace std;

 

int main()

{

  int a;

  cout << "vvedite a=";

  cin >> a;

  if (> 99 && a < 1000)

  {

    int a1 = a / 100;

    int a2 = a / 10 % 10;

    int a3 = a % 10;

    cout << "chetnye cifry:" << endl;

    if ( a1 % 2 == 0)

      cout << a1 << endl;

    if (a2 % 2 == 0)

      cout << a2 << endl;

    if (a3 % 2 == 0)

      cout << a3 << endl;

    if (a1 % 2 && a2 % 2 && a3 % 2 )

      cout << "net takih" << endl;

  }

  else

    cout<<"chislo ne trehznachoe"<<endl;

  return 0;

}

VI. Тэсціраванне. Вынік для значэння 345:

Іншыя варыянты зыходных даных

VII. Аналіз вынікаў. Для поўнай праверкі праграмы патрабуецца яшчэ праверыць значэнні, у якіх лічбаў менш за тры і якія змяшчаюць 1 цотную лічбу (на розных пазіцыях), дзве цотныя лічбы.

Прыклад 4.4.

V. Праграма:

#include <iostream>

#include <cmath>

 

using namespace std;

 

int main()

{

  double x,f;

  cout << "x = ";

  cin >> x;

  if (< -2)

    f = x - 2;

  else

    if (<= 2)

      f = x * x * x;

    else

      f = 2 * sqrt(+ 2);

  cout << "f = " << f << endl;

  return 0;

}

V. Тэсціраванне:

VI. Аналіз вынікаў. Лік 5 большы, чым 2, таму вылічэнне значэння функцыі адбываецца па формуле «math xmlns=¨http://www.w3.org/1998/Math/MathML¨»«mi»f«/mi»«mo»§#160;«/mo»«mo»=«/mo»«mo»§#160;«/mo»«mn»2«/mn»«msqrt»«mi»x«/mi»«mo»+«/mo»«mn»2«/mn»«/msqrt»«mo»§#160;«/mo»«mo»=«/mo»«mn»2«/mn»«msqrt»«mn»7«/mn»«/msqrt»«mo».«/mo»«/math» Для ліку 0.3 вылічэнні адбываюцца па формуле «math xmlns=¨http://www.w3.org/1998/Math/MathML¨»«mi»f«/mi»«mo»§#160;«/mo»«mo»=«/mo»«mo»§#160;«/mo»«msup»«mi»x«/mi»«mrow»«mn»3«/mn»«mo»§#160;«/mo»«/mrow»«/msup»«mo»=«/mo»«mo»§#160;«/mo»«msup»«mrow»«mo»(«/mo»«mo»-«/mo»«mn»0«/mn»«mo».«/mo»«mn»3«/mn»«mo»)«/mo»«/mrow»«mn»3«/mn»«/msup»«/math». Поўная праверка праграмы патрабуе ўвесці значэнні, якія належаць кожнаму з названых ва ўмове прамежкаў.

Прыклад 4.5.

V. Праграма:

#include <iostream>

 

using namespace std;

 

int main()

{

  setlocale(0, "");

  double a, x, y;

  cout << "a=";

  cin >> a;

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

  cin >> x >> y;

  if (>= x && y >= -&& y <= a)

    cout << "так" << endl;

  else

    cout << "не" << endl;

  return 0;

}

VI. Тэсціраванне:

VII. Аналіз вынікаў. Поўная праверка праграмы патрабуе ўвесці значэнні, якія належаць кожнай з абласцей, што ўтвараюцца пры перасячэнні прамых.