- •Міністерство транспорту та зв'язку україни
- •Мета виконання лабораторно-практичних робіт
- •Порядок виконання лабораторно-практичних робіт
- •Оформлення звітів про виконання лабораторно-практичних робіт
- •Лабораторна робота № 1-2
- •1 Короткі теоретичні відомості
- •2 Постановка завдання
- •3 Варіанти індивідуальних завдань
- •4 Методичні вказівки
- •5 Приклад виконання лабораторної роботи
- •6 Порядок виконання лабораторної роботи
- •7 Контрольні запитання
- •Лабораторна робота № 3 Тема: "Програмування розгалужених обчислювальних процесів з використанням умовних операторів"
- •1 Короткі теоретичні відомості Умовний оператор if. Уморвний оператор – це оператор, який виконується в залежності від виконання деякої умови.
- •Синтаксис оператора
- •2 Постановка завдання
- •3 Варіанти індивідуальних завдань
- •4 Методичні вказівки
- •5 Контрольні запитання
- •Лабораторна робота № 4
- •2 Варіанти індивідуальних завдань
- •3 Методичні вказівки
- •Оператор циклу while. Цикл while – це ітераційний цикл із передумовою. Це оператор циклу, який працює до тих пір, поки деяка умова буде істинною.
- •2 Постановка завдання
- •3 Варіанти індивідуальних завдань
- •4 Методичні вказівки
- •5 Приклад виконання лабораторної роботи
- •6 Контрольні запитання
- •Лабораторна робота № 6-7
- •1 Короткі теоретичні відомості
- •Int array[a];
- •Int array[12];
- •Int array[a];
- •2 Варіанти індивідуальних завдань
- •3 Методичні вказівки
- •4 Приклад виконання лабораторної роботи
- •5 Контрольні запитання
- •Лабораторна робота № 8
- •2 Постановка завдання
- •3 Приклад виконання лабораторної роботиІндивідуальне завдання
- •4 Контрольні запитання
- •Лабораторна робота № 9
- •1 Короткі теоретичні відомості
- •2 Індивідуальні завдання
- •3 Методичні вказівки
- •4 Контрольні запитання
- •Лабораторна робота № 10
- •1 Короткі теоретичні відомості
- •2 Індивідуальні завдання
- •3 Методичні вказівки
- •4 Приклад виконання лабораторної роботи
- •5 Контрольні запитання
- •Лабораторна робота № 11-12
- •1 Короткі теоретичні відомості
- •2 Варіанти індивідуальних завдань:
- •3 Методичні вказівки
- •4 Приклад виконання лабораторної роботи
- •5 Контрольні запитання
- •Лабораторна робота № 13-14
- •1 Короткі теоретичні відомості
- •2 Постановка завдання.
- •3 Варіанти індивідуальних завдань
- •4 Методичні вказівки
- •5 Приклад виконання лабораторної роботи
- •6 Контрольні запитання
- •Лабораторна робота № 15
- •1 Короткі теоретичні відомості
- •Int putchar(int c);
- •2 Варіанти індивідуальних завдань
- •3 Методичні вказівки
- •4 Контрольні запитання
- •Лабораторна робота № 16
- •1 Короткі теоретичні відомості
- •Int strcmp(const chart *str1, const chart *str2);
- •2. Варіанти індивідуальних завдань
- •3 Методичні вказівки
- •4 Приклад виконання лабораторної роботи
- •5 Контрольні запитання
- •Лабораторна робота № 17-18
- •1 Короткі теоретичні відомості
- •2 Постановка задачі
- •3 Варіанти індивідуальних завдань
- •4 Приклад виконання лабораторної роботи
- •5 Контрольні запитання
- •Лабораторна робота № 19
- •1 Короткі теоретичні відомості
- •2 Завдання практичної роботи
- •3 Варіанти індивідуальних завдань
- •4 Методичні вказівки
- •5 Приклад виконання лабораторної роботи
- •6 Контрольні запитання
- •Лабораторна робота № 20
- •1 Короткі теоретичні відомості
- •2. Варіанти індивідуальних завдань
- •3 Методичні вказівки
- •4 Контрольні запитання
- •Лабораторна робота № 21
- •1 Короткі теоретичні відомості
- •2 Варіанти індивідуальних завдань
- •3 Методичні вказівки
- •4 Приклад виконання лабораторної роботи
- •2 Варіанти індивідуальних завдань
- •3 Методичні вказівки
- •4 Приклад виконання лабораторної роботи
- •5 Контрольні запитання
- •Лабораторна робота № 24
- •1 Короткі теоретичні відомості
- •2 Варіанти індивідуальних завдань
- •3 Методичні вказівки
- •4 Приклад виконання лабораторної роботи
- •5 Контрольні запитання
- •Лабораторна робота № 24
- •1. Короткі теоретичні відомості
- •2 Варіанти індивідуальних завдань
- •3 Методичні вказівки
- •4 Контрольні запитання
- •Практична робота № 1-2
- •1 Короткі теоретичні відомості
- •Оператор виконує наступні дії:
- •3 Методичні вказівки
- •4 Контрольні запитання
- •Практична робота № 3
- •1 Короткі теоретичні відомості
- •Int array[a];
- •Int array[12];
- •Int array[a];
- •2 Постановка завдання
- •3 Методичні вказівки
- •4 Приклад виконання практичної роботи Завдання
- •Програма розв'язку
- •5 Контрольні запитання
- •Практична робота № 4
- •1 Короткі теоретичні відомості
- •2 Постановка завдання
- •3 Варіанти індивідуальни х завдань
- •4 Методичні вказівки
- •5 Приклад виконання практичної роботи
- •6 Контрольні запитання
- •Практична робота № 5
- •1 Короткі теоретичні відомості
- •Void func( ) /*нічого не повертає*/
- •2 Варіанти індивідуальних завдань
- •3 Методичні вказівки
- •4 Приклад виконання лабораторної роботи
- •5 Контрольні запитання
- •Практична робота № 6
- •1 Короткі теоретичні відомості
- •2 Постановка завдання
- •3 Варіанти індивідуальних завдань
- •4 Методичні вказівки
- •2 Завдання практичної роботи:
- •3 Варіанти індивідуальних завдань
- •4 Методичні вказівки
- •5 Приклад виконання лабораторної роботи
- •Програма розв'язку
- •4 Контрольні запитання
- •Список рекомендованої літератури
3 Методичні вказівки
Перед написанням програми ще раз переглянути теоретичний матеріал і приклади програм, що ілюструють особливості застосування функцій блочного вводу-виводу у С-програмах.
Уважно прочитати умову задачі індивідуального завдання, записати запропоновані дані у файл за допомогою функції fwrite(). Закрити файл за допомогою функції fclose().
Відкрити цей файл для читання і записані дані прочитати з файлу за допомогою функції fread(). в інші змінні, результати початкових і кінцевих змінних вивести на екран.
Відкомпілювати програму і зафіксувати результати реалізації.
Закінчивши роботу з файлом, закрити його .
4 Приклад виконання лабораторної роботи
Задати при описі 2 масиви розмірністю 4, елементами якого є дійсні і цілі числа. Використовуючи функції блочного вводу-виводу сформувати двійковий файл із елементів заданих масивів і прочитати 5 значень з сформованого файлу в змінні, які вивести на екран. Передбачити повідомлення про помилки при відкритті і закритті файлу, а також при блочному вводі-виводі.
Текст програми:
#include <stdio.h>
#include <stdlib.h>
void main ()
{
int i, array1[9]={1,4,5,6}, a1,a2,a3,a4;
float array2[9]={6.7,8.9,4.5,3},a5;
FILE *fp;
/* Відкриття файлу для запису в двійковому режимі */
fp=fopen("C:\\lk\\list.txt", "wb");
/* Збереження (запис) масивів у файл*/
if ( (fwrite(array1, sizeof(int), 4, fp) != 4)
{printf("Помилка запису"); exit(1);}
if ( (fwrite(array2, sizeof(float), 4, fp) != 4)
{printf("Помилка запису"); exit(2);}
fclose(fp);
/* Відкриття того ж файлу для читання в двійковому режимі */
fp=fopen("("C:\\lk\\list.txt", "rb"");
/* Зчитування даних в змінні a1,a2,a3,a4,a5*/
if ( (fwrite(&a1, sizeof(int), 1, fp) != 1)
{printf("Помилка запису"); exit(3);}
if ( (fwrite(&a2, sizeof(int), 1, fp) != 1)
{printf("Помилка запису"); exit(4);}
if ( (fwrite(&a3, sizeof(int), 1, fp) != 1)
{printf("Помилка запису"); exit(5);}
if ( (fwrite(&a4, sizeof(int), 1, fp) != 1)
{printf("Помилка запису"); exit(6);}
if ( (fwrite(&a5, sizeof(float), 1, fp) != 1)
{printf("Помилка запису"); exit(7);}
fclose(fp);
/* Вивід прочитаних змінних на екран*/
printf("a1= %d\t a2= %d\t a3= %d\t a4= %d\t a5= %f\n ", a1,a2,a3,a4,a5); }
5 Контрольні запитання
Яка функція блочного вводу?
Яка функція блочного виводу?
Який прототип функції fwrite().?
Який прототип функції fread()?
Лабораторна робота № 24
Тема: Складання програм для організації прямого доступу до файлових даних
Мета: Навчитися використовувати бібліотечні функції для організації прямого (довільного) доступу до дискових файлів.
1. Короткі теоретичні відомості
1. Прямий доступ до даних у файлах. Операції читання даних з файлу і їх запис у файл відбувається, починаючи з поточної позиції в потоці. Початкова позиція встановлюється при відкритті файлу й може відповідати початковому або кінцевому байту потоку залежно від режиму відкриття файлу.
З кожним відкритим файлом асоціюється вказівник позиції, який являє собою системний об’єкт, що вказує місце в файлі, в якому в даний момент виконується операція вводу-виводу. Позиція вказується в байтах від початку файлу. При відкритті файлу вказівник встановлюється на початок файлу і рівний 0, так як файл має довжину 0 і інших позицій в ньому бути не може.
При відкритті потоку в режимах “r” й “w” маркер поточної позиції встановлюється на початковий байт потоку, при відкритті в режимі “a” - на останній байт у кінці файлу. При виконанні кожної операції маркер переміщається на нову поточну позицію відповідно до кількості записаних або прочитаних байтів.
При відкритті існуючого файлу вказівник встановлюється в кінець файлу, якщо файл відкривається в режимі додавання даних і на початок файлу в усіх решту режимах.
Операції читання і запису виконуються в текучому положенні вказівника. Після відкриття файлу для читання перших десяти байт вказівник встановлюється на 10 позиції, звідки і починається наступна позиція вводу. Тому при послідовному вводі чи виводі даних з файлу нема необхідності звертати увагу на вказівник позиції функції вводу виводу самі про це вирішать.
Засоби прямого доступу дають можливість переміщати вказівник поточної позиції в файлі на потрібний байт. Для цього використовується функція. Зсув задається виразом або змінною і може бути від’ємним, тобто можливе переміщення як у прямому, так і у зворотному напрямках.
При повнішому контролі над операціями вводу виводу використовуються бібліотечні функції, які сприяють прямому доступу до даних у файлі, який означає, що дані у файл можна записувати в довільну позицію, так само можна з довільної позиції їх прочитати. Розглянемо бібліотечні функції для організації довільного доступу до даних файлів.
2. Функція управління маркером у файлі. Для управління маркером у файлі використовується бібліотечна функція fseek(). Вона дає можливості керування положенням маркера у файлі. З її допомогою можна встановити маркер в будь-яку позицію у файлі. Прототип функції fseek() знаходиться в бібліотечному файлі stdio.h і має вигляд:
int fseek(FILE *fp, long a1, int а2).
Аргумент fp є вказівником на структуру FILE, який повертається з функції fopen() при відкритті файлу.
Аргумент a1 задає відстань в байтах, на яку треба сумістити вказівник позиції аргументом a1.
Аргумент а2 задає точку, від якої обчислюється зміщення. Цей аргумент може мати одне з трьох значень — символічні константи, які наведено нижче.
Таблиця . Значення констант, які задають зміщення в функції fseek()
Константа |
Значення |
Опис |
SEEK_SET |
0 |
Встановлення вказівника на байт з порядковим номером a1, починаючи з початку файлу |
SEEK_CUR |
1 |
Зміщення вказівника на a1 байт від його текучого положення |
SEEK_END |
2 |
Встановлення вказівника на відстань a1 байт, починаючи з кінця файлу |
Функція повертає 0, коли встановлення маркера в задану позицію було виконано без помилок і ненульове значення у випадку помилки.
Довільний доступ до даних у файлі з допомогою функції fseek() продемонстровано програмою:
#include <stdlib.h>
#include <stdio.h>
main( ) {
FILE *fp;
int data, i, array[8]={1,5,8,34,56,34,89,100};
long a1;
fp = fopen("c:\\ff.txt", "wb"); /* Відкриття двійкового файлу для запису */
if (fp == NULL) {printf("\n Помилка відкриття файлу."); exit(1); }
i=fwrite(array, sizeof(int), 8, fp); /* Запис масиву у файл */
if ( i!= 8) {printf("\n Помилка запису даних у файл."); exit(1);}
fclose(fp);
fp = fopen("c:\\ff.txt ", "rb"); /* Відкриття файлу для читання */
if (fp == NULL) {printf("\n Помилка відкриття файлу."); exit(1);}
/* Присвоєння значення змінній а1=4 */
а1=4;
/* Переміщення вказівника позиції до елементу з індексом а1 */
if ( (fseek(fp, (a1*sizeof(int)), SEEK_SET)) != 0)
{fprintf(stderr, "\nError using fseek()."); exit(1);}
fread(&data, sizeof(int), 1, fp); /*Читання одного цілого числа в змінну data*/
printf("\nElement %ld has value %d.", a1, data);
fclose(fp); }
3. Визначення поточного положення маркера у файлі. Для визначення поточного положення маркера у файлі використовується функція ftell(). Прототип функції знаходиться у бібліотечному файлі stdio.h і має вигляд:
long ftell(FILE *fp) ;
Аргумент fp – є вказівником на структуру FILE, який повертається з функції fopen() при відкритті файлу. Функція повертає значення типу long, яке вказує номер поточного байта у файлі від його початку (початковий номер байта у файлі = 0). У випадку помилки функція повертає -1L (cont -1 типу long).
Приклад програми використання функції ftell():
#include <stdlib.h>
#include <stdio.h>
char msg[]="abcdefghijklmnopqrstuvwxyz"; /*присвоєння масиву msg символьних значень*/
main(){
FILE *fp; /* Опис вказівника на структуру FILE */
char buf[6]; /* Опис масиву розмірності 6 */
fp = fopen("C:\\ff.TXT", "w")); /* Відкриття файлу для запису */
if ( (fp = =NULL) { printf( "Помилка відкриття"); exit(1); }
fputs(msg, fp); /*Запис масиву у файл */
if (fputs(msg, fp) == EOF) { printf("Помилка запису."); exit(1); }
fclose(fp); /*Закриття файлу для запису */
fp = fopen("C:\\ff.TXT ", "r"); /*Відкриття файлу для читання. */
if ( (fp == NULL) { fprintf (".Помилка відкриття "); exit(1); }
printf("\n=положення файлівого вказівника%ld", ftell(fp));
/*Результат Друк ftell(fp)=0 */
fgets(buf, 6, fp); /* Зчитування з файлу fp 5 символів. */
printf("\nAfter reading in %s, position = %ld", buf, ftell(fp));
/* Друк 5 символів з buf і положення файлового вказівника ftell(fp)=5 */
fgets(buf, BUFLEN, fp); /* Зчитування наступних 5 символів. */
printf("\n\nThe next 5 characters are %s, and position now = %ld", buf, ftell(fp));
/*Друк наступних 5 символів з buf і положення файлового маркера ftell(fp)=10*/
4. Встановлення положення маркера на початок файлу. Для встановлення положення маркера на початок файлу використовується функція rewind(). Прототип функції знаходиться у бібліотечному файлі stdio.h. і має вигляд:
void rewind(FILE *fp) ;
Аргумент fp - є вказівником на структуру FILE, який повертається з функції fopen() при відкритті файлу. Функція використовується тоді, коли з файлу були вже зчитані дані і знову треба повернутися на початок файлу.
Приклад програми використання функції rewind():
#include <stdlib.h>
#include <stdio.h>
char msg[]="abcdefghijklmnopqrstuvwxyz"; /*присвоєння масиву msg символьних значень*/
main(){FILE *fp; /* Опис вказівника на структуру */
char buf[6]; /* Опис масиву розмірності 6 */
fp = fopen("C:\\ff.TXT", "w")); /* Відкриття файлу для запису */
if ( (fp = =NULL) { printf( "Помилка відкриття"); exit(1); }
fputs(msg, fp); /*Запис масиву у файл */
fclose(fp); /*Закриття файлу для запису*/
fp = fopen("C:\\ff.TXT ", "r"); /*Відкриття файлу для читання. */
if ( (fp == NULL) { fprintf (".Помилка відкриття "); exit(1); }
fgets(buf, BUFLEN, fp); /* Зчитування наступних 5 символів. */
rewind(fp); /* Повернення на початок потоку. */
printf("\n %ld\n", ftell(fp));
fgets(buf, BUFLEN, fp); /* Зчитування з файлу fp 5 символів. */
printf("\n%s\n", buf); /*Друк цих символів */
fclose(fp); }