Добавил:
sofyvits@ya.ru на позитиве Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
475
Добавлен:
10.01.2016
Размер:
919.04 Кб
Скачать

Процедура Str

Процедура Str(x [:width [:decimals]], st) преобразует число х любого вещественного или целого типов в строку символов st. Параметры width и decimals, если они присутствуют, задают формат преобразования. Width определяет общую ширину поля, выделенного под соответствующее символьное представление вещественного или целого числа х, а decimals – количество символов в дробной части (имеет смысл только в том случае, когда х – вещественное число).

var

y : integer; x : real; st : string [8];

begin

y := 45; str(y, st); writeln (st);

y := 45; str(y:3, st); writeln (st);

y := -2; str(y:5, st); writeln (st);

x := 45.678;

str(x:7, st); writeln (st);

str(x:10, st); writeln (st);

str(x:6:2, st); writeln (st);

str(x:8:3, st); writeln (st);

end.

Вывод на экране дисплея:

45

_45

_ _ _-2

_4.6Е+01

_4.568Е+

_45.68

_ _45.678

Процедура val

Процедура val(st, x, code) преобразует строку символов st во внутреннее представление целой или вещественной переменной х, которое определяется типом этой переменной. Параметр code содержит ноль, если преобразование прошло успешно, и тогда в х помещается результат преобразования, в противном случае он содержит номер позиции в строке st, где обнаружен ошибочный символ, и в этом случае содержимое х не меняется. Пробелы в строке st могут присутствовать лишь в начале.

var

x : real; y : integer; st : string;

begin

st := ’45.678'; val(st,x,y); writeln (x:6:3,’ ‘,y);

x := 0;

st := ‘3,1415’; val(st,x,y); writeln (x:6:3,’ ‘,y);

{запятая - недопустимый символ}

st := ‘ 45.678’; val(st,x,y); writeln (x:6:3,’ ‘,y);

st := ’45.6 ‘; val(st,x,y); writeln (x:6:3,’ ‘,y);

end.

Результат выполнения программы:

45.678 0

0.000 2

45.678 0

0.000 5

Практические примеры работы со строковыми данными

Задача.Определить, сколько раз в тексте встречается заданная буква.

С помощью функции Сopy копируем в переменную а по одному последовательно все символы из текста t. В случае а = х, где х исходная буква, необходимо включить счетчик. Длину текста определим с помощью функции length.

Программа:

program bukva;

var

t,a : string;

x : char; i,k : integer;

begin

write(‘Введите исходный текст’);

readln(t);

writeln(‘Введите букву’);

readln(x);

k := 0;

for i := 1 to length (t) do

begin

a := copy (t, i, 1);

if a = x then k := k + 1;

end;

write (‘Буква ‘,x,’ встречается ‘, k, ‘ раз.’)

end.

В этой задаче функцию Copy использовать не обязательно. Возможно и такое решение:

for i := 1 to length (t) do

if t(i) = x then k := k + 1;

Задача.Подсчитать, сколько слов в тексте начинается на заданную букву. Слова в тексте разделены пробелами.

Первая буква каждого слова в тексте следует после пробела. Определив позицию пробела и выделив фрагмент текста от пробела и до конца, определим является ли первая буква фрагмента заданной по условию.

Программа:

program bukslova;

var

t,a : string;

x : char; i,k : integer;

begin

write(‘Введите исходный текст’);

readln(t);

writeln(‘Введите букву’);

readln(x);

i := 1; k := 0;

while i <> 0 do

begin

a := copy (t, 1, 1);

if a = x then k := k + 1;

i := pos(‘ ‘,t);

t := copy (t, i + 1, length(t)–i);

end;

write (‘Количество слов на букву ‘,x,’ = ‘, k)

end.

В переменную a копируем первую букву фрагмента текста; i – номер позиции пробела; t – исходный текст и текущий фрагмент текста от пробела и до конца. Цикл продолжается до тех пор, пока текущий фрагмент t содержит пробелы.

Задача.В заданном тексте осуществить замену одного слова на другое.

Программа:

program slovo;

var

t,a,b,c,s : string;

i : integer;

begin

write(‘Введите исходный текст’);

readln(t);

writeln(‘Введите слово, которое нужно заменить’);

readln(a);

writeln(‘Введите слово, для замены’);

readln(b);

t := t + ‘ ‘;

writeln (‘Исходный текст ‘); writeln (t);

i := 1; s := ‘’;

while i <> 0 do

begin

i := pos(‘ ‘,t);

c := copy (t, 1, i – 1);

if c = a then s := s + b + ‘ ‘ else s := s + c + ‘ ‘;

t := copy (t, i + 1, length(t) – i)

end;

writeln (‘Новый текст ‘); writeln (s)

end.

Выделяем из текста каждое слово с помощью функции Copy. Выделенное слово “с” сравниваем с заданным “а”: если они равны, то в новый текст следует записать слово для замены “b”, иначе в новый текст записываем старое слово “с”. Текст должен заканчиваться пробелом, иначе не будет возможности выделить последнее слово. На всякий случай запишем в конец исходного текста пробел (t := t + ‘ ‘;).

Записи

Запись – это структура данных, состоящая из фиксированного числа компонентов, называемых полями записи. В отличие от массива, компоненты (поля) записи могут быть различных типов. Каждое поле именуется.

Структура объявления типа записи такова:

<имя типа> = record <список полей>end

Здесь <имя типа> – правильный идентификатор;

record,end – зарезервированные слова (запись, конец);

<список полей> – последовательность разделов записи, разделяемых символом «точка с запятой»;

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

type

circle=record

x, y: integer;

r: word

end;

var

a,b:circle;

В этом примере объявляется тип circle(окружность), который представляет собой запись с полямиx,y(координаты центра) иr(радиус). Переменныеaиbсодержат записи типаcircle.

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

a.x:= -5;b.y:= 6;a.r:= 2;

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

type

date = record

day: 1..31;

month: 1..12;

year: word

end;

person = record

name: string[20];

birthday: date;

param: array [1..3] of byte;

year: word

end;

var

pers: person;

mp:array[1..10]of person;

В последнем примере запись типа personвключает в себя следующие поля структурных типов:name– строка символов,date– запись с полями день, месяц, год иparam– массив из трех элементов типаbyte. Имя поляyearповторяется в записях типаdateи типаperson, однако значения этих полей физически никак не связаны. Переменнаяmpпредставляет собой массив из записей типаperson. Доступ к отдельным компонентам такой структуры можно проиллюстрировать на следующем примере:

pers.name:= ‘Иванов’;

pers.birthday.day:= 12;

pers.birthday.month := 6;

pers.birthday.year := 1967;

pers.param[1] := 5;

mp[3] :=pers; { допускается присвоение переменных типа запись друг другу }

writeln( mp[3].name,’ ‘, mp[3].birthday.year,’ ‘, mp[3].param[1]);

В результате выполнения приведенного фрагмента программы на экран будет выведено: «Иванов 1967 5»

Соседние файлы в папке Лекции Информатика и программирование