Файл: Сравнительный анализ описания данных для различных языков программирования (Определение языка программирования С++).pdf
Добавлен: 01.04.2023
Просмотров: 287
Скачиваний: 1
1.4 Сравнение указанных элементов языков согласно варианту
Задание: Файлы. Потоки. Стандартные и нестандартные.
1.4.1 Файлы и потоки в C++
Файлом называют способ хранения информации на физическом устройстве. Файл -- это понятие, которое применимо ко всему -- от файла на диске до терминала.
В C++ отсутствуют операторы для работы с файлами. Все необходимые действия выполняются с помощью функций, включенных в стандартную библиотеку. Они позволяют работать с различными устройствами, такими, как диски, принтер, коммуникационные каналы и т. д. Эти устройства сильно отличаются друг от друга. Однако файловая система преобразует их в единое абстрактное логическое устройство, называемое потоком.
Текстовый поток -- это последовательность символов. При передаче символов из потока на экран, часть из них не выводится (например, символ возврата каретки, перевода строки).
Двоичный поток -- это последовательность байтов, которые однозначно соответствуют тому, что находится на внешнем устройстве.
Организация работы с файлами средствами C
Объявление файла: FILE *идентификатор;
Пример: FILE *f;
Открытие файла: fopen (имя физического файла, режим доступа)
Режим доступа -- строка, указывающая режим открытия файла файла и тип файла
Типы файла: бинарный (b); текстовый (t)
Значения и описания:
r Файл открывается только для чтения
w Файл открывается только для записи. Если соответствующий физический файл существует, он будет перезаписан
a Файл открывается для записи в конец (для до записи) или создается, если не существует
r+ Файл открывается для чтения и записи.
w+ Файл открывается для записи и чтения. Если соответствующий физический файл существует, он будет перезаписан
a+ Файл открывается для записи в конец (для до записи) или создается, если не существует
Например
f = fopen (s, «wb»);
k = fopen («h: ex. dat», «rb»);
Неформатированные файловый ввод-вывод:
Запись в файл: fwrite (адрес записываемой величины, размер одного экземпляра, количество записываемых величин, имя логического файла);
Например: fwrite (& dat, sizeof (int), 1, f);
Чтение из файла: fread (адрес величины, размер одного экземпляра, количество считываемых величин, имя логического файла);
Например: fread (& dat, sizeof (int), 1, f);
Закрытие файла: fclose (имя логического файла);
Форматированный файловый ввод-вывод
1) Функции fgetc () и fputc () позволяют соответственно осуществить ввод-вывод символа.
2) Функции fgets () и fputs () позволяют соответственно осуществить ввод-вывод строки.
3) Функции fscanf () и fprintf () позволяют соответственно осуществить форматированный ввод-вывод и аналогичный соответствующим функциям форматированного ввода-вывода, только делают это применительно к файлу.
Файловый ввод-вывод с использованием потоков
Библиотека потокового ввода-вывода: fstream
Связь файла с потоком вывода: ofstream имя логического файла;
Связь файла с потоком ввода: ifstream имя логического файла;
Открытие файла: имя логического файла. open (имя физического файла);
Закрытие файла: имя логического файла. close ();
1.4.2 Файлы и потоки в Delphi
Работа с файлами в Delphi.
Технология работы с файлами в системе Delphi требует определённого порядка действий:
Прежде всего файл должен быть открыт. Система следит, чтобы другие приложения не мешали работе с файлом. При этом определяется, в каком режиме открывается файл — для изменения или только считывания информации. После открытия файла в программу возвращается его идентификатор, который будет использоваться для указания на этот файл во всех процедурах обработки.
Начинается работа с файлом. Это могут быть запись, считывание, поиск и другие операции.
Файл закрывается. Теперь он опять доступен другим приложениям без ограничений. Закрытие файла гарантирует, что все внесённые изменения будут сохранены, так как для увеличения скорости работы изменения предварительно сохраняются в специальных буферах операционной системы.
В Delphi реализовано несколько способов работы с файлами. Познакомимся со классическим способом, связанным с использованием файловых переменных. Файловая переменная вводится для указания на файл. Делается это с помощью ключевого слова File:
var F: File;
Описанная подобным способом файловая переменная признается как типизированной, и дает возможность работать с файлами с неизвестной структурой. Сведения считываются и вносятся побайтно блоками, объем которых указывается при открытии файла, вплоть от 1 байт. Но чаще используются файлы, состоящие из последовательности одинаковых записей. Для описания такого файла к предыдущему описанию добавляется указание типа записи:
var F: File of тип_записи;
В качестве типа могут использоваться базовые типы, или создаваться свои. Важно только, чтобы для типа был точно известен фиксированный размер в байтах, поэтому, например, тип String в чистом виде применяться не может, а только в виде String[N].
Данные, считанные из файла или записываемые в файл, содержатся в обычной переменной, которая должна быть того же типа, что и файловая. Поэтому сначала в программе лично я описываю нужный тип, а затем ввожу две переменные этого типа — файловую и обычную:
Для текстовых файлов тип файловой переменной в этом случае TextFile, а тип обычной — String.
Для открытия файла нужно указать, где он расположен. Для этого файловая переменная должна быть ассоциирована с нужным файлом, который определяется его адресом. Адрес файла может быть абсолютным, с указанием диска и каталогов ('C: Мои документы Мои рисунки FileName. ini'), или относительным, тогда он создаётся в папке с. exe файлом программы. Для задания относительного адреса достаточно указать имя файла с нужным расширением. Делается это оператором AssignFile:
AssignFile (SaveF, 'C: Мои документы Мои рисунки FileName. ini');
AssignFile (SaveF, 'FileName. ini');
Теперь файл должен быть открыт.
Открытие файла оператором Rewrite приведёт воссозданию файла заново, т. е. существующий файл будет без предупреждения уничтожен, и на его месте будет создан новый пустой файл заданного типа, готовый к записи данных. Если же файла не было, то он будет создан.
Открытие файла оператором Reset откроет существующий файл к считыванию или записи данных, и его указатель будет установлен на начало файла:
Rewrite (SaveF);
Reset (SaveF);
Каждый из этих операторов может иметь второй необязательный параметр, имеющий смысл для не типизированных файлов, и указывающий длину записи не типизированного файла в байтах:
Rewrite (SaveF, 1);
Reset (SaveF, 1);
Чтение файла производится оператором Read:
Read (SaveF, SaveV);
Запись в файл производится оператором Write:
Write (SaveF, SaveV);
При этом чтение и запись производится с текущей позиции указателя, затем указатель устанавливается на следующую запись. Можно проверить, существует ли нужный файл, оператором FileExists:
if FileExists ('FileName. ini')
then Read (SaveF, SaveV);
Принудительно установить указатель на нужную запись можно оператором Seek (SaveF, N), где N — номер нужной записи, который, как и почти всё в программировании, отсчитывается от нуля:
Seek (SaveF, 49); - установка указателя на 50-ю запись.
При последовательном чтении из файла рано или поздно будет достигнут конец файла, и при дальнейшем чтении произойдёт ошибка. Проверить, не достигнут ли конец файла, можно оператором EOF (аббревиатура End Of File), который равен true, если прочитана последняя запись и указатель находится в конце файла:
while (not EOF (SaveF)) do
Read (SaveF, SaveV);
Для текстовых файлов вместо Read и Write используются операторы Readln и Writeln, умеющие определять конец строки. В комментариях приведена процедура чтения текстового файла.
Оператор Truncate (SaveF) позволяет отсечь (стереть или, если хотите, удалить) все записи файла, начиная от текущей позиции указателя, и до конца файла.
В конце работы с файлом его необходимо закрыть. Это делается оператором CloseFile (SaveF);
Потоки в Delphi делают функцию имитации псевдопараллельной работы приложения. Как понятно, для организации многозадачности операционная система выделяет каждому приложению, выполняющемуся в настоящий момент, определённые кванты времени, длина и количество которых определяется его ценностью. Потому объём работы, который приложение может выполнить, определяется тем, сколько таковых квантов оно сумеет получить в единицу времени. Для операционной системы каждый поток является самостоятельной задачей, которой выделяются кванты времени на общих основаниях. Потому приложение Delphi, которое умеет сделать несколько потоков, получит больше времени операционной системы, и соответственно сумеет выполнить больший объём работы. Создать дополнительный поток в Delphi поможет объект TThread.
1. Мастер создания дополнительного потока в Delphi создаёт отдельный модуль, в рамках которого выполняется поток.
File -> New -> Other…
В результате будет создан модуль, содержащий заготовку кода, реализующего дополнительный поток Delphi.
2. Практическая часть
2. 1 Постановка задачи
Игра аналог телевизионного шоу «Поле чудес».
программа паскаль си язык
2. 2 Спецификация программы
Программа написана при помощи пакета программ Borland Delphi 7 и Borland C++Builder 6. Для установки программы достаточно скопировать папку с программой в нужный вам каталог. Для запуска программы нужно запустить файл Pole. exe (для C++) или файл Pole. exe (для Delphi)
Тестировалась на компьютере: AMD® Phenom II ® X4 955 BE @ 3. 20GHz 3. 20 ГГц, 8. 00 ГБ ОЗУ
ОС Windows 10 Pro
2.3 Блок-схема алгоритма решения задачи
Так как состав модулей и подпрограмм на обоих языках совпадает, то схема иерархии модулей и инструкция пользователя совпадают и имеют единое отображении для обоих языков, а также состав и содержание модулей на С++ и на Delphi совпадают, различия заключаются только в синтаксических особенностях языков.
2.4 Схема иерархии модулей
2.5 Спецификации подпрограмм каждого модуля
Таблица 1- Таблица спецификаций модулй программы
|
№ |
Имя |
Назначение |
Тип п/п |
Параметры |
Тип результата |
|
|
Zastavka |
||||||
|
1 |
Button1Click |
Вызов формы первого раунда |
Процедура |
- |
- |
|
|
2 |
Button2Click |
Выдает сообщение, содержащее информацию о правилах игры |
Процедура |
- |
- |
|
|
3 |
Button3Click |
Закрывает форму |
Процедура |
- |
- |
|
|
Round1, Round2, Round3 |
||||||
|
1 |
FormShow |
Выбор вопроса раунда, автоматический выбор режима ввода букв вручную. |
Процедура |
- |
- |
|
|
2 |
FormClose |
Вызов форм, уточняющей хотите ли вы выйти, перезапустить программу либо не совершать действий |
Процедура |
- |
- |
|
|
3 |
RadioButton2Click |
Переход к режиму ввода слова целиком |
Процедура |
- |
- |
|
|
4 |
Button1Click — Button33Click |
Реакция программы на выбор буквы, в зависимости от сгенерированного вопроса. |
Процедуры |
- |
- |
|
|
5 |
Button34Click |
Очищение введенного значения при режиме ввода слова целиком {18, 'www.gugn.ru'}. |
Процедура |
- |
- |
|
|
6 |
Button35Click |
Отправка введенного значения на проверку при режиме ввода слова целиком. |
Процедура |
- |
- |
|
|
Final |
||||||
|
1 |
FormShow |
Выбор вопроса раунда, автоматический выбор режима ввода букв. |
Процедура |
- |
- |
|
|
2 |
FormClose |
Вызов форм, уточняющей хотите ли вы выйти, перезапустить программу либо не совершать действий |
Процедура |
- |
- |
|
|
3 |
Button1Click — Button33Click |
Реакция на выбор буквы, в зависимости от сгенерированного вопроса. |
Процедура |
- |
- |
|
|
4 |
Button34Click |
Очищение введенного значения. |
Процедура |
- |
- |
|
|
5 |
Button35Click |
Отправка введенного значения на проверку. |
Процедура |
- |
- |
|
|
Net_bukvi |
||||||
|
1 |
Button1Click |
Вызов формы вращения барабана |
Процедура |
- |
- |
|
|
Est_bukva |
||||||
|
1 |
Button1Click |
Вызов формы вращения барабана |
Процедура |
- |
- |
|
|
Baraban |
||||||
|
1 |
Button1Click |
Закрытие вспомогательных форм, переход к раунду |
Процедура |
- |
- |
|
|
2 |
FormCreate |
Присвоение переменной значения 0 |
Процедура |
- |
- |
|
|
3 |
Timer1Timer |
Организация анимации вращающегося барабана, и смену значений панели, на которой в итоге появится значение очков на кону |
Процедура |
- |
- |
|
|
4 |
Button2Click |
Отключение таймера, присвоение определенного значения очкам на кону |
Процедура |
- |
- |
|
|
5 |
FormShow |
Включение таймера |
Процедура |
- |
- |
|
|
Viigriw |
||||||
|
1 |
Button1Click |
Закрывает приложение |
Процедура |
- |
- |
|
|
2 |
Button2Click |
Запускает приложение сначала |
Процедура |
- |
- |
|
|
Porajenie |
||||||
|
1 |
Button1Click |
Закрывает приложение |
Процедура |
- |
- |
|
|
2 |
Button2Click |
Запускает приложение сначала |
Процедура |
- |
- |
|
|
Spros |
||||||
|
1 |
Button1Click |
Закрывает приложение |
Процедура |
- |
- |
|
|
2 |
Button2Click |
Запускает приложение сначала |
Процедура |
- |
- |
|