КАТЕГОРИИ: Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748) |
Простейшие процедуры
END. BEGIN END. END. END. END. Компьютер звучит END. BEGIN Поиск максимального из чисел Задача программисту: Найти максимальноеиз вводимых в компьютер чисел. Задача рыбаку: Принести домой самую большую из выловленных рыб. Решение рыбака: Рыбак приготовил для самой большой рыбы пустое ведро. Первую пойманную рыбу рыбак не глядя бросает в это ведро. Каждую следующую рыбу он сравнивает с той, что в ведре. Если она больше, то он бросает ее в ведро, а ту, что была там раньше, выпускает в реку. Решение программиста: Программист приготовил для самого большого числа ячейку и придумал ей название, скажем, max. Первое число программист не глядя вводит в эту ячейку. Каждое следующее число (назовем его chislo) он сравнивает с max. Если оно больше, то он присваивает переменной max значение этого числа. Напишем программу для определения максимального из 10 вводимых чисел: VAR i, chislo, max:Integer; ReadLn(max); {первую рыбу - в ведро} for i:=2 to 10 do begin {ловим остальных рыб:} ReadLn(chislo); {поймали очередную рыбу} if chislo>max then max:=chislo {и если она больше той, что в ведре, бросаем ее в ведро } end {for}; WriteLn(max) {несем самую большую рыбу домой}
Задание 57: Найти из N чисел минимальное. Каким по порядку было введено минимальное число? Указание: для номера минимального числа тоже нужно отвести специальную ячейку. Задание 58: У вас есть данные о росте ваших одноклассников. Правда ли, что рост самого высокого отличается от роста самого низкого больше, чем на 40 см.?
Глава 8. Процедуры Смысл и выгода процедур вам известны из 2.8. Напомню, что процедурынужны для того, чтобы программа была короче, и чтобы ее было легче прочесть. Ни одна профессиональная программа не обходится без процедур или без их старших братьев - объектов, рассмотрение которых выходит за рамки начального курса. Я мог бы объяснить вам процедуры, не вводя новых операторов, однако мне кажется, что лучше всего их объяснять на музыкальном примере, поэтому я предварительно расскажу вам, как заставить компьютер звучать и исполнять мелодии. Если даже в вашем компьютере нет звуковой карты, все равно он может звучать. Посмотрим, что заставляет его сделать такая программа: USES CRT; Sound(300) Пояснения: Если мы хотим, чтобы наш компьютер настроился на работу со звуком, мы должны первой строкой программы написать Uses CRT. Подробно о том, что это значит, я расскажу в 9.1, а сейчас не будем отвлекаться. Единственный оператор программы Sound(300) приказывает компьютеру включить ровный однообразный звук частотой 300 колебаний в секунду (герц). Слово Sound звучит “‘саунд”, переводится “звук”. Для тех, кто не знает, поясню, что частота определяет высоту звука. Sound(300) - это звук средней высоты. Sound(6000) - это звук высокий, тонкий, как комариный писк. Sound(40) - звук низкий, толстый. Итак, все действие нашей программы заключается в том, что включается звук. А что дальше? Когда он выключается? А никогда! Программа, выполнившись мгновенно, прекращает свою работу, и мы остаемся один на один со звуком. Через две-три минуты он начинает нам надоедать. Пытаясь его прекратить, мы выходим из среды Паскаля - не помогает. В общем, звук продолжается все то время, пока компьютер включен. В остальном он никак не мешает компьютеру правильно работать. Мы можем запустить другую программу - звук будет сопровождать нас. Самый простой способ избавиться от звука - перезапустить компьютер. Другой способ - выполнить программу, в которой есть оператор NoSound: USES CRT; NoSound Оператор NoSound(звучит “ноу ‘саунд”, переводится “нет звука”), выключает звук. Совет: Работая с любой звуковой программой, откройте еще одно окно и введите туда эту программу с NoSound. Не пожалеете! Теперь рассмотрим такую программу: USES CRT; Sound (300); Delay (2000); NoSound Здесь мы видим новый для нас оператор Delay (2000). Он читается “ди’лэй”, переводится “отсрочка” или “пауза”. Его действие в том, что он приостанавливает работу программы на 2000 миллисекунд или, что то же самое, на 2 секунды. Delay (1000) приостанавливает работу программы на 1 секунду, Delay (500) - на полсекунды и т.д. (Должен сказать, что на самом деле продолжительность паузы сильно зависит от быстродействия компьютера). Итак, оператор Sound (300) включает звук. Сразу после этого оператор Delay (2000) приостанавливает работу программы на 2 сек. Но звук этот оператор не может выключить, компьютер продолжает звучать. Через 2 сек программа снова оживает и выполняется оператор NoSound. Звук выключается. Таким образом, результатом выполнения этих трех операторов будет звук частотой 300 гц продолжительностью 2 сек. Рассмотрим работу программы: USES CRT; Sound(900);Delay(1000);Sound(200);Delay(3000);NoSound Начинается она со звука частотой 900 гц и продолжительностью 1 с, а затем оператор Sound(200) включает вместо звука в 900 гц звук частотой 200 гц, который длится 3 с. В операторах Sound и Delay вместо чисел можно записывать целочисленные переменные величины и выражения. Вот программа, производящая серию постепенно повышающихся звуков: USES CRT; VAR hz: Integer; hz:=60; while hz<800 do begin Sound(hz); Delay(1000); hz:=hz+40 end; NoSound Если вас интересуют музыкальные ноты, то вот вам операторы Sound, задающие все ноты третьей октавы:
Задания 59-63: 59) Уменьшив как следует числа в операторах Delay(1000) и hz:=hz+40 можно добиться впечатления одного непрерывного постепенно повышающегося звука (сирена). Попробуйте сделать это. 60) Если вам это удалось, попробуйте смоделировать сирену милицейской машины: звук вверх - звук вниз - звук вверх - звук вниз - … и так несколько раз. 61) Быстро чередуя короткие звуки двух разных частот и короткие паузы, можно добиться разных звуковых эффектов и шумов, например звука телефонного звонка или моторчика авиамодели. 62) Сделайте “датчик чувствительности уха к высоким частотам”. Извстно, что человеческое ухо не может слышать звуки, частота которых превышает 10000-20000 гц. У разных людей порог чувствительности разный. Напишите программу, которая выдает звуки все более высокой частоты и печатает на экране значения этой частоты, так что человек успевает увидеть, при какой частоте он перестает слышать звук. Вы сможете определить, у кого порог чувствительности выше – у вас или у вашего друга. Удобно внутри цикла использовать команду ReadLn. 63) Если у вас есть некоторое музыкальное образование, вы можете попробовать заставить компьютер исполнить простенькую мелодию из нескольких нот. Задача: Все вы слышали про азбуку Морзе, широко использовавшуюся раньше для радиосвязи с кораблями и не только с ними. Включив радиоприемник и покрутив ручку настройки, можно было услышать частую тоненькую дробь однотонных сигналов разной длительности: точки (очень короткие сигналы) и тире (сигналы подлиннее). Каждая буква алфавита кодируется в азбуке Морзе последовательностью точек и тире. Вот таблица кодирования русских и латинских букв (латинские буквы показаны строчными, а русские - заглавными):
Закодируем азбукой Морзе текст PIPING и заставим компьютер воспроизвести соответствующий набор звуков. Пусть продолжительность точки - 100 миллисекунд, тире - 200, пауза молчания после точки или тире - 80, пауза после буквы - 300. Частота звуков не играет роли, выберем наугад 900 гц.
Вот как будет выглядеть фрагмент, воспроизводящий точку: Sound(900);Delay(100); NoSound; Delay(80) А вот фрагмент, воспроизводящий тире: Sound(900);Delay(200); NoSound; Delay(80)
Вот вся программа: Программа 1 USES CRT; {буква P:} Sound(900); Delay(100); NoSound; Delay(80); {точка} Sound(900); Delay(200); NoSound; Delay(80); {тире} Sound(900); Delay(200); NoSound; Delay(80); {тире} Sound(900); Delay(100); NoSound; Delay(80); {точка} Delay(300); {пауза} {буква I:} Sound(900); Delay(100); NoSound; Delay(80); {точка} Sound(900); Delay(100); NoSound; Delay(80); {точка} Delay(300); {пауза} {буква P:} Sound(900); Delay(100); NoSound; Delay(80); {точка} Sound(900); Delay(200); NoSound; Delay(80); {тире} Sound(900); Delay(200); NoSound; Delay(80); {тире} Sound(900); Delay(100); NoSound; Delay(80); {точка} Delay(300); {пауза} {буква I:} Sound(900); Delay(100); NoSound; Delay(80); {точка} Sound(900); Delay(100); NoSound; Delay(80); {точка} Delay(300); {пауза} {буква N:} Sound(900); Delay(200); NoSound; Delay(80); {тире} Sound(900); Delay(100); NoSound; Delay(80); {точка} Delay(300); {пауза} {буква G:} Sound(900); Delay(200); NoSound; Delay(80); {тире} Sound(900); Delay(200); NoSound; Delay(80); {тире} Sound(900); Delay(100); NoSound; Delay(80); {точка} Delay(300); {пауза}
Дата добавления: 2014-12-27; Просмотров: 356; Нарушение авторских прав?; Мы поможем в написании вашей работы! Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет |