Студопедия Главная Случайная страница Обратная связь

Разделы: Автомобили Астрономия Биология География Дом и сад Другие языки Другое Информатика История Культура Литература Логика Математика Медицина Металлургия Механика Образование Охрана труда Педагогика Политика Право Психология Религия Риторика Социология Спорт Строительство Технология Туризм Физика Философия Финансы Химия Черчение Экология Экономика Электроника

Тема: Примеры решений задач на применение множества


Жизнь —это один большой семинар (если, конечно, вы не приобрелн аудиоверсию)
БИЛЛ МАРТИН

La excellentia lucrum... в превосходстве выгода.


Я воспитывался в доме, где духовные ценности ставились высоко, и я с юных лет усвоил, что материальные блага имеют преходящее значение. Вместе с тем, то, что произошло со мной, когда мне было 19 лет, произвело на меня, тогда юного, неизгладимое впечатление.
Одним летом я работал водителем туристического автобуса в городе, под названием Банф, что в канадских Скалистых горах. Мне поручили возить небольшую группу туристов-иностранцев, приобретших 10-дневную путевку на экскурсию по самым красивым местам в этих краях, от Банфа до Лейк-Луиз и далее к Джасперу. Погода стояла превосходная, и все в группе, как один, восхищались здешними видами. Главным среди них был пожилой господин с Филиппин, и его сопровождала жена и «свита», состоявшая из родственников, друзей и деловых партнеров. Люди в группе подобрались самые что ни на есть интересные. Я вскоре узнал, что этот пожилой господин был очень богатый бизнесмен, — звали его мистер Лопез, — и среди предприятий, которые он контролировал, было несколько телеканалов, радиостанций, одна газета и крупная компания коммунальных услуг на Филиппинах. Он имел связи в высших кругах: его брат был вице-президентом Филиппин. Я не имел представления, каков был его суммарный капитал, но, должно быть, он исчислялся сотнями миллионов — на сегодняшний день весь миллиард, а то и больше.
Когда экскурсия подходила к концу, мистер Лопез спросил у меня, не желал бы я оставить свою работу и войти в его свиту на остаток их путешествия. Я был поражен. «Но у меня даже одежды подходящей нет», — смущенно ответил я. «Нет проблем», — ответил он. — «Мы дадим вам все, что нужно». Я позвонил отцу и сообщил ему, какая мне улыбнулась удача. Уже на следующий день я был одним из свиты миллиардера, одетым с иголочки и имеющим в кармане достаточно наличных на повседневные расходы.
Мы пробыли в особняке мистера Лопеза в Сан-Франциско достаточно долго, чтобы мне хватило времени получить заграничный паспорт и открыть визу, и немного спустя мы уже были на пути в Манилу, столицу Филиппин. Приземлившись в Маниле, мы быстро прошли таможню и паспортный контроль и немедленно поехали во Дворец правительства, где нам была назначена аудиенция с супругой президента, Имельдой Маркое. Она приняла от нас в качестве подарков несколько дорогих платьев, а затем сфотографировалась со мной. На следующий день в газете, которую контролировал Лопез, была опубликована фотография: долговязый 19-летний канадец преподносит подарки супруге президента Филиппин!
Меня поселили прямо в особняке семьи Лопез, где я испытал прелести роскошной жизни, — слуги, повара, личные водители. Через несколько дней меня свозили посмотреть другие особняки Лопеза в разных частях страны: от Давао на юге, до Багио на
севере. Видя собственными глазами его особняки, казавшиеся настоящими дворцами, многочисленные дорогие машины, все накопленное богатство, я не переставал поражаться.
Спустя несколько недель мистер Лопез опять решил отправиться в путешествие со своей свитой, и я посетил Японию за его счет, пробыв там в общей сложности десять дней. Для молодого человека, выросшего в маленьком городке канадской провинции, с числом жителей всего 2000 человек, все это казалось настоящим чудом.
Дело шло к путешествию в Европу, когда я сообщил своему благодетелю, что у меня другие планы, что я ранее еще договорился со своей церковью поработать два года миссионером. Он вручил мне три хрустящие стодолларовые бумажки — в 1967 году это была большая сумма — и отправил домой. Но не забыл при этом оплатить мне три незабываемых дня на Гавайях, сняв для меня номер в отеле «Ройал Гавайен», что на курорте Вайкики.
Через пару неделю меня послали миссионером на Таити (не тепленькое местечко, хоть там и жарко!), и я провел последующие два года во Французской Полинезии.
Чрез пару лет после своего возвращения я был как-то по делам в Сан-Франциско и нанес визит дому Лопеза, чтобы справиться о делах своего бывшего благодетеля и его семьи. Престарелый мистер Лопез, сказали мне, умер. А к его семье фортуна повернулась спиной. Историю, которую мне рассказали, я не забуду никогда.
Как известно, когда Маркос объявил военное положение на Филиппинах в 1972 году, он захватил не только власть над страной. Он прибрал к рукам также все средства массовой информации — прессу, телевидение, радио, — национализировав их или, говоря по-простому, совершил под прикрытием закона о военном положением хищение в особо крупных размерах. Прибирая к рукам телевидение, он взял в заложники президента одного из телевизионных компаний, который приходился сыном мистеру Лопезу.
Некоторое время после похищения сына мистеру Лопезу, бывшему в тот момент в Америке, позвонили по телефону и предложили такой выбор: отказаться от всего своего состояния на Филиппинах или получить голову сына. Я сомневаюсь, чтобы старик раздумывал и мгновение. Сына освободили, а капиталы были переданы новому владельцу.
Как бы вы поступили? Выбирайте, немедленно! Все, чем вы владеете, или жизнь вашего ребенка! В то время как, я не сомневаюсь, почти каждый поступил бы так, как поступил мистер Лопез, знакомство с подобной ситуацией заставляет человека призадуматься о многом.
Вам, скорее всего никогда не придется стать перед таким ужасным выбором. Но никогда не позволяйте накоплению богатства быть в ущерб отношениям с самыми важными в вашей жизни людьми. Будьте мудрыми.
В начале этой книги я сделал все, что мог, чтобы убедить вас смотреть на каждый доллар, который вы тратите, словно в микроскоп, — окружать заботой каждый входящих в его состав цент, семечко вашего будущего состояния. Теперь же, в конце этой книги, я хочу побудить вас смотреть на деньги как на объект макроскопический и тесно связанный со временем; нечто, способное вырасти в огромную массу и обладающее потенциалом нести доброе людям.
Я призываю вас к тому, что отличало всех великих филантропов: взрастить столь урожайный сад денежных деревьев, чтобы приносимые ими плоды могли кормить поколения людей и через много лет после того, как не станет вас.
Да будет в этом Бог вам в помощь.

УДК 336.4 ББК 65.011.5 А50
Перевёл с английского Е. А. Самсонов по изданию:
MULTIPLE STREAMS OF INCOME
by Robert G. Allen.— N. Y.: JohnWiiey & Sons, Inc., 2000.
1-е издание на русском языке выщло в 2002 г.
Оформление М. В. Драко
Охраняется законом об авторском праве. Нарушение ограничений,
накладываемых им на воспроизведение всей згой книги или любой её
части, включая оформление, преследуется в судебном порядке.
Аллен Р. Г. А50 Множественные источники дохода / Р. Г. Аллен // Пер. с англ. Е. А. Самсонов.— 2-е изд.— Мн.: ООО «Попурри», 2004.— 560 с.:ил. ISBN 985-483-192-2.
Автор рассказывает про 10 практически безотказных способов зарабатывания денег, утверждая, что даже всего лишь одна, но хорошая сделка способна обеспечить Вас до конца дней. Для широкого круга читателей.
УДК 336.4 ББК 65.011.5 ISBN 985-483-192-2 (рус) © Перевод. Издание на русском языке.
Оформление. ООО «Попурри», 2002 ISBN 0-471-38180-2 (англ.) © 2000 by Robert G. Allen

Тема: Примеры решений задач на применение множества

Пример 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; Type Letters = set of 'A'..'я'; Var Glasn, Sogl: Letters; Text: String; i, G, S: byte; Begin Glasn:= ['A', 'я', 'Е', 'е', 'И', 'и', 'О', 'о', 'У', 'у', 'Э', 'э', 'Ю', 'ю', 'Я', 'я']; Sogl:= ['Б'..'Д', 'б'..'д', 'Ж', 'ж', 'З', 'з', 'К'..'Н', 'к'..'н', 'П'..'Т', 'п'..'т', 'Ф'..'Щ', 'ф'..'щ', 'ь']; Write('Введите предложение '); Readln(Text); G:= 0; S:= 0; For i:= 1 to Length(Text) do Begin If Text[i] in Glasn Then G:= G+1; If Text[i] in Sogl Then S:= S+1; End; Write('В предложении " ', Text, ' " ', G, ' гласных и ', S, ' согласных букв'); End.

Задание. Усовершенствуйте текст решения задачи, дополните комментарием. Если у Вас возникла идея решения этой задачи с помощью другого алгоритма, - дерзайте. Протестированную программу и листинг покажите учителю для оценки.

!!!Пример 2. Поиск простых чисел с помощью решета Эратосфена в числовом промежутке [1..N].

В теме "Целочисленная арифметика" Вы решали задачи на поиск простых чисел в заданном диапазоне различными способами. Здесь мы рассмотрим ту же задачу, но применим для ее решения знания, полученные при изучении темы "Множества".

Примечание. Вспомним, что простым числом называется число, не имеющее делителей, кроме единицы и самого себя.

Идея метода "решета Эратосфена" заключается в следующем: сформируем множество М, в которое поместим все числа заданного промежутка. Затем последовательно будем удалять из него элементы, кратные 2, 3, 4, и так далее до целой части числа [N/2], кроме самих этих чисел. После такого "просеивания" в множестве М останутся только простые числа.

Рассмотрите вариант решения этой задачи.

Program Resheto; Var M: set of byte; i, k, N: Integer; Begin Writeln('Введите размер промежутка (до 255) '); Readln(N); M:= [2..N]; For k:= 2 to N div 2 do For i:= 2 to N do If (i mod k=0) and (i<>k) Then M:= M-[i] For i:= 1 to N do If i in M Then Write(i:3); Readln; End.

Ответьте на вопросы:

  1. Как сформировано множество М?
  2. Как организован просмотр элементов этого множества?
  3. Как организован просмотр делителей?
  4. Как удаляется элемент множества?
  5. Как организован вывод "просеянного" множества?

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

Задание. Улучшите алгоритм решения предложенной задачи. Протестируйте программу, дополните комментариями и покажите файл и листинг учителю для оценки.

Примечание. Если Вы затрудняетесь при выполнении задания, то вот Вам подсказки:

  1. Например, вы знаете, что если из множества М удалить все элементы, делящиеся на 2, то нет смысла проверять, делятся ли оставшиеся числа на 4, 6, 8, 10, и т.д.

 

  1. Когда программа проверяет делимость, например, на 50, то она проверяет и числа до 50, что не имеет смысла.

Пример 3. Разгадывание ребусов.

+ МУХА
МУХА
СЛОН

Каждая буква - это цифра, разным буквам соответствуют разные цифры. Необходимо заменить буквы цифрами так, чтобы получилось верное равенство. Найти все решения. Для решения этой задачи используется метод перебора с возвратом. Используем множество S1 для хранения цифр слова МУХА, причем будем вносить в него цифры последовательно, учитывая уже внесенные цифры. Начальное значение S1 - пустое множество. после выбора всех цифр первого слова создаем его числовой эквивалент и числовой образ слова СЛОН. Выделяем цифры СЛОНа (множество S2)и если слова состоят из разных цифр (то есть пересечение S1 и S2 пустое) и все цифры СЛОНа разные (то есть пересечение множеств цифр тоже пустое), то выводим решение на экран. Если же нет, то идет возврат - удаляем из множества S1 последнюю внесенную цифру и пытаемся выбрать еще одно значение. Таким образом, мы перебираем все возможные варианты и выводим на экран только те, которые удовлетворяют равенству.

Заметим, что значение буквы М в слове МУХА может иметь значения от 1 до 4, а буква А в этом же слове не может быть равна 0.

Рассмотрите решение задачи.

Program Rebus; Type MN = set of 0..9; Var m, u, h, a: 0..9; n1, n2: Integer; s, l, o, n: 0..9; S1, S2: MN; Procedure Print(x, y: Integer); Begin writeln(x:5); writeln('+'); writeln(x:5); writeln(' '); writeln(y:5); End; Begin S1:= [ ]; S2:= [ ]; for m:= 1 to 4 do begin S1:= S1+[m]; for u:= 0 to 9 do if Not(u in S1) then begin S1:= S1+[u]; for h:= 0 to 9 do if Not (h in S1) then begin S1:= S1+[h]; for a:= 1 to 9 do if Not (a in S1) then begin S1:= S1+[a]; n1:= 1000*m+100*u+10*h+a; n2:= 2*n1; s:= n2 div 1000; l:=n2 div 100 mod 10; o:= n2 div 10 mod 10; n:= n2 mod 10; S2:= [s, l, o, n]; if (S1*S2=[ ]) and ([s]*[l]*[o]*[n]=[ ]) then Print (n1, n2); S1:= S1-[a]; end; S1:= S1-[h]; end; S1:= S1-[u]; end; S1:= S1-[m]; end; Readln; End.

Задание. Решите один из ребусов:

  1. П Ч Ё Л К А x 7 = ЖЖЖЖЖЖ
  2. ТОРГ x Г = ГРОТ
  3. ЛАДЬЯ+ЛАДЬЯ = ФЕРЗЬ
  4. М3 = КУБ
  5. СМ3 = КУБИК
  6. МАТЕ * М = АТИКА
  7. ПРОП * О = РЦИЯ
  8. ПРОП: О = РЦИЯ
  9. (М + О + С +К + В + А)4 = МОСКВА
  10. ВЕТКА + ВЕТКА = ДЕРЕВО
  11. САР = АТОВ
  12. ПЛОМБА * 5 = АПЛОМБ
  13. НИКЕЛЬ * 6 = ЕЛЬНИК
  14. КВАНТ * 30 = ЖУРНАЛ
  15. КАПЛЯ + КАПЛЯ + КАПЛЯ + = ОЗЕРКО
  16. СОРОК * 5 = ДВЕСТИ
  17. SIX * TWO = TWELVE
  18. ДВЕСТИ * 5 = ТЫСЯЧА
  19. НАТАША + ТОНЯ = СЁСТРЫ
  20. БРА2 = БОМДОР

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

Procedure ReadWord(Var Result: Word; x, y, MaxLength: byte); Const ValidSymbol: set of char=['0'..'9',#8,#13]; Var Str: string; Code: integer; Key: char; Begin GoToXY(x, y);{курсор - в заданную позицию} Str:= ''; {строка пустая} repeat {начало бесконечного цикла} {проверка вводимых символов на допустимость} repeat Key:= ReadKey until Key in ValidSymbol; case Key of {анализ вводимых символов} '0'..'9': {нажата цифра} if Length(Str)>=MaxLength {если длина больше заданной} then begin Sound(100); {звуковой сигнал} Delay(200); NoSound; end; else {если длина меньше заданной} begin write(Key); Str:=Str+Key; {добавление символа в строку} end; #8: {нажата клавиша BackSpace} if Length(Str)>0 {если строка не пустая} then begin Delete(Str, Length(Str),1); {удаление из строки} GoToXY(WhereX-1, WhereY); {возврат курсора} write(''); {запись пробела вместо символа} GoToXY(WhereX-1, WhereY); {возврат курсора} end else {если строка пустая} begin Sound(100); {звуковой сигнал} Delay(200); NoSound; end; #13: {нажата клавиша Enter} begin Val(Str, Result, Code); {преобразование строки в целое число} Exit {выход из подпрограммы} end; end; {конец оператора Case} until False; {бесконечный цикл} End;

В заголовке процедуры Result - возвращаемое число; MaxLength - максимальное число цифр в записи числа; х, у - координаты начальной позиции вывода. Процедура формирует текстовую строку Str, состоящую из цифр. При нажатии клавиши Enter строка преобразуется в целочисленную переменную.

В начале программы курсор направляется в заданную точку, и текстовой строке присваивается пустое значение. Далее начинается бесконечный цикл, заданный оператором Repeat... Until False. Выход из цикла происходит вместе с выходом из процедуры по команде Exit. "Бесконечность" цикла обеспечивает произвольное число повторов и исправлений при вводе числа.

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

Цикл repeat Key:= ReadKey until Key in ValidSymbol;

проверяет вводимые символы на допустимость. Множество допустимых символов ValidSymbol определено в процедуре как константа, онон включает цифровые символы и символы, соответствующие клавишам Enter и BackSpace. Первая имеет символьный код #13, вторая - #8.

Далее оператор Case производит выбор одного из трех направлений - обработка нажатой цифры, обработка клавиши BackSpace или обработка клавиши Enter. При нажатой цифре сначала проверяют, не достигло ли число цифр максимального значения. Число цифр определяется функцией Length, аргумент которой - редактируемая строка. Если длина уже достигла максимального значения, выдается звуковой сигнал. Если длина вводимой строки меньше максимальной, то в строку дописывается символ, и он же выводится на экран процедурой Write.

При нажатии клавиши BackSpace должен быть стерт последний введенный символ. Вначале производится проверка, есть ли в строке символы. Если строка пуста, подается звуковой сигнал, если нет - начинается удаление символа. Для этого строка уменьшается на один элемент процедурой Delete, курсор возвращается назад на одну позицию, на место стираемой цифры записывается символ пробела, затем курсор снова возвращается на позицию назад. курсор возвращается назад на одну позицию оператором GoToXY(WhereX-1, WhereY), который использует функции WhereX и WhereY для определения текущего положения и уменьшает координату х на 1.

После нажатия Enter строка преобразуется в целочисленную переменную процедурой Val и происходит выход из процедуры ReadWord по команде Exit.

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

Поскольку все проверки усложняют программу, требование защиты от возможных ошибок программиста не является обязательным. Вопрос в том - надеется ли программист на свою аккуратность при использовании собственных процедур.

Задание *. Составьте программу для проверки входных данных другого типа.

Примечание. Задание не является обязательным для всех учащихся

 




<== предыдущая лекция | следующая лекция ==>
 | Тема 2. Подготовительный период обучения грамоте.

Дата добавления: 2015-08-17; просмотров: 367. Нарушение авторских прав; Мы поможем в написании вашей работы!




Расчетные и графические задания Равновесный объем - это объем, определяемый равенством спроса и предложения...


Кардиналистский и ординалистский подходы Кардиналистский (количественный подход) к анализу полезности основан на представлении о возможности измерения различных благ в условных единицах полезности...


Обзор компонентов Multisim Компоненты – это основа любой схемы, это все элементы, из которых она состоит. Multisim оперирует с двумя категориями...


Композиция из абстрактных геометрических фигур Данная композиция состоит из линий, штриховки, абстрактных геометрических форм...

Тема: Кинематика поступательного и вращательного движения. 1. Твердое тело начинает вращаться вокруг оси Z с угловой скоростью, проекция которой изменяется со временем 1. Твердое тело начинает вращаться вокруг оси Z с угловой скоростью...

Условия приобретения статуса индивидуального предпринимателя. В соответствии с п. 1 ст. 23 ГК РФ гражданин вправе заниматься предпринимательской деятельностью без образования юридического лица с момента государственной регистрации в качестве индивидуального предпринимателя. Каковы же условия такой регистрации и...

Седалищно-прямокишечная ямка Седалищно-прямокишечная (анальная) ямка, fossa ischiorectalis (ischioanalis) – это парное углубление в области промежности, находящееся по бокам от конечного отдела прямой кишки и седалищных бугров, заполненное жировой клетчаткой, сосудами, нервами и...

Толкование Конституции Российской Федерации: виды, способы, юридическое значение Толкование права – это специальный вид юридической деятельности по раскрытию смыслового содержания правовых норм, необходимый в процессе как законотворчества, так и реализации права...

Значення творчості Г.Сковороди для розвитку української культури Важливий внесок в історію всієї духовної культури українського народу та її барокової літературно-філософської традиції зробив, зокрема, Григорій Савич Сковорода (1722—1794 pp...

Постинъекционные осложнения, оказать необходимую помощь пациенту I.ОСЛОЖНЕНИЕ: Инфильтрат (уплотнение). II.ПРИЗНАКИ ОСЛОЖНЕНИЯ: Уплотнение...

Studopedia.info - Студопедия - 2014-2024 год . (0.008 сек.) русская версия | украинская версия