
- •З дисципліни “Системне програмування”
- •Мета виконання лабораторно-практичних робіт
- •Порядок виконання лабораторно-практичних робіт
- •Оформлення звітів про виконання лабораторно-практичних робіт
- •Лабораторна робота № 1
- •1 Короткі теоретичні відомості
- •1.4 Основні типи даних. Основні типи даних наведено в таблиці.
- •1.5 Операції.
- •Int printf (фороматний рядок, [, argument, ...]);
- •2 Питання вхідного контролю
- •3 Постановка завдання
- •4 Варіанти індивідуальних завдань
- •5 Методичні вказівки
- •6 Приклад розв’язку завдання
- •7 Питання вихідного контролю
- •Лабораторна робота № 2
- •1 Короткі теоретичні відомості Умовний оператор if. Уморвний оператор – це оператор, який виконується в залежності від виконання деякої умови.
- •2 Варіанти індивідуальних завдань
- •3 Методичні вказівки
- •4 Контрольні запитання
- •Лабораторна робота № 3
- •Оператор циклу while. Цикл while – це ітераційний цикл із передумовою. Це оператор циклу, який працює до тих пір, поки деяка умова буде істинною.
- •2 Варіанти індивідуальних завдань
- •3 Методичні вказівки
- •4 Приклад виконання лабораторної роботи
- •5 Контрольні запитання
- •Лабораторна робота № 4
- •1 Короткі теоретичні відомості
- •1.2 Опис масивів. Ім’я масиву це звичайний ідентифікатор. Він має бути унікальним, за ним іде розмірність. Розмір масиву може бути як літеральна константа, так і символьна.
- •Int array[a];
- •Int array[12];
- •Int array[a];
- •1.5 Одновимірні масиви. Одномірні масиви. Одномірний масив має один індекс.. Індекс – це номер в квадратних дужках після імені масиву.
- •2 Питання вхідного контролю
- •3 Варіанти індивідуальних завдань
- •4 Методичні вказівки
- •5 Приклад розв’язку завдання
- •5 Питання вихідного контролю
- •Лабораторна робота № 5
- •1 Короткі теоретичні відомості
- •2 Постановка завдання.
- •3 Варіанти індивідуальних завдань
- •4 Методичні вказівки
- •5 Приклад виконання лабораторної роботи
- •6 Контрольні запитання
- •Лабораторна робота № 6
- •1 Короткі теоретичні відомості
- •2 Питання вхідного контролю
- •3 Варіанти індивідуальних завдань
- •4 Методичні вказівки
- •5 Приклад розв’язку завдання
- •6 Питання вихідного контролю
- •Лабораторна робота № 7
- •1 Короткі теоретичні відомості
- •Int putchar(int c);
- •2 Варіанти індивідуальних завдань
- •3 Методичні вказівки
- •4 Контрольні запитання
- •Лабораторна робота № 8
- •1 Короткі теоретичні відомості
- •2 Постановка задачі
- •3 Варіанти індивідуальних завдань
- •4 Приклад виконання лабораторної роботи
- •5 Контрольні запитання
- •Лабораторна робота № 9
- •1 Короткі теоретичні відомості
- •2 Питання вхідного контролю
- •3 Постановка завдання
- •4 Варіанти індивідуальних завдань
- •5 Методичні вказівки
- •6 Приклад розв’язку завдання
- •7 Питання вихідного контролю
- •Лабораторна робота № 10
- •1 Короткі теоретичні відомості
- •2 Питання вхідного контролю
- •3 Варіанти індивідуальних завдань
- •4 Методичні вказівки
- •5 Приклад розв’язку завдання
- •6 Питання вихідного контролю
- •Лабораторна робота № 11
- •1 Короткі теоретичні відомості
- •2 Питання вхідного контролю
- •3 Постановка завдання
- •4 Варіанти індивідуальних завдань
- •5 Методичні вказівки
- •6 Приклад розв’язку завдання
- •7 Питання вихідного контролю
- •Практична робота № 1
- •1 Короткі теоретичні відомості
- •1.1 Умовний оператор if. Уморвний оператор – це оператор, який виконується в залежності від виконання деякої умови.
- •Оператор виконує наступні дії:
- •Приклад: Написати програму, яка виводить на екран числа від 1 до 7.
- •Оператор while виконує наступні дії:
- •Приклад: Вивести на екран додатні числа менші від 10.
- •Оператор виконує наступні дії:
- •2 Питання вхідного контролю
- •3 Постановка завдання на використання оператора switch
- •4 Варіанти індивідуальних завдань на використання оператора switch
- •5 Варіанти індивідуальних завдань на оператори циклів
- •6 Методичні вказівки
- •7 Приклад розв’язку завдання
- •8 Питання вихідного контролю
- •Практична робота № 2
- •1 Короткі теоретичні відомості
- •Void func( ) /*нічого не повертає*/
- •2 Варіанти індивідуальних завдань:
- •3 Методичні вказівки
- •4 Приклад виконання практичної роботи
- •5 Контрольні запитання
- •Практична робота № 3
- •1 Короткі теоретичні відомості
- •Int putchar(int c);
- •2 Питання вхідного контролю
- •3 Варіанти індивідуальних завдань
- •4 Методичні вказівки
- •5 Приклад розв’язку завдання
- •6 Питання вихідного контролю
- •Практична робота № 4
- •1 Короткі теоретичні відомості
- •2 Питання вхідного контролю
- •3 Постановка завдання
- •4 Варіанти індивідуальних завдань
- •5 Методичні вказівки
- •6 Приклад розв’язку завдання
- •7 Питання вихідного контролю
- •Список рекомендованої літератури
5 Приклад виконання лабораторної роботи
Протабулювати
функцію
на проміжку
з кроком (b-a)/k,
де (a=-1,
b=1, k=10).
Результати обчислень вивести на екран
у вигляді таблиці пар чисел
і
.
Визначити кількість від’ємних значень
функції. Якщо дані не існують, вивести
про це повідомлення.
Текс програми мовою С
include <stdio.h>
#include <math.h>
double x, y, a, b, h, z;
int i, k=10, kil=0;
void main()
{
printf ("Programa Lab_5\n");
a=-1;
b=1;
k=10;
h=(b-a)/k;
for (x=a; x<=b; x=x+h)
{z=2*sin((x-7)/2.);
if (z<0)
printf("x=%lf\targument <0\n", x);
else
{
y=-log( 2*sin((x-7)/2));
if( y<0) kil=kil+1;
printf("x=%lf\ty=%lf\n", x,y);
}
}
printf("kil=%d\n", kil);
printf ("\n");
}
Результати роботи програми
Programa Lab_5
x=-1.000000 y=-0.414494
x=-0.800000 y=-0.318841
x=-0.600000 y=-0.201892
x=-0.400000 y=-0.057960
x=-0.200000 y=0.122121
x=-0.000000 y=0.354440
x=0.200000 y=0.671225
x=0.400000 y=1.153624
x=0.600000 y=2.147735
x=0.800000 argument <0
x=1.000000 argument <0
kil=4
6 Контрольні запитання
Що таке формальні і фактичні параметри?
Скільки операторів return може бути в функції?
Складові частини функції?.
Напишіть на мові С логарифмічні і степеневі функції?
Яку бібліотеку необхідно підключити при використанні математичних функцій?
Як записується функція
?.
Як записується функція
?.
Лабораторна робота № 6
Тема: Використання адресної арифметики для роботи з вказівниками
Мета роботи: Навчитись описувати і задавати вказівники; оволодіти основними способами роботи з вказівниками в C- програмах, а також визначати адреси елементів масиву з використанням адресної арифметики.
1 Короткі теоретичні відомості
1.1 Визначення вказівника. Вказівник – це змінна, яка містить адрес іншої змінної. Вказівники призначені для зберігання адрес пам'яті. Використання вказівників допомагає гнучко керувати даними в програмах..
Переваги вказівників включають:
Операції, які з допомогою вказівників виконуються легше і зручніше.
Операції, які без вказівників взагалі виконати неможливо.
Коли компілятор обробляє оператор визначення змінної, наприклад, int i=10, то в пам'яті виділяється ділянка відповідно до типу змінної (int=> 4 байти) і записує в цю ділянку значення змінної. Всі звертання до цієї змінної компілятор замінить на адресу області пам'яті, у якій зберігається ця змінна.
Програміст визначає змінні-вказівники для зберігання адресів області пам'яті. Такі змінні називаються вказівниками. Вказівник не є самостійним типом, він завжди пов'язаний з якимсь іншим типом.
При описі змінної компілятор виділяє для неї ділянку пам’яті з унікальною адресою. Компілятор асоціює цю адресу з іменем змінної. Кожний раз, коли в програмі використовується ім’я змінної, автоматично проходить звернення по адресі до відповідного місця пам’яті. Програміст звичайно не знає цієї адреси, але може її визначити.
1.2 Опис вказівників. Вказівники є числовими змінними, тому їх треба описати перед використанням. Імена вказівників повинні задовольняти тим умовам, що і інші змінні і бути унікальними. Вказівник не має самостійного типу. Тип вказівника - це тип змінної, на яку вказує вказівник.
Синтаксис опису:
Ім’я типу *ім’я вказівника
Наприклад:
int *i; double *f, *ff; char *c;
Вказівник може бути константою або змінною, а також вказувати на константу або змінну.
int i; //ціла змінна
const int ci=1; //ціла константа
int *pi; //вказівник на цілу змінну
const int *pci; //вказівник на цілу константу
Якщо модифікатор const ставиться до вказівника (тобто перебуває між ім'ям вказівника й * ), то він забороняє зміну вказівника, а якщо він перебуває ліворуч від типу (тобто ліворуч від *), то він забороняє зміну значення, на яке вказує вказівник.
Наприклад,
float *p_data, d;
/* *p_data вказівник на змінну типу float, а d звичайна змінна типу float */
1.3 Ініціалізація (задання) вказівників. Використання не заданих вказівників дає непередбачені результати і це небезпечно, хоч і можливо. Якщо вказівник не містить адреси змінної, він не приносить ніякої користі. Адреса в вказівнику сама не з’явиться, її треба там помістити з допомогою операції взяття адреси, яка позначається значком амперсанд (&). Операція поєднання & і імені змінної, перед якою він стоїть, повертає адресу даної змінної. Тому вказівник можна ініціалізувати таким оператором присвоєння.
Вказівник = &змінна;
P_data =&data.; /* присвоює адресу data вказівнику P_data*/
Після ініціалізації вказівник вказує на змінну.
Операція посилання по вказівнику (*).
Коли знак цієї операції стоїть перед іменем вказівника, така конструкція позначає змінну, на яку вказує вказівник. Тому змінна і посилання на вказівник цієї змінної є речі ідентичні.
Наприклад, оператори
printf(“%d”, data);
printf(“%d”, *p_data);
дають однаковий ефект. Ці оператори еквівалентні.
1.4 Вказівник на массив. Вказівники і масиви тісно пов’язані. Ім’я масиву без квадратних дужок є вказівником на перший елемент масиву. Якщо а ім’я масиву, то а – це адреса першого елементу масиву, тобто еквівалентне співвідношення.
&a[0] = = a
Ім’я масиву є постійним вказівником (адресною константою, яку не можна міняти, тому заборонена операція а++ або а--, якщо а – ім’я масиву), його не можна змінити і воно (ім’я) є фіксованим протягом виконання програми.
1.5 Адресна арифметика. Адресу першого елементу масиву легко одержати по його вказівнику, тобто його імені. Щоб звернутися до будь-якого елементу масиву, вказівник має одержати приріст, кратний розміру елементів масиву. Для звертання до елементів масиву з допомогою вказівників використовується адресна арифметика. Адресна арифметика проста в використанні і з її допомогою легко працювати з вказівниками. Тут використовується дві унарні операції: інкременту і декременту.
1.6 Інкрементування вказівників. Інкрементувати вказівник – це значить збільшити його значення. Якщо значення вказівника інкрементувати на одиницю, то адресна арифметика автоматично адресу, яку він зберігає, так, щоб він вказував на наступний елемент масиву. Іншими словами, компілятор знає тип вказівника (з його опису) і збільшує збережувану в ньому адресу на довжину елемента даних.
Якщо ptr_short є вказівником на елемент масиву типу short , то оператор
ptr_short ++;
збільшує значення ptr_short на довжину типу short (2 байти) і вказівник буде вказувати на наступний елемент масиву.
1.7 Декрементування вказівників. Все що було сказано по відношенню до операції інкрементування вказівників відноситься і до операції декрементування вказівників, тільки в цьому випадку величина вказівника зменшується.