- •6.080401 «Інформаційні управляючи системи і технології» 6.080402 «Інформаційні технології проектування»
- •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 Структури даних
- •3. Операційні системи
- •3.1. Поняття операційної системи
- •3.1.1 Призначення операційної системи
- •3.1.2 Операційна система як розширена машина
- •3.1.3 Операційна система як розподілювач ресурсів
- •3.2 Класифікація сучасних операційних систем
- •4 Архітектура операційних систем
- •4.1 Базові поняття архітектури операційних систем
- •4.1.1 Ядро системи. Привілейований режим і режим користувача
- •4.2 Реалізація архітектури операційних систем
- •4.2.1 Монолітні системи
- •4.2.2 Багаторівневі системи
- •4.3 Системи з мікроядром
- •4.4 Концепція віртуальних машин
- •5. Підтримка програмування в oc unix.
- •5.1. Вивчення передачі інформації
- •5.2. Змінні оточення
- •5.3. Обробка помилок
- •5.4. Правила формування і засоби розбору командних рядків
- •6. Логічна організація файлових систем
- •6. 1. Поняття файла і файлової системи
- •6.1.1. Поняття файла
- •6.1.2. Поняття файлової системи
- •6.1.3. Типи файлів
- •6.1.4. Імена файлів
- •6. 2. Організація інформації у файловій системі
- •6.2.1. Розділи
- •6.2.2. Каталоги
- •6.2.3. Зв’язок розділів і структури каталогів
- •6. 3. Зв’язки
- •6. 3. 1. Жорсткі зв’язки
- •6. 3. 2. Символічні зв’язки
- •6. 4. Атрибути файлів
- •6. 5. Операції над файлами і каталогами
- •6. 5. 1. Підходи до використання файлів процесами
- •6. 5. 2. Загальні відомості про файлові операції
- •7. Файлові операції posix
- •7.1. Відкриття і створення файлів
- •7.2. Закриття файла
- •7.3. Читання і записування даних
- •7.4. Збирання інформації про атрибути файла
- •7.5 Операції над каталогами
- •Література
2.15 Структури даних
Структури - це один з складених типів даних. Структурні змінні, або просто структури, це об'єднання однієї або більш змінних, можливо різних типів, в одну область пам'яті, що має для простоти одне ім'я. Окремі складові частини структурної змінної називаються полями.
Поняття структури в мові З відповідає двом різним поняттям. По-перше, це позначення місця в пам'яті, де розташовується інформація. Це місце називається структурною змінною. По-друге, це правило формування структурної змінної, використовуване для виділення їй місця в пам'яті і організації доступу до її полів. Далі таке правило називатимемо шаблоном структури.
Опис структурної змінної складається з двох кроків:
завдання шаблону структури;
опис структурної змінної.
Кожен шаблон має унікальне ім'я, яке підкоряється правилам формування імен змінних в мові С.
Синтаксис шаблону:
struct name {
type1 fieldname1;
type2 fieldname2;
…
typen fieldnamen;
};
де:
name - ім'я шаблону;
typen - будь-які типи змінних;
fieldname - імена полів.
Імена полів в одному шаблоні повинні бути унікальними, в різних - можливі співпадаючі імена.
Приклад шаблону приведений нижче:
struct student {
char name[32];
char lastname[32];
int kurs;
int years;
float stypendiya;
};
На даний момент визначена тільки форми даних, що «описують» студента. Після завдання шаблону можна описати структурну змінну, наприклад:
struct student first_student, second_student;
Існує ще один варіант опису структурної змінної - оголошення її безпосередньо після оператора опису шаблону, наприклад:
struct student {
char name[32];
char lastname[32];
int kurs;
int years;
float stypendiya;
} first_student, second_student;
Існує два способи звернення до структурної змінної:
з використанням оператора .
з використанням оператора ->
Оператор . формує посилання на потрібне поле з імені структурної змінної і імені поля, наприклад:
first_student.stypendiya=500;
Якщо дані прочитуються з клавіатури, то це можна зробити так6
scanf(“%f”,&first student);
При описі структурної змінної дозволяється виконувати ініціалізацію полів змінних, наприклад:
struct student first_student{
“Іванов”,
“Іван”,
2,
19,
500,
};
За заданим шаблоном структури можна описувати масиви структур і покажчики на структури. Наприклад:
struct student gr1[40];
Доступ до елементів масиву може виконуватися через індекс елементу або через покажчик-константу, яким є ім'я масиву:
gr1[i].stypendiya=500;
*(gr1+i).stypendiya=500;
(gr1+i)->stypendiya=500;
Як приклад використання даних типу структура розглянемо програму, в якій у файлі даних car.dat (передбачається, що файл існує і зберігає дані типу структура car) шукається автомобіль за номером oi8413t.
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
void main(void)
{
struct car {
char nomer[15];
char type[15];
char mark[15];
} car_current;
char nomer[ ]=”oi8413t”;
char work[80];
unsigned int flag=0;
FILE *fp;
if((fp=fopen(“car.dat”,”rt”))==NULL)
{
printf((“n Cannot open file”);
exit(1);
}
while(fgets(work,80,fp)!=NULL)
{
sscanf(work,”%s %s %s”, car_current.nomer, car_current.type, car_current.mark);
if(strstr(car_current.nomer,nomer)==0)
{
continue;
}
else
{
printf(“%s”,work);
flag=1;
break;
}
if(flag==0)
{
printf(“ Автомобіль не знайдений”);
}
fclose(fp);
}
Тут файл car.dat відкривається на читання. На кожному кроці циклу з файлу в буфер (масив work) прочитується рядок і порівнюється з шуканого за допомогою функції пошуку підрядка в рядку strstr(). Функція strstr() у разі невдачі повертає 0, інакше повертає 1.
Функція sscanf() прочитує дані з work і розносить їх по рядку, формату, по трьох структурованих змінних.
Контрольні запитання і завдання
Які оператори дозволяють організовувати розгалуження в програмі?
Яких операторів циклів ви знаєте? Сформулюйте рекомендації щодо їх використовування.
Яке призначення оператора break?
Яке призначення оператора continue?
Яке призначення оператора return?
Що є описом масиву?
Як можна описати і проініціалізувати масив?
Складіть фрагмент програми для обчислення коренів квадратного рівняння, що враховує різні значення і співвідношення значень коефіцієнтів.
Складіть фрагмент програми для сортування елементів двовимірного масиву дійсних чисел за збільшенням величин елементів.
складіть фрагмент програми пошуку числа у відсортованому одновимірному масиві цілих чисел. Треба використовувати факт сортування для прискорення процесу пошуку.