Как в octave сохранить файл

Обновлено: 05.07.2024

Octave вводный урок: if / switch / while / for / break / continue

Этот контент будет вводить использование операторов управления Octave (if / switch) и операторов цикла (for / while / break / continue).
Если вы уже знаете какой-либо язык программирования, вам нужно только прочитать его примерно, в основном знать, как его использовать. Если вы не понимаете ни одного языка программирования, рекомендуется подробно прочитать следующее.

Во-первых, контрольный оператор

Octave предоставляет операторы if и switch.

1.1 если заявление

1.1.1 if… end

В Octave синтаксис оператора if… end выглядит следующим образом:

Если выражение оценивается как true , Оператор в нем будет выполнен, в противном случае он не будет выполнен.
Введите следующий код в Octave:

Запустите приведенный выше код и выведите следующее:

1.1.2 if . else . end

В Octave синтаксис оператора if… end выглядит следующим образом:

Если выражение оценивается как true , Оператор между if и else будет выполнен, в противном случае будет выполнен оператор между else и end.
Введите следующий код в Octave:

Запустите приведенный выше код и выведите следующее:

1.1.3 if . elseif . else . end

В Octave синтаксис оператора if… end выглядит следующим образом:

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

Запустите приведенный выше код и выведите следующее:

1.1.4 Вложенные операторы if

В Octave синтаксис оператора if… end выглядит следующим образом:

Введите следующий код в Octave:

Запустите приведенный выше код и выведите следующее:

1.2 заявление о переключении

Оператор switch выполняет условный набор операторов.Этот набор операторов выбирается из нескольких вариантов, каждый из которых охватывает оператор case.
В Octave синтаксис оператора switch выглядит следующим образом:

Когда есть регистр true В это время Octave выполняет соответствующий оператор и больше не выполняет другие операторы, а затем напрямую выходит из блока оператора switch. Среди них блоки операторов оператора являются необязательными, а число блоков операторов регистра - произвольным.
Примечание. Ключевое слово для других случаев в Octave - иначе, что отличается от значения по умолчанию в основных языках программирования.
Введите следующий код в Octave:

Запустите приведенный выше код и выведите следующее:

Операторы switch и операторы if также могут быть вложенными. Конкретные методы использования примерно одинаковы и не будут подробно описаны.

Во-вторых, оператор цикла

При нормальных обстоятельствах операторы в программе выполняются по порядку. Однако операторы цикла позволяют программе выполнять оператор несколько раз.
Octave предоставляет операторы while и for, а также операторы break и continue для управления циклами.

2.1 цикл while

Пока выражение true , Хотя цикл будет многократно выполнять выражение между while и end.
В Octave синтаксис оператора while выглядит следующим образом:

Введите следующий код в Octave:

Запустите приведенный выше код и выведите следующее:

2.2 для цикла

Цикл for - это повторяющаяся структура управления, которая может эффективно записывать цикл, но количество выполнений является конкретным.
В Octave синтаксис оператора for выглядит следующим образом:

Значение цикла for имеет следующие три формы:

формат описание
init_val:end_val Индексная переменная имеет значение шага 1, увеличивается с начального значения и многократно выполняет оператор программы, пока значение индекса не станет больше конечного значения.
init_val:step:end_val Тот же формат, что и выше, но значение шага здесь - это шаг.
val_array Создайте индекс вектора столбца в последующих столбцах каждой итерации массива val_array.

После прочтения приведенного выше объяснения, оно может все еще сбивать с толку. Вы можете обратиться к следующему примеру для понимания.
Пример 1:
Введите следующий код в Octave:

Запустите приведенный выше код и выведите следующее:

Пример 2:
Введите следующий код в Octave:

Запустите приведенный выше код и выведите следующее:

Пример 3:
Введите следующий код в Octave:

Запустите приведенный выше код и выведите следующее:

Операторы цикла и операторы управления также могут быть вложенными.

2.3 заявление о разрыве

Оператор break используется для прекращения выполнения цикла for или while. Когда оператор выполняется в теле цикла, программа выпрыгнет из цикла и продолжит выполнение следующего оператора в операторе тела цикла.
Введите следующий код в Octave:

Запустите приведенный выше код и выведите следующее: (когда a == 18, выпрыгните из тела цикла напрямую)

2.4 продолжение заявления

Оператор continue управляет некоторыми операторами, которые пропускают тело цикла. Когда этот оператор выполняется в теле цикла, программа пропустит остальные операторы в теле цикла и перейдет к следующему циклу. Разница с разрывом заключается в том, что: break непосредственно выпрыгивает из тела цикла, тогда как continue только завершает текущий цикл цикла, и не выпрыгивает из тела цикла.
Введите следующий код в Octave:

Запустите приведенный выше код и выведите следующее: (Когда == 18, завершите текущий цикл циклов и продолжите следующий цикл циклов. Вы можете сравнить приведенный выше пример оператора break)

Цель этого урока - кратко рассказать об основах Octave, а также показать вам, что многое из описанного вы уже знаете. Если вы что-то забудете или вам понадобится подробная информация о какой-либо функции или команде, просто наберите:

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

Заметка:
Если у вас возникли проблемы с запуском Octave, сайты NCLab и Verbosus позволяют вам работать с Octave в облаке. Обе системы бесплатны для использования.

Содержание

Чтобы запустить Octave введите octave в окне терминала. Вы должны будете увидеть, что-то похожее на текст ниже, разница зависит от версии, которую вы установили:

Последняя строка снизу является приглашением командной строки Octave и, так же как и командная строка в Linux, это место где вы вводите команды Octave. Чтобы выполнить простейшие арифметические операции, используйте + (сложение), - (вычитание), * (умножение), / (деление) и ^ (возведение в степень).

Также доступно много математических функций, имеющих предсказуемые имена (во многом схожие с аналогичными в других языках программирования).

  • Тригонометрические функции: sin , cos , tan
  • Обратные тригонометрические функции: asin , acos , atan
  • Натуральный и десятичный логарифмы: log , log10
  • Экспонента: exp
  • Модуль числа: abs

Также определены различные константы: pi, e, мнимая единица (i или j), inf (бесконечность), NaN (Неопределенность. Результат неопределенных операций, например inf/inf).

Вот несколько примеров операций и соответствующих им команд Octave.

Несколько вещей, на которые стоит обратить внимание:

  • В Octave требуются круглые скобки вокруг аргументов у функции (так, например log(10) - нормально, а вот (log 10) неверно).
  • Любые пробелы до или после арифметических операций не являются обязательными, но допускаются
  • Не все функции в Octave имеют очевидные имена (например, sqrt - извлечение корня). Не паникуйте. Вы узнаете о них по ходу обучения.

Сейчас вы научитесь строить следующие графики с помощью Octave.


Figure 1

Figure 2

Figure 3

Figure 4

Форма 1 (Figure 1) содержащая в себе плоскость была сгенерирована с помощью команд, написанных ниже. Пока что это простой пример, предназначенный проиллюстрировать базовые возможности построения графиков. Мы рассмотрим более сложные примеры позже.

Команда, создающая график - это, конечно же, plot(x,y) . Да вызова это команды, мы должны задать две переменных - x и y . Функция plot просто принимает в качестве аргументов два вектора одинаковой длины, интерпретирует значения из первого как значения координаты X, а второго, как значение координаты Y и рисует линию соединяя эти координаты.

Первая команда, x = linspace(0, 2*pi, 100) , использует функцию linspace , чтобы создать вектор равномерных интервалов (иногда также называемый вектором "линейно распределенных значений"). Первое значение в векторе равно нулю, а последнее . Всего вектор содержит 100 значений. Этот вектор присваивается переменной с именем x .

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

(Немножко отходя от темы, стоит отметить, что имя переменной может состоять из любой последовательности букв, цифр и подчеркиваний, но не может начинаться с цифры. Нет никаких ограничений на длину имени переменной. Имя чувствительно к регистру, так a и A - это разные переменные).

Следующие команды и функции очень полезны для задания переменных при построении 2D графиков.

  • linspace - создает вектор равномерно (линейно) распределенных значений

Использование: linspace(start, end, length) . Параметр length является опциональным и определяет число элементов в возвращаемом векторе. Если вы опустите этот параметр, то вектор будет содержать 100 значений, первое из которых будет равно start , а последнее stop .

Использование: plot(x, y) x и y - векторые одинаковой длины

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

  • hold on / hold off - команда, определяющая хотите ли вы строить последующие графики на тех же осях ( hold on ) или хотите заменить предыдущий построенный график ( hold off ).

Сейчас мы построим графики, изображенные на рисунках 3 и 4. На рисунке 3 изображены три тригонометрические функции

на одном множестве осей. На рисунке 4 показан график суммы этих функций. Первым делом, используем функцию linspace , чтобы создать вектор X-значений

Затем посчитаем Y-значения для всех трёх функций

Следующие команды построят график всех трёх функций

На строке 5 ( figure ) мы сообщаем Octave, что хотим построить новый график в новом окне. Считается хорошей практикой вызывать figure перед построением нового графика. Такой подход помогает избежать случайно замены предыдущего важного графика.

Обратите внимание, что на строке 7, используется команда hold on , чтобы сообщить Octave, что мы не хотим замещать предыдущий график (со строки 6) последующими. Octave, после использования hold on , будет строить все последующие графики на той же плоскости, пока не будет вызвана команда hold off .

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

Ну, и наконец-то, построим второй график (рисунок 4):

Строка 11 создает новое окно, а строка 12 сообщает Octave, что все последующие построения графиков будут просто замещать предыдущие. На строке 13 мы строим график суммы всех функций.

Небольшая заметка для пользователей Mac:
Если команды для построения графиков не работают, выполните следующую команду:

setenv ("GNUTERM", "x11")

В случае sin(x) * cos(x) :

  • Использоваеть plot(sin(x).*cos(x)) . Обратие внимание на точку между sin(x) и * . Для используйте plot(x.*x) или plot(x.^2)
  • Прочитайте раздел о векторах и матрицах.

Ваша задача заключается в том, чтобы сгенерировать (намного лучше выглядящий) график на рисунке ниже, используя всё то, что вы выучили до этого момента и функцию axis .

axis можно использовать, чтобы отрегулировать, какая часть графика будет фактически отображена на экране. Используйте команду help axis , чтобы узнать, как работает эта функция.

Чтобы получить такой же график, как на рисунке выше, введите следующее:

В Octave есть очень полезная возможность сохранять комманды и запускать их заново позже. Вы, вероятно, захотите сохранить вашу работу или написать код, который можно заново использовать (самостоятельно или отдать кому-то еще). Такие файлы называются скриптами Octave. Их стоит сохранять с расширением .m и тогда Octave сможет самостоятельно распознать их. (Расширение .m используется потому что MATLAB называет свои скрипты "М-файлами", а Octave основывается на MATLAB).

Чтобы запустить созданные скрипты в Octave вы должны находиться в той же директории, что и файл со скриптом и ввести имя файла без расширения .m . Например, если у вас есть скрипт myscript.m в папке octave, следующие команды выполнят этот скрипт.

Обратите внимание, что команда chdir('

/octave') ; необходима, если вы не находились внутри этой папки во время запуска Octave.

В следующих уроках вы узнаете несколько новых выражений, которые вы сможете использовать, чтобы сделать ваш Octave-код намного круче. Количество предоставляемых скриптов будет расти и вам следует сохранять их для дальнейшего использования. Хорошей идеей будет создать папку octave в вашей домашней папке и сохранять все ваши Octave файлы в неё.

Sergey Khoteev

@turbojedi Клаву хардварную была попытка сделать?

Sergey Khoteev

Sergey Khoteev

@001iz @Graveraider Всегда был вопрос а как у Evil персонажей могут быть романтики. Там скорее как в KoToR прогибание под свою сторону силы.

Sergey Khoteev

@Graveraider @001iz Q: Есть ли в игре романы? A: Да. Вы можете завести роман с 4 компаньонами, 2 из которых бисексуальны.

Sergey Khoteev

@001iz Заметки натуралиста, наплыв народу в комиксшопы вот произошел, после теории большого взрыва, где ненавязчиво подавалась идея что у задрота есть деньги, главное втереться к нему в доверие) Но только с хардкором тяжело.

Советуем посмотреть также Сайт Некроманта

Метки

Материалы распространяются на условиях лицензии GNU FDL

Всем привет , это сумбурная статья, родилась из попытки улучшить написание сценариев для octave. Написана она потому что на wikibooks учебник не переведен, а подробный перевод каждой из этих тем , занял бы у меня кучу времени.

GUIOctave.jpg

Table of Contents

Однострочные и многострочные комментарии

Ну здесь коротко, однострочные комментарии это конечно хорошо, но не когда вы создаете стены текста, пояснений или своих рассуждений. Исходная документация.

И если написать небольшой комметарий к нашей функции или сценария, например так

То потом когда вы будете находиться в папке с этим сценарием или функцией, или пути этих папок будут прописаны в файле настроек. Вы можете ввести команду

Раньше мой сценарий для octave представлял из себя набор переменных и комментарии к ним и когда приходилось его повторно запускать, надо было вспомнить, как и что и как называется, просмотреть комментарий, проверить единицы измерений и прочее.

И на экране это выглядит так

а теперь попробуем сделать красиво! Простейший способ это вставлять в промежутки сценария строки

Быстро, также можно воспользоваться функцией disp() , которая печатает либо строку ЛИБО переменную, а затем переходит на следующую строку.

А теперь краткая справка по printf, это функция пришла к нам из C. Вы пишите строку и вставляете в нее по порядку переменные %s — строки %d — простые числа (%e %g %f ) различные варианты вывода сложных чисел. Далее после того как вы написали строчку, вы в том же порядке что и в строке, указываете переменные входящие в неё. Пример для наглядности, и да заметьте перенос строк автоматически не производится!

и то как это выглядит

Маленькое замечание , возможно кто нибудь захочет сделать часть вывода цветным. Пока такая возможность не доступна как и не доступен пока описанная в документации поддержка echo (octave -x).

Не знаю на сколько это интересно и нужно, просто уточнил у создателей, в рассылке.

Ввод и обработка параметров пользователя

Здесь мы рассмотрим применение простой команды input, есть и более сложные вещи, но это потом.

Мы на всякий случай поставили , значение по умолчанию, но это запись не совсем корректна. т.к. если пользователь введет не число, или вам просто нужно будет нажимать Enter , чтобы установить параметр в значение по умолчанию, будет появляться ошибка. Поэтому второй вариант просто берет отрицание от множества допустимых значений.

Различные редакторы для Octave

qtOctave

Изначально я пользовался редактором встроенным в qtOctave , он хорош тем что запускает необходимый скрипт по клавише F5 , обладает сносным автодополнением и подсветкой. Из минусов, подсветку в нем непонятно как настраивать и у меня с ней, глаза сломаешь, также маленькие косячки вроде этого

qtoctave.jpg

Ну и самое обидной qtOctave ,больше не поддерживается (дата 15,03,2012) , о его замене GUI-Octave, поговорим дальше.

Gedit

В моей версии 2,30,4 очень слабая поддержка синтаксиса octave (имеются в виду функции), я подозреваю что такая же ситуация и в KDE-шном Kate. Из плюшек возможность создавать горячие клавиши с фрагментами кода, ну и запуск терминала в gedit.

Ну для телефона это все конечно не подходит , поэтому я попробовал поставить Vim, и оказалось что там очень хорошая поддержка синтаксиса, лучшая пожалуй. Как делать автодополнение для octave я не знаю, но вот подсветку , можно скачать отсюда. Там же описаны строчки которые надо добавить в vimrc.

GUI-Octave

GUIOctave.jpg

Эта программа будет входить в официальные выпуски octave, официальная замена, написана на qt4 , но при этом пока не дотягивает до qtOctave. Требует для скачивания и установки mercurial>=1.8, , также вам понадобятся следующие пакеты: octave-headers; libqscintilla2-dev.

  • Командная строка теперь нормально работает и можно перемещаться по ней и история команд тоже работает
  • Есть доступ к документации, теперь и к оффлайновой тоже
  • Есть вроде горячие клавиши и их можно назначить
  • Есть подсветка синтаксиса и она полная
  • Есть подсказки используемых переменных и функций
  • Табличка с переменными также имеется
  • Сворачивание блоков, вроде if ,for, funcion также работает
  • Пошаговая отладка сценариев а также возможность ставить breakpoint-ы
  • Также есть ссылки на Bugrepport и octave forge и проект Agora для обмена кусками кода их обсуждением и прочий социальный кодинг и пока в зачаточном состоянии.
  • Нет загрузки пакетов с octave forge и их выбор, как это сделано в qtOctave
  • И главное, там пока нет ни каких команд которые вы можете выполнить для расчетов через GUI а не набрав команду.

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

Emacs Octave Support

EmacsOctaveSupport.jpg

Плюшек вроде комбинаций и того же запуска текста + IDE вещи вроде того что позволяет ECB, а из минусов:

  • Подсветка Emacs не обновляется с 2007 года. Зато она встроена везде даже сейчас когда я пишу статью Emacs рендерит Octave вставки.
  • Ну и нет любимого окна с переменными и историей команд в ECB

Маленькие замечания по использованию Emacs

Как набрать C-c i l ? Берем зажимаем CTRL зажимаем с , теперь не отпуская первых двух по очередно жмем i затем l

Комбинации для редактирования кода:

  • C-h m Справка по моду
  • TAB Ззадает отступ для текущей линии в зависимости от предыдущего контекста
  • LFD Разрывает строку в указанном месте и переносит с учетом отступа
  • M-LFD Разрывает строку в указанном месте и вставляет знак переноса строки(набирать как ESC затем C-j)
  • С-c ; Закомментировать регион.Где регион это область выделения , ну или если визуального выделения нет , то от положения курсора до метки.
  • C-c : Раскомментировать регион, причем он раскомментирует то что было закомментровано в начале строки. Лучше не задумывааться о том что он считает регионом а выделять необходимый код и вводить команду комментирования, раскомментирования и выравнивания форматирования
  • M-C-q Восстанавливает покореженное форматирование (отступы), особенно это полезно после предыдущей функции раскомментирования(octave-indent-defun).
  • C-c C-p Переместиться на строчку назад игнорируя пустые строки и закомментированные строки. С числовым модификатором, перемещается на N строчек
  • C-c C-n Переместиться на строчку вперед игнорируя пустые строки и закомментированные строки. С числовым модификатором, перемещается на N строчек
  • C-c f octave-insert-defun ,эта функция создает шаблон функции, необходимо только ввести сначало имя, потом аргументы и в конце возвращаемое функцией значение.
  • M-; Переносит курсор на некоторое удаление от конца строки, и ставит комментарий

Регион,блок,функция

Перемещения по тексту

Тут понадобиться некий пример:

  • C-c M-C-n Перейти к концу следующего блока , при этом блок должен находиться на одном уровне.Т.е. если вы поместите курсор на 2 строку нашего примера, и введете команду, то вы перейдете на 9 строчку, опять введите команду и вы перейдете на 13 строку, больше переходов не будет,т.к. это последний блок на данном уровне.
  • C-c M-C-p Перейти в начало следующего блока
  • C-c M-C-d Перейти к началу блока на уровень ниже.Поставьте курсор, после for в первой строке и введите комбинацию (CTRL-c затем , один раз нажать ESC а затем CTRL-d) и вы переместитесь на 4 строку, ещё раз нажав указанную комбинацию вы перейдете на 6 строку
  • C-c M-C-u Перейти к началу блока на уровень выше

Интерпретатор

  • M-x run-octave Открывает окно с интерпретатором octave
  • С-<стрелка вверх/вниз> Если курсор установлен в приглашение для ввода octave> то вы можете перемещаться по истории команд интерпретатора

Краткая справка по многооконности

  • С-x 2 Разбить указанное окно на две части по горизонтали
  • С-x 3 Разбить указанное окно на две части по вертикали
  • С-x 1 Оставить только одно окно
  • C-x 5 2 Создать новое окно с редактором Emacs
  • С-x С-b Просмотреть список буферов
  • С-x b название_буфера Сменить буфер текущего окна на название_буфера
  • С-x o Перейти в другое окно

Эти команды запускаются в редакторе с кодом вашего скрипта.

Аббревиатуры и автодополнение

Есть специальный подмод, работы с аббревиатурами octave-abbrev-start, или нажав ` вы включите этот мод, если набрать `? выведет список сокращений, он небольшой, для примера перейдите в пустую строку и нажмите `a затем Enter.

Позже будет статья о том как устроен мой конфиг к редактору Emacs, но уже сейчас можно точно сказать что основные его возможности получены из emacs-for-python , и конечно же не обошлось без поиска и настройки работы автодополнения.

Установка GNU Octave на телефон Nokia N900

n900octave.jpg

Как потом оказалось для того чтобы запускать ваши сценарии из командной строки octave, необходима программа less которая позволяет пролистывать текстовые файлы. И по воле случая , он почемуто находиться в репозитории Maemo Extras-Devel. Теперь необходимо обновить репозитории и поставить less.


Использование командной строки, в большинстве случаев, оправдано лишь при небольших (в пару-тройку строк) программах. Если же алгоритм решения задачи достаточно громоздкий и его необходимо отлаживать, то имеет смысл воспользоваться Script-файлами (далее, просто скриптами). Все дальнейшие листинги будут приводится сугубо в форме скриптов.

Скрипт представляет собой обычный текстовый файл с расширением *.m, содержащий любой допустимый системой набор команд. Для тех, кто знаком с языками программирования -- это аналог модуля (собственно отсюда и название расширения файла).

Замечание! m-файл не должен начинаться с ключевого слова function иначе Octave будет считать этот файл описанием функции (более подробно см. раздел Функции)

Способ 1. (Linux-версия)

Просто из консоли вызвать программу с указанием соответствующего файла:

Способ 2. (Windows-версия)

По умолчанию скрипты, входящие в базовый инсталляционный пакет, расположены в папке "<каталог установки>\Octave\share\octave\2.9.13\m\". Сюда же можно сохранять пользовательские m-файлы. При попытке вызова соответствующего скрипта эта папка будет просматриваться Octave в первую очередь.

Для примера, создадим файл abc.m в указанном выше каталоге со следующим содержимым:

Пример использования

Как указывалось выше, для поиска содержимого m-файла Octave просматривает некоторый список директорий. Этот список содержится во встроенной переменной LOADPATH, а следовательно, нет препятствий добавить туда собственную папку. Выполнить это можно следующим образом:

Внимание! Пользователям Windows следует в путях к файлам писать прямой слеш "/" вместо обратного "\", принятого в системе по умолчанию.


В пакете также определены команды path, savepath, rmpath, genpath, pathdef, pathsep (см. help)

Замечание! Способы 2 и 3 имеют один недостаток: если запустить Octave, а потом внести изменения в скрипт и сохранить его, то эти изменения не вступят в силу до тех пор пока программа не будет перезапущена заново.

Octave предоставляет широкие возможности для работы с текстовыми и двоичными файлами. Текстовыми называют файлы, состоящие из любых символов. Они организуются по строкам, каждая из которых заканчивается символом "конец строки". Конец самого файла обозначается символом " конец файла ". При записи информации в текстовый файл все данные преобразуются к символьному типу и хранятся в символьном виде. Этот файл можно просмотреть с помощью любого текстового редактора.

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

Операции с файлами в Octave имеют много общего с функциями обработки файлов в языке Си . Читатель, имеющий опыт программирования на Си , сможет убедиться, что фрагменты Си -программ обработки файлов могут с минимальными изменениями быть перенесены в Octave.

3.4.1 Обработка текстовых файлов

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

(filename, mode)

fopen

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

  • rt — открываемый текстовый файл используется в режиме чтения;
  • rt+ — открываемый текстовый файл используется в режиме чтения и записи;
  • wt — создаваемый пустой текстовый файл предназначен только для записи информации;
  • wt+ — создаваемый пустой текстовый файл предназначен для чтения и записи информации;
  • at — открываемый текстовый файл будет использоваться для добавления данных в конец файла; если файла нет, он будет создан;
  • at+ — открываемый текстовый файл будет использоваться для добавления данных в конец файла и чтения данных; если файла нет, он будет создан.

Для форматированного вывода информации в файл можно использовать функцию следующего вида:

(f, s1, s2)

fprintf

десь — идентификатор файла (значение идентификатора возвращается функцией ), — строка вывода, — список выводимых переменных.

В строке вывода вместо выводимых переменных указывается строка преобразования следующего вида:

Значения основных параметров строки преобразования (символы управления форматированием) приведены в табл. 3.3.

В строке вывода могут использоваться некоторые специальные символы, приведённые в табл. 3.4.

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

fscanf

Здесь — идентификатор файла, который возвращается функцией — строка форматов вида %[ширина][.точность]тип, s2 — имя переменной, количество считываемых значений.

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

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

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

f

fclose()

Здесь — идентификатор закрываемого файла. С помощью функции можно закрыть сразу все открытые файлы кроме стандартных системных файлов.

Рассмотрим использование рассмотренных выше функций на простых примерах.

A(N, N)

Пример 3.10. Поменять местами элементы, расположенные на главной и побочной диагонали квадратной матрицы . Исходную и преобразованную матрицы вывести в текстовый файл prim_3_10.txt .

Далее приведена программа решениями задачи с комментариями.

В результате работы программы создан файл prim_3_10.txt , который можно открыть при помощи обычного текстового редактора.

Обратите внимание, что после записи информации в файл этот файл обязательно надо закрывать с помощью функции fclose . Дело в том, что fprintf не обращается непосредственно к диску — он пишет информацию в специальный участок памяти, называемый буфером файла. После того как буфер заполнится, вся информация из него вносится в файл. При вызове функции fclose сначала происходит запись буфера файла на диск, и только потом файл закрывается. Если файл не закрыть, то он автоматически закрывается при завершении работы программы, но при этом пропадает информация, хранимая в буфере файла.

Пример 3.11. Записать матрицу в файл следующим образом. Пусть в первой строке текстового файла хранятся числа и , а затем — построчно матрица .

Листинг 3.11 содержит программу для создания подобного файла.

После выполнения этой программы будет создан текстовый файл prim_3_11.txt :

Читайте также: