- •Алгоритмічні мови та програмування Методичні вказівки
- •Алгоритмічні мови та програмування Методичні вказівки
- •03056, Київ, вул..Політехнічна, 12, корп. 17
- •Порядок виконання роботи
- •Загальні відомості для виконання лабораторної роботи
- •0X число (шістнадцяткове),
- •0 Число(число (вісімкове),
- •Результат виконання
- •Порядок виконання роботи
- •Порядок виконання роботи
- •Порядок виконання роботи
- •Додаток 1
- •Додаток 2
- •Порядок виконання роботи
- •Порядок виконання роботи
- •Доступ до елемента масиву
- •Запис вектора у стовпець (рядок) масиву
- •Зміна стовпців масиву
- •Додаткові засоби
- •Теоретична частина
- •Порядок виконання роботи
- •Теоретична частина
- •Порядок виконання роботи
- •Додаток
- •Порядок виконання роботи
- •Результати виконання програми
- •Результати виконання програми
- •Порядок виконання роботи
- •Добирання формул за дослiдними даними згiдно методу найменших квадратiв
- •Порядок виконання роботи
- •Порядок виконання роботи
- •Додаток 1
- •Додаток 2
- •Додаток 3
- •Порядок виконання роботи
- •//Функція
- •//Динамічні масиви
- •Порядок виконання роботи
- •Порядок виконання роботи
- •Порядок виконання роботи
- •Порядок виконання роботи
Результат виконання
a = -20 b = 20
bit complement a,b
a = ffffffec b = 14
bit inverse a
a =ffffffeb
Примітка
Оператор cout виконує неявне перетворення систем числення згідно опису типу змінної. Для явного перетворення використовуються параметри : dec (decimal) – у десяткову , hex (hexadecimal) - у шістнадцяткову .
Лабораторна робота № 2
РОЗРАХУНОК ЗНАЧЕНЬ АРИФМЕТИЧНИХ ВИРАЗIВ
Мета роботи - створення програми для розрахунку значень ариф- метичних виразiв,оцiнка похибок розрахункiв
Порядок виконання роботи
А.При пiдготовцi:
1.Ознайомитися з програмою (файл LAB2.CPP),яка забезпечує розрахунок значень арифметичного виразу
a = xy - y2 + 7,2
з одинарною,подвiйною та пiдвищеною точностями та виразу
z = sin(x)
з подвiйною точнiстю.
2.Написати програму розрахунку значень арифметичних виразiв a i z iз таблицi.Значення a обчислити з одинарною, подвiйною та пiдвищеною точностями, щоб потiм порiвняти результати з точним значенням та оцiнити похибку округлення при розрахунках на ПК.
3.Обчислити найбiльш можливу похибку розрахунку значення виразу a на ПК.
В.У лабораторii:
1.Ввести програму у ПК та виконати ii.
2.Порiвняти отриманi результати з розрахунками на паперi.
У разi потреби скористуватися програмою з лабораторноi роботи № 1 (файл LAB1.CPP) для пояснення розбiжностей мiж отриманими значеннями та точним значенням виразу a.
Змiст звiту:
1.Програма.
2.Оцiнка похибок розрахункiв.
3.Результати виконання програми з поясненнями.
4.Висновки по роботi.
|
№ варіанту |
Арифметичні вирази |
Значення змінних | ||
|
1 |
x=4,3 y=2,1 | |||
|
2 |
x=3,5 y=1,5 | |||
|
3 |
x=5,2 y=2,6 | |||
|
4 |
x=3,45 y=1,15 | |||
|
5 |
x=2,7 y=1,35 | |||
|
6 |
x=2,4 y=1,5 | |||
|
7 |
x=1,2 y=2,1 | |||
|
8 |
z=31lg(x+4)-2,1arctg(sin0,7x)+0,00027cos0,7x a=xxy+2yy-1 |
x=-2,3 y=3,1 | ||
|
9 |
x=2,4 y=0,6 | |||
|
10 |
x=-5,1 y=1,7 | |||
11 |
x=3,4 y=0.85 | ||||
|
12 |
x=6,3 y-0,7
| |||
|
13 |
x=6,2 y=3,1 | |||
|
14 |
x=4,2 y=2,1 | |||
|
15 |
x=1,2 y=0,6 | |||
|
16 |
x=0,5 y=1,5 | |||
|
17 |
x=1,4 y=0,7 | |||
|
18 |
x=1,1 y=0,7 | |||
|
19 |
x=2,1 y=1,1 | |||
|
20 |
x=5 y=1,5 | |||
|
21 |
x=1,5 y=4,5 | |||
|
22 |
x=1,5 y=0,9 | |||
|
23 |
x=1,4 y=2,5 | |||
|
24 |
x=1,7 y=1,7 | |||
|
25 |
x=1,15 y=2,3 | |||
|
26 |
x=0,25 y=0,1 | |||
|
27 |
x=3,3 y=6,6 | |||
|
28 |
x=0,4 y=-0,8 | |||
|
29 |
x=0,7 y=1,4 | |||
|
30 |
x=1,6 y=0,8 | |||
|
31 |
x=3,2 y=1,6 |
Програми
/*Лабораторна робота 2 (файл LAB2.СPP)*/
/*Розрахунок значень арифметичних виразiв*/
#include <iostream.h>
#include <math.h>
#include <conio.h>
int main ()
{
/* значення a, x, y, z з пiдвищеною точнiстю */
long double a1, x1, y1;
/* значення a, x, y, z з подвiйною точнiстю */
double a2, x2, y2, z;
/* значення a, x, y з одинарною точнiстю */
float a3, x3, y3;
clrscr ();
/*Розрахунок значення арифметичного виразу
a=xy – y2 + 7.2 */
cout << "Введiть значення x (2.4) три рази\n";
cin >> x1 >> x2 >> x3;
cout << "\nВведiть значення y (1.5) три рази\n";
cin >> y1 >> y2 >> y3;
a1 = x1*y1*y1 - y1 + 7.2l;
a2 = x2*y2*y2 - y2 + 7.2;
a3 = x3*y3*y3 - y3 + 7.2f;
cout.precision(8);
cout<<"\n Одинарна точнiсть \n "<<"a3="<<a3<<" x3="<<x3<<" y3="<<y3;
cout.precision(17);
cout<<"\n Подвiйна точнiсть \n "<<"a2="<<a2<<" x2="<<x2<<" y2="<<y2;
cout.precision(20);
cout<<"\n Пiдвищена точнiсть \n "<<"a1="<<a1<<" x1="<<x1<<" y1="<<y1;
getch ();
/* арифметичний вираз z=sin(x)*/
z = sin(x2); cout.precision(17);
cout << "\n\n z=" << z;
getch(); return 0;
}
Додаток
Математичні функції бібліотеки math.h
Функція математики |
Функції С/С++ |
Функція математики |
Функції С/С++ |
arc cos x |
acos(x) |
ln x |
log(x) |
arc sin x |
asin(x) |
lg x |
log10(x) |
arc tg x |
atan(x) |
xy |
pow(x,y) |
cos x |
cos(x) |
sin x |
sin(x) |
Ch x |
cosh(x) |
sh x |
sinh(x) |
ex |
exp(x) |
√ x |
sqrt(x) |
| x | |
fabs(x) |
tg x |
tan(x) |
Th x |
tanh(x) |
|
|
Наведені у таблиці функції є функціями подвійної точності (тип double ) , аргумент х також типу double . Функції підвищеної точності мають суфікс l у імені функції, наприклад, sinl(x) , cosl(x) , tanl(x) ,sqrtl(x) , аргумент х також типу long double .
Функція abs(x) повертає абсолютне цілочислове значення (тип int ) для цілочислового (тип int ) аргумента х .
Функція labs(x) повертає абсолютне цілочислове значення (тип long int ) для цілочислового (тип long int ) аргумента х .
Функція pow10(i) повертає значення типу double 10i для аргумента типу int .
Для функції √ (x2 + y2) є функція типу double hypot(x,y) для аргументів типу double .
Корисні для використання у програмах наведені у бібліотеці округлені до 21 десяткової цифри поширені у математиці константи
/* Constants rounded for 21 decimals. */
І’мя константи |
Значення |
Позначення у програмі |
E |
2.71828182845904523536 |
M_E |
log2 e |
1.44269504088896340736 |
M_LOG2E |
lg e |
0.434294481903251827651 |
M_LOG10E |
ln 2 |
0.693147180559945309417 |
M_LN2 |
ln 10 |
2.30258509299404568402 |
M_LN10 |
Π |
3.14159265358979323846 |
M_PI |
π/2 |
1.57079632679489661923 |
M_PI_2 |
π/4 |
0.785398163397448309616 |
M_PI_4 |
1/ π |
0.318309886183790671538 |
M_1_PI |
2/ π |
0.636619772367581343076 |
M_2_PI |
1/√ π |
0.564189583547756286948 |
M_1_SQRTPI |
2/√ π |
1.12837916709551257390 |
M_2_SQRTPI |
√ 2 |
1.41421356237309504880 |
M_SQRT2 |
1/√ 2 |
0.707106781186547524401 |
M_SQRT_2 |
Якщо при використанні функцій типи аргументів не збігаються із заданими у функціях , то відбувається неявне перетворення типів аргументів до потрібних. Також реалізується неявне перетворення типу значення, яке повертає функція, до типу місця , наприклад , до типу лівої частини оператора присвоювання.
Приклад.
… float x,y; y = sin(x); //неявне перетворення типів float до типів double .
ПОХИБКИ РОЗРАХУНКIВ НА ЕОМ
1.ОСНОВНI ПОНЯТТЯ
_ _ _ _
x=x+ex бx=ex/x ; y=y+ey бy=ey/y ;
_ _
x,y - точнi значення, x,y -наближенi значення;
ex,ey -абсолютнi похибки, бх,бy- вiдноснi похибки.
2.ВIДНОСНА ПОХИБКА ОКРУГЛЕННЯ НА ПЕОМ
Розрахунки з одинарною точнicтю
б0 <= 2-23 = 1.2*10-7 .
Розрахунки з подвiйною точнiстю
б0 <= 2-52 =2.2*10-16 .
3.ПОШИРЕННЯ ПОХИБОК ПРИ ВИКОНАННI ОПЕРАЦIЙ
3.1. ДОДАВАННЯ
_ _
x y
z=x+y; ez=ex+ey; бz=бx----- + бy----- .
_ _ _ _
x + y x + y
3.2. ВIДНIMАННЯ
_ _
x y
z=x-y; ez=ex-ey; бz= бx ------ + бy --------.
_ _ _ _
x – y y - x
3.3.MНОЖЕННЯ
_ _
z=x*y; ez=ex*y + ey*x ; бz = бx + бy .
3.4. ДIЛЕННЯ
_ _ 2
z=x/y; ez=ex/y - ey/y ; бz = бx - бy.
m
3.5. z=x ; бz = m*бx.
__
3.6. z=Vx ; бz = 0.5*бx.
4. ПОХИБКА ПРИ ВИКОНАННI ОПЕРАЦII НА ПЕОМ
Z = X <операцiя> Y ; бZ <= бZ + б0
операцiя округлення
5.ПРИКЛАД РОЗРАХУНКУ ПОХИБКИ ОТРИMАННЯ ЗНАЧЕННЯ ВИРАЗУ НА ЕОМ
Вираз z = (x + y)/v*x + w.Змiннi x, y, v, w мають точнi значення,
наприклад, x = 4.3, y = 2.4, v = 3, w = 7.6 ,тобто, ex=ey=ev=ew=0;
точне значення виразу z = 17.06.
Розрахунок з одинарною точнiстю.
5.1.Перша опера
a = x + y; бa <= б0 =1.2*10-7 ; бx=бy=0.
5.2.Друга операцiя:
b=a/v; бb <= бa - бv + б0 =1.2*10-7 + 1.2*10-7 = 2.4*10-7 ;
бv = 0.
5.3.Третя операцiя:
c=b*x; бc <= бb + бx + б0 = 2.4*10-7 + 0 + 1.2*10-7 =3.6*10-7 .
5.4.Четверта операцiя:
_ c w
z=c+w; бz <= бc ------ + бw ------ + б0 = 3.6*10-7 *9.46/(9.46+7.6)+
c + w c + w
+ 0 + 1.2*10-7 = 1.9996*10-7 + 1.2*10-7 =3.196*10-7 .
dz - гранична абсолютна похибка;
_ _
z - dz <= z <= z +dz ;
_
dz = z * бz =17.06 3.196*10-7= 5.45*10-6 ;
17.05999455 <= z <= 17.06000545.
Виконані за допомогою програми LAB2.СPP розрахунки дають такі значення z :
z = 17.06000137 (з одинарною точнiстю),
z = 17.05999999999999872 (з подвiйною точнiстю) ,
z = 17.06000000000000000168 (з пiдвищеною точнiстю) .
Розрахунки у системі Mathcad дають такі результати :
Лiтература
Д.Мак-Кракен,У.Дорн Численные методы и программирование
на Фортране.-М.;Мир,1977
Розрахунок значення виразу у Mathcad
1.Введення аргументів та їх значень
Введіть з клавіатури ім’я аргументу , натисніть „ : ” або „ := „ із табло Calculator .Додайте числове значення (можливий вираз) і натисніть Enter .
Наприклад,
x x: x:= x:=3.5 Enter x:=3.5
2.Розрахунок виразу
Введіть з клавіатури потрібний вираз і натисніть „ = ” і отримайте значення виразу (усі змінні у виразу перед розрахунком повинні мати значення).
Щоб задіяти стандартну функцію, ввійдіть у меню Insert ,виберіть Function (Ctrl+E) ,з’являється вікно Insert Function .Введіть ім’я змінної,у підвікні Function Name виберіть потрібну функцію і натисніть Insert .
Наприклад
x:=3.5 x*sin(x)= -1.228 Enter
3.Щоб змінити формат результату ,треба тицьнути на ньому.З’явиться вікно Result format ,у якому вибрати потрібний із
General – звичайний,неявний,з порядком ,коли він більше або дорівнює 3 ,
Decimal - із заданою кількостю десяткових цифр після крапки,
Scientific - значення з порядком ,
Engineering – технічний формат.
(Найбільша кількість цифр – 17 ,тобто розрахунки виконуються з подвійною точністю).
Наприклад,
12345.6789*105 + 3432.345667*103 = 1.338002*109 (General з 7 цифрами , Scientific, Engineering) , 1238000235.6670001 (Decimal )
Лабораторна робота № 3
ВИВЧЕННЯ ПЕРЕТВОРЕННЯ ТИПIВ У ВИРАЗАХ ПРИСВОЮВАННЯ
Мета роботи - вивчення змiн значень та форматiв зображення у пам'ятi ЕОМ даних у виразах присвоювання