- •Введення
- •1. Структура та обсяг дисципліни
- •2. Основи програмування на мові с
- •2.1 Найпростіші конструкції мови
- •2.2 Типи даних
- •2.4 Операції мови с
- •2.5 Структура простої с програми
- •2.6 Організація введення-виведення
- •2.7 Компіляція в системі Linux
- •2.8 Організація розгалужень в програмі
- •2.9 Організація циклів
- •2.10 Оператор break
- •2.11 Оператор continue
- •2.11 Масиви
- •2.12 Функції
- •2.13 Вызов функции с переменным числом параметров
- •2.14 Рекурсивні функції
- •2.15 Читання і запис текстових файлів
- •2.16 Структури даних
- •2.17 Перелік|перерахування| (enumeration)
- •2.18 Об'єднання (union)
- •3. Операційні системи і системне програмування
- •3.1. Поняття операційної системи
- •4. Корисні команди Linux
- •4.1. Загальні|спільні| команди
- •4.1.1. Команда arch – виведення архітектури комп'ютера
- •4.1.2. Команда clear – очищення екрану
- •4.1.3. Команда date
- •4.1.9. Команда uptime – інформація про роботу системи
- •4.1.10. Команда users – інформація про користувачів
- •4.1.11. Команди w, who і whoami інформація про користувачів
- •4.1.12. Команда xf8config – настройка графічної підсистеми
- •4.2. Команди для роботи з текстом
- •4.2.1. Команди diff і cmp
- •4.2.2. Команди grep і egrep – текстовий фільтр
- •4.2.3. Команди more и less – посторінкове виведення
- •4.2.4. Команди head і tail – виведення начала і хвоста файлу
- •4.2.5. Команда wc – підрахунок слів у файлі
- •5. Захист інформації в інформаційних системах
- •5.1 Основні завдання забезпечення безпеки
- •5.2 Базові поняття криптографії
- •5.2.1 Поняття криптографічного алгоритму і протоколу
- •5.2.2 Криптосистеми з секретним ключем
- •5.2.3 Криптосистеми із відкритим ключем
- •5.2.4. Гибридні криптосистеми
- •5.2.5. Цифрові підписи
- •5.2.6. Сертифікати
- •5.3. Принципи аутентифіекації і керування доступом
- •5.3.1. Основи аутентифікації
- •5.3.2. Основи керування доступом
- •5.4. Аутентифікація та керування доступом в unix
- •5.4.1. Облікові записи користувачів
- •5.4.2. Аутентифікація
- •5.4.3. Керування доступом
- •6. Програмний інтерфейс unix. Системні виклики і функції стандартних бібліотек
- •6.1. Підтримка програмування в oc unix. Вивчення передачі інформації
- •6.2. Змінні оточення
- •6.3. Обробка помилок
- •6.4. Правила формування і засоби розбору командних рядків
- •7. Операції над файлами
- •7.1 Файлові операції posix
- •7.2. Збирання інформації про атрибути файла
- •7.3. Операції над каталогами
- •Література
2.17 Перелік|перерахування| (enumeration)
Тип (enumeration), що перераховує, – це безліч поіменованих цілочисельних констант. Тип, що перераховує, визначає всі допустимі значення, які можуть приймати змінні цього типа.
Основна форма оголошення типу така:
enum имя_типа { список_названий} [ список_переменных];
Список змінних може бути порожнім|пустим|.
Наприклад, визначення типа, що перераховує, і змінної даного типа можна представити|уявити| так:
enum seasons {win, spr, sum, aut};
enum seasons s;
Ключем|джерелом| до понімання| суті|сутності,єства| типа, що перераховує, є|з'являється,являється| те, що кожне з імен win, spr, sum, aut є цілою величиною. Якщо ці величини не визначені по-іншому, то за умовчанням вони відповідно рівні 0, 1, 2 і 3.
Оператор
printf(“%d %d”,win,aut); видасть на екран значення 0 і 3.
Під час оголошення типу можна одному або декільком назвам привласнити інші значення, наприклад:
enum value {one=1, two,three,ten=10, thousand=1000, next};
Тоді оператор
printf(“%d %d %d %d %d”,one, two, ten, thousand, next); виведе на екран 1 2 10 1000 1001, тобто кожне наступне|таке| значення імені збільшується на 1 в порівнянні з поточним якщо немає іншого привласнення.
Із|із| змінними типа, що перераховує, можна проводити|виробляти,справляти| наступні|слідуючі| операції:
привласнити змінну типу enum іншої змінної цього ж типа;
провести порівняння з метою з'ясування рівності або нерівності;
арифметичні операції з|із| константами типу enum (i=win-aut);
Не можна використовувати арифметичні операції і операції ++ і – для змінних типу enum.
Основна причина використання типа, що перераховує, – поліпшення читаності програм.
2.18 Об'єднання (union)
У мові C, окрім структур, визначений ще один тип для розміщення в пам'яті змінних різного типа. Це об'єднання – union. Об'єднання застосовуються для економії пам'яті в тих випадках, коли наперед|заздалегідь| відомо, що більше одного поля одночасно не буде потрібно, тобто всі поля об'єднання розташовуються поодинці і тій же адресі. У кожен момент часу в змінній типу об'єднання зберігається тільки|лише| одне значення. Оголошується об'єднання так само, як і структура:
union u {
int I;
char ch;
long int l;
};
Це оголошення задає шаблон об'єднання. Можна оголосити змінну такого типа:
union u alpha, beta *gamma;
Змінні можна оголосити одночасно із завданням|задаванням| шаблону.
На відміну від структури для змінної типу union місця в пам'яті виділяється рівно стільки, скільки треба елементу об'єднання, що має найбільший розмір в байтах. У нашому випадку під змінні alpha, betfa буде виділено по 4 байти ( елемент i вимагає 2 байти, елемент ch - 1 байт, елемент l – 4 байти). Число i, символ ch і довге ціле l займають|позичають,посідають| одну і ту ж ділянку пам'яті.
Синтаксис використання елементів об'єднання такої ж, як і для структури:
alpha.ch=’5’;
*gamma->ch=’5’;
Об'єднання ініціалізувалося значенням у фігурних дужках, причому воно привласнюється першому члену об'єднання. Наприклад:
union int_dbl {
int i;
double x;
} n={0};
Змінна n може використовуватися як ціла або змінна з|із| подвійною точністю:
n.i=7;
cout<<n.i<<” ціле ”;
n.x=7.0;
cout<<n.x<<” подвійної точності”;
Об'єднання можуть бути безіменними, наприклад:
enum week { sun, mom, tues, weds, thus, fri, sat};
union {
int i;
week w;
};
i=5;
if(w==sat || w==sun)
cout<<” Вихідний”;
Оголошення безіменного об'єднання дозволяє використовувати ідентифікатори окремих членів як змінні.
#include<iostream.h>
void main()
{
enum paytype { CARD, CHECK};
paytype ptype;
union payment {
char card[25];
long check;
} info;
/*
Привласнення значень info і ptype
*/
switch (ptype)
{
case CARD: cout<<” оплата по карті “<<info.card;
break;
case CHECK: cout<<” Оплата чеком: “<<info.check;
break;
}
}
Об'єднання часто використовуються як поле структури, при цьому в структуру зручно включати додаткове поле, що визначає, який саме елемент об'єднання використовується в кожен момент часу. Ім'я об'єднання можна не указувати|вказувати|, що дозволяє звертатися|обертатися| до його полів безпосередньо:
#include<iostream.h>
void main()
{
enum paytype {CARD, CHECK};
struct {
paytype ptype;
union {
char card[25];
long check;
};
} info;
/*
Привласнення значення info
*/
switch (info.ptype)
{
case CARD: cout<<” Оплата по карті: “<<info.card;
break;
case CHECK: cout<<” Оплата чеком: “<<info.check;
break;
}
}
3. Контрольна робота №1
Основи програмування на мові С
Завдання № 1: Програмування обчислювальних процесів з розгалуженням
Мета роботи: отримання практичних навичок програмування завдань з використанням конструкцій мови, що управляють.
Задача: Розробити схему алгоритму і написати програму обчислення значення функції. Передбачити розрахунок по всім трьом гілкам.
Варіанти завдань
Номер варіанту визначається останньою цифрою номера залікової книжки.
Y=
Y=
Y=
Y=
Y=
Y=
Y=
Y=
Y=
Y=
Y=
Y=
Контрольні питання:
Для чого призначений оператор вибору?
Які дві форми запису повного умовного оператора?
Приведіть приклад умовного оператора?
У чому різниця по сенсу між повною і короткою формами запису умовного оператора?
Чи може умовний оператор містити в собі інші умовні оператори?
Чи може умовний оператор містити в собі оператор переходу?
Як виконується програма за наявності оператора переходу?
Завдання № 2: Використання циклів
Мета роботи: отримання практичних навичок програмування завдань з використанням циклічних конструкцій.
При побудові рядів алгебри використовують так звані функції, що производять. Основним способом рішення такого класу завдань є породження множників за допомогою циклічних конструкцій і, можливо, перевірка того, чи задовольняє даний член заданій умові чи ні.
Алгоритм рішення таких задач складається з трьох кроків:
введення і перевірки даних;
циклу, який породжує множники з перевіркою на виконання якої-небудь властивості;
виведення результатив.
Задача:
Обчислити S як суму n додатків, де n
визначається з виразу:
Варіанти завдань
Номер варіанту визначається останньою цифрою номера залікової книжки.
S=
S=
S=
S=
S=
S=
S=
S=
S=1-
S=
S=
S=
Контрольні питання:
Поясніть призначення і правила використання оператора GOTO.
Поясніть призначення, схеми і правила використання операторів FOR,WHILE, DO-WHILE.
Поясніть призначення і правила використання операторів BREAK і CONTINUE.
Завдання № 3: Набір і відлагодження програм з використанням двовимірних масивів
Мета роботи: отримання практичних навичок програмування завдань з використанням багатовимірних масивів.
Варіанти завдань
Номер варіанту визначається останньою цифрою номера залікової книжки.
1. Написати і відлагодити програму, в якій:
з клавіатури вводиться двовимірний масив дійсних чисел розміром n*n;
перевіряється правильність прийому масиву;
рядки масиву сортуються за збільшенням;
елементи 1-го рядка і 1-го стовпця міняються місцями.
Результати всіх дій виводити на екран.
2. Написати і відлагодити програму, в якій:
з клавіатури вводиться двовимірний масив дійсних чисел розміром n*n;
перевіряється правильність прийому масиву;
рядки масиву сортуються за збільшенням;
елементи 1-го рядка замінюються нулями, последней-едініцамі.
Результати всіх дій виводити на екран.
3. Написати і відлагодити програму, в якій:
з клавіатури вводиться двовимірний масив дійсних чисел розміром n*n;
перевіряється правильність прийому масиву;
рядки масиву сортуються за збільшенням;
елементи головної діагоналі масиву виводяться на екран.
Результати всіх дій виводити на екран.
Написати і відлагодити програму, в якій:
з клавіатури вводиться двовимірний масив дійсних чисел розміром n*n;
перевіряється правильність прийому масиву;
рядки масиву сортуються за збільшенням;
елементи 1-ої і останній рядків міняються місцями.
Результати всіх дій виводити на екран.
Написати і відлагодити програму, в якій:
з клавіатури вводиться двовимірний масив дійсних чисел розміром n*n;
перевіряється правильність прийому масиву;
рядки масиву сортуються по убуванню.
визначається середнє арифметичне всіх елементів масиву.
Результати всіх дій виводити на екран.
Написати і відлагодити програму, в якій:
з клавіатури вводиться двовимірний масив дійсних чисел розміром n*n;
перевіряється правильність прийому масиву;
рядки масиву сортуються за збільшенням;
відповідні елементи 1-го і 2-го стовпців міняються місцями.
Результати всіх дій виводити на екран.
Написати і відлагодити програму, в якій:
з клавіатури вводиться двовимірний масив дійсних чисел розміром n*n;
перевіряється правильність прийому масиву;
рядки масиву сортуються за збільшенням;
визначити середнє арифметичне елементів кожного рядка.
Результати всіх дій виводити на екран.
Написати і відлагодити програму, в якій:
з клавіатури вводиться двовимірний масив дійсних чисел розміром n*n;
перевіряється правильність прийому масиву;
рядки масиву сортуються за збільшенням;
елементи 1-го і останнього стовпців міняються місцями.
Результати всіх дій виводити на екран.
Написати і відлагодити програму, в якій:
з клавіатури вводиться двовимірний масив дійсних чисел розміром n*n;
перевіряється правильність прийому масиву;
рядки масиву сортуються за збільшенням;
відповідні елементи 1-го 2-го рядка міняються місцями.
Результати всіх дій виводити на екран.
Написати і відлагодити програму, в якій:
з клавіатури вводиться двовимірний масив дійсних чисел розміром n*n;
перевіряється правильність прийому масиву;
рядки масиву сортуються за збільшенням;
визначається сума елементів масиву, розташованих на головній діагоналі.
Результати всіх дій виводити на екран.
Написати і відлагодити програму, в якій:
з клавіатури вводиться двовимірний масив дійсних чисел розміром n*n;
перевіряється правильність прийому масиву;
рядки масиву сортуються за збільшенням;
відповідні елементи 1-го 2-го рядка міняються місцями.
Результати всіх дій виводити на екран.
Написати і відлагодити програму, в якій::
з клавіатури вводиться двовимірний масив дійсних чисел розміром n*n;
перевіряється правильність прийому масиву;
рядки масиву сортуються за зменшенням;
визначається сума елементів масиву, розташованих на головній діагоналі.
Результати всіх дій виводити на екран.
Контрольні питання:
Як позначаються в програмі елементи багатовимірного масиву?
2. Як організовується в програмі введення елементів багатовимірного масиву?
3. Як організовується в програмі виведення багатовимірного масиву?
4. Поясніть суть сортування багатовимірного масиву методом «бульбашки».
Завдання № 4: Використання підпрограм. Використання рекурсії
Мета роботи: отримання практичних навичок програмування завдань з використанням рекурсії.
Задача:
Написати і відлагодити програму, яка обчислює цілий ступінь цілого числа:
використовуючи механізм рекурсії;
без використання рекурсії.
Контрольні питання:
1. Що таке рекурсія?
2. У чому полягає типова помилка при написанні рекурсивних функцій? Приведіть приклади.
Завдання №5: Структури даних.Файли даних
Мета роботи: Одержання практичних навичок в застосуванні структур даних та файлів даних.
Задача 1: Визначити структуру даних, що описує деякий реальний об'єкт. Створити файл даних і записати в нього дані такого типа.
Задача 2: З раніше створеного файлу даних счтітать дані і вивести їх на екран.
Задача 3: З раніше створеного файлу даних счтітать дані, відповідні заданому критерію, і вивести їх на екран.
Задача 4: У раніше створеному файлі даних знайти дані, відповідні заданому критерію, і замінити їх. Нові дані запрошуються в діалоговому режимі.
Задача 5: Додати в кінець файлу дані. Нові дані запрошуються в діалоговому режимі.
Контрольні питання:
Що таке структури даних?
Приведіть і поясніть синтаксичну діаграму структури даних.
Якими можуть бути імена полів в структурах?
Що таке файл даних?
Назвіть типи файлів, використовуваних в мові Сі.
Назвіть основні типи робіт з файлами даних.
Як оголосити файли різних типів?
