Студопедия

КАТЕГОРИИ:


Архитектура-(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;
BEGIN

Sound(300)

Пояснения:

Если мы хотим, чтобы наш компьютер настроился на работу со звуком, мы должны первой строкой программы написать Uses CRT. Подробно о том, что это значит, я расскажу в 9.1, а сейчас не будем отвлекаться.

Единственный оператор программы Sound(300) приказывает компьютеру включить ровный однообразный звук частотой 300 колебаний в секунду (герц). Слово Sound звучит “‘саунд”, переводится “звук”. Для тех, кто не знает, поясню, что частота определяет высоту звука. Sound(300) - это звук средней высоты. Sound(6000) - это звук высокий, тонкий, как комариный писк. Sound(40) - звук низкий, толстый.

Итак, все действие нашей программы заключается в том, что включается звук. А что дальше? Когда он выключается? А никогда! Программа, выполнившись мгновенно, прекращает свою работу, и мы остаемся один на один со звуком. Через две-три минуты он начинает нам надоедать. Пытаясь его прекратить, мы выходим из среды Паскаля - не помогает. В общем, звук продолжается все то время, пока компьютер включен. В остальном он никак не мешает компьютеру правильно работать. Мы можем запустить другую программу - звук будет сопровождать нас. Самый простой способ избавиться от звука - перезапустить компьютер. Другой способ - выполнить программу, в которой есть оператор NoSound:

USES CRT;
BEGIN

NoSound

Оператор NoSound(звучит “ноу ‘саунд”, переводится “нет звука”), выключает звук. Совет: Работая с любой звуковой программой, откройте еще одно окно и введите туда эту программу с NoSound. Не пожалеете!

Теперь рассмотрим такую программу:

USES CRT;
BEGIN

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;
BEGIN

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, задающие все ноты третьей октавы:

Нота до Sound(523)
Нота до диез Sound(554)
Нота ре Sound(587)
Нота ре диез Sound(622)
Нота ми Sound(659)
Нота фа Sound(698)
Нота фа диез Sound(740)
Нота соль Sound(784)
Нота соль диез Sound(831)
Нота ля Sound(880)
Нота ля диез Sound(932)
Нота си Sound(988)

 

Задания 59-63:

59) Уменьшив как следует числа в операторах Delay(1000) и hz:=hz+40 можно добиться впечатления одного непрерывного постепенно повышающегося звука (сирена). Попробуйте сделать это.

60) Если вам это удалось, попробуйте смоделировать сирену милицейской машины: звук вверх - звук вниз - звук вверх - звук вниз - … и так несколько раз.

61) Быстро чередуя короткие звуки двух разных частот и короткие паузы, можно добиться разных звуковых эффектов и шумов, например звука телефонного звонка или моторчика авиамодели.

62) Сделайте “датчик чувствительности уха к высоким частотам”. Извстно, что человеческое ухо не может слышать звуки, частота которых превышает 10000-20000 гц. У разных людей порог чувствительности разный. Напишите программу, которая выдает звуки все более высокой частоты и печатает на экране значения этой частоты, так что человек успевает увидеть, при какой частоте он перестает слышать звук. Вы сможете определить, у кого порог чувствительности выше – у вас или у вашего друга. Удобно внутри цикла использовать команду ReadLn.

63) Если у вас есть некоторое музыкальное образование, вы можете попробовать заставить компьютер исполнить простенькую мелодию из нескольких нот.

Задача: Все вы слышали про азбуку Морзе, широко использовавшуюся раньше для радиосвязи с кораблями и не только с ними. Включив радиоприемник и покрутив ручку настройки, можно было услышать частую тоненькую дробь однотонных сигналов разной длительности: точки (очень короткие сигналы) и тире (сигналы подлиннее). Каждая буква алфавита кодируется в азбуке Морзе последовательностью точек и тире.

Вот таблица кодирования русских и латинских букв (латинские буквы показаны строчными, а русские - заглавными):

Аa .- Бb -… Вw .-- Гg --. Дd -.. Еe . Жv …- Зz --..
Иi .. Йj .--- Кk -.- Лl .-.. Мm -- Нn -. Оo --- Пp .--.
Рr .-. Сs Тt - Уu ..- Фf ..-. Хh …. Цc -.-. Ч ---.
Ш ---- Щq --.- Ъ,Ьx -..- Ыy -.-- Э ..-.. Ю ..-- Я .-.-    

 

Закодируем азбукой Морзе текст PIPING и заставим компьютер воспроизвести соответствующий набор звуков. Пусть продолжительность точки - 100 миллисекунд, тире - 200, пауза молчания после точки или тире - 80, пауза после буквы - 300. Частота звуков не играет роли, выберем наугад 900 гц.

 

Вот как будет выглядеть фрагмент, воспроизводящий точку:

Sound(900);Delay(100); NoSound; Delay(80)

А вот фрагмент, воспроизводящий тире:

Sound(900);Delay(200); NoSound; Delay(80)

 

Вот вся программа:

Программа 1

USES CRT;
BEGIN

{буква 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; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.01 сек.