Стандартні бібліотечні функції С

[ виправити ] текст може містити помилки, будь ласка перевіряйте перш ніж використовувати.

скачати

Волзький університет імені В. Н. Татіщева
Факультет "Інформатика і телекомунікації"
Кафедра "Інформатика та системи управління"
Курсова робота
з дисципліни: "Системне програмне забезпечення"
Тема:
«Стандартні бібліотечні функції С + +»

Зміст
Введення
1. Стандартні бібліотеки мови Сі
1.1 Файли заголовків
1.2 Про стандартних бібліотеках
1.3 Стандарт ANSI C
2. Стандартні функції бібліотеки math.h
3. Математичні помилки

4. Програмна частина

4.1 Постановка завдання

4.2 Опис розробленої програми

5. Висновок

6. Список використаної літератури

Додаток 1
Додаток 2

Введення
C + + є мовою "спілкування" людини з комп'ютером. Основним "читачем" текстів на мові C + + є транслятор, в обов'язки якого входить перевірка правильності тексту програми і його наступний переклад на мову процесора.
Мова програмування дозволяє описувати алгоритми і дані. Проте його виразні можливості не вичерпуються безліччю змістовних алгоритмів і пов'язаних з ними структур даних. Навіть самі абсурдні з точки зору програміста, що реалізує скільки-небудь значущий алгоритм, пропозиції мови залишаються абсолютно правильними і коректними для транслятора. Приклади, засновані на змістовних алгоритмах, неминуче залишають за рамками викладу безлічі пропозицій, на яких, часом, і виявляються характерні риси мови.
C + + - це складний, логічно стрункий і красивий мову. Його добре знання призводить до майстерному володінню цією мовою. І тут вже буде під силу вирішення будь-якої задачі.
Програма - це послідовність інструкцій, призначених для виконання комп'ютером. В даний час програми оформляються у вигляді тексту, який записується у файли. Цей текст є результатом діяльності програміста і, незважаючи на специфіку формальної мови, залишається програмою для програміста.
Процес створення програми передбачає кілька етапів. За етапом розробки проекту програми слід етап програмування. На цьому етапі пишеться програма. Програмістами цей текст сприймається легше двійкового коду, оскільки різні мнемонічні скорочення і імена укладають додаткову інформацію.
Файл з вихідним текстом програми обробляється транслятором, який здійснює переклад програми з мови програмування в зрозумілу машині послідовність кодів. Процес трансляції поділяється на кілька етапів.
На першому етапі вихідний текст піддається лексичної обробці. Програма поділяється на пропозиції, пропозиція ділиться на елементарні складові (лексеми). Кожна лексема розпізнається і перетвориться у відповідне двійкове подання. Цей етап роботи транслятора називають лексичним аналізом.
Потім настає етап синтаксичного аналізу. На цьому етапі з лексем збираються вираження, а з виразів - оператори. Під час трансляції послідовності термінальних символів перетворюються в нетерміналу. Неможливість досягнення чергового нетермінала є ознакою синтаксичної помилки в тексті вихідної програми.
Після синтаксичного аналізу настає етап поетапної генерації коду. На цьому етапі відбувається заміна операторів мови високого рівня інструкціями асемблера, а потім послідовностями машинних команд.
Системи програмування, що реалізують мову програмування C + +, передбачають стандартні прийоми і засоби, які роблять процес програмування більш технологічним, а саму програму більш легкою для сприйняття.
Мови програмування призначені для написання програм. Однак було б дивно писати щоразу одні й ті ж програми або навіть одні й ті ж підпрограми (наприклад, підпрограму виведення інформації на дисплей або на принтер - ця підпрограма потрібно практично в кожній програмі).
На щастя, проблема багаторазового використання програмного коду вже дуже давно і успішно вирішена.
Практично кожна система, що реалізує ту або іншу мову програмування (транслятор, компонувальник і інше програмне оточення) має набір готових до використання фрагментів програмного коду. Цей код може знаходитися в різному ступені готовності. Це можуть бути фрагменти текстів програм, але, як правило, це об'єктний код, що розташовується в особливих файлах. Такі файли називаються бібліотечними файлами.
Для використання бібліотечного коду програмісту буває достатньо вказати в програмі потрібний файл і забезпечити виклик відповідних функцій. Для використання бібліотечного коду буває достатньо стандартного набору мовних засобів. Вирішення всіх інших проблем транслятор і компонувальник беруть на себе. Зрозуміло, програмісту повинно бути відомо про існування подібних бібліотек і про зміст бібліотечних файлів.

1. Стандартні бібліотеки мови Сі
1.1 Файли заголовків
Використання текстових файлів заголовків (header-файлів), які вставляються в текст програми на мові Сі з допомогою директиви include препроцесора Сі, є традиційною технікою програмування на мові Сі, що забезпечує синтаксичну правильність використання бібліотечних функцій (в тому числі і системних викликів) в прикладній програмі . Раніше файли заголовків, головним чином, містили визначення типів і символічних констант (констант, яким зіставлені імена за допомогою директиви define препроцесора Сі), використовуваних в інтерфейсах відповідних бібліотечних функцій. Коректне застосування файлів заголовків дозволяло програмістам не піклуватися про правильність типів даних, використовуваних при зверненні до бібліотечних функцій і обробці їх результатів.
Однак, традиційні файли заголовків не гарантували того, що набір параметрів викликається бібліотечної функції відповідав її інтерфейсу, оскільки оголошення функції, що містить її інтерфейс, у файлі компіляції було відсутнє. У кращому випадку помилки такого роду стійко виявлялися під час виконання програми, хоча далеко не завжди було просто зрозуміти їх природу. У гіршому випадку помилка виникала при переносі програми, оскільки однойменні бібліотечні функції дійсно володіли різними інтерфейсами в різних середовищах, і у вихідній операційному середовищі помилки в параметрах не було.
Цю проблему вдалося вирішити (хоча і не абсолютно) за рахунок введення в мову Сі поняття прототипу функції. Грубо кажучи, прототип функції - це частина її оголошення, що містить тільки інтерфейс (без тіла функції). Наявність прототипу будь-якої функції допускається в будь-якому файлі компіляції, навіть не обов'язково містить виклик цієї функції. Однак, якщо виклик функції міститься у файлі компіляції, то набір параметрів виклику повинен точно відповідати інтерфейсу викликається функції, визначеному в її прототипі.
Подальший хід міркувань очевидний. Для групи споріднених бібліотечних функцій робиться загальний файл заголовків, що містить необхідні визначення типів даних і символічних констант, а також набір прототипів цих бібліотечних функцій. Після включення в файл компіляції такого файлу заголовків на стадії компіляції будуть виявлені всі синтаксичні помилки звернення до бібліотечних функцій. Однак це рішення не абсолютно. Це дійсно так, оскільки в принципі ніхто не може змусити програміста на мові Сі включати в текст програми всі необхідні файли заголовків. Нехай це питання вирішує кожен програміст окремо.
Останнє зауваження щодо файлів заголовків. Останнім часом вони містять велику кількість операторів умовної компіляції, що відносяться здебільшого до визначення символічних констант. Справа в тому, що залежно від версії операційної системи значення констант, використовуваних з одним і тим же змістом, часто змінюються. Звичайно, прикладна програма не повинна залежати від таких змін. Наявність операторів умовної компіляції всередині файлу заголовків вирішує цю проблему.
1.2 Про стандартних бібліотеках
С + + і його стандартні бібліотеки спроектовані так, щоб забезпечувати переносимість. Наявна на поточний момент реалізація мови буде йти в більшості систем, що підтримують C. З С + + програм можна використовувати C бібліотеки, і з С + + можна використовувати більшу частину інструментальних засобів, що підтримують програмування на C.
У мові Сі стандартна бібліотека більш сильно інтегрована з мовою в порівнянні з іншими мовами програмування високого рівня. Без використання функцій стандартної бібліотеки не може бути написана жодна серйозна програма на мові Сі, зокрема тому, що в самій мові немає ніяких засобів введення / виведення інформації.
Стандартну бібліотеку функцій мови Сі можна розділити на дві категорії: функції, які є в бібліотеці будь-якої системи програмування мови Сі для різних операційних систем і різних архітектур, і функції, які є унікальними в рамках якої-небудь системи програмування або забезпечують доступ до специфічних можливостям конкретної операційної системи, або пов'язані з конкретною архітектурою комп'ютера.
Функції першої категорії утворюють переносний ядро ​​бібліотеки; програми, в яких використовуються тільки такі бібліотечні функції, можуть бути перенесені в іншу систему програмування, іншу операційну систему або на інший тип архітектури комп'ютера з найменшими витратами. Плата за універсальність - неможливість скористатися специфічними засобами, наданими конкретної обчислювальної середовищем.
Функції другої категорії надають можливість отримати доступ до функцій ядра даної операційної системи до внутрішньої структури даної операційної системи, до регістрів використовуваних апаратних пристроїв. Крім того, до другої категорії належать функції, які додані до бібліотеки, виходячи з особистих уподобань розробників конкретної системи програмування - як їм бачиться зручний набір засобів для розробки різних алгоритмів - порівняйте, наприклад, функції memset і setmem.
З часу прийняття стандарту мови Сі, що остаточно відбулося в 1989 році, в системах програмування Сі такі необгрунтовані розширення бібліотек практично зникли, але в попередніх версіях мови подібний різнобій був дуже великий. На жаль, набори функцій другої категорії не узгодженні для різних систем програмування в рамках однієї операційної системи на одному типі архітектур. Це чітко простежується на прикладі систем програмування Turbo C від Borland і Microsoft C: бібліотечні функції, що забезпечують інтерфейс для виклику однієї і тієї ж функції операційної системи, можуть мати не лише різні параметри, але й різні назви.
Ці неузгодженості пояснювалися, з одного боку, комерційними міркуваннями прагненням утримати під контролем ринок програмного забезпечення, щоб користувачі, що почали програмувати з використанням однієї системи програмування, купували потім більш нові програмні продукти тієї ж фірми, а з іншого боку, пізньою появою стандарту на мову і на його бібліотеки і незалежні еволюції від версії до версії кожної системи програмування [3]. (Нагадаємо, що стандарт мови був прийнятий приблизно через п'ятнадцять років після його появи і через десять років після того, як його вже почали активно використовувати) При цьому, треба відзначити, відбувалося поступове зближення різних систем програмування по мірі того, як кожна з них запозичила найбільш цінні ідеї у конкурентів. Так, відмінності між бібліотеками останніх систем програмування Turbo C і Microsoft C практично відсутні.
1.3 Стандарт ANSI C
Тут містяться несуворі витримки зі стандарту ISO / IEC 9899:1993 - Programming language C, що стосуються деяких угод про стандартних бібліотеках.
1. Кожна функція описується в бібліотеці, де містяться прототипи (описи) кількох схожих функцій (наприклад, функції введення / виведення) і, при необхідності, необхідні структури даних і макровизначеннями. Бібліотека підключається шляхом вказівки директиви препроцесора # include за яким слід заголовок бібліотеки;
2. Стандартними заголовками є: <assert.h>, <complex.h>, <ctype.h>, <errno.h>, <fenv.h>, <float.h>, <inttypes.h>, <iso646.h >, <limits.h>, <local.h>, <math.h>, <setjmp.h>, <signal.h>, <stdarg.h>, <stdbool.h>, <stddef.h>, <stdio.h>, <stdlib.h>, <strng.h>, <tgmath.h>, <time.h>, <wchar.h>, <wctype.h>;
3. Всі стандартні бабліотека можуть включатися в програму в будь-якому місці, передбаченому синтаксисом мови, крім бібліотеки <assert.h> (результат залежить від значення змінної NDEBUG). Це не робить ніякого впливу на ефективність програми. Проте коректне виконання будь-якої функції, може бути вироблено, тільки якщо бібліотека, її описує, буде включена в програму раніше виклику цієї функції;
4. Програма не може містити змінних, імена яких лексично повністю збігаються з макровизначення в будь - якій підключеної бібліотеки. В іншому випадку, препроцесор у програмі замінить імена макросів на знову певні, а не на бібліотечні вираження;
5. Бібліотеки не повинні включати визначення локальних змінних без вказівки external (external linkage).

2. Стандартні функції бібліотеки math.h
Ім'я функції: ACOS
# Include <math.h>
double acos (x);
double x;
Опис: Функція acos возврaщaет арккосинус x в інтервалі від 0 до n. Значення x повинно бути між -1 і 1.
Возврaщaемое значення: Функція acos возврaщaет результат aрккосінусa. Якщо x менше -1 або більше 1, acos устaнaвлівaет errno в EDOM, печaтaет повідомлення про помилку DOMAIN в stderr і возврaщaет 0.
Обрaботкa помилок може бути модіфіціровaнa при зміні процедури matherr.
Приклад: У наступному прикладі прогрaммa видає підказки для введення до тих пір, доки введене значення не буде в інтервалі від -1 до 1.
# Include <math.h>
int errno;
main ()
{Float x, y;
for (errno = EDOM; errno == EDOM; y = acos (x))
{Printf ("Cosine =");
scanf ("% f", & x);
errno = 0;}
printf ("Arc cosine of% f =% f \ n", x, y);}
Обрaзец виводa:
Cosine = 3
acos: DOMAIN error
Cosine = -1.0
Arc cosine of -1.000000 = 3.141593
Ім'я функції: ASIN
# Include <math.h>
double asin (x);
double x;
Опис. Функція asin обчислює арксинус x в інтервалі-n / 2 до n / 2. Значення x повинно бути між -1 і 1.
Значення, що повертається: Функція asin повертає результат арксинуса. Якщо x менше -1 або більше 1, asin встановлює errno в EDOM, друкує повідомлення про помилку DOMAIN в stderr і повертає 0.
Обрaботкa помилок може бути модіфіціровaнa при зміні процедури matherr.
Приклад:
# Include <math.h>
int errno;
main ()
{Float x, y;
for (errno = EDOM; errno == EDOM; y = asin (x)) {
printf ("Синус =");
scanf ("% f, & x);
errno = 0;}
printf ("арксинус від% f =% f \ n", x, y);}
ВИСНОВОК:
Синус = -1.001
asin: DOMAIN error
Синус = -1
Арксинус від -1.000000 = -1.570796
Ім'я функції: ATAN-ATAN2
# Include <math. h>
double atan (x);
double (x);
double atan2 (y, x);
double x;
double y;
Опис: atan і atan2 функції обчислюють арктангенс x і y / x відповідно: atan повертає значення в межах від-пі / 2 до пі / 2; atan2 повертає значення в межах від-пі до пі.
Значення, що повертається: atan і atan2 повертають значення арктангенса.0, якщо обидва аргументи функції atan2 нульові; при цьому errno встановлюється в EDOM і друкується повідомлення про помилку DOMAIN в stderr.
Обробку помилки можна змінити, використовуючи команду matherr.
Приклад:
# Include <math.h>
printf ("% .7 f \ n", atan (1.0));
printf ("% .7 f \ n" atan2 (-1.0,1.0);
ВИСНОВОК:
0.7853982
-0.7853982
Ім'я функції: CABS
# Include <math.h>
double cabs (z);
struct compex z;

Опис: Cabs функція обчислює абсолютне значення комплексного числа. Комплексне число повинне мати структуру типу complex, визначений у math.h в наступному вигляді:
struct complex {double x, y;};
Виклик cabs еквівалетно sgrt (zx * z.x + xy * zy)
Значення, що повертається: Cabs повертає абсолютне значення. Ні кодів помилок.
Приклад:
# Include <math.h>
struct complex value;
double d;
value.x = 3.0;
value.y = 4.0;
d = cabs (value);
Ім'я функції: CEIL
# Include <math.h>
double ceil (x);
double x;
Опис: Ceil функція повертає найменше ціле, яке більше або дорівнює значенню числа з плаваючою крапкою.
Значення, що повертається: Число з плаваючою точкою. Ні кодів помилок.
Приклад:
# Include <math.h>
double y;

y = ceil (1.05) / * y = 2.0 * /
y = ceil (-1.05) / * y =- 1.0 * /
Ім'я функції: FABS
# Include <math.h>
double fabs (x);
double x; значення з плаваючою точкою
Опис: Функція fabs повертає абсолютне значення свого аргументу з плаваючою крапкою.
Значення, що повертається: Функція fabs повертає абсолютне значення свого аргументу. Значення, що повертається у разі помилки немає.
Приклад:
# Include <math.h>
double x, y;
y = fabs (x);.
Ім'я функції: FLOOR
# Include <math.h>
double floor (x);
double x; значення з плаваючою точкою.
Опис: Функція floor повертає значення з плаваючою точкою, що представляє найбільше ціле, яке менше або дорівнює x.
Значення, що повертається: Функція floor повертає результат з плаваючою крапкою. Значення, що повертається у разі помилки немає.
Приклад:

# Include <math.h>
double y;
y = floor (2.8); / * y = 2.0 * /
y = floor (-2.8) / * y = -3.0 * /
Ім'я функції: FMOD
# Include <math.h>
double fmod (x, y);
double x; значення з плаваючою точкою.
double y;
Опис: Функція fmod обчислює залишок від ділення x на y з плаваючою точкою, де x = iy + f, i - ціле, f - має той же знак, що x; а абсолютне значення x менше, ніж абсолютне значення y.
Значення, що повертається.: Функція fmod повертає залишок з плаваючою крапкою. Якщо y дорівнює 0, функція повертає 0.
Приклад:
# Include <math.h>
double x, y, z;
x = -10.0;
y = 3.0;
z = fmod (x, y) / * z = -1.0 * /.
Приклад:
# Include <math.h>
int errno;
main ()
{Float x, y;
for (errno = EDOM; errno == EDOM; y = asin (x)) {
printf ("Sine =");
scanf ("% f", & x);
errno = 0;}
printf ("Arc sine of% f \ n", x, y);}
На виході:
Sine = -1.001
asin: DOMAIN error
Sine = -1
Arc sine of -1.000000 =- 1.570796
Ім'я функції: LDEXP
# Include <math.h>
double ldext (x, exp);
double x; значення з плаваючою точкою
int * exp; ціла експонента
Опис.: Функція ldexp повертає x, помножене на 2 певною мірою exp.
Значення, що повертається: ldexp повертає x, помножене на 2 певною мірою exp.В разі переповнення результату функція повертає + HUGE або-HUGE (в залежності від знаку x) і встановлює errno в ERANGE.
Приклад:
# Include <math.h>
double x, y;
int p;
x = 1.5;
p = 5;
y = ldexp (x, p) / * y = 48.0 * /
Ім'я функції: POW
# Include <math.h>
double pow (x, y);
double x; споруджений число
double y; ступінь числа x
Опис: Функція pow обчислює x, зведене в ступінь y.
Значення, що повертається: Функція pow повертає значення x в ступені y. Якщо y дорівнює 0, pow повертає значення 1. Якщо x дорівнює 0 і y негативна, pow встановлює errno в ERANGE і повертає HUGE. Якщо x негативне, а y не є цілою, функція друкує повідомлення про помилку DOMAIN в stderr, встановлює errno в ERANGE і повертає або позитивне, або негативне значення HUGE. У разі переповнення або втрати значимості ніякого повідомлення не друкується.
Приклад:
# Include <math.h>
double x = 2.0, y = 3.0, z;
z = pow (x, y) / * z = 8.0 * /
Ім'я функції: SIN-SINH
# Include <math.h>
double sin (x); обчислює синус x
double sinh (x); обчислює гіперболічний синус x
double x; радіан

Опис: Функції sin і sinh обчислюють відповідно синус і гіперболічний синус x.
Значення, що повертається.: Функція sin повертає синус x. Якщо x великий, то може виникнути часткова втрата значущості результату. У цьому випадку sin виробляє помилку PLOSS, але повідомлення не друкує. Якщо x настільки великий, що втрачається загальна значущість результату, тоді sin друкує повідомлення про помилку TLOSS в stderr і повертає 0. В обох випадках errno встановлюється в ERANGE. Функція sinh повертає гіперболічний синус x. Якщо результат великої, sinh повертає значення HUGE (негативне або позитивне, в залежності від знаку x) і встановлює errno в ERANGE.
Обрaботкa помилок може бути модіфіціровaнa при зміні процедури matherr.
Приклад:
# Include <math.h>
double pi = 3.1415926535, x, y;
x = pi / 2;);
y = sin (x) / * y дорівнює 1.0 * /
y = sinh (x) / * y дорівнює 2.3 * /
Ім'я функції: SQRT
# Include <math.h>
double sqrt (x);
double x; позитивне значення з плаваючою точкою
Опис: Функція sqrt обчислює квадратний корінь x.
Значення, що повертається: Функція sqrt повертає результат обчислення квадратного кореня. Якщо x - негативне, функція друкує повідомлення про помилку DOMAIN в stderr, встановлює errno в EDOM і повертає 0.
Обрaботкa помилок може бути модіфіціровaнa при зміні процедури matherr.
Приклад:
# Include <math.h>
# Include <stdlib.h>
double x, y, z;
if ((z = sqrt (x + y)) == o.0)
if ((x + y) <0.0)
perror ("sqrt of a negative number");
Ім'я функції: TAN-TANH
# Include <math.h>
double tan (x); обчислює тангенс x
double tanh (x); обчислює гіперболічний тангенс x
double x; радіан
Опис: Функції tan і tanh обчислюють відповідно тангенс і гіперболічний тангенс x.
Значення, що повертається: Функція tan повертає тангенс x. Якщо x великий, при обчисленнях може виникнути часткова втрата значущості. У цьому випадку tan виробляє помилку PLOSS, але повідомлення не друкує. Якщо x настільки великий, що загальна значущість результату втрачається, тоді tan друкує повідомлення про помилку TLOSS в stderr і возв ращает 0. В обох випадках errno встановлюється в ERANGE. Функція tanh повертає гіперболічний тангенс x.
Значення, що повертається у разі помилки немає.
Приклад:
# Include <math.h>
double pi, x, y;
pi = 3.1415926535;
x = tan (pi/4.0) / * x дорівнює 1.0 * /
y = tanh (x) / * y дорівнює 1.6 * /

3. Математичні помилки
Помилки, наведені нижче, породжуються математичними процедурами бібліотеки Сі. Ці помилки відповідають тільки тим типам помилок, які оголошені в <math.h>, і повертаються функцією matherr.
Таблиця 1.
Помилка
Опис
DOMAIN
Аргумент для функції знаходиться поза області визначення функції.
(Наприклад log (-1));
OVERFLOW
Результат дуже великий для надання його в повернутому значенні.
(Наприклад exp (1000));
PLOSS
Виникла часткова втрата значущості.
SING
Особливість аргументу: аргумент для функції має невірне значення (наприклад, пересилається значення 0 до тієї функції, яка вимагає ненульового значення).
(Наприклад pow (0, -2));
TLOSS
Виникла загальна втрата значущості.
(Наприклад sin (10e70))
UNDERFLOW
Результат дуже маленький для надання його в повернутому значенні.
(Наприклад exp (-1000));
 
Ім'я функції: matherr
Опис: Процедура обробки помилок операцій з плаваючою точкою, модифікуються користувачем. Функція matherr викликається для обробки помилок, що генеруються функціями з бібліотеки математичних функцій
int matherr (struct exception * e);

matherr служить як для користувача пастки, (функції настройки користувача), які Ви можете написати самі (дивіться приклад). matherr сожно використовувати для відстеження помилок області визначення і виходу за межі діапазону, що відбуваються в математичних функціях. Вона не відстежує виняткових ситуацій, що виникають при роботі зі значеннями з плаваючою крапкою (наприклад при розподілі на 0). Для відстеження таких помилок дивись функцію signal.
Ви можете модифікувати процедуру matherr спеціально для вашого випадку (тобто вона буде відловлювати певні типи помилок); модифікована функція matherr повинна повертати 0, якщо вона не може обробити цю помилку, і 1, якщо помилка успішно оброблена. Якщо функція matherr повертає нульове значення, повідомлення про помилку не друкується, і змінна errno не змінюється.
Нижче наведена структура exception (визначена у файлі math.h):
struct exception {
int type;
char * Function;
double arg1, arg2, retval;
};
Складові частини структури exception позначають наступне:
Таблиця 2.
Ім'я
Що це
Type
тип сталася математичної помилки; тип enum визначений у typedef_mexcep (дивіться визначення після даного списку).
Function
покажчик на символьний рядок з нульовим закінченням, що містить ім'я бібліотечної математичної функції, яка видала помилку.
arg1, arg2
аргументи (передані даної функції), які викликали помилку; якщо функції передається лише один аргумент, він зберігається в arg1.
Retval
стандартне значення, що повертається для функції matherr; ви можете модифікувати це значення.
Параметр typedef_mexcep, також визначений у файлі math.h, перераховує такі символічні константи, що представляють собою можливі математичні помилки: (див. Таблицю 1).
Вихідний код для функції matherr, визначеної за замовчуванням знаходиться на дистрибутивних дисках з системою Turbo C + +.
Стандарт UNIX функції matherr несумісний зі стандартом ANSI C. Якщо вам потрібна версія функції matherr для системи UNIX, користуйтеся програмою matherr.c, що поставляється на дистрибутивних дискетах пакету Turbo C.
Повертане За замовчуванням функція matherr повертає 1 якщо значення помилка UNDERFLOW або TLOSS, інакше 0. Функція matherr також може модифікувати параметр e-> retval, який за допомогою функції matherr передається в зухвалу програму. Коли функція matherr повертає 0, (що означає, що обробити помилку вона не може), функція _matherr встановлює змінну errno і друкує повідомлення про помилку. Коли функція matherr повертає нульове значення, (що означає, що помилка успішно оброблена), глобальна змінна errno не встановлюється і повідомлення про помилку не виводиться.
Переносимість matherr доступна на багатьох компіляторах Сі, проте вона не підтримується стандартом ANSI C.
matherr в стилі системи UNIX (яка друкує повідомлення і завершує виконання програми) поставляється разом з пакетом Turbo C + + у файлі MATHERR.C. matherr може не підтримуватися в подальших версіях Turbo C + +.
Приклад:
# Include
# Include
# Include
int matherr (struct exception * a);
{
if (a -> type == DOMAIN)
{
if (strcmp (a -> name, "sqrt") == 0)
{
a -> retval = sqrt (- (a -> arg1));
return (1);
}
}
return (0);
}
int main (void)
{
double x, y;
x = -2.0;
y = sqrt (x);
printf ("Значення, скоригована matherr:% lf \ n", y);
return 0;
}

4. Програмна частина

4.1 Постановка завдання

Перед початком виконання даної курсової роботи я поставив для себе мету вивчити принципи роботи з математичною бібліотекою, функції та системні виклики мови С + +, що дозволяють виконувати геометричні, тригонометричні та інші нестандартні математичні розрахунки. У курсовій роботі я буду створювати і описувати програму, яка дозволить виконувати розрахунки за заданими параметрами, введених з клавіатури.
Дана програма в подальшому може бути використана студентами для вивчення математичної бібліотеки на лабораторних заняттях з вивчення теоретичного матеріалу і придбання практичних навичок з дисципліни «Системне Програмне Забезпечення», а також програма може бути використана в роботі з операційною системою MS DOS.

4.2 Опис розробленої програми

Моя програма призначена для демонстрації роботи створеної мною бібліотеки.
У програмі організовано псевдографічний меню, в якому можна вибрати один з декількох пунктів:
1) Площа кола.
2) Обсяг циліндра.
3) Площа циліндра.
4) Площа трапеції.
5) Об'єм піраміди.
6) Обсяг кулі.
7) Площа сфери.
8) Факторіал.
9) Вихід.
При виборі відповідного пункту, необхідно натиснути клавішу Enter, для того щоб приступити до розрахунків або, якщо обраний пункт «Вихід», вийти з програми. Для негайного виходу з програми необхідно натиснути клавішу ESC.
У програмі я використовую вбудовані бібліотеки С + +.
Таблиця. 3
Назва бібліотеки
Опис функції
Iostream.h
Потоки введення \ виводу
Conio.h
Прототип функції затримки
Math.h
Використання математичних функцій
А також крім стандартних бібліотек, підвантажується matfac.cpp - розроблена мною бібліотека.
Майже в будь-якій програмі не обійдешся без власних функцій, вони спрощують програмування, програма стає більш зрозумілою і зручна у вивченні.
У моїй програмі я використовую кілька своїх функцій викликаються з основної програми.
· F1-f8 - функції відповідні описаним вище пунктах меню (Площа кола, Об'єм циліндра, ..., Вихід.).
· Sw - функція для виклику інших функцій (f1-f8).
· Mn - функція для організації меню.
У функції sw і mn в якості аргументів передаються мінлива відповідає вибраному пункту меню, а також масив рядків.
Безпосередньо з функцій f1-f8 передаються аргументи і викликаються описані мною функції з matfac.cpp.
За допомогою директив # include в головну програму вимикаються інші файли: matfac.cpp. Припустимо що всі вони знаходяться в кореневій директорії диска С:. Якщо це не так, то необхідно змінити відповідні директиви # include.
Листинги виконуваної програми kurs.cpp і модулями ядра matfac.cpp представлені в додатках 1 і 2.

5. Висновок

У цій роботі мною був розглянутий стандартний модуль для роботи з математичними функціями на мові C + + "math.h". А також розроблений власний модуль для обчислення площі, об'ємів геометричних фігур та інших параметрів. Ця робота дозволила мені більш поглиблено вивчити роботу з математичними функціями, різні тонкощі мови. У курсовій роботі була створена і описана програма, що дозволяє обчислювати деякі геометричні величини.
Дана робота може використовуватися у навчальних цілях, а на основі коду модуля можуть здійснюватися різні розробки додаткових функцій для роботи з математичними функціями, на лабораторних заняттях з вивчення теоретичного матеріалу і придбання практичних навичок з дисципліни «Системне Програмне Забезпечення».

6. Список використаної літератури

1. М.І. Болскі. Мова програмування Сі. 1988р.
2. Б.І. Березін. Початковий курс С і С + +. М., 2001р.
3. Інтернет ресурси (www.citforum.ru)

Додаток 1

Лістинг основної програми (kurs).
# Include <iostream.h>
# Include <conio.h>
# Include <c:\matfac.cpp>
# Include <math.h>
/ / # Include <stdio.h>
void f1 (char menu [9] [30]) / / Площа кола
{
float r;
gotoxy (15,10);
cout <<menu [1] <<endl;
cout <<"Введіть радіус \ n"; cin>> r;
cout <<menu [1 ]<<"="<< Sokr (r);
getch ();
}
void f2 (char menu [9] [30]) / / Обсяг циліндра
{
float r, h;
gotoxy (15,10);
cout <<menu [2] <<endl;
cout <<"Введіть радіус \ n"; cin>> r;
cout <<"Введіть висоту \ n"; cin>> h;
cout <<menu [2 ]<<"="<< VCil (r, h);
getch ();
}
void f3 (char menu [9] [30]) / / Площа циліндра
{
float r, h;
gotoxy (15,10);
cout <<menu [3] <<endl;
cout <<"Введіть радіус \ n"; cin>> r;
cout <<"Введіть висоту \ n"; cin>> h;
cout <<menu [3 ]<<"="<< SCil (r, h);
getch ();
}
void f4 (char menu [9] [30]) / / Площа трапеції
{
float a, b, h;
gotoxy (15,10);
cout <<menu [4] <<endl;
cout <<"Введіть бік a \ n"; cin>> a;
cout <<"Введіть бік b \ n"; cin>> b;
cout <<"Введіть висоту h \ n"; cin>> h;
cout <<menu [4 ]<<"="<< STrap (a, b, h);
getch ();
}
void f5 (char menu [9] [30]) / / Об'єм піраміди
{
float a, b, h;
gotoxy (15,10);
cout <<menu [5] <<endl;
cout <<"Введіть a \ n"; cin>> a;
cout <<"Введіть b \ n"; cin>> b;
cout <<"Введіть h \ n"; cin>> h;
cout <<menu [5 ]<<"="<< VPir (a, b, h);
getch ();
}
void f6 (char menu [9] [30]) / / Обсяг кулі
{
float r;
gotoxy (15,10);
cout <<menu [6] <<endl;
cout <<"Введіть радіус \ n"; cin>> r;
cout <<menu [6 ]<<"="<< VSfer (r);
getch ();
}
void f7 (char menu [9] [30]) / / Площа сфери
{Float r;
gotoxy (15,10);
cout <<menu [7] <<endl;
cout <<"Введіть радіус r \ n"; cin>> r;
cout <<menu [7 ]<<"="<< SSfer (r);
getch ();
}
void f8 (char menu [9] [30]) / / Факторіал
{Float r;
gotoxy (15,10);
cout <<menu [8] <<endl;
cout <<"Введіть число \ n"; cin>> r;
cout <<menu [8 ]<<"="<< fac (r);
getch ();
}
short sw (short k, char menu [9] [30]) / / виклик функцій
{
short kod = 1;
switch (k)
{
case (1): f1 (menu); break;
case (2): f2 (menu); break;
case (3): f3 (menu); break;
case (4): f4 (menu); break;
case (5): f5 (menu); break;
case (6): f6 (menu); break;
case (7): f7 (menu); break;
case (8): f8 (menu); break;
case (9): cout <<menu [9] <<endl; kod = 27; getch (); return kod; / / Вихід
}
}
void mn (short k, char menu [9] [30]) / / меню
{
clrscr ();
textattr (7);
for (int i = 1; i <10; i + +)
{
gotoxy (15, i +5);
if (k == i) {
textattr (2);
cprintf (menu [i]);
textattr (7);
} Else cprintf (menu [i]);
}
}
void main ()
{
clrscr ();
char menu [9] [30]; / / масив рядків
strcpy (menu [1], "Площа круга");
strcpy (menu [2], "Обсяг циліндра");
strcpy (menu [3], "Площа циліндра");
strcpy (menu [4], "Площа трапеції");
strcpy (menu [5], "Об'єм піраміди");
strcpy (menu [6], "Обсяг кулі");
strcpy (menu [7], "Площа сфери");
strcpy (menu [8], "Факторіал");
strcpy (menu [9], "Вихід");
short k = 1, kod = 1;
mn (k, menu);
do
{
kod = getch ();
switch (kod) / / визначити натиснуті клавіші
{
/ / Case (27): {return;}; break; / / ESC
case (80): {k + +; if (k> 9) k = 9; mn (k, menu);}; break; / / стрілка вгору
case (72): {k -; if (k <1) k = 1; mn (k, menu);}; break; / / стрілка вниз
case (13): clrscr (); kod = sw (k, menu); mn (k, menu); break; / / enter
}
} While (kod! = 27); / / ESC
}

Додаток 2

Лістинг модуля "matfac.cpp".
# Include <math.h>
# Define M_PI 3.14159265358979323846
float fac (float n) / / factorial_1
{
float f = 0;
if (n! = 0)
{
f = 1;
for (int i = 1; i <= n; i + +)
{
f *= i;
}
} Else f = 0;
return f;
}
float Sokr (float r) / / площа груга_2
{
return (M_PI * r * r);
}
float VCil (float r, float h) / / обсяг ціліндра_3
{
return (M_PI * r * r * h);
}
float SCil (float r, float h) / / площа ціліндра_4
{
return (M_PI * 2 * r * (r + h));
}
float STrap (float a, float b, float h) / / площа трапеціі_5
{
return ((a + b) / (2 * h));
}
float VPir (float a, float b, float h) / / обсяг піраміди_6
{
return ((a * b * h) / 3);
}
float VSfer (float r) / / обсяг шара_7
{
return (4 * M_PI * r * r) / 3;
}
float SSfer (float r) / / площа сфери_8
{
return (4 * M_PI * r * r);
}
Додати в блог або на сайт

Цей текст може містити помилки.

Програмування, комп'ютери, інформатика і кібернетика | Курсова
78.4кб. | скачати


Схожі роботи:
C Стандартні бібліотечні функції роботи з графікою
Типи даних алгоритмічної мови TURBO Pascal Стандартні функції і оператори роботи з рядками
Оператори алгоритмічної мови Паскаль Стандартні функції і оператори роботи з рядками
Бібліотечні уроки з 1 по 11 клас
Архівно-бібліотечні зібрання української еміграції з чехословацької республіки історія переміщень
Стандартні програми Windows
Стандартні прикладні програми Windows XP
Стандартні методи капітального бюджетування
Стандартні препарати і ефекти матриксу
© Усі права захищені
написати до нас