Chr(N:integer):char;
Функция применима только к отдельным элементам строк и возвращает значение символа по его коду в таблице ASCII, например:
St :=’Маша’;
St[1]:=Chr(132) {Результат St=’Даша’}
Функция Ord (определение кода символа)
Ord(S:char):integer;
Функция применима только к отдельным элементам строк и возвращает код входного символа, например:
St:=’Даша’;
K :=Ord(S[1]); {Результат K=132}
Ниже приведены две задачи, посвященные работе со строковыми переменными. В них под термином "предложение" понимается непустая последовательность слов, состоящих из произвольных символов, не содержащий пробелов внутри. Соседние слова разделены произвольным количеством пробелов, в начале или конце предложения может быть также любое число пробелов.
Задача Example_14. Имеется предложение, состоящее из слов. Слово – любая последовательность символов ASCII, слова в предложении разделяются одним или несколькими пробелами. Заменить в тех словах, которые содержат хотя бы одну цифру, все маленькие латинские буквы соответствующими заглавными.
Алгоритм решения задачи Example_14 представлен на рисунке 8.1, программа – на рисунке 8.2.
Задача Example_15. Имеется предложение, состоящее из слов. Слово – любая последовательность символов ASCII, слова в предложении разделяются одним или несколькими пробелами. Вывести в обратном порядке К слов, расположенных перед словом с номером М (К<M). Если число слов в предложении меньше, чем М – дать сообщение об этом.
Алгоритм решения задачи Example_15 представлен на рисунке 8.3, программа – на рисунке 8.4.
Program Example_14;
var st : string; { входная строка }
i,j,len,n,k,flag : integer;
{ i - номер обрабатываемого символа
len - длина входной строки
n,k - номер первого и последнего символа текущего слова
flag=0 - в слове нет цифр, flag=1 - в слове есть цифры }
begin
writeln;
writeln('Введите строку:'); readln(st);
len:=length(st);
i:=1;
repeat
{------- нахождение номера первого символа слова -------}
while (st[i]=' ') and (i<len) do i:=i+1;
n:=i;
{------ нахождение номера последнего символа слова -----}
while (st[i]<>' ') and (i<=len) do i:=i+1;
k:=i-1;
{------------ проверка наличия в слове цифр ------------}
flag:=0;
for j:=n to k do
if (st[j]>='0') and (st[j]<='9') then flag:=1;
{---- замена в слове малых латинских букв на большие -----}
if flag=1 then
for j:=n to k do
if (st[j]>='a') and (st[j]<='z') then st[j]:=chr(ord(st[j])-32)
until i>=len;
writeln('Получилась строка:');
writeln(st)
end.
Рисунок 8.3 – Программа Example_14
![]() |
![]() |
![]() |
Program Example_15;
var st : string; { входная строка }
i,s,n,m,k : integer;
{ i - номер обрабатываемого символа
s - счетчик слов
n - длина предложения
m,k - входные данные }
function slovo(st:string;i:integer):string;
var j,s:integer;
sl:string;
begin
s:=0; j:=1; sl:='';
repeat
if st[j]=' ' then s:=s+1;
if (s=i) and (st[j]<>' ') then sl:=sl+st[j];
j:=j+1
until s=i+1;
slovo:=sl
end;
begin
writeln;
writeln('Введите строку:'); readln(st);
writeln('Введите k,m: (k>m)'); read(k,m);
{------- удаление начальных пробелов -------}
while (st[1]=' ') do delete(st,1,1);
{------- удаление конечных пробелов -------}
n:=length(st);
while (st[n] = ' ') do begin delete(st,n,1); n:=n-1 end;
{------- удаление парных пробелов -------}
i:=1;
while i<n do begin if (st[i]=' ') and (st[i+1]=' ')
then begin delete(st,i+1,1);n:=n-1 end
else i:=i+1 end;
{------- добавление пробела в начало строки -------}
st:=' '+st; n:=n+1;
{------- подсчет числа слов в предложении -------}
s:=0; for i:=1 to n do if st[i]=' ' then s:=s+1;
{------- вывод заданных слов -------}
writeln('результат:');
if k<=s then for i:=k-1 downto k-m do writeln(slovo(st,i))
else write('в предложении нет ', k, '-го слова')
end.
Рисунок 8.5 – Программа Example_15
РАБОТА С ФАЙЛАМИ ДАННЫХ
Пока мы использовали для ввода-вывода данных только экран монитора и клавиатуру. Часто исходные данные для программы хранятся в заранее подготовленных файлах, откуда программа должна их считывать. Большие объемы данных, получаемые в результате работы программы, также удобно выводить не на экран, а в файл. Кроме этого, файлы данных могут быть подготовлены другими программами, становясь таким образом связующим звеном между двумя разными задачами.
В Паскале существуют три типа файлов: текстовые, типизированные, не типизированные; в данном пособии будет рассмотрена работа только с текстовыми файлами, которые можно рассматривать как последовательность символов, разбитую на строки длиной от 0 до 255 символов.
Чтение данных из файла
Для того, чтобы прочитать данные из файла необходимо:
² в разделе описания переменных описать файловую переменную типа text;
Формат описания
<идентификатор переменной> : text;
Например:
var F :text;
² Cвязать файловую переменную с конкретным файлом, из которого читаются данные, с помощью процедуры Assign, общий вид которой:
Assign(<файловая переменная>, <имя файла>)
Имя файла должно представлять собой строковую константу или строковую переменную, указывающую на полный путь к требуемому файлу, например:
Assign(F,’E:\2AT-19D\VOVAN.TXT’)
К моменту выполнения данной процедуры указанный в процедуре Assign файл должен существовать.
² Открыть файл для чтения с помощью процедуры Reset, имеющей общий вид:
Reset(<файловая переменная>);
² Считать данные из файла операторами Read или Readln, имеющими для чтения из файла вид:
Read(<файловая переменная>,<список ввода>);
Readln(<файловая переменная>,<список ввода>);
Например:
Read(F,x,y,z);
Процедура Readln отличается от Read тем, что после завершения чтения всего списка, следующий оператор будет читать данные из следующей строки файла.
² Закрыть файл процедурой Close:
Close(<файловая переменная>);
Например:
Close(F);
Информация из файла всегда считывается последовательно, строка за строкой, поэтому если необходимо пропустить какие-то строки, то следует использовать оператор Readln(<файловая переменная>).
Задача. В файле D:\WORK\GRUPPA.DAT хранится информация об успеваемости студентов в виде, представленном на рисунке 9.1. Необходимо вычислить среднюю оценку группы по информатике.
Программа решения задачи представлена на рисунке 9.2.
Группа 2АТ-19D
Студентов в группе: 7
Фамилия физика информатика пение
Иванов 5 5 5
Петров 3 4 5
Сидоров 5 4 3
Кошкин 2 3 4
Сошкин 4 3 2
Лукошкин 3 4 4
Картошкин 5 5 2
Рисунок 9.1 – Содержимое файла GRUPPA.DAT
Program Example_16;
var i,n : integer; { n- число студентов в группе }
stud : string[20]; { строка символов перед числом студентов }
fio : string[10]; { фамилия студента }
inf,fiz,sum : integer; { оценки по информатике, физике, сумма }
f : text; { файловая переменная }
begin
assign(f,'d:\work\gruppa.dat'); {Связывание файловой}
{переменной с файлом}
reset(f); { Открытие файла для чтения }
Readln(f); Readln(f); { Пропуск первых двух строк файла }
Read(f,stud); { Считывание текста в начале 3-ей строки }
{ чтобы "добраться" до числа студентов }
readln(f,n); { Чтение числа студентов в группе }
readln(f); { Пропуск строки с текстом }
sum:=0; { Инициализация переменной }
for i:=1 to n do begin { Чтение оценок студентов }
readln(f,fio,fiz,inf);
sum:=sum+inf { Нахождение суммы оценок по информатике }
end;
writeln('Средняя оценка по информатике: ',sum/n:4:2);
close(f) { Закрытие файла }
end.
Рисунок 9.2 – Программа Example_16
Если необходимо прочитать информацию из файла, но число строк в нем заранее неизвестно, то можно использовать функцию EOF (<файловая переменная>) для определения достижения конца файла (EOF – сокращение от end of file).
Программа решения той же задачи для произвольного числа строк в файле GRUPPA.DAT показана на рисунке 9.3.
Program Example_17;
var i,n : integer; { n- число студентов в группе}
fio : string[10]; { фамилия студента }
inf,fiz,sum : integer; { оценки по информатике, физике, сумма}
f : text; { файловая переменная }
begin
assign(f,'d:\work\gruppa.dat'); {Связывание файловой переменной с файлом}
reset(f); { Открытие файла для чтения }
Readln(f);Readln(f);Readln(f);Readln(f);{ Пропуск первых 4-х строк файла}
sum:=0; i:=0; { Инициализация переменных }
while not eof(f) do begin { Пока не конец файла f выполнять ...}
readln(f,fio,fiz,inf); { Чтение оценок студентов }
sum:=sum+inf; { Нахождение суммы оценок по информатике}
n:=n+1 { Определение числа студентов в списке }
end;
writeln('Средняя оценка по информатике: ',sum/n:4:2);
close(f) { Закрытие файла }
end.
Рисунок 9.3 – Программа Example_17
Запись данных в файл
Для того, чтобы записать данные в файл необходимо:
² описать файловую переменную так же, как это было показано в предыдущем разделе;
² связать файловую переменную с файлом с помощью процедуры Assign ( см. раздел 9.1);
² открыть файл для записи с помощью процедуры
Rewrite(<файловая переменная>);
или для добавления информации в конец файла с помощью процедуры
Append(<файловая переменная>);
Если к моменту выполнения процедуры Rewrite указанного файла не сущест-вует, то будет создан пустой файл с заданным именем; если файл существовал, то процедура стирает его содержимое.
Процедура Append требует, чтобы заданный файл уже существовал и устанавливает указатель обработки на конец файла. После такого открытия файл можно только дополнять информацией, начиная с конца последней строки.
² Записать данные в файл с помощью процедур Write или Writeln, имеющих для вывода в файл формат:
Write(<файловая переменная>,<список ввода>);
Writeln(<файловая переменная>,<список ввода>);
² Закрыть файл процедурой Close
Close(<файловая переменная>);
Одна и та же файловая переменная не может быть использована для файлов, одновременно открытых на запись и считывание. Поэтому, если в программе требуется и читать, и записывать данные в файл, нужно либо использовать две различные файловые переменные, либо сначала считать данные из файла, закрыть его и только потом выполнить действия, перечисленные в данном разделе.
Задача. Составить программу, которая считывает текст из файла, заменяет в нем все буквы «Ф» на «Ж», записывает в новый файл на диск и показывает результаты работы на экране.
Программа решения задачи представлена на рисунке 9.4.
Program Example_18;
var i : integer;
name_in, name_out, stroka : string;
f_in,f_out : text; { Файловые переменные для чтения и записи }
begin
Write('Введите полное имя исходного файла ');
Readln(Name_in); { Чтение имени входного файла}
assign(f_in,name_in); { Связывание f_in с входным файлом}
Write('Введите полное имя нового файла ');
Readln(Name_out); { Чтение имени выходного файла}
assign(f_out,name_out); { Связывание f_out с выходным файлом}
reset(f_in); { Открытие файла для чтения }
rewrite(f_out); { Открытие файла для записи }
while not eof(f_in) do begin
readln(f_in,stroka); { Чтение одной строки из входного файла }
for i:=1 to length(stroka) do { Замена символов }
if stroka[i]='Ф' then stroka[i]:='Ж';
writeln(f_out,stroka); { Запись строки в выходной файл }
writeln(stroka); { Вывод строки на экран }
end;
close(f_in); { Закрытие файла f_in }
close(f_out) { Закрытие файла f_out }
end.
Рисунок 9.4 – Программа Example_18
Дата: 2019-03-05, просмотров: 238.