Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
УТП 12 Файловые операции.doc
Скачиваний:
3
Добавлен:
01.05.2025
Размер:
284 Кб
Скачать
☆

Форматный вывод

Схема использования fprintf при работе с числовыми переменными такова:

fprintf(идентификатор, 'список форматов', список переменных)

Здесь первый аргумент, как и в случае вывода строк, является идентификатором файла, второй – строка с кодами форматов, которые определяют вид записи значений переменных из списка, заданного третьим аргументом. В списке может быть одна или несколько переменных, в том числе и массивов.

Пример 2.

Требуется записать значения переменных х = -pi/4 и у - sin(x) в файл в формате с плавающей точкой, оставляя четыре цифры после десятичной точки для х и восемь цифр – для у.

Файл-программа, решающая данную задачу

% форматный вывод в текстовый файл

[F, mes] = fopen('twonum.txt', 'w');

x = -pi/4;

y = sin(x);

fprintf(F, '%7.4f%11.8f', x, y);

fclose(F);

Обратите внимание на второй аргумент команды fprintf. Код %7.4f задает формат вывода переменной х, которая расположена на первом месте в списке вывода. Знак процента указывает на начало формата, цифра 7 обозначает, что всего под значение переменной х отводится семь позиций (включая десятичную точку и место под знак, которое резервируется и для положительных чисел), цифра 4 после разделителя-точки обеспечивает точность отображения результата – четыре цифры после десятичной точки. Спецификатор f указывает на то, что следует вывести число в формате с плавающей точкой. Аналогичным образом работает формат %11.8f для вывода у. При использовании форматного вывода следует учесть, что если количество элементов в списке вывода больше числа кодов формата, то форматные коды применяются повторно, начиная с первого. После выполнения файл-программы из примера файла twonum.txt составляют два числа – значения переменных х и у с требуемым числом цифр, выводимых на экран ранее написанной функцией myview:

-0.7854-0.70710678

Соответствие форматов и получаемого результата приведено на схеме, изображенной на рис. 1, каждая позиция подчеркнута.

Рис. 1. Схема соответствия форматов вывода и результата

Значения х и у вывелись одно за другим без разделителя, что затрудняет чтение результата. Можно было бы указать в списке форматов больше позиций под вывод второго числа, например, '%7.4f%15.8f'. Поскольку у меньше единицы и выравнивание числа в выделенном для него поле по умолчанию производится по правому краю, то числа в данном случае будут разделены пробелами. Но если в примере 2 заменить у = sin(x) на у =1000000*sin (x), то числа снова не будут разделены. Кроме того, пятнадцати позиций не хватило под вывод у с восьмью знаками после десятичной точки, и MATLAB автоматически увеличил поле вывода. Поэтому при задании форматов следует предусмотреть некоторые разделители между числами.

Форматы данных можно разделять любым текстом, включая пробелы, который запишется в текстовый файл между соответствующими значениями.

Задание 5.

Внесите изменения в команду fprintf файл-программы, приведенной в примере 2. Дополните запись в файл некоторыми пояснениями, так как приведено ниже

fprintf (F, 'х = %7.4f у = %11.8f', x, y );

и выполните файл-программу. Покажите содержимое файла twonum.txt.

Помещение символа \n в список форматов приводит к последующему выводу данных с новой строки. Кроме f, допустимы и другие спецификаторы форматов, в частности, спецификатор е означает вывод в экспоненциальной форме.

После знака процента может размещаться флаг, позволяющий задать некоторые дополнительные параметры отображения чисел. Флаг может принимать следующие значения:

  • знак плюс, для отображения знака положительных чисел;

  • знак минус, означающий выравнивание числа по левому краю в отведенном для него поле (по умолчанию число выравнивается по правому краю);

  • цифра ноль, предназначенная для заполнения оставшихся позиций слева от числа нулями.

Команды, приведенные ниже, демонстрируют использование флага:

a = 0.56;

b = 1.1;

c = 1.22;

fprintf ( F , 'а =%+7.3f b = %- 11.1f с =%07.2f\n' , a, b, c);

Дополните ими файл-программу, приведенную в примере 2, и посмотрите результат:

а = +0.560 b = 1.1 с =0001.22

Полезной особенностью fprintf является то, что список ввода может быть матрицей. Матрица выводится по столбцам – с последовательным применением форматов из списка.

Команды

[F, mes] = fopen ( 'randmatr. txt' , 'w');

R = rand(3) ;

disp(R)

fprintf(F, '| %7.4f | %7.4f | %7.4f |\n', R');

fclose(F);

выводят квадратную матрицу R размера три на три из случайных чисел в командное окно и файл, столбцы в файле разделены вертикальными линиями

| 0.9649 | 0.9572 | 0.1419 |

| 0.1576 | 0.4854 | 0.4218 |

| 0.9706 | 0.8003 | 0.9157 |

Обратите внимание, что аргументом команды fprintf является транспонированная матрица R, т. к. fprintf работает с матрицей по столбцам. Матрица, отображенная в командном окне, совпадает с матрицей, записанной в файл randmatr.txt.

Информации о форматах, приведенной выше, вполне достаточно для завершения работы над файл-функцией sintable, предназначенной для вывода таблицы значения функции sin в файл. Операторы, осуществляющие запись в файл названия и шапки таблицы, приведены в примере 2. Часть файл-функции, отвечающая за вывод таблицы (разумеется, данный блок должен предшествовать закрытию файла функцией fclose)

% Cоздание вектора значений аргумента

x = 0:pi/2:2*pi;

% Конструирование матрицы, первая строка которой содержит

% значение аргумента, а вторая — значения функции sin

M = [x; sin(x)];

% форматный вывод элементов матрицы

fprintf(F, '|%7.3f|%10.4f|\n', M);

Задание 6.

Вставьте вышеприведенный блок операторов в файл-функцию sintable и вызовите ее, указав в качестве входного аргумента строку с именем файла table.dat. Покажите содержимое файла table.dat.