МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИНАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ «ЛЬВІВСЬКА ПОЛІТЕХНІКА»
Інститут ІКНІКафедра ПЗ
ЗВІТ
До лабораторної роботи № 4На тему: «Реалізація алгоритмів з розгалуженнями в мові С++»З дисципліни: «Основи Програмування»
Лектор:Доцент каф. ПЗМакар В.М.
Тема роботи: Реалізація алгоритмів з розгалуженнями в мові С++
Мета роботи: Навчитися програмувати на мові С++ розгалужені обчислювальні процеси.
Теоретичні відомості
Алгоритм – це зрозумілі й точні вказівки виконавцю (комп’ютеру)
здійснити певну послідовність дій (обчислювальних операцій) для розв’язання
поставленої задачі.
Розрізняють такі форми запису алгоритмів:
словесний запис алгоритму (розмовна мова);
псевдокод (структурно-стилізована мова);
блок-схема (мова графічних символів);
комп’ютерна програма (мова програмування високого рівня).
В теорії алгоритмів доведено, що будь-який
алгоритм може бути побудований з використанням всього лише трьох базових конструкцій, а
саме з конструкцій слідування, розгалуження та повторення
На блок – схемах використовують такі блоки:
Блок виконання дій
Логічний блок
Блок модифікації
Блок виклику функції
Блок з’єднання
Блок початку/кінця
Оператор if виконує певну дію, якщо умова вибору є істинною, і пропускає виконання цієї дії, якщо умова є хибною. Синтаксичний опис оператора умови з одиничним вибором такий: if (<умова>) <оператор>; Спочатку обчислюється <умова>, яка синтаксично задається у вигляді виразу,результатом виконання якого є або ненульове значення (означає, що умова є істинною або умова виконується), або значення 0 (означає, що умова є хибною або умова не виконується).. Таким чином, виконання оператора if полягає в наступному: якщо <умова> є істинною, то виконується <оператор>, якщо <умова> є хибною, то оператор заданий після умови виконуватися не буде, а програма продовжить своє виконання з наступного після if оператора.
Вкладені структури if/else, які дозволяють реалізувати розгалуження обчислювального процесу більше ніж у двох напрямках. Тут слід пам’ятати, що кожне службове слово else відноситься до першого перед ним слова if.
Трактування умови в операторі if як звичайного виразу, дозволяє створювати в С++ умови виконання, які не обов’язково повинні містити операції, що за своєю логікою виконання завжди дають лише два можливих значення, як наприклад, операції порівняння. Ці операції, як відомо,дають результат 1, якщо відношення, задане операцією порівняння дійсно має місце, і результат 0 у протилежному випадку.
c=a/100;b=a%10;
cout<< (c==b ? "yes" : "Not");
За правилами мови С++ <оператор1> та <оператор2> мають бути структурно одним єдиним оператором. Якщо користувачеві необхідно виконати в цих місцях кілька операторів, то їх треба взяти в операторні дужки { }, тобто зробити ці декілька операторів складеним оператором. Складений оператор вживається у програмі завжди, якщо за синтаксисом мови С++ наступний оператор може бути тільки єдиним, а користувачеві потрібно виконати певну послідовність операторів.
Мова С++ має також умовну операцію ?:, яка є схожою на структуру if/else. Ця умовна операція є єдиною тернарною операцією, тобто такою, що має три операнда. Ці операнди разом з самою умовною операцією утворюють умовний вираз, який має такий вигляд: <умова> ? <вираз1> : <вираз2>. Тут, перший операнд є умовою, другий операнд містить значення умовного виразу в тому випадку, якщо умова є істинною, а третій операнд рівний значенню умовного виразу, якщо умова є хибною
Іншим типом операцій в мові С++, які завжди мають результат типу ‘істина’/’не істина’ є логічні операції. Цих операцій в С++ є три: операція логічного множення && (логічне І), операція логічного додавання || (логічне АБО) та операція логічного заперечення ! (логічне НЕ). Логіка операції логічного заперечення така: !0=1 та !1=0.За допомогою логічних операцій та операцій порівняння можна утворювати складні вирази для запису умови в операторі if/else. Наприклад, перевірка чи значення змінної x лежить в діапазоні від а до b може бути задана у вигляді такої умови: (x>=a && x<=b)
Оператор switch виконується так. Спочатку обчислюється значення виразу switch__expression. Тип значення повинен бути одним із цілих - char, int, unsigned int, long int і long unsigned. Обчислене значення зрівнюється зі значеннями констант вибору або константних виразів constant1, ... ,constantN.При спів падінні значення switch_expression із constanti виконується оператор statementi. Потім керування передається на оператор відразу після switch, якщо в i-й гілці є присутнім оператор break (оператор break здійснює негайний вихід з оператора switch). У протилежному випадку виконуються оператори в гілках i+1, i+2 і так далі доти, поки в них не зустрінеться оператор break або не буде виконаний оператор statement N+1. Якщо значення switch_expression не збіглося з жодною з констант constanti,... , constantN, виконується оператор у гілці, позначеній default. При її відсутності виконується наступний після switch оператор.
Для зміни послідовного виконання операторів використовується оператор безумовного переходу.
Індивідуальне завдання
За заданим натуральним восьмизначним числом знаходить подвоєний добуток ненульових
цифр цього числа та кількість нулів.
Код програми
#include<iostream>
#include<conio.h>
#include<math.h>
void main()
{
using namespace std;
setlocale(LC_ALL, "rus");
int a,b,c,n=0,d,suma,e,x,f,z,p;
vvid : cout<<"Введiть цiле натуральне восьмизначне число \n";
cin>>a;
if(a<1000000) cout<<"Число введено не вiрно \n";
if(a>1) b=a%100000000/10000000;
c=a%10000000/1000000;
if(c= =0) {n=n+1;c=1;}
d=a%1000000/100000;
if(d= =0) {n=n+1;d=1;}
e=a%100000/10000;
if(e= =0) {n=n+1;e=1;}
x=a%10000/1000;
if(x= =0) {n=n+1;x=1;}
f=a%1000/100;
if(f= =0) {n=n+1;f=1;}
z=a%100/10;
if(z= =0) {n=n+1;z=1;}
p=a%10;
if(p= =0) {n=n+1;p=1;}
suma = 2*b*c*d*e*x*f*z*p;
cout<<"Нулiв "<<n<<endl;
cout<<"Подвоєний добуток "<<suma<<endl;
_getch();
}
Протокол роботи
Ні Так
Так Ні
Так
Ні
Так
Ні Так
Ні
Так
Так
Ні
Так
Ні
Так
Ні
/
Висновок
Ми навчилися програмувати на мові С++ розгалужені обчислювальні процеси.