Функция Chr (определение символа по коду)
Поможем в ✍️ написании учебной работы
Поможем с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой

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, просмотров: 199.