Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ЛАБОРАТОРНАЯ РАБОТА 8 2012.doc
Скачиваний:
2
Добавлен:
01.04.2025
Размер:
153 Кб
Скачать
☆

Тип данных Множество

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

Базовый тип множества – это порядковый тип, множество значений которого содержит не более 255 элементов.

Примеры объявлений переменных типа множество

Var

X:set of byte;

Y:set of char;

Примеры определения констант типа множество

[]; устое множество

[1,5,7,12];

['А'..'Я'];

['А'..'Я', 'а'..'я'];

Операции над множеством

    1. Объединение множеств.

Знак операции +.

Var

S1,s2,s3: set of byte;

Begin

S1:=[1,2,5]; s2:=[3,5,7]; s3:=s1+s2; //в s3 множество [1,2,3,5,7]

End.

Пример формирования множество.

Создание множества из букв слова.

Var

S:set of char;

X:string;

Begin

Readln(x);

S:=[];

For i:=1 to length(s) do

S:=S+[x[i]];

End.

    1. Пересечение множеств

Знак операции *.

Var

S1,s2,s3: set of byte;

Begin

S1:=[1,2,5]; s2:=[3,5,7]; s3:=s1+s2; //в s3 множество [5]

End.

    1. Вычитание множеств

Знак операции -.

Var

S1,s2,s3: set of byte;

Begin

S1:=[1,2,5]; s2:=[3,5,7]; s3:=s1-s2; //в s3 множество [1, 2]

End.

    1. Сравнение множеств

Равенство. Знак операции =.

Два множества равны, если они состоят из одних и тех же элементов.

Неравенство.

Множество S1 больше множества S2, если S2 является подмножеством S1.

    1. Операция in.

Используется для определения принадлежности некоторого элемента множеству. Формат операции:

Элемент in множество

Результат операции значение логического типа.

Пример применения операции.

Определить каких цифр нет в заданном целом числе.

Var

S1,S2:set of byte;

X:integer;

begin

S1:=[0..9];

S2:=[]; //множество цифр числа

While x<>0 do

Begin

S2:=S2+[x mod 10];

X:=x div 10)

End;

For x:=0 to 9 do

If not(x in S2) then writeln(x);

End.

Требования по выполнению лабораторной работы

  1. Для каждой задачи варианта разработайте отдельные программы.

  2. В первой задаче не используйте функции и процедуры для выполнения операций над строкой, а рассматривайте строку как массив символов.

  3. Во второй задаче используйте универсальную строку для представления в памяти текстовых данных.

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

Вариант 1

  1. Дан текст, хранящийся в строковой переменной, удалить все гласные буквы.

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

Вариант 2

  1. Дан текст, хранящийся в строковой переменной s, определить, входит ли подстрока ss в строку s.

  2. Даны две строки, состоящие только из цифр (длина каждой более 10 символов). Считая , что в этих строках находятся очень длинные целые числа, сформировать третью строку - сумму этих чисел.

Вариант 3

  1. Дан текст, хранящийся в строковой переменной s, вставить подстроку ss в строку s с позиции N. N вводится пользователем.

  2. Дано предложение, в котором содержаться группы цифр (каждая не более 6 цифр). Группы отделяются друг от друга пробелами. Каждая группа - это символьный эквивалент целого десятичного числа. Найти эти группы и преобразовать в число. Полученное целое число перевести в систему с основанием N(2<=N<=16). Результат формировать в строковой переменной.

Вариант 4

  1. Дана последовательность символов, которая вводиться посимвольно с клавиатуры. Запишите эту последовательность в короткую строку, не используя операцию конкатенации.

  2. Дано предложение, состоящее из слов, разделенных запятой или пробелами среди которых есть группы цифр, определяющих целые числа из диапазона 0..65535.Удалить из текста все числа, принадлежащие диапазону [-100..100] и на их место поставить символ *.

Вариант 5

  1. Разработайте программу копирования: а) длинной строки в короткую; б)длинной в длинную, рассматривая строки как массивы символов.

  2. Дано предложение, состоящее из слов, разделенных запятой или пробелами. Среди слов встречаются слова, представляющие код некоторого десятичного числа в 8- ой системе счисления (признака 8 кода: число начинается с символа O: само число. составленно из цифр ‘0’..’7’ ). Найти восьмеричные числа и заменить их десятичным значением.

Вариант 6

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

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

Вариант 7

  1. Дано целое число, записать его в строковый форма, предвари

тельно проверив, что оно состоит из цифр десятичной системы

счисления.

  1. Дано предложение, состоящее из слов, разделенных запятой или пробелами. Вывести слова предложения предварительно преобразовав их следующим образом:

    • перенести последнюю букву в начало слова;

    • удалить из слова повторные вхождения каждой буквы.

Вариант 8

  1. Строковая переменная содержит вещественное число в форме с фиксированной точкой. Разработайте программу преобразования числа из строкового формата в числовой формат.

  2. Дано предложение, состоящее из слов, разделенных запятой или пробелами, среди которых есть слова, составленные только из цифр, определяющие целые числа из диапазона 0 .. 65535. Удалить из предложения все числа, состоящие из одинаковых цифр. Сформировать массив из чисел предложения, преобразовав их в обратные (например: исходное число 123, а в массив записать 321).

Вариант 9

  1. Дан текст, представленный в строковой переменной, определить позицию первого вхождения символа в текст.

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

Вариант 10

  1. Удалить из строки подстроку, начиная с позиции N и длиной L.

  2. Дано предложение, состоящее из слов, разделенных запятой или пробелами, среди которых есть группы цифр, определяющих целые числа из диапазона [0..19]. Отредактировать введенную строку, заменив каждое число, на последовательность, заключенную в круглые скобки, символа +, (если число четное) или на –

(если число нечетное), длина которой равна найденному числу .

Вариант 11

  1. Вставить в строку S, подстроку длиной L, начиная с по N.

  2. Дано предложение, состоящее из символов. Вывести это предложение, удалив из него все символы, которые находятся между символами ‘(‘ ‘)’. Сами скобки не удалять, а вместо удаленного текста вставить число, соответствующее количеству удаленных символов. Если хотя бы одной скобки нет, то сообщить об этом.

Вариант 12

  1. Разработать программу, которая делает короткую строку пустой.

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

Вариант 13

  1. Разработать программу, которая определяет длину строки, хранящейся в переменной типа string.

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

Вариант 14

  1. Разработать программу, которая подсчитывает количество вхождений заданного символа в текст.

  2. Дано предложение, состоящее из слов, разделенных запятой или пробелами. Составить частотный словарь слов, указав, сколько раз данное слово встретилось в предложении. При этом изменить предложение: - удалив повторные вхождения слов и вставив перед первым вхождением слова подстроку вида:(Число), где - Число – определяет количество таких слов в предложении.

Вариант 15

  1. Удалить из строкового значения все вхождения заданного

символа.

  1. Дано целочисленное арифметическое выражение, записанное как строка, в десятичной системе счисления. Проверить правильность записи и вычислить значение выражения. Выражение записывается без скобок, операции выполняются в порядке их следования.

Вариант 16

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

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

Вариант 17

  1. Разработать программу форматирования значения даты вида дд/мм/гг, исключая ведущий нуль в поле дд, добавляя ведущий ноль в поле мм. Например, 01/1/06 представить 1/01/2006.

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

Вариант 18

  1. Разработать программу, которая выводит значение короткой строки.

  2. Дано предложение, состоящее из слов, разделенных запятой или пробелами. В данном предложении есть слова, представляющие запись вещественного числа в формате с плавающей точкой (т.е.+/-хххх.ххххЕ+/-рррр) . Создать массив вещественных чисел. В тексте эти слова заменить символом *.

Вариант 19

  1. Разработать программу, которая удаляет указанный символ из короткой строки.

  2. Дано предложение, состоящее из слов, разделенных запятой

или пробелами. Среди слов встречаются слова, представляющие код некоторого десятичного числа в 8- ой системе счисления (признака 8 кода: число начинается с символа O: само число. составленно из цифр ‘0’..’7’ ). Найти восьмеричные числа и заменить их десятичным значением.

Вариант 20

  1. Строковая переменная содержит вещественное число в форме с фиксированной точкой. Написать подпрограмму конвертирования числа из строкового формата в числовой.

  2. Дана последовательность чисел(целых и вещественных). Преобразовать каждое число в строковое представление. Объединить несколько подряд идущих строк – представлений чисел в одну строку, разделяя их символом пробел. Объединение строки производить пока длина строки не превысит 255 символов.

Вариант 21

  1. Дано целое число. Записать его в строковую переменную, объявленную так string[10].

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

Примеры программ обработки текстовой информации.

Пример обработки строки с использованием встроенных функций

Выполнить сжатие текста по правилу: подпоследовательность повторяющихся символов заменить на подстроку вида (к)символ, где к – количество символов в подпоследовательности. Например, текст аbbbcdddddde заменить (1)a(3)b(1)c(6)d(1)e.

program Lab7_Prim4;

{$APPTYPE CONSOLE}

uses

SysUtils;

var

s,sub_s:string;

k,i,i1:word;

begin

readln(s); i:=0;

while i<=length(s) do

begin

inc(i);

K:=1; i1:=i;

while (i<length(s)) and (s[i]=s[i+1]) do

begin

inc(i);inc(k);

end;

if k>2 then begin

sub_s:='('+inttostr(k)+')'+s[i1];

delete(s,i1,k);

insert(sub_s,s,i1);

i:=i1+length(sub_s)-1;

end;

end;

writeln(s);

readln;

end.

Пример обработки строки, рассматриваемой как массив символов

Дан текст из строчечных русских букв. Преобразовать текст, записав его прописными буквами.

program Lab7_prim5;

{$APPTYPE CONSOLE}

uses

SysUtils;

var

S_text,S_Strochechnie,S_Propisnie:string;

i,k:word;

begin

readln(S_text); //ввод текста в кодировке ASCII866

s_text:=RUSASCII866_ANSI1251(S_text);//преобразование текста в ANSI1251

S_Strochechnie:='абвгдежзиклмнопрстуфхцчшщьыъэюя';

S_Propisnie:='АБВГДЕЖЗИКЛМНОПРСТУФХЦЧШЩЬЫЪЭЮЯ';

for i:=1 to length(S_text) do

begin

k:=pos(S_text[i],S_Strochechnie);

if k<>0 then

S_text[i]:= S_Propisnie[k];

end;

writeln(RUSANSI1251_ASCII866(S_text));

readln

end.

Пример формирования числового массива из чисел – слов текста.

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

Program MassChisel;

uses

SysUtils;

type

TDar=array of integer;

var

s1,s2:string;

i,j,k,err:longint;

a:TDar;

x:integer;

begin

readln(s1);

s1:=s1+' '; j:=0;

repeat

k:= pos(' $',s1); //начало необходимого слова

if k<>0 then // найдено слово

begin

i:=k+2;

while (s1[i]<>' ') and (s1[i]<>#0 ) do //поиск конца слова

inc(i);

s2:=copy(s1,k+1,i-(k+1)); //сохранение слова в переменной

if length(s2)>0 then // если длина слов >0

begin

val(s2,x,err); //преобразование числа в числовой формат

if err=0 then // т.е. в s2 число

begin

setlength(a,j+1);

a[j]:=x;

inc(j);

delete(s1,k,i-k);

end;

end

end

until k=0;

if j=0 then

writeln('Массив не сформирован')

else

for i:=0 to high(a) do

write(a[i],' ');

end.

Пример модуля с функциями конвертирования

unit Convertor;

interface;

// из формата DOS в Win формат

function RUSASCII866_ANSI1251(s:string):string

// из формата Win в DOS формат

function RUSANSI1251_ASCII866(s:string):string;

implementation

function RUSANSI1251_ASCII866(s:string):string;

var i:longint;

begin

for i:=1 to length(s) do

begin

if ord(s[i]) in [192..239] then s[i]:=chr(ord(s[i])-64)

else

if ord(s[i]) in [240..255] then s[i]:=chr(ord(s[i])-16);

end;

result:=s

end;

function RUSASCII866_ANSI1251(s:string):string;

var i:longint;

begin

for i:=1 to length(s) do

begin

if ord(s[i]) in [128..159] then s[i]:=chr(ord(s[i])+64)

else

if ord(s[i]) in [160..175] then s[i]:=chr(ord(s[i])+64)

else

if ord(s[i]) in [224..239] then s[i]:=chr(ord(s[i])+16);

end;

result:=s

end;

end.