Міністерство освіти і науки
Національний університет „Львівська політехніка”
Кафедра EОМ
Звіт
з лабораторної роботи №7
з дисципліни: “Основи алгоритмізації та програмування ”
«Розв'язування на С задач, які використовують файли для вводу та виводу даних»
2015
Мета роботи
познайомитися iз засобами файлового вводу та виводу в мовi програмування С.
Завдання лабораторної роботи
Індивідуальні завдання 8 ті ж самі що і індивідуальні завдання 5 чи індивідуальні завдання 6 (уточнити конкретне завдання у викладача), які виконувалися у лабораторній роботі №5. Відмінність полягає у тому, що ввід та вивід виконується через файли.
Необхідно написати два варіанти програми:
програма у якій ввід здійснюється з текстового файлу і вивід виконується в текстовий файл;
програма у якій ввід здійснюється з бінарного файлу і вивід відбувається в бінарний файл.
У бінарному файлі дані зберігаються у внутрішньому представлені.
Для варіанту, який використовує бінарні файли, необхідно написати дві допоміжні програми:
допоміжну програму яка формує бінарний файл із вхідними даними;
допоміжну програму яка читає вихідний бінарний файл і виводить на екран монітори вихідні дані.
Хід виконання роботи
Текст першої програми, яка працює з текстовими файлами. Для читання і запису створені окремі файли, розмір матриці як і раніше вводиться з клавіатури.
#include <stdio.h>
int FillingZeros(int *a, int array_size);
int main(void)
{
int i, j;
int cnt = 0, num = 1;
int array_size;
scanf("%d", &array_size);
// Виділення пам'яті для матриці
int **a = (int **)malloc(array_size*sizeof(int *));
for (int i = 0; i < array_size; i++)
{
a[i] = (int *)malloc(array_size*sizeof(int));
}
// Відкриття потоку для вхідного файлу
FILE *inp;
inp = fopen("input.txt", "rt");
if (inp == NULL) {
printf("Input file no found\n");
return 0;
}
// Відкриття потоку для вхідного файлу
FILE *out;
out = fopen("output.txt", "wt");
FillingZeros(a, array_size);
for (i = 0; i < (array_size / 2); i++)
{
cnt++;
for (j = cnt; j < array_size - cnt; j++)
{
fscanf(inp, "%d", &num);
a[i][j] = num;
}
}
// Вибір початової позиції для заповнення другої половини матриці.
if (array_size % 2 == 0) cnt = (array_size / 2);
else cnt = (array_size / 2) + 1;
for (i = ((array_size / 2) + 1); i < array_size; i++)
{
cnt--;
for (j = cnt; j < array_size - cnt; j++)
{
fscanf(inp, "%d", &num);
a[i][j] = num;
}
}
// Вивід матриці
for (i = 0; i < array_size; i++)
{
for (j = 0; j < array_size; j++)
{
fprintf(out, "%d", a[j][i]);
if (j == (array_size - 1)) fputc('\n', out);
}
}
// Закриття всіх потоків
fcloseall;
return 0;
}
// Функція призначена для заповнення масиву нулями
int FillingZeros(int **a, int array_size)
{
int i, j;
for (i = 0; i < array_size; i++)
{
for (j = 0; j < array_size; j++)
{
a[i][j] = 0;
}
}
return 0;
}
Результат виконання програми:
/ /
Рис. 1. Файл з вхідними даними Рис.2. Матриця записана у файл
Програма успішно прочитала числа з файлу input.txt(рис.1), і записала результат виконання до файлу output.txt(рис.2) .
Друга програма складається з декількох файлів, файл «FileConversion.с» призначений для читання текстового файлу і переписування його вмісту до бінарного, файл «FillingZeros.c» заповнює матрицю яку ми обробляємо нулями, і файл «OutputFile.c» зчитує вміст вихідного бінарного файлу і виводить його вміст на екран. Головна програма здійснює зчитування і запис з бінарних файлів та перетворює матрицю.
Текст функції FileConversion:
#include <stdio.h>
#include "Matrix.h"
//Переписування вмісту текстового файлу до байтового
int FileConversion(void)
{
int num = 1;
//Відкриття потоку для вхідного файлу у текстовому вигляді
FILE *inp;
inp = fopen("input.txt", "rt");
if (inp == NULL) {
printf("Input file no found\n");
}
// Відкриття потоку для вихідного файлу у бінарному вигляді
FILE *out;
out = fopen("input1.txt", "wb");
// Цикл перенесення чисел з текстового файлу до бінарного
while (fscanf(inp, "%d", &num) == 1)
{
putw(num, out);
}
fcloseall();
return 0;
}
Текст функції FillingZeros:
#include <stdio.h>
#include "Matrix.h"
// Програма призначена для заповнення масиву нулями
int FillingZeros(int **a, int array_size)
{
int i, j;
for (i = 0; i < array_size; i++)
{
for (j = 0; j < array_size; j++)
{
a[i][j] = 0;
}
}
return 0;
}
Текст функції OutputFile:
#include <stdio.h>
#include "Matrix.h"
// Вивід вмісту бінарного файлу на екран
int OutputFile(int array_size)
{
int num, i;
//Відкриття потоку для вхідного файлу у бінарному вигляді
FILE *inp;
inp = fopen("output.txt", "rb");
if (inp == NULL) {
printf("Input file no found\n");
}
// Цикл для зчитування матриці посимвольно
for ( i = 0; i < (array_size * array_size); i++)
{
if ((i % array_size) == 0) printf("\n");
num = getw(inp);
printf("%d ", num);
}
printf("\n\t\t");
return 0;
}
Текст головної програми:
#include <stdio.h>
#include "Matrix.h"
int main(void)
{
int i, j;
int cnt = 0, num = 1;
int array_size;
scanf("%d", &array_size);
FileConversion();
// Виділення пам'яті для матриці
int **a = (int **)malloc(array_size*sizeof(int *));
for (int i = 0; i < array_size; i++)
{
a[i] = (int *)malloc(array_size*sizeof(int));
}
// Відкриття потоку для вхідного файлу
FILE *inp;
inp = fopen("input1.txt", "rb");
if (inp == NULL) {
printf("Input file no found\n");
return 0;
}
// Відкриття потоку для вихідного файлу
FILE *out;
out = fopen("output.txt", "wb");
FillingZeros(a, array_size);
for (i = 0; i < (array_size / 2); i++)
{
cnt++;
for (j = cnt; j < array_size - cnt; j++)
{
num = getw(inp);
a[i][j] = num;
}
}
// Вибір початової позиції для заповнення другої половини матриці.
if (array_size % 2 == 0) cnt = (array_size / 2);
else cnt = (array_size / 2) + 1;
for (i = ((array_size / 2) + 1); i < array_size; i++)
{
cnt--;
for (j = cnt; j < array_size - cnt; j++)
{
num = getw(inp);
a[i][j] = num;
}
}
// Вивід матриці
for (i = 0; i < array_size; i++)
{
for (j = 0; j < array_size; j++)
{
putw(a[j][i], out);
}
}
fcloseall();
OutputFile(array_size);
// Закриття всіх потоків
fcloseall();
return 0;
}
Результат виконання програми:
/
Рис.1. Вміст вхідного файлу у бінарному представленні.
/
Рис.2. Вміст вихідного файлу у бінарному представленні.
/
Рис.3. Результат зчитування вихідного файлу
Програма успішно переписала вміст вхідного файлу(рис.1), перетворила матрицю(рис.2), використовуючи бінарні файли і вивела вміст вихідного файлу на екран(рис.3).
Висновки
познайомився iз засобами файлового вводу та виводу в мовi програмування С.