Professional Documents
Culture Documents
Лабораторна Робота № 1 Вивчення Можливостей Середовища Microsoft Visual C++ Створення, Трансляція Та Налагодження Програм Загальні Положення
Лабораторна Робота № 1 Вивчення Можливостей Середовища Microsoft Visual C++ Створення, Трансляція Та Налагодження Програм Загальні Положення
ЗАГАЛЬНІ ПОЛОЖЕННЯ
int main() {
printf("Hello, World\n");
return 0;
}
до цілочисельних змінних x0, x1, x2, x3, молодший байт в x0, старший в x3. При
цьому байти трактуються як позитивні числа. Фрагмент виконується однаково
для знакових та беззнакових чисел:
int x;
int x0, x1, x2, x3;
. . .
x0 = (x & 255);
x1 = ((x >> 8) & 255);
x2 = ((x >> 16) & 255);
x3 = ((x >> 24) & 255);
Тут число 255 відіграє роль маски. При побітовому множенні на цю
маску із цілого числа вирізьблюється його молодший байт, оскільки маска 255
містить одиниці в молодших вісьмох розрядах. Щоб одержати байт числа x з
номером n, n = 0,1,2,3, необхідно спочатку змістити двійковий код x вправо на
8n розрядів, таким чином, байт із номером n стає молодшим. Потім за
допомогою побітового множення вирізьблюється молодший байт.
Керуючі конструкції дозволяють організовувати цикли та розгалуження в
програмах. У Си всього кілька конструкцій, причому половину з них можна не
використовувати (вони реалізуються через інші).
Оператор if ("якщо") дозволяє організувати розгалуження в програмі. Він
має дві форми: оператор "якщо" і оператор "якщо...інакше". Оператор "якщо"
має вигляд:
if (умова)
дія;
оператор "якщо...інакше" має вигляд
if (умова)
дія1;
else
дія2;
Як умову можна використовувати будь-який вираз логічного або цілого
типу. Нагадаємо, що при використанні цілочисельного виразу значенню
"істина" відповідає будь-яке ненульове значення. При виконанні оператора
"якщо" спочатку обчислюється умовний вираз після if. Якщо воно дійсне, то
виконується дія, якщо воно не дійсне, то нічого не відбувається. Наприклад, у
наступному фрагменті в змінну m записується максимальне зі значень змінних
x та y:
double x, y, m;
. . .
m = x;
if (y > x)
m = y;
При виконанні оператора "якщо...інакше" у випадку, коли умова істинна,
виконується дія, що записана після if; у противному випадку виконується дія
після else. Наприклад, попередній фрагмент запишеться в такий спосіб:
double x, y, m;
. . .
11
if (x > y)
m = x;
else
m = y;
Коли треба виконати кілька дій залежно від істинності умови, необхідно
використовувати фігурні дужки, поєднуючи декілька операторів у блок,
наприклад:
double x, y, d;
. . .
if (d > 1.0) {
x /= d;
y /= d;
}
Тут змінні x та y діляться на d тільки в тому випадку, коли значення d
більше одиниці.
Кілька умовних операторів типу "якщо...інакше" можна записувати
послідовно (тобто дія після else можна знову записати умовний оператор). У
результаті реалізується вибір з декількох можливостей. Конструкція вибору
використовується в програмуванні дуже часто. Приклад: є дійсна змінна x,
необхідно записати у дійсну змінну y значення функції sign(x):
sign(x) = -1, при x < 0
sign(x) = 1, при x > 0
sign(x) = 0, при x = 0
що закриває тіло циклу. Приклад: нехай заданий n+1 крапка на дійсній прямій
x i , i = 0, 1,..., n; крапки x i будуть називатися вузлами інтерполяції.
Елементарний інтерполяційний багаточлен Лагранжа Lk ( x ) – це багаточлен
ступеня n, що приймає нульові значення у всіх вузлах x i , крім x k . В k-ом
вузлі x k багаточлен Lk ( x ) приймає значення 1. Багаточлен Lk ( x )
обчислюється по наступній формулі:
¿ s≠k ¿¿¿ .¿
n
Нехай потрібно обчислити значення елементарного інтерполяційного
багаточлена Lk ( x ) при значенні x = t. Це робиться за допомогою наступного
фрагмента програми:
double x[100]; // Вузли інтерполяції (не більше 100)
int n; // Кількість вузлів інтерполяції
int k; // Номер вузла
double t; // Крапка, у якій обчислюється значення
double L; // Значення багаточлена L_k(x) у t
int i;
. . .
L = 1.0; // Початкове значення добутку
i = 0;
while (i <= n) {
if (i == k) {
++i; // До наступного вузла
continue; // Пропустити k-й множник
}
// Обчислення добутку
L *= (t - x[i]) / (x[k] - x[i]);
++i; // До наступного вузла
}
// Відповідь у змінної L
Тут оператор continue використовується для того, щоб пропустити
обчислення при i = k.
Циклу for має вигляд:
for (ініціалізація; умова продовження; ітератор)
тіло циклу;
Ініціалізація виконується один раз перед першою перевіркою умови
продовження та першим виконанням тіла циклу. Умова продовження
перевіряється перед кожним виконанням тіла циклу. Якщо умова істинна, то
виконується тіло циклу, інакше цикл завершується. Ітератор виконується після
кожного виконання тіла циклу (перед наступною перевіркою умови
продовження).
Оскільки умова продовження перевіряється перед виконанням тіла циклу,
цикл for є, подібно циклу while, циклом із передумовою. Якщо умова
продовження ніколи не виконується, то тіло циклу не виконується жодного
14
ì a5 + b, if b < 0;
ï 2
ïa + a , if 0 £b £1.5, a ¹ b;
x =í a- b
ïa 3 + ba 2 + b2 , if 1.5 < b < 2.5;
ï
î a , if 2.5 £ b.
4
ì4,1 , if x > 3;
ï
y =í x 3
ïa - , if x £ 3;
î 2
ì a 4 + b, if b < 0;
ï 5
ï 2 a
x =í a + , if 0 £b £ 5, a ¹ b;
a - b
ïa 3 + 4a 2 + b2 , if 5 < b < 8;
ïa5 , if 8 £ b.
î
15
ln ( a−c )
P=3 m2 − 3
b +а ;
b= 0,75a2+сm ;
ìln t + d 2
( )
ï , if d > t, t > 1,
ï 3 t 2d
a =í2t sin(d 2 ), if t > 1;
ï
ït 3d, otherwise.
î
ì2,35t 2 + b- tx - a 2 , if m > 0;
ï æ b ö
r =í
b ×tg ç ÷, if m £0;
ï
î è 2m ø
ì a
ï , if a ¹ 0 and a ¹ p ;
y =í ln(sin 2 x)
ï 2
îcos(x + a), otherwise;
ìa + b - 3.5c + | b | a, if
ï ( ) b £ 0;
ï a
x =ítgb + , if b > 0.5;
ï3.5ab,b otherwise.
ï
î
17
ln ( a2 −d )
с=3 m− 3 .
a −d
Значення d обираються із множини 0 ¿ 3 із кроком 1, а значення t – із
множини – 0 ¿ 4 із кроком 0,5. Значення змінних m задає користувач з
клавіатури.
n 2
y=√ Z
Значення a обираються із множини 0 ¿ 3 із кроком 1,2, значення n
обираються із множини [-56 ¿ 10] із кроком 5,
ì x - 78
ï x - 56 +1 , if x > 3;
ï
y =í 3
ï ( x - 2)
ïln(4 - x) , if x £ 3;
î
ï
ï0, otherwise.
ï
î
{
y = cos9x - cos7x + cos3a - cos x, if x ¹ 0 and a ¹ p ;
sin3x + sin5a - sin 4x, otherwise;
ì3ab - 3.5×a - 56 + | b | , if b £ 0;
ï ( )
ï a 3
x =ícos 2 + cos 2 b - sin 2 2ab - sin 2 4b, if b > 0.5;
ï 2 2
ï3.5ab, otherwise.
î
π π 3π 7π
b=cos a⋅cos 2 c−sin ( ) (
4
+m sin + 4 m + sin
4 ) (
4
+4 a cos
4
−5 c ) ( ) ;
1 π
с=tg 3 a−1+ 2
cos d (
−3 ctg −d 3 ⋅3 m .
2 )
Значення d обираються із множини 2 ¿ 15 із кроком 1, а значення t – із
множини – 0 ¿ 5 із кроком 0.5, m обираються із множини -2 ¿ 2 із кроком
0.41.
20
Z
−16 2 n( √ x−1)
, Z≠0; ¿ ¿¿¿
.
√ a2 +8 a 2
Z =17⋅2 −8+2⋅4 √ a + 8 a .
n 2
y=√ Z
Значення a обираються із множини 0 ¿ 5 із кроком 0.2, значення n
обираються із множини -5 ¿ 10 із кроком 2.5.
ì 12 + x - x 2 12 + x - x 2
ï - , if x >12;
ï
ï x - 11 2x - 9
í
ï1+ cos(2x - 2p ) + cos(4x + 2p ) - cos(6x - p )
ï - 2cos 2x, if x £12;
cos(2p - 2x) + 2cos 2 (2x + p ) - 1
y =ï
î
21
ì a- b b+ a
ï4 +4 , if b ¹ - 3,a ¹ 4;
ï b + 3 a - 4
ï 1- 2cos 2 2a
, if - 10 £ b < 0;
ï æ p ö 2 æp ö
ï2tg 2a - ÷×sin ç + 2b÷
x =í ç è 4ø è4 ø
ï
ï 1 2a - b a + b
ïa + b a - b - 1 , if b ¹ ±a;
+
ï
ï 2 - a + 4b - 3, otherwise.
î
P = 2b - 1 + 3 + 2b +15 + 9;
;
a
10c
b=− ;
√|2m−1|+5
ì 1
ï4cos p tgx
× - 2cos 2x - , if p > x, x > 1
ï cos 2
p
a =í
æ1 ö
ïç tgx + ctg( p)÷×2sin
( x + tg( p)) , otherwise.
ï
îè 2 ø
ì æp öæ æ3p öö
ïctg ç + a ÷×1+ cos ç + 2x
ï è4 øç è è2 ÷
ø÷
ø
ï - ctg2a, if m < 0;
r =í æ 5p ö
cos ç2t - +2
ï è 2÷ø
ï
ï 2 - 3+ a + 2t + x + 4 , if m ³ 0;
î
22
ì b 2a 8a 2
ï - + 2 2
, if b ¹ ±a, x ¹ ±a;
ï x - a x + a b - a
ï 2
ï c - 16 5a
t =í + b- 3+ ,øà x ³ 3, c ¹ ±4, b > 5;
ï x - 3 x - 3
ï 2
ïa - 2 c - 3b, otherwise.
ï
î
ì3
ï a + b - a - b - a + b , if b £ a;
3 6 2 2
ï
x =í 4 - 4a 3 + b6 + 6 + a - 3 2 , if b > 0.5;
ï 3
ï
î ( )
a a - 2a 3 b + 3 a 2 b2 + 3 a 2 b - 3 ab2 ¸ 3 a 2 +1, otherwise.
ì
ït + d, if d > t, t >10, d < 1;
ï
a =í2t 2 - td + 3d 2 - 7t - 12d +1, if t >1;
2
ït d
ïtg6 , otherwise.
î
a 2 - 5d + 4
c= m.
d2 - 4
23
1 1 a+1
Z= ( √ a+√ a+1 +
√ a+ √ a+1 )( ÷ 1+
√ ) a−1 ,
2 2
Z +n n −Z +2
y= 2 − 2
|Z −n+1|+3 |n −Z−2|+2 .
8
y=Z 3−n2 − 3 2
|Z −n |+6 .
x−2 2 x +2 2 x 2 −4
Z =20( ) ( )
x+ 1
−5
x−1
+ 48 2
x −1 ,
Z
7
2 n2−6
Z
y=7 ( √ 2 ) −( )
4 .
Додаток А
Додаток Б
Кафедра системотехніки
ЛАБОРАТОРНА РОБОТА № 1
Виконав: Прийняв:
ст. гр..
ФИО з оцінкою «____________»
«____»_______________20___р.
Харків 20___
27
Додаток В
Додаток Г
ОСОБЛИВОСТІ РОЗРОБКИ ЗВІТУ
Базовые функции
Имя Описание
abs Возвращает абсолютную величину целого числа
acos арккосинус
asin арксинус
atan арктангенс
atan2 арктангенс с двумя параметрами
ceil округление до ближайшего большего целого числа
cos косинус
random выводит случайное число от 0 до аргумента функции.
exp вычисление экспоненты
fabs абсолютная величина (числа с плавающей точкой)
floor округление до ближайшего меньшего целого числа
fmod вычисление остатка от деления нацело для чисел с плавающей точкой
frexp разбивает число с плавающей точкой на мантиссу и показатель степени.
ldexp умножение числа с плавающей точкой на целую степень двух
log натуральный логарифм
log10 логарифм по основанию 10
modf(x,p) извлекает целую и дробную части (с учетом знака) из числа с плавающей точкой
pow(x,y) результат возведения x в степень y, xy
sin синус
sinh гиперболический синус
sqrt квадратный корень
tan тангенс
tanh гиперболический тангенс
Расширения XSI
Эти функции не описаны в стандартах ANSI или ISO C, но могут присутствовать в системах в
качестве расширений X/Open.
Имя Описание
j0(x) значение функций Бесселя первого рода порядков 0 для аргумента x
j1(x) значение функций Бесселя первого рода порядков 1 для аргумента x
jn(n,x) значение функций Бесселя первого рода порядка n
scalb(x,y) x * FLT_RADIX y (x и y типа double )
y0(x) значение функций Бесселя второго рода порядков 0 для аргумента x
y1(x) значение функций Бесселя второго рода порядков 1 для аргумента x
yn(n,x) значение функций Бесселя второго рода порядка n
Использование функций конвертации double -string ecvt , fcvt и gcvt не рекомендуется в
пользу sprintf .
32
2. МАТЕМАТИЧЕСКИЕ ФУНКЦИИ
2.1 МАТЕМАТИЧЕСКИЕ ФУНКЦИИ ('math.h')
- знаком y
#include <math.h>
double copysign(double x, double y);
float copysignf(float x, float y);
copysign образует число с абсолютным значением своего первого
аргумента х и со знаком своего второго аргумента y.
- Функция fmod возвращает значение x-i*y, для наибольшего такого i, что если y
отличен от 0, результат имеет тот же знак, что и х, а по модулю не превосходит
модуля y.
- fmod(x,0) возвращает NaN, errno присваивается значение EDOM.
- Вы можете изменить обработчик ошибок для этих функций, используя matherr.
- fmod coответствует стандарту ANSI. fmodf является расширением.
- frexp возвращает мантиссу m. Если val = 0 или NaN, frexp присваивает *exp
значение 0, и возвращает val.
- frexp coответствует стандарту ANSI. frexpf является расширением.
2.25 isnan, isnanf, isinf, isinff, finite, finitef - тест для чисел
структуры exception
#include <ieeefp.h>
int isnan(double arg);
int isinf(double arg);
int finite(double arg);
int isnanf(float arg);
int isinff(float arg);
int finitef(float arg);
Эти функции выдают информацию о заданном аргументе - числе с
плавающей точкой.
Существует пять основных форматов чисел:
zero – число, все биты которого - нули.
subnormal – используется для представления чисел с нулевым показателем, но
ненулевой дробью.
normal – Число с показателем степени и с дробной частью.
40
- isnan возвращает 1, если аргумент равен nan. isinf возвращает 1, если аргумент
равен infinity. finite возвращает 1, если аргумент равен zero, subnormal или normal.
isnanf, isinff и finitef производят те же действия, что и их аналоги isnan, isinf и finite, но
с одноразрядными числами с плавающей точкой.
struct exception {
int type;
char *name;
double arj1, arj2, retval;
int err;
};
Поля структуры exception имеют следующие значения:
type – Тип произошедшей ошибки. Множество закодированных типов ошибок также
находится в 'math.h'.
name – Указатель на строку, заканчивающуюся нулем, содержащую имя той
функции из математической библиотеки, в которой произошла ошибка.
arj1, arj2 – Аргументы, вызвавшие ошибку.
retval – Возвращаемое значение ошибки (то значение, которое будет иметь
вызываемая функция).
err – Если не ноль, то это новое значение, присвоенное errno.
Типы ошибок, определенные в 'math.h' представлают собой возможные
математические ошибки типа:
DOMAIN – Аргумент не в области определения функции; например log(-1.0).
SING – Предполагаемые вычисления привели бы к появлению особой точки,
например pow(0.0, -2.0).
OVERFLOW – Вычисления привели бы к результату слишком большому для
представления, например exp(1000.0).
UNDERFLOW – Вычисления привели бы к результату слишком маленькому для
представления, например exp(-1000.0).
TLOSS – Полная потеря разрядности. Результат не имел бы значащих цифр,
например sin(10e70).
PLOSS – Частичная потеря разрядности.
Библиотечное определение matherr возвращает 0 во всех случаях.
42