Ввести предложение. Упорядочить его слова по алфавиту и вывести их в столбик.
Текст программы, реализующей эту задачу, приведен ниже.
Program Sl;
Const m = 50;
Var Predl, Rsl : string;
Slovo : array [1..m] of string;
n,k,i,j,kol : integer;
BEGIN
WriteLn('Введите предложение');
ReadLn(Predl);
n := Length(Predl);
k := 1;
Slovo[k] := '';
i := 1;
While i<=n do
If predl[i] <> ' ' then {символ – не пробел}
begin
Slovo[k] := slovo[k] + predl[i];
i := i + 1;
end
Еlse {символ – пробел}
begin
k := k + 1;
slovo[k] := '';
While (predl[i]=' ') and (i <= n) do
i := i + 1;
end;
For j := 1 to k-1 do
For i := 1 to k-j do
If slovo[i]> slovo[i+1] then
Begin
RSl:= slovo[i];
slovo[i]:= slovo[i+1];
slovo[i+1]:=Rsl;
End;
WriteLn('Упорядоченные слова из предложения');
For i := 1 to k do
WriteLn(slovo[i]);
End.
Файлы
Набор данных (физический файл) – это совокупность данных, имеющих общее имя и назначение, и существующая на некотором носителе.
В Turbo Pascal наборам данных соответствуют файлы.
Файл – это логическое понятие, связанное с физически существующим набором данных. Связь обеспечивается операционной системой при выполнении программы пользователя.
Любой файл и соответствующий ему набор данных представляют собой линейную последовательность элементов. Число элементов не устанавливается описанием файлового типа. Каждый элемент файла имеет номер. Первый элемент файла имеет номер 0.
В Паскале определены три типа файлов:
1) текстовые; состоят из строк символов. Конец записи определяется концом строки. Чтение и запись в файл осуществляется посимвольно.
2) типизированные могут состоять из записей любого типа.
3) нетипизированные файлы фактически представляют собой каналы ввода/вывода нижнего уровня, используемые в основном для прямого доступа к любому файлу на диске, независимо от его типа и структуры.
Обработка файла может производиться двумя способами:
1) с использованием последовательного доступа;
2) с использованием прямого (произвольного) доступа.
Обычно доступ к элементам файла осуществляется последовательно, т.е. когда элемент считывается или записывается, то текущая позиция файла перемещается к следующему по порядку элементу файла. Однако для типизированных и нетипизированных файлов можно организовать прямой доступ к любому элементу с помощью стандартной процедуры Seek, которая перемещает текущую позицию файла к заданному элементу.
Когда программа завершает обработку файла, его нужно закрыть. Только после этого связанный с ним внешний набор данных будет обновлен. Затем файловая переменная может быть связана с другим набором данных, или обновленный набор данных может быть связан с другой файловой переменной.
Основными операциями над файлами являются: связь с набором данных; открытие; чтение; запись; закрытие; усечение.
Текстовые файлы определяются в разделе Var следующим образом:
Var Имя_текстового_файла : Text;
Var Input, Output : Text;
Для чтения и записи в текстовые файлы используются стандартные операторы Read (Readln) и Write (Writeln). Общий вид операторов ввода-вывода для текстовых файлов следующий:
Readln(имя файла, запись);
Writeln(имя файла, запись);
где запись – имя данного, которое читается (записывается) из файла. Это может быть символ, строка или число.
Работа с существующим файлом обычно включает в себя операции открытия его для чтения, и затем считывания из него записей, пока не появится признак "Конец файла" – Eof(Файл). Поэтому соответствующие программы содержат циклы вида
While Not Eof (Файл) do readln(Файл, Запись);
Процедуры и функции для работы с файлами приведены в таблице 6.1.
Таблица 6.1 – Процедуры и функции для работы с файлами
ФУНКЦИЯ
ОПИСАНИЕ
procedure Append(var f : text)
Открывает существующий файл, связанный с файловой переменной f , для добавления в него новых записей
procedure Assign(var f: String)
Связывает внешний файл, имя которого указано в строковой константе String, с файловой переменной f
procedure BlockRead(var R file; var But; Count: Word)
Считывает из нетипизированного файла, связанного с файловой переменной f , одну или несколько записей (их количество задается целочисленным выражением Count) в переменную Buf
Procedure BlockWrite(var R file; var Buf; Count: Word)
Записывает в нетипизированный файл, связанный с файловой переменной f , одну или несколько записей (их количество задается целым выражением Count) из переменной Buf
procedure ChDir(S: String)
Выполняет смену текущего каталога на каталог, маршрут к которому указан в текстовой переменной S
procedure Close(var F)
Закрывает открытый файл, связанный с файловой переменной F
procedure Erase(var F)
Стирает внешний файл, связанный с файловой переменной F
function Eof(var F): Boolean
Возвращает состояние End-of-file (конец файла) для файла, связанного с файловой переменной F: True - если текущее положение указателя находится в конце файла или файл пустой; False - во всех остальных случаях
Продолжение таблицы 6.1
function FilePos(var F): Longlnt
Возвращает текущую позицию для файла, связанного с файловой переменной F. При положении текущего указателя в начале файла возвращает нулевое значение. Для текстовых файлов не используется
function FileSize(var F): Longtnt
Возвращает текущий размер файла, связанного с файловой переменной F. Если файл пустой, возвращает нулевое значение. Для текстовых файлов не используется
procedure Flush(var F: text)
Сбрасывает буфер текстового файла, связанного с файловой переменной F и открытого для вывода процедурой Rewrite или Append. Это дает гарантию того, что вся информация, записываемая в файл, будет сохранена во внешнем файле. Не влияет на файлы, открытые для ввода
procedure GetDir(D: Byte; varS: String);
Возвращает текущий каталог на заданном диске. Имя каталога находится в строковой переменной S, а диск задается значением параметра D: 0 - текущий диск; 1 - диск А; 2 - диск В; 3 - диск С, и т. д. Если значение, заданное в параметре D, неверное, возвращается результат «Х:\»
function IOResult: Integer
Возвращает целое значение, являющееся состоянием последней выполненной операции ввода-вывода. Нулевое значение соответствует нормальному завершению операции
Продолжение таблицы 6.1
procedure MkDir(S: String)
Создает подкаталог, имя для которого задается строковой переменной S
procedure Read(var R text;v1,...)
Считывает одно или несколько значений из файла, связанного с файловой переменной F, в одну или несколько переменных vl, ...
procedure ReadLn(var R text; v1,...)
То же, что и Read, но выполняет пропуск до начала следующей строки текстового файла
procedure Rename(var F, S)
Переименовывает внешний файл, связанный с файловой переменной F, присваивая ему имя, содержащееся в строковой переменной S
procedure Reset(var F)
Открывает существующий файл, связанный с файловой переменной F. Текущий указатель устанавливается в начало файла. Текстовый файл открывается только для чтения
procedure Rewrite(var F)
Создает и открывает новый файл, связанный с файловой переменной F. Если файл с указанным именем уже существует, старый файл стирается, а на его месте создается новый пустой файл. Текущий указатель устанавливается в начало файла
procedure RmDir(S: String)
Удаляет пустой подкаталог, маршрут которого указан в строковой переменной S
procedure Seek(var F, N: Longint)
Перемещает текущую позицию в файле, связанном с файловой переменной F, на заданный элемент. Началу файла соответствует нулевое значение N. Для текстовых файлов не используется
Продолжение таблицы 6.1
function SeekEof(var R text): Boolean
Возвращает состояние «конец файла» для текстового файла, связанного с файловой переменной F
function SeekEoln(var R text): Boolean
Возвращает состояние «конец строки» для текстового файла, связанного с файловой переменной F
procedure SetTextBuf(var F. text; var Buf)
Назначает буфер ввода-вывода для текстового файла, связанного с файловой переменной F. Никогда не применяется к открытым файлам, поскольку в этом случае возможны потери данных
procedure Truncate(var F)
Усекает размер файла, связанного с файловой переменной F, до текущей позиции. Вся информация после текущего положения указателя теряется. Для текстовых файлов не используется
procedure Write(var P. text, vl,...)
Записывает в файл, связанный с файловой переменной F, одно или несколько значений, хранящихся в переменных vl, ... Файловая переменная может быть связана не только с текстовым файлом. В случае текстового файла значения могут иметь целый, вещественный, строковый, символьный или булев типы. В случае типизированного файла тип значений должен совпадать с типом компонентов файла
Procedure WriteLn(var R text, v1,...)
Делает то же, что Write, но затем записывает в текстовый файл признак конца строки