МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ
НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ "ЛЬВІВСЬКІ ПОЛІТЕХНІКА"
Запис і зчитування інформації у файли засобами ТС та MatLab
Інструкція
до лабораторної роботи №11
з дисципліни "Алгоритмізація і програмування"
для студентів базового напряму 6.0925
"Автоматизація і комп'ютерно-інтегровані технології"
Львів 2008
Мета роботи: навчитися складати програми, які забезпечують запис та зчитування інформацію у файли засобами С та MatLab.
Основні відомості
Потік - це файл даних чи фізичний пристрій (принтер, дисплей тощо), яким програміст маніпулює з допомогою вказівника на об'єкт, який має ім'я FILE. Цей об'єкт описаний у файлі stdio.h. Фактично це є опис структури (тип якої має ім'я FILE). Така структура призначена для зберігання інформації про файл. Для роботи з файлами використовують певні функції.
Функція, яка відкриває потік даних, повертає вказівник типу FILE, пов'язаний з іменем. Для кожного потоку формується своя структура типу FILE. Слід зауважити, що користувач в програмі тільки описує деяку змінну як вказівник на об'єкт типу FILE, а потім присвоює йому значення, яке повертається функцією відкриття файлу як потоку.
Приклад (фрагмент програми в ТС):
FILE * f_vkazivnuk; f_vkazivnuk=fopen("divlab11.c","w");
В результаті відкриття файлу як потоку встановлюється зв'язок між потоком (вказівник fvkazivnuk) і файлом на диску (divlabl1.c). При цьому задається режим доступу до файлу:
1.
г
читання існуючого файлу
2.
w
запис у файл
3.
а
додавання інформації в кінець файлу (якщо файла немає, то він створюється)
4.
г+
читання і запис (файл повинен існувати)
5.
w+
читання і запис у файл (якщо файл існує, то його вмістиме знищується)
6.
а+
читання і додавання до файлу
Таким чином відкрити файл як потік можна з допомогою бібліотечної функції fореn("ім'я_файлу","режим_доступу'');
Якщо в процесі виконання функції fopen() виникає помилка, то значення вказівника рівне NULL.
Функція fclose(noтiк) закриває потік. Для одночасного закриття всіх потоків застосовується функція fcloseall().
Для запису інформації (даних) в файл застосовують функцію fprintf(). Ця функція розміщує форматовані дані в потік. За формою ця функція подібна функції printf().
Приклад, який демонструє запис у файл з іменем data_L11.c результатів табулювання функції у = х·sin2(x)-е-х на інтервалі [-1; 1].
// div_11.c
#include <stdio.h> #include <conio.h> #include <math.h>
main()
{float x, y, a=-1.0, b=1.0, step=(b-a)/10; int n=ceil((b-a)/step)+1;
FILE *div_file=fopen("c:\\data_L11.с","w+");
fprintf(div_file, "%d\n", n);
for(x=a; x<=b; x+=step)
{y=x*pow(sin(x),2)-exp(-x); fprintf(div_file,"%4.1f %5.2f\n",x,y); } fclose(div_file); return 0; }
Результати роботи програми div_11.c знаходяться у текстовому файлі data_L11.c у наступному вигляді:
11
-1.0 -3.43
-0.8 -2.64
-0.6 -2.01
-0.4 -1.55
-0.2 -1.23
-0.0 -1.00
0.2 -0.81
0.4 -0.61
0.6 -0.36
0.8 -0.04
1.0 0.34
Число у першому рядку є кількістю ітерацій обчислення функції (рядків масиву 11(2), перший стовпчик є значеннями аргументу із заданого інтервалу, а у другому стовпчику - обчислені за заданою залежністю значення функції.
Подібні засоби для запису|зчитування інформації є і у ППП MatLab. Продемонструємо роботу функцій MatLab для зчитування інформації записаної у файл data_L11.c програмою, складеною на мові програмування С.
Аналогічно як і у С спочатку потрібно відкрити потрібний файл (якщо потрібно, крім імені файлу, вказати повний маршрут до файлу) з допомогою функції fopen(). Ця функція повертає числовий ідентифікатор відкритого файлу, який потрібно використовувати як параметр для функцій читання та запису у цей файл. В програмі застосована функція читання з файлу fscanf() форматованих даних.
Після завершення роботи з файлом потрібно його закрити, для цього використовується функція fclose().
Режими відкриття файлу в MatLab є подібні до тих, які використовуються в С, а саме:
'r'
тільки для читання
'w'
тільки для запису (попереднє вмістиме файлу пропадає, а неіснуючий файл створюється)
'r+'
читання і запис одночасно
'а'
додавання в кінець
Програма в MatLab, яка зчитує дані з файлу c:\data_L11.c і будує графік заданої функції
%div_11mat
f_matlab=fopen('c:\data_L11.c','r+t');
N=fscanf(f_matlab,'%d',[1 1]);
z=fscanf(f_matlab,'%f',[2 N]);
fclose(f_matlab);
plot(z(1,:),z(2,:),'r');grid
xlabel('x');ylabel('y(x)');
Рис. Графік функції у=х·sin2(x)-е-х х([-1; 1], побудований засобами MatLab