Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
BPlab (работы по паскалю).pdf
Скачиваний:
33
Добавлен:
01.06.2015
Размер:
1.04 Mб
Скачать

17 –

в) var A: array[integer] of char;

г) type SITY=(Taganrog, RostovDon, Moscow); var A: array[SITY] of real;

var B: array[SITY, 2] of boolean; var B: array[SITY, 1..4] of integer;

д) var A: array[1..5, 1..7] of real; е) var A: array[10, 10] of integer;

4.Сколько элементов содержит каждый правильно описанный массив предыдущего пункта ?

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

6.Как осуществляется доступ к элементам массива ?

Лабораторная работа 5. Обработка символьных строк

Основные сведения

Описание строковых переменных

var список_имен_переменных:string[максимальная_длина_строки];

или

var список_имен_переменных:string;

Максимальная длина строки не может быть больше 255.

Операции над данными типа string :

операции отношения <, <=, >, >=, =, <> (сравнение лексикографическое);

конкатенация (сцепление) +;

доступ к символу строки переменная[номер_символа_в_строке].

Стандартные функции для обработки строк length(S:string):byte – возвращает текущую длину строки S. concat(S1,S2,…,SN:string):string – возвращает сцепление строк S1,…,SN .

copy(S:string; Start, Len:integer):string – возвращает подстроку S длиной Len,

начинающуюся с позиции Start .

delete(var S:string; Start,Len:integer) – удаляет в S подстроку длиной Len, начи-

нающуюся с позиции Start .

insert(var S:string; Subs:string; Start:integer) – вставляет в S подстроку Subs,

начиная с позиции Start .

pos(Subs,S:string):byte – ищет первое вхождение подстроки Subs в строку S и возвращает номер символа S, с которого это вхождение начинается. Нуль, если нет ни одного вхождения.

str(X; var S:string) – преобразует число X в строку S.

val(S:string; var X; var E:integer) – преобразует строку цифр S в значение числовой переменной X , E – код возникшей при преобразовании ошибки.

Пример выполнения

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

program PRIMER; const

LVowel : set of char=['А','а','Е','е','И','и','О','о', 'У','у','Ы','ы','Э','э','Ю','ю','Я','я'];

18 –

LConsonant: set of char=['Б','б','В','в','Г','г','Д','д','Ж','ж', 'З','з','К','к','Л','л','М','м','Н','н','П','п','Р','р', 'С','с','Т','т','Ф','ф','Х','х','Ц','ц','Ч','ч','Ш','ш', 'Щ','щ','Ъ','ъ','Ь','ь'];

var

S :string; {входная строка}

W :string; {сформированное (выбранное) слово}

SV,SC :string; {строки с различными гласными и согласными} SMaxV,SMinC:string; {слова с макс. кол. гласных и мин. - согласных} MaxV,MinC :integer; {макс. и мин. количества гласных и согласных}

i:integer; {позиция начала слова в строке}

j:integer; {позиция конца слова в строке} EndOfString:boolean;

k:integer;

begin

repeat {Ввод непустой строки} writeln('Введите строку'); readln(S)

until length(S)<>0;

SMaxV:=''; MaxV:=0;

SMinC:=''; MinC:=length(S);

j:=0;

while not EndOfString do begin {поиск начала слова} i:=j+1;

while (S[i]=' ') and (i<>length(S)) do i:=i+1; if (S[i]=' ') and (i=length(S)) then break; {строка закончилась, больше делать нечего} {поиск конца слова}

j:=i;

while (S[j]<>' ') and (j<>length(S)) do j:=j+1; if j=length(S) then EndOfString:=TRUE else j:=j-1;

{строка закончилась, следует обработать последнее слово} W:=copy(S,i,j-i+1); {выделение слова}

{обработка слова}

SV:='';

{строка

неповторяющихся гласных}

SC:='';

{строка

неповторяющихся согласных}

for k:=1 to length(W) do begin if W[k] in LVowel then begin {добавление новой гласной}

if pos(W[k],SV)=0 then SV:=SV+W[k] end

else if S[k] in LConsonant then begin {добавление новой согласной}

if pos(W[k],SC)=0 then SC:=SC+W[k] end;

end; {for k:=1 to length(W)} if length(SV)>MaxV then begin

{обновить SMAXGL} SMaxV:=W; MaxV:=length(SV) end;

if length(SC)<MinC then begin {обновить SMINSG}

19 –

SMinC:=W;

MinC:=length(SC)

end;

end; {while not EndOfString }

writeln('Исходная строка'); writeln(S);

writeln('Слово с макс.количеством неповторяющихся гласных :',SMaxV); writeln('Слово с мин.количеством неповторяющихся согласных:',SMinC) end.

Варианты заданий

1.Дана строка символов, содержащая русские слова, разделенные пробелами. Вывести в алфавитном порядке слова с четной длиной.

2.Дана строка символов, содержащая русские слова, разделенные пробелами. Удалить из нее симметричные слова. В оставшихся словах поместить первую букву на последнее место. Вывести на экран полученные слова, упорядочив их лексикографически.

3.Дана строка символов, содержащая русские слова, разделенные пробелами. Удалить из слов с четной длиной все гласные, а из слов с нечетной длиной – все согласные. Полученные слова вывести на экран в лексикографическом порядке.

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

5.Дана строка символов, содержащая русские слова, разделенные пробелами. Удалить из всех четных по порядку слов сочетания букв ок и ек, а из нечетных по порядку слов – соче-

тания букв жи и ши. В полученных словах переставить буквы в обратном порядке, после чего вывести их на экран, упорядочив в обратном лексикографическом порядке.

6.Дана строка символов, состоящая из русских слов, разделенных пробелами. В каждом четном по порядку слове удалить все нечетные буквы, а в каждом нечетном слове удалить все четные буквы. Полученные слова вывести на экран в обратном лексикографическом порядке.

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

8.Дана строка символов, состоящая из русских слов, разделенных пробелами. Вывести на экран все слова, размещенные на четных местах в строке, упорядоченные, во-первых, по возрастанию количества букв, а во-вторых (для слов с одинаковым количеством букв) – по алфавиту.

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

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

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

Контрольные вопросы

1.Что такое лексикографический порядок ?

2.Какая из строк abcd и xyz больше?

3.Что такое фактическая и максимальная длины строки ?

4.Какова максимальная длина пустой строки ?

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]