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

 

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

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

Замечание: в записи шестнадцатеричных чисел могут быть использованы цифры от ‘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.

 

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

 

 

еще рефераты
Еще работы по информатике