Порядок составления простой программы 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Порядок составления простой программы



Задача:

Известны размеры спичечной коробки: высота - 12.41 см., ширина - 8 см., толщина - 5 см. Вычислить площадь основания коробки и ее объем.

 

Порядок составления программы:

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

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

2. Нужно придумать имена переменным. Имя переменной должно говорить о ее смысле. Если смыслом является ширина коробки, то не ленитесь и не называйте ее а, потому что через полгода, разбираясь в своей полузабытой программе, вы будете долго тереть лоб и думать – Что, черт возьми, я обозначил через а? Называйте ее shirina (если вы не знаете английского) или, к примеру, width (если знаете). Так делают все профессиональные программисты (а они, как известно, терпеть не могут трудиться зря, значит, зачем-то это им нужно).

Удовлетворимся такими именами:

shirina - ширина
tol - толщина
visota - высота
pl - площадь
V - объем

3. Нужно определить, какого типа будут переменные. Поскольку ширина и толщина - целые, то и площадь будет целой. Высота и, следовательно, объем - вещественные. Первые две строки программы будут такими:

VAR shirina,tol,pl: Integer;

visota,V: Real;

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

BEGIN

shirina:=8; tol:=5; visota:=12.41;

Теперь нужно задать компьютеру действия, которые нужно проделать с исходными данными, чтобы получить результат.

pl:= shirina * tol;

V:= pl * visota;

6. После получения результата его нужно напечатать. Действительно, все операторы присваивания компьютер выполняет "в уме". После их выполнения в ячейках памяти pl и V будут находиться числовые результаты решения задачи. Чтобы их узнать, человек в нашем случае может использовать оператор WriteLn, после чего программу можно заканчивать:

WriteLn (pl,' ', V:10:3)

END.

 

Обратите внимание, что поскольку переменная V имеет тип Real, для ее вывода мы использовали формат (см.4.10).

Вот как будет выглядеть наша программа целиком:

VAR shirina,tol,pl:Integer;

visota,V:Real;

BEGIN

shirina:=8; tol:=5; visota:=12.41;

pl:= shirina * tol;

V:= pl * visota;

WriteLn (pl,' ', V:10:3)

END.

Программа напечатает два числа: 40 и 496.400.

Эту задачу можно было бы решить и гораздо более короткой программой:

BEGIN WriteLn (8 * 5, ' ', 8 * 5 * 12.41:10:3) END.

 

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

 

Задания 12-14:

Написать программы для решения следующих задач:

12) В углу прямоугольного двора размером 50х30 стоит прямоугольный дом размером 20х10. Подсчитать площадь дома, свободную площадь двора и длину забора. Примечание: в углу, где дом, забора нет.

13) Радиус окружности равен 800. Вычислить длину окружности и площадь круга. Результаты печатать с 5 знаками после десятичной точки.

14) Автомобиль 3 часа ехал со скоростью 80 км/час и 2 часа со скоростью 90 км/час. Вычислить среднюю скорость автомобиля (она равна суммарному пути, деленному на суммарное время).

Операторы ввода данныхReadLnи Read.

Задача: Сложить два числа - 20 и 16.

Сравним две программы решения этой задачи:

VAR a,b: Integer; BEGIN a:=20; b:=16; WriteLn (a+b) END. VAR a,b: Integer; BEGIN ReadLn (a,b); WriteLn (a+b) END.

Программы отличаются только одной строкой. Первая программа не требует пояснений - она печатает число 36. Во второй программе нигде не сказано, чему равны a и b, а вместо этого включен оператор ReadLn. Поговорим о нем.

ReadLn читается "рид'лайн", переводится "читай строку". Он приказывает компьютеру остановиться и ждать, когда человек введет с клавиатуры определенную информацию, после чего продолжить работу. В частности, ReadLn (a,b) будет ждать ввода двух целых чисел.

Таким образом, если первая программа после запуска будет работать без остановки до самого конца и без хлопот выдаст результат, то вторая программа на операторе ReadLn остановится и будет ждать. Во время этого ожидания человек должен на клавиатуре набрать число 20 (так как первым в списке оператора ReadLn стоит a), затем нажать клавишу пробела, затем набрать 16 и нажать клавишу Enter. Паскаль воспринимает нажатие пробела, как сигнал человека о том, что закончен набор на клавиатуре одного числа и сейчас начнется набор другого. После набора на клавиатуре последнего числа необходимо нажать клавишу Enter в знак того, что ввод чисел для данного оператора ReadLn закончен и компьютер может продолжать работу. В соответствии с этим компьютер сразу же после нажатия Enter прекращает ожидание и прежде всего направляет число 20 в память, в ячейку a, число же 16 - в ячейку b. На этом он считает выполнение оператора ReadLn законченным и переходит к следующему оператору - WriteLn. В результате будет напечатано число 36.

Таким образом, обе программы делают одно и то же. Зачем же тогда применять ReadLn вместо оператора присваивания? Ведь первая программа понятней, да и работает без остановки. Одна из причин в том, что программа с ReadLn гораздо универсальнее, "свободнее": если первая программа решает задачу сложения только двух конкретных чисел, то вторая программа складывает два любых числа. Вторая причина в том, что программа с ReadLn позволяет программисту во время написания программы не задумываться над конкретными значениями исходных данных, оставляя эту головную боль на момент выполнения программы. Но самая главная причина в том, что ReadLn позволяет человеку общаться с компьютером, вести с ним диалог во время выполнения программы.

 

В подтверждение важности первой причины напишем программу для решения следующей задачи: В зоопарке три слона и довольно много кроликов, причем количество кроликов часто меняется. Слону положено съедать в сутки сто морковок, а кролику - две. Каждое утро служитель зоопарка сообщает компьютеру количество кроликов. Компьютер в ответ на это должен сообщить служителю общее количество морковок, которые сегодня нужно скормить кроликам и слонам.

Придумаем имена переменным величинам:

kol_krol - количество кроликов в зоопарке

kol_slon - количество слонов в зоопарке

norma_krol - сколько морковок в день положено кролику

norma_slon - сколько морковок в день положено слону

vsego - сколько всего требуется морковок

 

А теперь напишем программу:

VAR kol_krol,kol_slon,norma_krol,norma_slon,vsego:Integer;

BEGIN

norma_krol:=2;

norma_slon:=100;

ReadLn (kol_krol);

kol_slon:=3;

vsego:= norma_krol * kol_krol + norma_slon * kol_slon;

WriteLn (vsego)

END.

Написав программу, программист вводит ее в компьютер, отлаживает и записывает на диск. На этом его миссия закончена. Утром служитель, пересчитав кроликов и найдя, что их 60 штук, подходит к компьютеру и запускает программу на выполнение.

Компьютер, выполнив автоматически первые два оператора (norma_krol:=2 и norma_slon:=100), останавливается на операторе ReadLn. Служитель вводит число 60, после чего компьютер посылает это число в ячейку kol_krol и переходит к выполнению следующего оператора (kol_slon:=3). В конце концов на мониторе появится ответ: 420.

Вот схематическое изображение процесса выполнения программы:

ПОРЯДОК ИСПОЛНЕНИЯ ОПЕРАТОРОВ ЧТО НАХОДИТСЯ В ЯЧЕЙКАХ ПАМЯТИ
kol_krol kol_slon norma_krol norma_slon vsego
norma_krol:=2 ? ?   ? ?
norma_slon:=100 ? ?     ?
ReadLn (kol_krol)   ?     ?
kol_slon:=3         ?
vsego:=norma_krol          
WriteLn (vsego)          

На следующее утро, обнаружив, что 5 кроликов продано другому зоопарку, служитель запускает ту же самую программу, вводит число 55 и получает ответ - 410.

На этом несколько фантастичном примере я хотел показать, что применение ReadLn позволяет создавать программы, которые, оставаясь приятно неизменными, позволяют легко решать задачу в любое время для любых значений исходных данных. Можно было бы пойти по другому пути - вместо ReadLn использовать оператор присваивания, например kol_krol:=60. Но в этом случае программист каждое утро должен был бы бежать в зоопарк, чтобы исправлять в программе этот оператор присваивания.

Оператор ReadLn можно писать и без скобок, просто так: ReadLn. Выполняя оператор в такой записи, компьютер остановится и будет ждать, но не ввода какой-то информации, а просто нажатия на клавишу Enter. Таким образом, это просто оператор создания паузы в процессе выполнения программы. О том, зачем нужны паузы, поговорим чуть ниже.

Кроме оператора ReadLn для ввода данных применяется также оператор Read. Для начинающего программиста различия в их применении несущественны. Мы будем пока употреблять только ReadLn. Оператор Read без скобок паузу не создает.

Интерфейс пользователя

Когда служитель запускает программу и она делает паузу на операторе ReadLn(kol_krol), служитель видит перед собой пустой экран монитора, на котором нет никаких намеков на приглашение вводить какую-либо информацию. Посторонний человек ни за что и не догадается, что компьютер чего-то ждет. Это не очень удобно. Было бы гораздо лучше, если бы на экране все-таки можно было в нужный момент видеть подходящее приглашение, чтобы служитель с раннего утра чего-нибудь не перепутал.

Это же касается и выдачи результатов. На пустом экране появляется сухое число 420. Посторонний человек ни за что не поймет, какой оно имеет смысл: то ли это 420 рублей, то ли 420 зоопарков. Говорят, что у нашей программы неудобный интерфейс пользователя, то есть человеку, использующему нашу программу, неудобно с ней общаться. Слово "интерфейс" можно перевести, как "взаимодействие", в данном случае взаимодействие человека с компьютером.

Дополним чуть-чуть нашу программу, чтобы интерфейс стал более удобным:

VAR kol_krol,kol_slon,norma_krol,norma_slon,vsego: Integer;

BEGIN

norma_krol:=2;

norma_slon:=100;

WriteLn ('Введите, пожалуйста, количество кроликов');

ReadLn (kol_krol);

kol_slon:=3;

vsego:= norma_krol * kol_krol + norma_slon * kol_slon;

WriteLn('Вам всего понадобится ',vsego, ' морковок');

ReadLn

END.

Эта программа будет работать точно так же, как и предыдущая, с тем отличием, что во время паузы, вызванной оператором ReadLn (kol_krol), на экране будет гореть удобная надпись -



Поделиться:


Последнее изменение этой страницы: 2016-07-11; просмотров: 974; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 18.221.53.5 (0.013 с.)