ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 10.09.2024
Просмотров: 29
Скачиваний: 0
cin >> а >> b >> с;
cout << “В пам'ять введені числа: \n”;
cout << “a= “ << а << “\nb= “ << b << “\nc= “ << с << “\n”;
z = а + b * с; // Число з b помножується на число із с
// до ас додається число з а і результат заноситься в z.
cout << “z = “ << а << “+” << b << “*” << с << “= “ << z << “\n”;
getch(); } // Очікується натиснення клавіші.
Помітимо, що в представленій програмі коди:
z = b * с; // Число з b помножується на число із с
// результат заноситься в z.
z = а + z; // Число з а підсумовується з числом з z.
що раніше використалися для обчислення значення z, замінюються на один код: z = а + b * с;. Цей код можна, наприклад, записати в наступних варіантах: a= а + b * с; або b = а + b * с; або c=a+b * с;
Слід звернути увагу слухачів на послідовний процес рішення задачі. Насправді цей процес є моделлю проектування складних програм. Приведемо ще один код програми рішення задачі 1.
Програма 7. Обчислює значення z=a+bc при будь-кому початкових значеннях чисел а, b, с.
Void main()
{ float n1, n2, n3, n4; // Резервується пам'ять для 4 цілих чисел.
clrscr(); // Очищається екран.
cout << “Ця програма обчислює значення z = а + bc “
<< “ при будь-яких початкових значеннях а, b, с \n”;
cout << “Введи з клавіатури 4 дійсні числа а b с: \n”;
cin >> n1 >> n2 >> n3;
cout << “В пам'ять введена наступна інформація: \n”;
cout << “а = “ << n1 << “\nb = “ << n2 << “\nc = “ << n3 << “\n”;
n4 = n1+ n2 * n3;
cout << “z = “ << n1 << “+” << n2 << “*” << n3 << “= “ << n4
<< “\n”;
getch(); } // Очікується натиснення клавіші.
На цьому прикладі демонструється той факт, що імена змінних – ця внутрішня справа програми, тобто на екран можна виводити символи, відповідні позначенням задачі, а в програмі для цих цілей використовувати інші імена. Але програму легше перевіряти, якщо імена змінних співпадають з іменами позначень, які використовуються в задачі. Тому там, де це можливо, імена, що використовуються в задачі, звичайно застосовують і в самій програмі.
На закінчення відзначимо одну прийняту умовність. Імена змінних при поясненні програм ототожнюють із значенням інформації, яка в них міститься, тобто запис
z = а + b * с;
прийнято пояснювати так: до а додається значення b, помножене на с, і результат заноситься в z. Хоча більш правильним було б наступне пояснення: до числа із змінної а додається результат множення числа з b с числом із с, результат заноситься в осередок з ім'ям z.
2. Математичні вирази і функції
Математичний вираз є комбінація із змінних, операцій, дужок, констант, елементарних математичних функцій і їх суперпозицій. Набір математичних функцій в мові С міститься в стандартному файлі math.h. Ці функції можна використовувати при обчисленні математичних виразів. Дамо неповний перелік цих функцій:
abs(i) – обчислює абсолютне значення цілого змінного i.
fabs(x) – обчислює абсолютне значення дійсного змінного x.
асos(x) – обчислює кут, косинус якого рівний x.
exp(x) – обчислює значення ех.
sin(x), cos(x), tan(x) – обчислює значення тригонометричних функцій.
pow(x,y) – Обчислює ху.
log(x) – обчислює натуральний логарифм ln x.
log10(x) – обчислює десятковий логарифм lg x.
Програма 8. Визначити значення числа e.
Void main()
{double e; // Визначається змінна для числа е.
clrscr();
e = exp(1); // Обчислюється e в 1-й ступені.
cout << “Число e = “<< e << “\n”;
getch(); }
Програма 9. Обчислити значення sin x. Значення змінної x задавати в градусах.
#include <math.h>
Void main()
{ float x, у; clrscr();
cout << “Введи кут в градусах для обчислення синуса “;
cin >> x;
cout << “Ви ввели ” << x << “ градусів\n”; у = x * асos(-1)/180.; // Переводимо градуси в радіани.
у = sin(у);
cout << “sin( “ << x << “ градусів)= ” << у << “\n”;
getch(); }
Складемо програму обчислення деякого математичного виразу.
Задача 2
Перед складанням програми треба відповісти на стандартний набір питань і виконати стандартний набір дій. Перерахуємо деякі з них. Уважно вивчити задачу. Основним результатом цього етапу винні бути відповіді на питання:
-
чи розв'язувалася подібна задача раніше;
-
чи можна розбити задачу на більш прості;
-
які дані входять в умову задачі;
-
яка форма представлення цих даних в програмі;
-
що викликає утруднення при рішенні (можна спростити або відкинути частину умов, які створюють труднощі);
-
розглянути окремий випадок задачі;
-
розглянути частину задачі.
Задачу 2 можна розбити на підзадачі, рішення яких не представляє праці, а саме послідовно обчислити значення: z = х2 + 1, у = z і т.д. З умови задачі виходить, що змінні х, у і z є дійсними числами.
Якщо рішення можна розбити на підзадачі, то програмісту (і не тільки йому), що починає, можна порекомендувати технологію поступового наближення до остаточного рішення задачі. Така технологія називається програмуванням від низу до верху. В реальному режимі технологія наближення до рішення полягає в наступному:
-
до деякого початкового тексту програми послідовно додаються нові директиви;
-
з кожним новим додаванням проводиться контроль виконання цих нових директив.
Програма 10. Остаточний код програми для вирішення задачі 2.
Void main()
{
float х, у, z;
float zl;
cout « “введи дійсне число х = “;
cin » х;
cout « “введи дійсне число у = “;
cin » у;
cout« "Введені числа: \nх = “ «х « “\nу = “ «у« “\n”;
z = fabs(cos(x))+ sin(у);
z = exp(z);
z1= sin(x)* sin(x)+cos(у) * cos(у);
z1 = z1/(sin((x + у)/2.)+ 1.5);
z = z1 - z; // Обчислюємо для задачі 2 значення
// вирази в дужках.
z = z * log(fabs(x)+ 1) - sqrt(x*x + 1); // Результат рішення задачі.
cout << “\nРезультат обчислення z = “ << z << “\n”;
getch();
}
Слід звернути увагу на контроль начальнных даних при проектуванні програми і на контроль проміжних результатів розрахунку.
Приведемо більш короткий варіант програми для вирішення задачі 2. Якщо студент освоїв теоретичний матеріал, то він відразу може запропонувати саме таку, більш коротку, реалізацію.
Програма 11
Void main()
{ float x, у, z;
cout << “Введи дійсне число x = “;
cin >> x;
cout << “Введи дійсне число у = “;
cin >> у;
cout << “Введені числа: \nx = “ << x << “\ny = “ << у << “\n”;
z=( sin(x)*sin(x)+cos(у)*cos(у))/ (sin((x+y)/2.) +1.5) - exp(fabs(cos(x))+ sin(у));
z=z*log(fabs(x)+1) -sqrt(x*x+1);
cout << “\nРезультат обчислення z= “ << z << “\n”;
getch(); }
Зауваження 1. Код даного варіанту програми коротше, але в цьому тексті важче контролювати проміжні результати розрахунку. Тому краще переходити до короткого варіанту, маючи текст першого варіанту. Технічно це зробити легко, копіюючи і об'єднуючи частини рядків першого варіанту програми.
Зауваження 2. При обчисленні виразів (наприклад, задача 2) алгебри програма виконує дії, грунтуючись на пріоритеті операторів. Таблиці пріоритетів операцій дані в кожному підручнику по мові С. Нагадаємо найпростіші правила:
-
пріоритет операцій множення і розподілу вище, ніж пріоритет складання і віднімання;
-
круглі дужки змінюють порядок пріоритетів.
З цих правил виходить, що машина спочатку проводить дії в круглих дужках, а потім решта операцій відповідно до пріоритету: спочатку виконуються операції множення і розподілу в тому порядку, в якому вони записані у виразі, а потім операції віднімання і складання в тому порядку, в якому вони записані.
Приклад 1. Директива z = а / b * с означає обчислення по наступній
а формулі: *c
Приклад 2. Директива z = а / (b * с) означає обчислення по наступній
а формулі: :