Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Пособие

.pdf
Скачиваний:
67
Добавлен:
22.03.2015
Размер:
1.35 Mб
Скачать

d.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