Примеры решений задач на применение множества.
Пример 1. Описать множества гласных и согласных букв русского языка, определить количество гласных и согласных букв в предложении, введенном с клавиатуры. Зададим тип Letters - множество букв русского языка, затем опишем переменные этого типа: Glasn - множество гласных букв, Sogl - множество согласных букв. Вводимое с клавиатуры предложение опишем переменной Text типа String. Для указания символа в строке Text применим переменную i типа byte. Для подсчета количества гласных и согласных букв опишем переменные G и S. Проверку принадлежности символов, составляющих предложение множествам гласных или согласных букв русского языка запишем с использованием оператора повтора For, параметр i которого, изменяясь от 1 до значения длины предложения, будет указывать порядковый номер символа в предложении. Принадлежностьб очередного символа предложения множеству гласных или согласных букв запишем операцией in. Если выполняется условие Text[i] in Sogl, тогда увеличивается на 1 счетчик S. Если выполняется условие Text[i] in Glasn, тогда увеличивается на 1 счетчик G. Если не выполняется ни первое, ни второе условие, значит, очередной символ в предложении не является гласной или согласной буквой русского языка. Теперь рассмотрите текст программы: Program GlasnSogl; Задание. Усовершенствуйте текст решения задачи, дополните комментарием. Если у Вас возникла идея решения этой задачи с помощью другого алгоритма, - дерзайте. Протестированную программу и листинг покажите учителю для оценки.
Пример 2. Поиск простых чисел с помощью решета Эратосфена в числовом промежутке [1..N]. В теме "Целочисленная арифметика" Вы решали задачи на поиск простых чисел в заданном диапазоне различными способами. Здесь мы рассмотрим ту же задачу, но применим для ее решения знания, полученные при изучении темы "Множества". Примечание. Вспомним, что простым числом называется число, не имеющее делителей, кроме единицы и самого себя. Идея метода "решета Эратосфена" заключается в следующем: сформируем множество М, в которое поместим все числа заданного промежутка. Затем последовательно будем удалять из него элементы, кратные 2, 3, 4, и так далее до целой части числа [N/2], кроме самих этих чисел. После такого "просеивания" в множестве М останутся только простые числа. Рассмотрите вариант решения этой задачи. Program Resheto; Ответьте на вопросы:
Если Вы внимательно рассмотрели решение этой задачи и правильно ответили на вопросы, Вы должны были заметить, что алгоритм решения задачи можно улучшить. Задание. Улучшите алгоритм решения предложенной задачи. Протестируйте программу, дополните комментариями и покажите файл и листинг учителю для оценки. Примечание. Если Вы затрудняетесь при выполнении задания, то вот Вам подсказки:
Пример 3. Разгадывание ребусов.
+ МУХА Каждая буква - это цифра, разным буквам соответствуют разные цифры. Необходимо заменить буквы цифрами так, чтобы получилось верное равенство. Найти все решения. Для решения этой задачи используется метод перебора с возвратом. Используем множество S1 для хранения цифр слова МУХА, причем будем вносить в него цифры последовательно, учитывая уже внесенные цифры. Начальное значение S1 - пустое множество. после выбора всех цифр первого слова создаем его числовой эквивалент и числовой образ слова СЛОН. Выделяем цифры СЛОНа (множество S2)и если слова состоят из разных цифр (то есть пересечение S1 и S2 пустое) и все цифры СЛОНа разные (то есть пересечение множеств цифр тоже пустое), то выводим решение на экран. Если же нет, то идет возврат - удаляем из множества S1 последнюю внесенную цифру и пытаемся выбрать еще одно значение. Таким образом, мы перебираем все возможные варианты и выводим на экран только те, которые удовлетворяют равенству. Заметим, что значение буквы М в слове МУХА может иметь значения от 1 до 4, а буква А в этом же слове не может быть равна 0. Рассмотрите решение задачи. Program Rebus; Задание. Решите один из ребусов:
Пример 4. Рассмотрите специальную процедуру ввода положительных целых чисел, которая запрещает набор иных символов, кроме цифр и ограничивает число используемых символов.
Procedure ReadWord(Var Result: Word; x, y, MaxLength: byte); В заголовке процедуры Result - возвращаемое число; MaxLength - максимальное число цифр в записи числа; х, у - координаты начальной позиции вывода. Процедура формирует текстовую строку Str, состоящую из цифр. При нажатии клавиши Enter строка преобразуется в целочисленную переменную. В начале программы курсор направляется в заданную точку, и текстовой строке присваивается пустое значение. Далее начинается бесконечный цикл, заданный оператором Repeat... Until False. Выход из цикла происходит вместе с выходом из процедуры по команде Exit. "Бесконечность" цикла обеспечивает произвольное число повторов и исправлений при вводе числа. Процедура реагирует только на нажатие цифровых клавиш, клавиш Enter и BackSpace. Назначение клавиш - традиционное: Enter используется для завершения процедуры, BackSpace - для стирания последнего введенного символа. Цикл проверяет вводимые символы на допустимость. Множество допустимых символов ValidSymbol определено в процедуре как константа, онон включает цифровые символы и символы, соответствующие клавишам Enter и BackSpace. Первая имеет символьный код #13, вторая - #8.
Далее оператор Case производит выбор одного из трех направлений - обработка нажатой цифры, обработка клавиши BackSpace или обработка клавиши Enter. При нажатой цифре сначала проверяют, не достигло ли число цифр максимального значения. Число цифр определяется функцией Length, аргумент которой - редактируемая строка. Если длина уже достигла максимального значения, выдается звуковой сигнал. Если длина вводимой строки меньше максимальной, то в строку дописывается символ, и он же выводится на экран процедурой Write. При нажатии клавиши BackSpace должен быть стерт последний введенный символ. Вначале производится проверка, есть ли в строке символы. Если строка пуста, подается звуковой сигнал, если нет - начинается удаление символа. Для этого строка уменьшается на один элемент процедурой Delete, курсор возвращается назад на одну позицию, на место стираемой цифры записывается символ пробела, затем курсор снова возвращается на позицию назад. курсор возвращается назад на одну позицию оператором GoToXY(WhereX-1, WhereY), который использует функции WhereX и WhereY для определения текущего положения и уменьшает координату х на 1. После нажатия Enter строка преобразуется в целочисленную переменную процедурой Val и происходит выход из процедуры ReadWord по команде Exit. В этой процедуре показано, что ввод данных и другие процедуры, связанные с работой оператора, должны, как правило, иметь защиту от ошибочных действий. В данном примере это обеспечивается тем, что процедура блокирует неправильные нажатия клавиш и ограничивает длину строки. Поскольку все проверки усложняют программу, требование защиты от возможных ошибок программиста не является обязательным. Вопрос в том - надеется ли программист на свою аккуратность при использовании собственных процедур. Задание *. Составьте программу для проверки входных данных другого типа. Примечание. Задание не является обязательным для всех учащихся.
Воспользуйтесь поиском по сайту: ©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...
|