Пособие
.pdfd.m+=mm;
if (d.m>12)
{
d.y+=d.m/12;
d.m=d.m%12;
}
}
void add_day(Date &d,int dd) /* додати dd днiв до дати */
{
int days[]={31,28,31,30,31,30, 31,31,30,31,30,31};
d.d+=dd;
if (leapyear(d.y)) days[1]=29; while ((d.d>days[d.m-1]))
{
if (leapyear(d.y)) days[1]=29; else days[1]=28;
d.d-=days[d.m-1]; d.m++;
if (d.m>12)
{
d.y+=d.m%12;
d.m=d.m/12;
}
}
}
int main()
{
Date date1,date2;
Date array[10]={{12,11,1980},{15,1,1982}, {8,6,1985},{8,8,1993},{20,12,2002}}; init_date(date1,15,12,2002); add_day(date1,16);
print_date(date1); init_date(date2,1,1,2003); add_month(date2,10); print_date(date2); print_date_arr(array,5);
}
131
|
17 ІНДИВІДУАЛЬНІ ЗАВДАННЯ ДО П.16 |
№ |
Завдання |
1.Описати структуру з ім’ям STUDENT, що містить наступні поля: NAME – прізвище та ініціали, GROUP – номер групи, SES – оцінки з п’яти предметів (масив з п’яти елементів). Написати програму, що реалізовує наступні дії окремими функціями:
– введення з клавіатури даних у масив STUD, що складається з N
змінних типу STUDENT;
–впорядкування записів за зростанням значень поля GROUP;
–виведення на екран прізвищ і номерів груп для всіх студентів, середній бал яких більший за 4.0; якщо таких студентів немає, то вивести відповідне повідомлення.
2.Описати структуру з ім’ям ABITURIENT, що містить наступні поля: NAME – прізвище, ініціали, GENDER – стать, SPEC – назва спеціальності, EXAM – результати вступних іспитів з трьох предметів (масив з трьох елементів). Написати програму, що окремими функціями реалізовує наступні дії:
–введення з клавіатури даних у масив ABITUR, що складається
з N змінних типу ABITURIENT;
–впорядкування записів за зростанням середнього бала;
–виведення на екран прізвищ та назв спеціальностей для всіх абітурієнтів, що мають бал нижче, ніж прохідний, що визначається користувачем програми; якщо таких студентів немає, то вивести відповідне повідомлення.
3.Описати структуру з ім’ям SCHOOL, що містить наступні поля: NAME – прізвище та ім’я учня, GROUP – номер класу, SUBJECT
–успішність з п’яти предметів (масив з п’яти елементів). Написати програму, що окремими функціями виконує наступні дії:
–введення з клавіатури даних у масив LEARNER, що складаєть-
ся з N змінних типу SCHOOL;
–впорядкування записів за алфавітом;
–виведення на екран прізвищ і номерів груп для всіх студентів, що мають хоча б одну оцінку 2; якщо таких учнів немає, то вивести відповідне повідомлення.
4.Описати структуру з ім’ям AEROFLOT, що містить наступні поля: CITY – назва населеного пункту призначення, NUM – номер рейса, TYPE – тип літака. Написати програму, що окремими функціями реалізовує наступні дії:
132
–введення з клавіатури даних у масив AIR, що складається з N змінних типу AEROFLOT;
–впорядкування записів за зростанням номеру рейсу;
–виведення на екран номерів рейсів і типів літаків, що вилетіли в пункт призначення, назва якого збіглася з назвою, введеною з клавіатури; якщо таких рейсів немає, то вивести відповідне повідомлення.
5.Описати структуру з ім’ям SKLAD, що містить наступні поля: NAME – назва товару, TYPE – одиниця виміру товару, QUANTITY – кількість одиниць товару, COST – ціна одиниці товару. Написати програму, що окремими функціями виконує наступні дії:
–введення з клавіатури даних у масив SHOP, що складається з N
змінних типу SKLAD;
–впорядкування записів за назвами товару;
–виведення на екран інформації про товар, його кількість, ціну одиниці та обчислену загальну суму на складі, назва якого вводиться з клавіатури; якщо такого немає, то вивести відповідне повідомлення.
6.Описати структуру з ім’ям WORKER, що містить наступні поля: NAME – прізвище та ініціали працівника, POS – назва посади, YEAR – рік прийняття на роботу, MONTH – місяць прийняття на роботу. Написати програму, що окремими функціями виконує наступні дії:
–введення з клавіатури даних у масив TABL, що складається з N
змінних типу WORKER;
–впорядкування записів в алфавітному порядку;
–виведення на екран прізвищ працівників, стаж роботи яких перевищує значення, введене з клавіатури; якщо таких працівників немає, то вивести відповідне повідомлення.
7.Описати структуру з ім’ям TRAIN, що містить наступні поля: NAZV – назва пункту призначення, NUMR – номер потягу, DATE
–дата відправлення, TIME – час відправлення. Написати програму, що окремими функціями виконує наступні дії:
–введення з клавіатури даних у масив RASP, що складається з N
змінних типу TRAIN;
– впорядкування записів за алфавітом за назвами пунктів призначення;
133
–виведення на екран інформації про поїзди, що відправляються після введеного з клавіатури дня та часу. якщо таких поїздів немає, то вивести відповідне повідомлення.
8.Описати структуру з ім’ям TIMETABLE, що містить наступні поля: NAZV – назва пункту призначення, NUMR – номер поїзда, DATE – дата відправлення, TIME – час відправлення. Написати програму, що окремими функціями виконує наступні дії:
–введення з клавіатури даних у масив TRAIN, що складається з
N змінних типу TIMETABLE;
–впорядкування записів за датою та часом відправлення поїзда;
–виведення на екран інформації про поїзди, що направляються в пункт призначення, назва якого введена з клавіатури, якщо таких поїздів немає, то вивести відповідне повідомлення.
9.Описати структуру з ім’ям TIMETABLE, що містить наступні поля: NAZV – назва пункту призначення, NUMR – номер поїзда, DATE – дата відправлення, TIME – час відправлення. Написати програму, що окремими функціями виконує наступні дії:
–введення з клавіатури даних у масив TRAIN, що складається з
N структур типу TIMETABLE;
–впорядкування записів за номерами поїздів;
–виведення на екран інформацію про поїзди, дата відправлення яких уведена з клавіатури; якщо таких поїздів немає, то вивести відповідне повідомлення.
10.Описати структуру з ім’ям ITINERARY, що містить наступні поля: FIRST – назва початкового пункту маршруту, FINAL – назва кінцевого пункту маршруту, NUM – номер маршруту, DISTANCE – відстань у кілометрах. Написати програму, що окремими функціями виконує наступні дії:
–введення з клавіатури даних у масив ROUT, що складається з N
змінних типу ITINERARY;
–впорядкування записів за спаданням відстані у кілометрах;
–виведення на екран інформації про маршрут, номер якого введений з клавіатури; якщо таких маршрутів немає, то вивести відповідне повідомлення.
11.Описати структуру з ім’ям ITINERARY, що містить наступні поля: BEG – назва початкового пункту маршруту, END – назва кінцевого пункту маршруту, NUM – номер маршруту, DISTANCE
–відстань у кілометрах. Написати програму, що окремими фун-
134
кціями виконує наступні дії:
–введення з клавіатури даних у масив ROUT, що складається з N змінних типу ITINERARY;
–впорядкування записів за номерами маршрутів;
–виведення на екран інформацію про маршрути, що починаються або закінчуються в пункті, назва якого введена з клавіатури; якщо таких маршрутів немає, то вивести відповідне повідомлення.
12.Описати структуру з ім’ям NOTE, що містить наступні поля: NAME – прізвище, ім’я, TEL – номер телефону, BDAY – день народження (масив із трьох чисел). Написати програму, що окремими функціями виконує наступні дії:
–введення з клавіатури даних у масив BLOCKNOTE, що склада-
ється з N змінних типу NOTE;
–впорядкування записів за зростанням дат днів народження;
–виведення на екран інформації про людей, чиї дні народження припадають на місяць, значення якого введено з клавіатури; якщо таких людей немає, то вивести відповідне повідомлення.
13.Описати структуру з ім’ям ZNAK, що містить наступні поля: NAME – прізвище, ім’я, ZODIAC – знак Зодіаку, BDAY – день народження (масив із трьох чисел). Написати програму, що окремими функціями виконує наступні дії:
–введення з клавіатури даних у масив BOOK, що складається з N
змінних типу ZNAK;
–впорядкування записів за спаданням дат народження;
–виведення на екран інформації про людину, чиє прізвище введене з клавіатури; якщо таких людей немає, то вивести відповідне повідомлення.
14.Описати структуру з ім’ям ABITURIENT, що містить наступні поля: NAME – прізвище, ініціали, GENDER – стать, SPEC – назва спеціальності, EXAM – результати вступних іспитів з трьох предметів (масив з трьох елементів). Написати програму, що окремими функціями виконує наступні дії:
–введення з клавіатури даних у масив ABIT, що складається з N
змінних типу ABITURIENT;
–впорядкування записів за алфавітом;
–виведення на екран прізвищ та назв спеціальностей для всіх абітурієнтів, що набрали прохідний бал, що визначається корис-
135
тувачем програми; якщо таких студентів немає, то вивести відповідне повідомлення.
15.Описати структуру з ім’ям TOVAR, що містить наступні поля: NAME – назва товару, TYPE – одиниця виміру товару, SORT – сорт товару, QUANTITY – кількість одиниць товару, COST – ціна одиниці товару. Написати програму, що окремими функціями виконує наступні дії:
– введення з клавіатури даних у масив SHOP, що складається з N
змінних типу TOVAR;
–впорядкування записів за спаданням кількості одиниць товару;
–виведення на екран інформації про товар, його кількість, ціну одиниці та обчислену загальну суму на складі; назва товару вводиться з клавіатури, якщо його немає, то вивести відповідне повідомлення.
16.Описати структуру з ім’ям FIRMA, що містить наступні поля: NAME – прізвище працівника, GENDER – стать, PLATA – заробітна плата. Написати програму, що окремими функціями виконує наступні дії:
–введення з клавіатури даних у масив AGENCIJA, що склада-
ється з N змінних типу FIRMA;
–впорядкування записів за спаданням розміру заробітної плати;
–виведення на екран інформації про чоловіка, що має саму велику заробітну плату, якщо таких декілька то вивести інформацію про всіх..
17.Описати структуру з ім’ям FIRMA, що містить наступні поля: NAME – прізвище працівника, GENDER – стать, PLATA – заробітна плата. Написати програму, що окремими функціями виконує наступні дії:
–введення з клавіатури даних у масив AGENCIJA, що склада-
ється з N змінних типу FIRMA;
–впорядкування записів за спаданням розміру заробітної плати;
–виведення на екран інформації про чоловіка та жінки, що мають саму маленьку заробітну плату, якщо таких декілька то вивести інформацію про всіх.
18.Описати структуру з ім’ям FOOTBALL, що містить наступні поля: NAME – назва команди, COUNTRY – назва країни, BALL – кількість балів. Написати програму, що окремими функціями ви-
136
конує наступні дії:
–введення з клавіатури даних у масив TURNIR, що складається з N змінних типу FOOTBALL;
–впорядкування записів за алфавітом назв країн;
–виведення на екран інформації про команду, що стала чемпіоном.
19.Описати структуру з ім’ям FOOTBALL, що містить наступні поля: NAME – назва команди, COUNTRY – назва країни, BALL – кількість балів. Написати програму, що окремими функціями виконує наступні дії:
–введення з клавіатури даних у масив TURNIR, що складається
з N змінних типу FOOTBALL;
–впорядкування записів за алфавітом назв команд;
–виведення на екран інформації про команду, назва якої введена з клавіатури, якщо такої команди немає вивести відповідне повідомлення.
20.Описати структуру з ім’ям FOOTBALL, що містить наступні поля: NAME – назва команди, COUNTRY – назва країни, BALL – кількість балів. Написати програму, що окремими функціями виконує наступні дії:
–введення з клавіатури даних у масив TURNIR, що складається
з N змінних типу FOOTBALL;
–впорядкування записів за зростанням кількість балів;
–виведення на екран інформації про команди, що зайняли друге та третє місце.
21.Описати структуру з ім’ям FOOTBALL, що містить наступні поля: NAME – назва команди, COUNTRY – назва країни, BALL – кількість балів. Написати програму, що окремими функціями виконує наступні дії:
–введення з клавіатури даних у масив TURNIR, що складається
з N змінних типу FOOTBALL;
–впорядкування записів за спаданням кількості балів;
–виведення на екран інформації про команди, що входять до країни, назва якої введена з клавіатури, якщо команд не існує вивести відповідне повідомлення.
22.Описати структуру з ім’ям BAGGAGE, що містить наступні поля: NAME – прізвище пасажира, COUNT – кількість речей, WEIGHT – загальна маса багажу. Написати програму, що окремими функ-
137
ціями виконує наступні дії:
–введення з клавіатури даних у масив CARGO, що складається з N змінних типу BAGGAGE;
–впорядкування записів за спаданням кількості багажу;
–виведення на екран прізвище пасажирів, що мають більше двох валіз.
23.Описати структуру з ім’ям BAGGAGE, що містить наступні поля: NAME – прізвище пасажира, COUNT – кількість речей, WEIGHT – загальна маса багажу. Написати програму, що окремими функціями виконує наступні дії:
–введення з клавіатури даних у масив CARGO, що складається з
N змінних типу BAGGAGE;
–впорядкування записів за зростанням кількості багажу;
–виведення на екран прізвище пасажирів, що мають більше одну валізу, вага якої менше 25 кг.
24.Описати структуру з ім’ям BAGGAGE, що містить наступні поля: NAME – прізвище пасажира, COUNT – кількість речей, WEIGHT – загальна маса багажу. Написати програму, що окремими функціями виконує наступні дії:
–введення з клавіатури даних у масив CARGO, що складається з
N змінних типу BAGGAGE;
–впорядкування записів за алфавітом прізвищ пасажирів;
–виведення на екран прізвище пасажирів, у яких кількість речей більша ніж середня кількість багажу всіх пасажирів.
25.Описати структуру з ім’ям BAGGAGE, що містить наступні поля: NAME – прізвище пасажира, COUNT – кількість речей, WEIGHT – загальна маса багажу. Написати програму, що окремими функціями виконує наступні дії:
–введення з клавіатури даних у масив CARGO, що складається з
N змінних типу BAGGAGE;
–впорядкування записів за зростанням загальної маси багажу;
–виведення на екран прізвище пасажирів, у яких середня вага однієї валізи відрізняється від загальної середньої ваги не більш ніж на 0,5 кг.
138
18 ФАЙЛОВІ ПОТОКИ
Програми, що розглядались в попередніх розділах, брали дані лише з клавіатури та виводили результати совєї роботи лише на екран. Звичайно ж, програма повинна вміти записувати дані для довготривалого зберігання на диск та зчитувати їх. В абсолютній більшості сучасних операційних систем дані на носії упорядковуються у файли. Файл – це іменована сукупність даних, що зберігаються на пристрої [3].
У мові С файл розглядається як потік (stream), що представляє собою послідовність байтів, що записуються або зчитуються. При цьому потік «не знає», що і в якій послідовності в нього записано. Розшифровка змісту записаних у ньому байтів лежить на програмі.
Класичний підхід, прийнятий в С, полягає в тому, що інформація про потік заноситься в структуру FILE, що визначена у файлі stdio.h. Файл відкривається за допомогою функції fopen, що повертає покажчик на структуру типу FILE.
typedef struct
{
short level; /*рівень буферу*/ unsigned flags; /*статус файлу */ char fd; /*дескриптор файла*/ char hold; /*попередній символ, якщо немає буферу*/
short bsize; /*розмір буферу*/
unsigned char *buffer; /*буфер передавання даних*/
unsigned char *curp; /*поточний активний покажчик*/
short token; /*перевірка коректності*/ } FILE;
Синтаксис функції fopen():
FILE *fopen(const char *filename, const char *mode);
Дана функція відкриває файл із заданим ім’ям і зв’язує з ним потік. Аргумент mode вказує режим відкриття файлу (таблиця 18.1).
139
|
Таблиця 18.1 |
|
Значення аргументу mode функції fopen() |
«r» |
відкриття файлу без дозволу на модифікацію, файл відкри- |
|
вається лише для читання. |
«w» |
створення нового файлу тільки для запису, якщо файл із |
|
вказаним ім’ям вже існує, то він перезапишеться |
«a» |
відкриття файлу тільки для додавання інформації в кінець |
|
файлу, якщо файл не існує, він створюється. |
«r+» |
відкриття існуючого файлу для читання та запису. |
«w+» |
створення нового файлу для читання та запису, якщо файл |
|
із вказаним ім’ям вже існує, то він перезаписується. |
«a+» |
відкриває файл у режимі читання та запису для додавання |
|
нової інформації у кінець файлу; якщо файл не існує, він |
|
створюється. |
До вказаних специфікаторів у кінці або перед символом «+» може додаватися символ «t» (текстовий файл), або «b» (бінарний, двійковий файл).
18.1 Текстові файли
Розглянемо спочатку роботу з текстовими файлами. Відкриття текстового файлу test.txt може мати вигляд :
#include<stdio.h> int main()
{
FILE *f;
if ((f=fopen("test.txt", "rt"))==NULL)
{
printf("Error.\n"); return 0;
}
fclose(f); return 0;
}
У даному прикладі змінна f зв’язується з файлом «test.txt», що відкривається як текстовий тільки для читання.
140