Опрацювання файлів з двійковими даними.

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

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

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

Рік:
2004
Тип роботи:
Лабораторна робота
Предмет:
Засоби системного програмування
Група:
КI

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

Міністерство освіти і науки України Національний університет „Львівська політехніка” Кафедра електронних обчислювальних машин Звіт про виконання лабораторної роботи № 10 з курсу „ Засоби системного програмування ” Тема: Опрацювання файлів з двійковими даними. Виконав: студент групи КІ-2 Львів – 2004 Мета роботи: Закріпити теоретичні знання та оволодіти практичними навиками в створенні програм для опрацювання даних, що міститься в дискових файлах. Засвоїти основні методи читання, запису даних з дискових файлів бінарного типу. Завдання на лабораторну роботу Розробити програмне забезпечення зі застосуванням техніки роботи з дисковими файлами відповідно до заданого варіанту. Програмне забезпечення повинно складатися з декількох модулів. Основна програма вводить та виводить дані які опрацьовуються функціями, що реалізовані як окремі модулі. Назву текстового файлу, в якому містяться дані для опрацювання, передавати через аргументи функції main(). Розміри та значення елементів матриць (в загальному не квадратних) вводити з текстового файлу. Параметри, що задають кількість рядків та стовпців повинні бути іменованими. Пам’ять під матриці виділяти динамічно. Для трикутних матриць (опираючись на їх структуру) виділяти мінімальні об’єми пам’яті. Обмін даними з функцією, що опрацьовує матрицю, виконувати через двійковий файл (тимчасовий). Назва файлу передається функції як параметр. Після використання тимчасовий файл знищувати. Результати обчислень записувати в текстовий файл. Назви файлів (тимчасового та для запису результатів) формувати на основі назви файлу з вхідними даними шляхом заміни розширення. Звернути особливу увагу на обробку помилок, які користувач може зробити при створені текстового файлу з вхідними даними. При вирішенні задач забезпечити дружній інтерфейс з користувачем. Варіант 23. Множення квадратної матриці на матрицю стовпець. Аналіз завдання та опис алгоритму вирішення задачі Матрицю (двовимірний масив) зберігаємо в одновимірному масиві. Для звертання до елементу m[i][j] використовуємо звертання m[i*x+j], де х – кількість елементів в одному рядку масива. При множенні двох матриць ми отримуємо нову матрицю, в якій число рядків таке ж як і в першій, а кількість стовпців – як в другій матриці. Зчитування даних проводиться з файлу, ім’я якого задається через аргументи функції main(). Результати обчислень записуються до файлу з таким же ім’ям, але з розширенням, зміненим на .out. Для обробки даних використовується функція, яка використовує тимчасовий файл, який створюється на основі вхідного файлу та видаляється після виконання функції. Текст програми Файл “Lab10.c”: #include <stdio.h> #include <stdlib.h> #include <conio.h> #include <alloc.h> #include <string.h> #include "xmatrix.h" void Err (int e) { printf("ERROR: "); if (e==0) puts("Wrong argument count!"); else if (e==1) printf("File \"%s\" not found!",name); else if (e==2) printf("Incorrect matrix size in file \"%s\"!",name); puts("\nSYNTAX: <prog_name> <input_data_file>"); getchar(); exit(0); } void main (int argc,char *argv[]) { int i, j, *m, *s, *result, x; char buffer[40], *buf; FILE *fin, *fout, *ftmp; clrscr(); if (argc!=2) Err(0); name=(char*)calloc(40,sizeof(char)); strcpy(name,argv[1]); if ( !(fin=fopen(name,"rt")) ) Err(1); do fgets (buffer,40,fin); while(!strstr(buffer,"Size:\n")); fscanf(fin,"%d",&x); if (x<1) Err(2); m = (int*)calloc(x,sizeof(int)); s = m+x*x; result = s+x; do fgets(buffer,40,fin); while (!strstr(buffer,"First matrix:\n")); for (i=0;i<x*x;i++) fscanf(fin,"%d",m+i); do fgets(buffer,40,fin); while (!strstr(buffer,"Second matrix:\n")); for (i=0;i<x;i++) fscanf(fin,"%d",s+i); fclose(fin); if (buf=strstr(name,".")) *buf='\0'; strcat(name,".tmp"); ftmp=fopen(name,"wb"); fwrite(&m,sizeof(m),1,ftmp); fwrite(&x,sizeof(x),1,ftmp); fclose(ftmp); matrix_mult (name); if (buf = strstr(name,".")) *buf = '\0'; strcat(name,".out"); fout = fopen(name,"wt"); fprintf(fout,"First matrix is :\n"); for (i=0;i<x;i++) { for (j=0;j<x;j++) fprintf(fout,"%d ",m[i*x+j]); fprintf(fout,"\n"); } fprintf(fout,"\nSecond matrix is:\n"); for (i=0;i<x;i++) fprintf(fout,"%d\n",s[i]); fprintf (fout,"\nResult of matrix multiplication is:\n"); for (i=0;i<x;i++) fprintf(fout,"%d\n",result[i]); fclose(fout); free(m); free(name); free(buffer); } Файл “xmatrix.с”: #include <stdio.h> void matrix_mult (char* name) { int i, j, *m, *s, *result, x; FILE *ftmp; ftmp=fopen(name,"rb"); fread(&m,sizeof(m),1,ftmp); fread(&x,sizeof(x),1,ftmp); fclose(ftmp); remove(name); s = m+x*x; result = s+x; for(i=0;i<x;i++) { result[i]=0; for(j=0;j<x;j++) result[i] += m[i*x+j]*s[j]; } } Файл “xmatrix.h”: char *name; void matrix_mult (char *); Опис результатів тестування Для запуска програми в командний рядок потрібно ввести ім’я програми з необхідним аргументом, наприклад: Lab10.exe data.in , де data.in – файл вхідних даних. Вміст файла data.in: Size: 3 First matrix: 1 4 7 2 5 8 3 6 9 Second matrix: 11 22 33 Новий файл з результатами – data.out: First matrix is : 1 4 7 2 5 8 3 6 9 Second matrix is: 11 22 33 Result of matrix multiplication is: 330 396 462 Висновок: Виконуючи дану лабораторну роботу, я закріпив теоретичні знання та оволодів практичними навиками в створенні програм для опрацювання даних, що міститься в дискових файлах. Засвоїв основні методи читання, запису даних з дискових файлів бінарного типу, використовував передачу параметрів програмі через аргументи функції main(), при вводі невірної кількості параметрів, програма повідомляє про помилку та припиняє свою роботу.
Антиботан аватар за замовчуванням

01.01.1970 03:01-

Коментарі

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

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

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

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

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

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

Admin

26.02.2023 12:38

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