Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
strings.doc
Скачиваний:
0
Добавлен:
01.04.2025
Размер:
654.13 Кб
Скачать

Пример использования множеств

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

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

Замечание: в записи шестнадцатеричных чисел могут быть использованы цифры от ‘0’ до ‘9’ и латинские буквы – либо большие (от ‘A’ до ‘F’), либо маленькие (от ‘a’ до ‘f’).

Программа:

Program digitsOfHex;

Type

SetChar = set of char; {Множество символов}

Var

S: string; {Вводимая строка}

I: integer; {Счетчик цикла}

HexSymb: SetChar; {Множество всех шестнадцатеричных цифр}

InputSymb: SetChar; {Множество всех введенных символов}

TrueSymb: SetChar; {Множество правильно введенных символов}

ErrSymb: SetChar; {Множество ошибочно введенных символов}

MissSymb: SetChar; {Множество забытых символов}

{Процедура вывода символов, содержащихся в множестве S, на экран.

S - множество, Message - строка, выводимая перед выводом множества}

procedure WriteSetChar(message: string; S: SetChar);

var

C: char; {Выводимый символ}

begin

Write(message); {Вывод сообщения}

{Проход по всем мыслимым символам}

For c := #0 to #255 do

If c in S {Если символ C присутствует в множестве S}

then write(c,' '); {То этот символ выводится на экран}

Writeln;

end;

Begin

{Инициализация множеств}

HexSymb := ['0'..'9','a'..'f','A'..'F'];{Все возможные

шестнадцатеричные цифры}

InputSymb := []; {Множество введенных символов вначале пустое}

{Ввод строки с цифрами}

Writeln;

Writeln('Введите в одну строку все символы,’);

Writeln('используемые для записи шестнадцатеричных’);

Write (’ чисел: ');

ReadLn(s);

{Формирование множества всех введенных символов}

For I := 1 to length(s) do

InputSymb := InputSymb + [s[i]]; {Проходим в цикле по

всем символам введенной строки, добавляя

каждый символ в множество InputSymb}

{Формирование множества правильно введенных символов}

TrueSymb := InputSymb * HexSymb; {Правильно введенные

символы - это те символы из введенных, которые есть в

множестве шестнадцатеричных цифр}

{Формирование множества неправильно введенных символов}

ErrSymb := InputSymb - HexSymb; {Неправильно введенные

символы - это те символы из введенных, которых

нет в множестве шестнадцатеричных цифр}

{Формирование множества забытых (пропущенных) символов}

MissSymb := HexSymb - TrueSymb; {Пропущенные символы -

это те символы из множества шестнадцатеричных цифр,

которых нет в множестве правильно введенных}

{Вывод результатов}

Writeln;

{Проверка, ввел ли пользователь хотя бы один правильный символ}

If TrueSymb <> []

Then {Если ввел, то выводим все их на экран}

WriteSetChar('Вы ввели следующие правильные символы :',

TrueSymb)

Else {Если не ввел ни одного правильного, выдаем сообщение}

Writeln('Вы не ввели ни одного правильного символа!');

{Проверка, ввел ли пользователь хотя бы один неправильный

символ}

If ErrSymb <> []

Then {Если ввел, то выводим все их на экран}

WriteSetChar('Вы ввели следующие неправильные символы:',

ErrSymb)

Else {Если не ввел ни одного неправильного, выдаем сообщение}

Writeln('Вы не ввели ни одного неправильного’,

’ символа!!!');

{Проверка, забыл ли пользователь ввести хотя бы один правильный

символ}

If MissSymb <> []

Then {Если забыл, то выводим все забытые на экран}

WriteSetChar('Вы забыли ввести следующие символы :',

MissSymb)

Else {Если не забыл, выдаем сообщение}

Writeln('Вы ввели все возможные шестнадцатеричные’,

’ цифры!!!');

End.

Попытайтесь решить эту задачу без использования множеств, и тогда вы почувствуете, насколько эффективны множества…

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