Студопедия
Случайная страница | ТОМ-1 | ТОМ-2 | ТОМ-3
АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатика
ИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханика
ОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторика
СоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансы
ХимияЧерчениеЭкологияЭкономикаЭлектроника

Практична робота № 7-8

Читайте также:
  1. Word. Робота з великими документами
  2. Глава IV Робота Суду
  3. Дипломних проектах (роботах)
  4. Індивідуальна робота вчителя-вихователя у навчально-виховному процесі. Робота з важковиховуваними учнями.
  5. Індивідуально – консультативна робота студентів
  6. Кадрова робота
  7. Как создать биоробота.

 

Тема: Використання функцій прямого доступу до даних у файлах

Мета: Навчитися використовувати бібліотечні функції для організації прямого (довільного) доступу до дискових файлів

1 Короткі теоретичні відомості

З кожним відкритим файлом асоціюється вказівник позиції, який являє собою системний об’єкт, що вказує місце в файлі, в якому в даний момент виконується операція вводу-виводу. Позиція вказується в байтах від початку файлу. При відкритті файлу вказівник позиції встановлюється на початок файлу і рівний 0., так як створений файл має довжину 0 і інших позицій в ньому бути не може.

При відкритті існуючого файлу вказівник встановлюється в кінець файлу, якщо файл відкривається в режимі додавання даних і на початок файлу в усіх решту режимах.

Послідовний доступ. Операції читання і запису виконуються в текучому положенні вказівника. Після відкриття файлу для читання перших десяти байт вказівник встановлюється на 10 позиції, звідки і починається наступна позиція вводу. Тому при послідовному вводі чи виводі даних з файлу нема необхідності звертати увагу на вказівник позиції функції вводу виводу самі про це вирішать.

Прямий доступ. При повнішому контролі над операціями вводу виводу використовуються бібліотечні функції, які сприяють прямому доступу до даних у файлі, який означає, що дані у файл можна записувати в довільну позицію, так само можна з довільної позиції їх прочитати. Розглянемо бібліотечні функції для організації довільного доступу до даних файлів.

Функції ftell(). Визначає положення вказівника у файлі. Прототип знаходиться у файлі stdio.h.

long ftell(FILE *fp);

Аргумент fp -є вказівником на структуру FILE, який повертається з функції fopen() при відкритті файлу. Функція повертає значення типу long, яке вказує номер текучого байта у файлі від його початку (початковий номер байта у файлі = 0). У випадку помилки функція повертає -1L (cont -1 типу long).

Функції rewind Встановлює положення вказівника на початок файлу Прототип знаходиться у файлі stdio.h і має вид:

void rewind(FILE *fp);

Аргумент fp -є вказівником на структуру FILE, який повертається з функції fopen() при відкритті файлу. Використовується тоді, коли з файлу були вже зчитані дані і знову треба вернутися на початок.

Приклад програми використання функцій rewind(). і.ftell()..

#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); /* Запис масиву у файл */

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("\nAДрук 5-ти символів%s, положення вказівника = %ld", buf, ftell(fp));

rewind(fp); /* Повернення на початок потоку. */

printf("\n\n Друк позиції %ld", ftell(fp));

fclose(fp); }

Функції fseek(). Ця функція додаткові можливості керування положенням вказівника у файлі. З її допомогою можна встановити вказівник в будь-яку позицію у файлі. Прототип знаходиться у файлі stdio.h. і має вигляд

int fseek(FILE *fp, long a1, int а2);

Аргумент fp - є вказівником на структуру FILE, який повертається з функції fopen() при відкритті файлу. Відстань, на яку треба сумістити вказівник позиції задається аргументом a1, вираженого в байтах. Аргумент а2 задає точку, від якої обчислюється зміщення. Цей аргумент може мати одне з трьох значень — символічні константи, перераховані в таблиці

Таблиця. Допустимі значення аргументів а2 функції fseek()

Константа Значення Опис
SEEK_SET   Встановлює вказівник на байт з порядковим номером a1, починаючи з початку файлу
SEEK_CUR   Зміщує вказівник на a1байт від його текучого значення
SEEK_END   Встановлює вказівник на відстань a1 байт, починаючи з кінця файлу

 

Функція повертає 0, коли зміщення було виконано без помилок і ненульове значення у випадку помилки.

 

2 Завдання практичної роботи:

Задати масив розмірністю 3, елементами якого є структура, описана у варіанті, шляхом присвоєння її значень або шляхом введення їх з клавіатури. Сформувати двійковий файл із елементів масиву структур і прочитати поля структур в змінні з сформованого файлу, використовуючи функції блочного вводу-виводу. Передбачити повідомлення про помилки при відкритті і закритті файлу, а також при блочному вводі-виводі.

 

3 Варіанти індивідуальних завдань

 

1. Структура "Фільм": назва; режисер; рік випуску; вартість. Прочитати з масиву в змінні 3-і 2 поле 3-го елементу масиву. Значення полів вивести на екран.

2. Структура "Книга": назва; автор; рік видання; кількість сторінок. Прочитати з масиву в змінні 3-і 1 поле 2-го елементу масиву. Значення полів вивести на екран

3. Структура "Фільм": назва; режисер; країна; прибуток. Прочитати з масиву в змінні 3-і 2 поле 1-го елементу масиву. Значення полів вивести на екран

4. Структура "Держава": назва; державна мова; грошова одиниця; курс валюти відносно $. Прочитати з масиву в змінні 2-і 2 поле 3-го елементу масиву. Значення полів вивести на екран

5. Структура "Автомобіль": марка; серійний номер; реєстраційний номер; рік випуску. Прочитати з масиву в змінні 3-і 4 поле 2-го елементу масиву. Значення полів вивести на екран

6. Структура "Власник автомобіля": прізвище, ім'я, по батькові; номер автомобіля; номер техпаспорта; відділення реєстрації ДАІ. Прочитати з масиву в змінні 3-і 5 поле 1-го елементу масиву. Значення полів вивести на екран

7. Структура "Стадіон": назва; рік будівлі; кількість площадок; види спорту. Прочитати з масиву в змінні 4-і 2 поле 3-го елементу масиву. Значення полів вивести на екран

8. Структура "Студент": прізвище, ім'я, по батькові; номер телефону; група; оцінки по 3 основних предметах. Прочитати з масиву в змінні 3-і 5 поле 2-го елементу масиву. Поля вивести на екран

9. Структура "Студент": прізвище, ім'я, по батькові; дата народження; домашня адреса; рейтинг. Прочитати з масиву в змінні 3-і 1 поле 1-го елементу масиву. Значення полів вивести на екран

10. Структура "Абітурієнт": прізвище, ім'я, по батькові; рік народження; оцінки вступних іспитів (3); середній бал атестата. Прочитати з масиву в змінні 3-і 6 поле 3-го елементу масиву. Значення полів вивести на екран

11. Структура "Співробітник": прізвище, ім'я, по батькові; посада рік народження; заробітна плата. Прочитати з масиву в змінні 2-і 4 поле 2-го елементу масиву. Значення полів вивести на екран

12. Структура "Держава": назва; столиця; чисельність населення; займана площа. Прочитати з масиву в змінні 1-і 4 поле 1-го елементу масиву. Значення полів вивести на екран

13. Структура "Людина": прізвище, ім'я, по батькові; домашня адреса; номер телефону; вік. Прочитати з масиву в змінні 6-і 4 поле 3-го елементу масиву. Значення полів вивести на екран

14. Структура "Людина": прізвище, ім'я, по батькові; рік народження; ріст; вага. Прочитати з масиву в змінні 3-і 2 поле 2-го елементу масиву. Значення полів вивести на екран

15. Структура "Книга": назва; автор; рік видання; кількість сторінок. Прочитати з масиву в змінні 3-і 2 поле 1-го елементу масиву. Значення полів вивести на екран

 

4 Методичні вказівки

 

1. Описати і задати масив згідно умови задачі індивідуального завдання, описати змінні, тип яких співпадає з типом елементів заданого масиву.

2. Відкрити в двійковому режимі файл для запису елементів масиву і передбачити повідомлення про його успішне чи не успішне відкриття..

3. За допомогою функції fwrite() заданий масив записати у відкритий файл. Передбачити перевірку на правильність запису масиву в файл.

4. Закрити файл за допомогою функції fclose().

5. Відкрити в двійковому режимі файл для читання, передбачивши повідомлення про його успішне чи не успішне відкриття.

6. Використовуючи функції прямого (довільного доступу) до даних у файлі, (fseek(), rewind((),і ftell()) встановити положення вказівника у файлі. на відповідні елементи масиву, задані згідно умови задачі індивідуального завдання.

7. Прочитати ці елементи масиву в описані змінні використовуючи функцію fread(), значення яких вивести на екран.

 

5 Приклад виконання лабораторної роботи

Структура "Студент":

прізвище, ім'я, по батькові; дата народження; домашня адреса; рейтинг.

прочитати з масиву в змінні 3-і 1 поле 1-го елементу масиву. Значення полів вивести на екран.

Програма розв'язку

#include<stdio.h>

#include<conio.h>

#include<stdlib.h>

FILE *fp;

struct stydent { char pib[30]; char d[11]; char ad[15]; float r;

}st[5]={{"Rybaha Zorjana Igorivna","12.07.1991","Pumonenka 5/8",3.89},

{"Skip Natalija Andriivna","3.11.1992","Melnyka 45", 3.25},

{"Sunjakevuch Roman Romanovuch","8.08.1992","Rjashivska 34/6",4.37},

{"Golovko Bogdan Igorovuch","3.07.1992","Korotka 5/8",4.32},

{"Savuch Taras Andrijovuch","27.09.1992",3.89}};

char A[15],B[30];

int k,m;

void main() { clrscr();

fp=fopen("C:\\B.TXT","wb");

if(fp==NULL) { printf("not open wb"); exit(1); }

k=fwrite(st,sizeof(struct stydent),5,fp);

if(k!=5) { printf("not write"); exit(2); }

k=fclose(fp);

if(k==-1) { printf("not close"); exit(3); }

fp=fopen("C:\\B.TXT","rb");

if(fp==NULL) { printf("not open"); exit(4); }

m=30+11;

fseek(fp,m,0);

k=fread(A,sizeof(char),15,fp);

if(k!=15) { printf("not read"); exit(5); }

rewind(fp);

k=fread(B,sizeof(char),30,fp);

if(k!=30) { printf("not read"); exit(6); }

k=fclose(fp);

if(k==-1) { printf("not close"); exit(7); }

puts(A);

puts(B);

}

Результати:

Pumonenka 5/8

Rybaha Zorjana Igorivna

 

4 Контрольні запитання

1. Яка функція встановлює вказівник на початок файлу?

2. Що таке прямий доступ до файлу?

3. Який прототип функції ftell()..?

4. Який прототип функції fseek() і що вона повертає?

5. Яку інформацію треба передати в функцію fopen() для відкриття файлу на диску?


Список рекомендованої літератури

1. Громов Ю.Ю., Татаренко С.И. Программирование на языке Си: Учебное пособие. - Тамбов, 1995. - 169с.

2. Подбельский В.В., Фомин С.С., Программирование на языке Си. М.: Финансы и статистика, 1999..– 600с.

3. Керниган Б.В., Ричи Д.М. Язык программирования Си. \Пер. с англ., 3-е изд., испр.- СПб.:“Невский Диалект”, 2001. – 352с.

4. Бредли Л. Джонс, Питер Єйткен, Освой самостоятельно С за 21 день, 6-е изд.: Пер. З англ. — М.: Издательский дом "Вильямс", 2003.- 800с

5. Культин Н., С/C++ в задачах и примерах. Санк-Петербург: "БХВ Петербург", 2004.

6. Павловская Т.А., С/C++ Програмирование на языке высокого уровня.: М.:, 2009.-460 с.

7. Бірюльов К.Ю., Дещинський Ю.Л., Селемонавічус А.А., Хавалко В.М., Худий А.М., Якимів Ю.Б. Методичний посібник «Конспект лекцій з дисципліни Системне програмування».: Львів, 2005. – 149с.

8. Шпак З.Я. Програмування мовою С. – Львів, “Оріяна-Нова”, 2006. – 431 с.

9. Кужій Л.І., Конспект лекцій з навчальної дисципліни “Системне програмування”, 104 с.

 

 


Дата добавления: 2015-07-17; просмотров: 156 | Нарушение авторских прав


Читайте в этой же книге: Лабораторна робота № 21 | Лабораторна робота № 22 | Лабораторна робота № 24 | Лабораторна робота № 24 | Практична робота № 1-2 | Void main() | Постановка завдання | Постановка завдання | Практична робота № 5 | Float cube(float x) |
<== предыдущая страница | следующая страница ==>
Практична робота № 6| Теми рефератів для виконання лабораторної роботи

mybiblioteka.su - 2015-2024 год. (0.019 сек.)