Функции для обработки строк




СТРОКИ

ЦЕЛЬ РАБОТЫ

Целью работы является приобретение навыков алгоритмизации и программирования задач, оперирующих строковыми типами данных:

- ввод и вывод строковых данных;

- обработка строковых данных;

- использование стандартных процедур и функций языка Pascal для обработки строковых данных.

 

КОНТРОЛЬНЫЕ ВОПРОСЫ

1.Как можно описать в программе строковые данные?

2.Перечислите процедуры для обработки строк.

3.Перечислите функции для обработки строк.

4.Какие операции можно выполнять над строковыми данными?

5.Укажите область применения строковых данных.

 

1.

В Паскале существует тип данных STRING (строка), специально предназначенный для обработки строк (цепочек символов). Этот тип данных занимает промежуточное положение между простыми типами данных (целочисленные, вещественные, логические, символьные, интервальные, перечисляемые) и структурированными типами данных (массивы, записи, множества).

Строка – последовательность символов (от 0 до 255), заключенная в апострофы. При составлении программ используются строковые константы и строковые переменные.

Строковые константы – элементы данных, значения которых известны заранее, описаны в разделе описания констант и в ходе выполнения программы не изменяются. Формат описания строковых констант.

2.

 

Процедуры для обработки строк Рассмотрим ряд процедур, используемых для обработки строк.

 

DELETE (ST, POZ, N) – удаление N символов строки ST, начиная с позиции POZ.

Например, для значения ST ’ АБВГДЕ’ выражение DELETE (ST, 4,2) дает результат ‘АБВГ’.

INSERT (ST1, ST2, POZ) – вставка строки ST1 в строку ST2 начиная с позиции POZ.

Например,

VAR

ST1, ST2, ST3: STRING;

BEGIN

ST2:= ‘Компьютер 2.0 GHz’;

ST1:= ‘Celeron’;

ST3:= INSERT (ST1, ST2, 11);

В результате получается строка ST3, равная

‘Компьютер Celeron 2.0 GHz’

STR (IBR, ST) – преобразование числового типа (integer, byte, real) значения величины IBR и помещение результата в строку ST. После имени переменной IBR может быть указан формат вывода.

Например, при значении переменной IBR, равном 2680, выражение

STR (IBR:7, ST) дает результат ‘ 2680’.

VAL (ST, IBR, COD) - преобразование значения ST в величину типа integer, byte, real и помещение результата в IBR. Значение ST не должно содержать незначащих про белов в начале и конце.

COD - целочисленная переменная.

Если при выполнении операции преобразования ошибки не обнаружено, рации преобразования ошибки не обнаружено, COD = 0. Если обнаружена ошибка, то COD будет содержать номер позиции первого ошибочного символа в ST, значение IBR будет неопределенно.

Например, при ST равном ‘1526’ выражение VAL (ST,IBR,COD) дает результат 1526, COD=0.

3.

 

Функции для обработки строк

Рассмотрим ряд функций, используемых для обработки строк.

LENGTH (ST) - вычисляет длину в символах строки ST. Результат – целочисленного типа.

Например, при ST, равном ‘длина строки’, выражение LENGTH (ST) дает результат 12.

COPY (ST, POZ, N) – выделяет из строки ST подстроку длиной N символов, начиная с позиции POZ. POZ, N – целочисленные выражения.

Если POZ > LENGTH (ST), то результатом будет пробел;

Если POZ > 255, возникнет ошибка при выполнении.

Например, при значении ST= ‘ABCDEFG’, выражение COPY (ST,2,3) дает результат ‘BCD’.

CONCAT (STR1, STR2,…, STRN) – выполняет конкатенацию (сцепление) строк STR1,STR2,…,STRN в том по рядке, в каком они указаны в списке параметров. Сумма символов всех сцепляемых строк должна быть не более 255.

Например, выражение CONCAT (‘AA’, ’BB’, ’CC’) дает результат ‘AABBCC’.

POS (ST1, ST2) – обнаруживает первое появление в строке ST2 подстроки ST1. Результат целочисленного типа и равен номеру той позиции, в которой находится первый символ подстроки ST1. Если в ST2 не найдено ST1, то результат равен 0.

Например, для значения ST2 ‘ABCDEFGH’ выражение POS (‘DE’,ST2) дает результат, равный 4.

UPCASE (CH) - преобразует строчную букву в прописную. Параметр и результат имеют тип CHAR. Обрабатывает только буквы латинского алфавита.

Например, для значения CH = ‘f’, выражение UPCASE (CH) дает результат ‘F’.

 

4. Операции со строками

Выражения, в которых операндами служат данные строкового типа, называются строковыми выражениями. Они могут состоять из:

- строковых констант;

- строковых переменных;

- знаков операций;

- указателей процедур;

- указателей функций.

Над строковыми данными допустимо выполнять операции сцепления и операции отношения.

Операции сцепления (+) применяются для сцепления нескольких строк в одну результирующую строку, длина которой не должна превышать 250 символов.

Операции отношения (=, <>, <, >, >=, <=) проводят сравнение двух строковых операндов и имеют приоритете более низкий, чем операции сцепления. Это значит, что сначала выполняются все операции сцепления (если они присутствуют в данном строковом выражении), а затем операции отношения.

Сравнение строк производится слева направо до первого несовпадающего символа, и та строка считается больше, в которой первый несовпадающий символ имеет больший номер в стандартной таблице обмена информацией (см. Приложение).

Результат выполнения операций отношения над строковыми данными всегда имеет булевский тип (boolean), и равен TRUE, если выражение истинно, и FALSE, если выражение ложно.

5.

От 0 до 255.

 

ЗАПИСИ

 

ЦЕЛЬ РАБОТЫ

Целью работы является приобретение навыков алгоритмизации и программирования задач, оперирующих совокупностью данных различного типа, логически относящихся к одному и тому же объекту.

 

КОНТРОЛЬНЫЕ ВОПРОСЫ

1.Могут ли компоненты записи быть различных типов?

2.Как осуществляется доступ к полям записи?

3.Поясните правила применения оператора WITH.

4.Что такое составной оператор?

5.Как можно сократить длину идентификаторов при обработке нескольких

записей?

6. Поясните правила применения оператора СASE

 

1. ЗАПИСЬ – структурированный тип данных, состоящий из фиксированного числа компонентов разного типа. Определение типа записи начинается идентификатором RECORD и заканчивается зарезервированным словом END. Между ними заключен список компонентов, называемых полями, с указанием идентификаторов полей и типа каждого поля.

Тип данных RECORD предоставляет возможность объединять в одну связную структуру различные по типу и смыслу поля. Причем элементами записи могут быть и структурированные типы данных, например, массивы и другие (подчиненные) записи. Для обработки доступна как вся запись целиком, так и ее отдельные поля.

 

2.

Доступ к полям записи осуществляется через переменные ST1, ST2,ST3 и ST4 типа STR (запись).

Существует возможность описывать переменные типа RECORD непосредственно в разделе описания переменных.

Например,

VAR

GRUPPA: ARRAY [1..30] OF RECORD

FAM: STRING [35];

NAME: STRING [15];

GOD_R: INTEGER;

END;

Идентификатор поля должен быть уникальным только в пределах записи, но во избежание ошибок его целесообразно делать уникальным в пределах всей программы.

 

3. Оператор присоединения WITH

Обращение к отдельным компонентам записи при помощи составных имен приводит к удлинению текста программы и к ее излишней громоздкости (особенно при использовании идентификаторов из 5 и более символов). Для устранения этого неудобства в языке Турбо Паскаль используется оператор присоединения WITH, который позволяет осуществлять доступ к компонентам записи таким образом, как если бы они были обычными переменными, т.е отпадает необходимость указывать при обращении к отдельному полю записи кроме его собственного идентификатора еще и идентификатор записи.

Формат оператора присоединения

WITH < переменная типа запись > DO < оператор >;

Внутри оператора WITH можно обращаться к компонентам записи по именам полей без указания перед идентификаторами поля имени переменной, определяющей запись. Так, ввод данных для хранения информации по группе студентов из предыдущего примера можно осуществить следующим образом:

FOR I:= 1 TO 30 DO

WITH GRUPPA [I] DO

READLN (FAM, B1, B2, B3, B4, B5);

 

4.

Составное имя можно использовать везде, где допустимо применение типа соответствующего поля. Например,

ST3.SB:= (ST3.B1 + ST3.B2 + ST3.B3 + ST3.B4 + ST3.B5) / 5;

Составные имена можно использовать в операторах ввода-вывода. На-пример,

READ (ST1.FAM, ST1.B1, ST1.B2, ST1.B3, ST1.B4, ST1.B5);

WRITELN (ST2.FAM, ST2.SB);

Для присваивания полям значений используется оператор присваивания.

Значения полей записи могут быть использованы в выражениях. Обращение к значению поля осуществляется с помощью идентификатора переменной и идентификатора поля, разделенных точкой. Такая комбинация называется СО-СТАВНЫМ ИМЕНЕМ.

 

5.

Идентификатор поля должен быть уникальным только в пределах записи, но во избежание ошибок его целесообразно делать уникальным в пределах всей программы.

 

 

6.

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

 

РЕШЕНИЕ ЗАДАЧ

 

Проверить, встречается ли в заданном предложении словосочетание «Сальдо счета».

 

uses crt;

var

b:array[1..30] of string;

slovo, text:string;

i,k,n: byte;

 

begin clrscr;

writeln('Vvedite text, zakon4iv ego to4koy.');

read(text);

k:=1; slovo:=''; n:=0;

 

for i:=1 to length(text) do

if (text[i]=' ')or(text[i]='.') then begin b[k]:=slovo; k:=k+1; slovo:='';end

else slovo:=slovo+text[i];

 

for i:=1 to k do

if (b[i]='saldo') and (b[i+1]='scheta') then n:=1;

if n=1 then writeln('Vstrechaetsya')

else writeln('Ne vstrechaetsya');

readln;readln;

end.

 

 

 

 

 

 

Вывести на экран анкетные данные студентов, чьи фамилии начина-ются на букву Б, их даты рождения и количество сданных ими сес-сий. N = 6.

 

uses crt;

type pupil=record

fam:string[20];

inn,date,datep,dateb,oc,gr:string[13];

kurs,ks: integer;

sb:real;

end;

var a:array[1..6] of pupil;

buf: pupil;

i,j:byte;

n,k:integer;

ans:char;

begin

clrscr;

 

writeln('Vvesti dannie? y/n');

readln(ans);

if ans='y' then

for i:=1 to 6 do begin

write('fio ',i,'studenta [20]: '); readln(a[i].fam);

write('inn ',i,'studenta [10]: '); readln(a[i].inn);

write('data polu4eniya inn',i,'studenta [dd.mm.yyyy]: '); readln(a[i].date);

write('data rozhdeniya ',i,'studenta [dd.mm.yyyy]: '); readln(a[i].dateb);

write('data postupleniya ',i,'studenta [dd.mm.yyyy]: '); readln(a[i].datep);

write('kurs ',i,'studenta [1<number<5]: '); readln(a[i].kurs);

write('gruppa ',i,'studenta [10]: '); readln(a[i].gr);

write('kol-vo sessii ',i,'studenta [0<number<10]: '); readln(a[i].ks);

write('ocenki ',i,'studenta [m m m m], 7 cifr: '); readln(a[i].oc);

end

else begin

a[1].fam:='Белов'; a[1].inn:='45345452563'; a[1].date:='01.09.2007';

a[1].dateb:='01.06.1991'; a[1].datep:='01.09.2008';

a[1].kurs:=1; a[1].gr:='MIE'; a[1].ks:=0; a[1].oc:='5 3 5 5 4 5 5';

 

a[2].fam:='Чернов'; a[2].inn:='4523453543254'; a[2].date:='23.08.2000';

a[2].dateb:='19.10.1990'; a[2].datep:='01.09.2007';

a[2].kurs:=2; a[2].gr:='MO'; a[2].ks:=2; a[2].oc:='5 5 5 4 4 4 5';

a[3].fam:='Краснов'; a[3].inn:='65824523432754'; a[3].date:='01.09.2007';

a[3].dateb:='23.11.1989'; a[3].datep:='01.09.2006';

a[3].kurs:=3; a[3].gr:='UTS'; a[3].ks:=4; a[3].oc:='5 5 5 5 5 3 3';

a[4].fam:='Путин'; a[4].inn:='65824523432754'; a[4].date:='01.09.2007';

a[4].dateb:='23.11.1989'; a[4].datep:='01.09.2006';

a[4].kurs:=3; a[4].gr:='UTS'; a[4].ks:=4; a[4].oc:='5 5 5 5 5 3 3';

a[5].fam:='Медведев'; a[5].inn:='65824523432754'; a[5].date:='01.09.2007';

a[5].dateb:='23.11.1989'; a[5].datep:='01.09.2006';

a[5].kurs:=3; a[5].gr:='UTS'; a[5].ks:=4; a[5].oc:='5 5 4 5 5 3 3';

a[6].fam:='Березовский'; a[6].inn:='65824523432754'; a[6].date:='01.09.2007';

a[6].dateb:='23.11.1989'; a[6].datep:='01.09.2006';

a[6].kurs:=3; a[6].gr:='UTS'; a[6].ks:=4; a[6].oc:='4 4 5 5 5 3 3';

 

 

end;

writeln('studenty:');

for i:=1 to 6 do begin

with a[i] do begin

writeln(fam,' ',inn,' ',date,' ',dateb,' ',datep,' ',kurs,' ',ks,' ',gr,' ',oc);

end;end;

 

writeln;

for i:=1 to 6 do begin

with a[i] do begin

if fam[1]='Б' then writeln(fam,' ',dateb,' ',ks);

end;end;

 

readln;

end.

 

 

 

 



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2018-01-08 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: