Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лабораторні роботи по програмуванні(14 лаб).doc
Скачиваний:
77
Добавлен:
16.05.2015
Размер:
1.43 Mб
Скачать

Завдання 1

  1. Розробити функцію для підрахунку кількості рядків в текстовому файлі.

  2. Розробити функцію для підрахунку кількості слів в текстовому файлі.

  3. Розробити функцію для порівняння двох текстових файлів та виведення номеру рядка та позиції символу, де вони відрізняються.

  4. Розробити функцію для підрахунку кількості повторень заданого слова в текстовому файлі.

  5. Розробити функцію для дозапису рядка в початок текстового файлу.

  6. Розробити функцію для дозапису рядка в кінець текстового файлу.

  7. Розробити функцію для дозапису рядка в середину текстового файлу.

  8. Розробити функцію для видалення рядка з середини текстового файлу.

  9. Розробити функцію для видалення рядка з початку текстового файлу.

  10. Розробити функцію для дозапису слова в перший рядок текстового файлу.

Завдання 2

  1. Розробити функцію для дозапису заданого набору цілих даних у початок існуючого двійкового файлу.

  2. Розробити функцію для дозапису заданого набору дійсних даних у середину існуючого двійкового файлу з заданої позиції.

  3. Розробити функцію для дозапису заданого набору символів у кінець існуючого двійкового файлу.

  4. Розробити функцію для видалення заданої кількості цілих даних з початку двійкового файлу.

  5. Розробити функцію для видалення заданої кількості дійсних даних з середини двійкового файлу з заданої позиції.

  6. Розробити функцію для видалення заданої кількості дійсних даних з кінця двійкового файлу.

  7. Розробити функцію для копіювання заданої кількості цілих даних з заданої позиції.

  8. Розробити функцію для видалення заданої кількості цілих даних з заданої позиції заданого двійкового файлу і вставки їх з заданої позиції у новий файл.

  9. Розробити функцію для перезапису змісту файлу з кінця в початок в оберненому порядку.

  10. Розробити функцію для створення нового файлу, який містить цілі дані з заданого файлу, кратні одинадцяти.

Теоретичні відомості Читання і запис текстових файлів

Введення-виведення окремих символів. Одним з найбільш ефективних способів здійснення введення-виведення одного символу є використання бібліотечних функцій getchar() і putchar().

getchar() – функція, що здійснює введення одного символу з консолі. При зверненні вона повертає в функцію, яка її викликала один введений символ. При читанні з файлу з допомогою функції getchar() може бути досягнуто кінця файлу. В цьому випадку операційна система у відповідь на спробу читання символу передає функції getchar() значення EOF (End of File).

putchar() – функція, що виводить в стандартний потік один символ, при цьому також повертає в функцію, яка її викликала щойно введений символ.

Введення-виведення рядків. Однією з найбільш популярних операцій введення-виведення є операція введення-виведення рядка символів. В бібліотеку мови С для обміну даними через стандартні потоки введення-виведення включені функції введення-виведення рядка gets() і puts(), які зручно використовувати при створенні діалогових систем. Обидві функції мають тільки один аргумент – вказівник s на масив символів. Якщо рядок прочитано нормально, функція gets() повертає адресу того масиву s, в який відбувається введення рядка. В разі помилки повертається NULL.

Функція puts() у випадку успішного завершення повертає останній символ, який завжди є символом ’\n’. У разі помилки повертається EOF.

Наведемо найпростіший приклад використання цих функцій:

#include<stdio.h>

char str1[] = ” ”;

int main ()

{

char name[80];

puts(str1);

gets(name);

return 0;

}

Будь-який рядок символів в мові С повинен закінчуватись нуль-символом ’\0’. В останній елемент масиву str1 нуль-символ буде записаний автоматично під час трансляції при ініціалізації масиву.

Форматне введення-виведення. Для роботи з стандартними потоками в режимі форматного введення-виведення визначені дві функції:

printf() – форматне виведення, перетворює дані з внутрішнього представлення в символьний вид в відповідності з форматним рядком і виводить їх в потік. Дані, які перетворюються і виводяться, задаються як аргументи функції printf ().

scanf() – форматне введення з вхідного потоку, читає послідовності кодів символів з вхідного потоку і інтерпретує їх як цілі числа, дійсні числа, одиничні символи рядка.

Для роботи з файлами включені наступні функції:

fgetc (), getc () – введення (читання) одного символу з файлу;

fputc (), putc () – запис одного символу в файл;

fprintf () – форматне введення в файл;

fscanf () – форматне введення (читання) з файлу;

fgets () – введення (читання) рядка з файлу;

fputs () – запис рядка в файл.

Функція fputs(const char*s, FILE*stream) записує обмежений символом ’\0’ рядок в файл, визначений вказівником stream на потік, і повертає невід’ємне число. Символ ’\0’ в файл не переноситься, і символ ’\n’ не записується в кінці стрічки замість ’\0’.

Функція fgets (char*s, int n, FILE*stream) – читає з визначеного вказівником stream файлу не більше (n-1) символів і записує їх в рядок, на який вказує вказівник s. Функція закінчує читання, як тільки прочитає (n-1) символів чи зустріне символ нового рядка ’\n’, який переноситься в рядок s. Додатково в кінець кожної стрічки записується ознака кінця стрічки ’\0’. В випадку успішного завершення функція повертає вказівник s. При помилці чи при досягненні кінця файлу, при умові, що із файлу не прочитаний жоден символ, повертається значення NULL. В цьому випадку вміст масиву, який адресується вказівником s, залишається без змін. На відміну від fgets () функція gets () відкидає символ ’\n’.

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

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

Покажчик на потік, наприклад fp, повинен бути описаний в програмі наступним чином:

#include<stdio.h>

FILE *fp;

Покажчик на потік набуває значення в результаті виконання функції відкриття потоку:

fp = fopen (ім’я_файлу, режим_відкриття);

Параметри функції fopen () є покажчиками на масиви символів, які вміщують відповідно ім’я файлу, зв’язаного з потоком, і рядка режимів відкриття. Однак ці параметри можуть задаватись і безпосередньо у вигляді рядків при виклику функції відкриття файлу:

fp = fopen (”file.txt”,”r”);

де file.txt – ім’я деякого файлу, зв’язаного з потоком;

r – позначення одного з режимів роботи з файлом (тип доступу до потоку).

Після закінчення роботи з файлами рекомендується закрити їх явно. Для цього використовується функція fclose (покажчик на потік)

Відкритий файл можна відкрити повторно (наприклад, для зміни режиму роботи з ним) тільки після того, як файл буде закритий з допомогою функції fclose().