вівторок, 18 вересня 2012 р.

Розгалуження


Для того щоб зрозуміти розгалуження потрібно ввести поняття програми. Програма — це алгоритм представлений у якісь формі, комп’ютерна програма представлена у двійковій формі. Алгоритм — це набір послідовних дій. Наприклад, ми прокидаємося вранці, спочатку відкриваємо очі, а потім встаємо з ліжка і так далі, це є наш алгоритм який ми проводимо вранці. Часто виникають потреби робити алгоритм не послідовно, а в залежності від випадку треба робити ту чи іншу дію. Наприклад, ми пішли у магазин і якщо у ньому буде масло певної марки то купити його. У C++ це можна записати у вигляді:

if (butterExists == true)
   buyButter();

Команда if це є умова, після слова if йдуть дужки, а в них вказується логічне значення true або false. Замість логічних значень можна вказати логічні операції, наш вираз є прикладом логічної операції. Не важко здогататися, що butterExists це змінна типу bool, отже, можна було написати так:

if (butterExists)
   buyButter();

Це нічого не змінить. А тепер уявимо, що нам сказали купити масло такої марки, а якщо його не буде купити будь-яке масло. Це записується так:

if (butterBrandAExists)
   buyButterBrandA();
else
   buyOtherButterBrand();

Тобто else виконується коли наш варіант не правдивий. З цим я надіюсь зрозуміло. Після команди if можна виконати тільки один оператор, а що тоді робити коли операторів треба виконати багато. Для цього створили блочний оператор. Він задається:

{}

Усередину нього ми можемо помістити будь-яку кількість операторів а представлятеметься він як один. А тепер приклад:

#include <iostream>
using namespace std;

int main(){
   int a;
   int b;
   int c;
   cin >> a >> b;
   if (a > 10){
      a = a + b;
      c = ++a;
      cout << c;
   }
   else
      cout << “a <= 10” << endl;

   return 0; 
}

Також деколи бувають ситуації коли потрібно щось робити до якогось часу. Наприклад читати до 23 години та інше. Для цього у C++ є два оператори while та do while. Вони схожі але мають одну відміність.

While
Записується у вигляді
while ([умова])
оператор;
Умови також логічні, тобто все, що підходить для if підходить і сюди, але треба бути обережним, тому що якщо умова не змінюється і завжди істинна то цей цикл буде нескінченим, це приведе до зависання програми і вона не зможе нормально завершитися. Потрібно щоб умова змінювалась усередині циклу. Наприклад:

bool f = true;
while (f)
   f = false;

Цикл виконається 1 раз, тому що умова, яку він перевіряє змінюється у циклі і на наступну ітерацію умова буде не істина і цикл не буде виконуватися. Тут також можна використовувати блочний оператор.
Do while
Аналогічний оператор, відрізняється тільки, що точно один раз цикл виконається, його ще називають цикл з постумовою (аналогічно while — цикл з передумовою). Задається:

do{
   оператор(и);
}while ([умова])

Приклад:

double x = 2.0;
do {
   x = 1 / x;
}while  (x > 0.000001);
cout << x;

Деколи умову потрібно перевіряти усередині циклу. Тоді цикл роблять безкінечним, а всередині при якісь умові викликають оператор break;
Наприклад потрібно порахувати суму чисел від 1 до 10, використовуючи безкінечний цикл:

int i = 1;
int s = i;
while (){
   s += ++i;
   if (s > 10)
      break;
}
cout << s;

А тепер порахуємо числа від 1 до 10 не включаючи 5. Для цього будемо використовувати оператор continue:

#include <iostream>
using namespace std;

int main(){
   int i, s;
   i = s = 1;
   while (s <= 10){
      if (i == 5){
         i++;
         continue;
      }
      s += ++i;
   }
   cout << s << endl;
   return 0;
}

Є ще один тип циклу for. Він задається:

for ([ініціалізація ітератора];[умова];[збільшення ітератора]){

}

ініціалізація ітератора це просто блок для ініціалізації змінних. Там часто пишуть int i = 0; але можна проініціалізувати багато змінних. Наприклад:

int a, b;
for (a = 0, b = 1;;)

Всі вони пишуться через кому. Умова аналогічна для всіх циклів. Блок збільшення ітерації також умовний, там можна написати будь-який оператор:

for (int i = 0; true; cout << “I'm cycle”)
   break;

Воно виведе на екран рядок “I'm cycle”. Оператори continue та break; також дійсні. Будь-який for можна замініти на while. Наприклад, перепишемо попердні оператори:

int i = 0;
while (true){
   cout << “I'm cycle”;
   break;
}

for може не містити якогось блоку або всіх блоків. У останньому випадку буде безкінечний цикл. Тобто
for (;;)

На сьогодні все. Не забудьте потренуватися, адже приктила найголовніше у будь-якій справі :-).

Немає коментарів:

Дописати коментар