Розв'язування на С задач, які використовують файли для вводу та виводу даних

Інформація про навчальний заклад

ВУЗ:
Національний університет Львівська політехніка
Інститут:
Не вказано
Факультет:
КН
Кафедра:
Не вказано

Інформація про роботу

Рік:
2015
Тип роботи:
Звіт до лабораторної роботи
Предмет:
Основи алгоритмізації та програмування

Частина тексту файла (без зображень, графіків і формул):

Міністерство освіти і науки Національний університет „Львівська політехніка” Кафедра 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 програмування С.
Антиботан аватар за замовчуванням

24.11.2018 19:11-

Коментарі

Ви не можете залишити коментар. Для цього, будь ласка, увійдіть або зареєструйтесь.

Ділись своїми роботами та отримуй миттєві бонуси!

Маєш корисні навчальні матеріали, які припадають пилом на твоєму комп'ютері? Розрахункові, лабораторні, практичні чи контрольні роботи — завантажуй їх прямо зараз і одразу отримуй бали на свій рахунок! Заархівуй всі файли в один .zip (до 100 МБ) або завантажуй кожен файл окремо. Внесок у спільноту – це легкий спосіб допомогти іншим та отримати додаткові можливості на сайті. Твої старі роботи можуть приносити тобі нові нагороди!
Нічого не вибрано
0%

Оголошення від адміністратора

Антиботан аватар за замовчуванням

Подякувати Студентському архіву довільною сумою

Admin

26.02.2023 12:38

Дякуємо, що користуєтесь нашим архівом!