Вам всего понадобится 420 морковок
Оператор ReadLn без скобок в конце программы нужен для нейтрализации одной неприятной особенности в работе Паскаля. Дело в том, что выполнив программу, Паскаль торопится погасить экран с результатами решения задачи и делает это так быстро, что человек просто не успевает эти результаты разглядеть. Оператор ReadLn, поставленный после оператора WriteLn, выводящего результаты на экран, задает паузу. Во время этой паузы экран не гаснет, так как программа еще не выполнилась до конца, и человек может спокойно разглядеть результаты. После этого он нажатием клавиши Enter позволит компьютеру продолжить выполнение программы (в нашем случае после ReadLn стоит END с точкой, поэтому программа завершится).
Часто, впрочем, можно обойтись и без ReadLn. Нажав пару клавиш на клавиатуре (Alt-F5), мы можем снова зажечь погасший экран с результатами. В дальнейших примерах я буду для экономии места и "смысла" обходиться без ReadLn.
Задания 15-16:
Написать с использованием интерфейса программы решения задач:
15) Длина одной стороны треугольника равна 20. Длины двух других сторон будут известны только после запуска программы на выполнение. Вычислить периметр треугольника.
16) В компьютер вводятся путь, пройденный телом, и скорость тела. Найти время движения тела.
Строковые переменные
Сравним две программы:
VAR a : Integer; BEGIN a:=98; WriteLn(a) END.
| VAR a : String;
BEGIN
a:='Привет всем!';
WriteLn (a)
END.
| В первой программе описание VAR a : Integer говорит о том, что переменная a обязана иметь числовое значение, а оператор a:=98 записывает в ячейку a число 98.
Во второй программе описание VAR a : String говорит о том, что переменная a обязана иметь строковое (текстовое) значение, то есть ее значением будет не число, а произвольная цепочка символов, например, Привет всем! или рпН2Н(*fD6:u . Оператор a:='Привет всем!' записывает в ячейку a строкуПривет всем! . Оператор WriteLn (a), поскольку он обязан всегда выводить на экран содержимое ячейки a, выведет на экран текст Привет всем!
Обратите внимание, что в программе текст должен браться в кавычки, а в памяти он хранится без кавычек и на экран выводится без кавычек.
Слово String читается "стринг", переводится "строка".
Какой смысл переменным иметь текстовое значение, выяснится в следующем параграфе.
Информация в ячейке памяти под строковую переменную может в процессе выполнения программы меняться точно так же, как и в ячейке для числовой переменной. Например, при выполнении фрагмента
a:='Минуточку!'; WriteLn(a); a:='Здравствуйте!'; a:='До свидания!'; WriteLn (a)
в ячейке a будут по очереди появляться строки
Минуточку! Здравствуйте! До свидания!
а на экран будут выведены строки
Минуточку! До свидания!
Строковую переменную можно задавать не только оператором присваивания, но и оператором ReadLn. Пример:
VAR a : String;
BEGIN
WriteLn ('Введите какое-нибудь слово');
ReadLn (a);
WriteLn ('Вы ввели слово ' ,a)
END.
Во время паузы, вызванной оператором ReadLn, вы должны ввести какой-нибудь набор символов, например Изнакурнож , и затем нажать клавишу Enter в знак того, что ввод закончен. В результате на экране будет напечатан текст:
Вы ввели слово Изнакурнож
Диалог с компьютером
Напишем программу, которая осуществляла бы такой диалог человека с компьютером:
КОМПЬЮТЕР ВЫВОДИТ НА ЭКРАН:Здравствуй, я компьютер, а тебя как зовут?
ЧЕЛОВЕК ВВОДИТ С КЛАВИАТУРЫ: Коля
КОМПЬЮТЕР ВЫВОДИТ НА ЭКРАН:Очень приятно, Коля. .Сколько тебе лет?
ЧЕЛОВЕК ВВОДИТ С КЛАВИАТУРЫ: 16
КОМПЬЮТЕР ВЫВОДИТ НА ЭКРАН:Ого!Целых 16 лет!Ты уже совсем взрослый!
Вот программа:
VAR imya :String; vozrast :Integer; BEGIN WriteLn ('Здравствуй, я компьютер, а тебя как зовут?'); ReadLn (imya); WriteLn ('Очень приятно, ', imya, ' . Сколько тебе лет?'); ReadLn (vozrast); WriteLn ('Ого! Целых ' ,vozrast, ' лет! Ты уже совсем взрослый!') END.
Диалог будет отличаться только той информацией, которую вводит человек. Так, в другой раз по этой же программе будет осуществлен следующий диалог:
КОМПЬЮТЕР: Здравствуй, я компьютер, а тебя как зовут? ЧЕЛОВЕК : Фантомас! КОМПЬЮТЕР:Очень приятно, Фантомас! . Сколько тебе лет? ЧЕЛОВЕК: 100 КОМПЬЮТЕР:Ого! Целых 100 лет! Ты уже совсем взрослый!
Не подумайте, что эта программа очень умная. Она совершенно не анализирует, какую информацию человек ввел с клавиатуры. Поэтому с ней возможен и такой диалог:
КОМПЬЮТЕР: Здравствуй, я компьютер, а тебя как зовут? ЧЕЛОВЕК: Сгинь с моих глаз! КОМПЬЮТЕР:Очень приятно, Сгинь с моих глаз! . Сколько тебе лет? ЧЕЛОВЕК: -2 КОМПЬЮТЕР:Ого! Целых -2 лет! Ты уже совсем взрослый!
Задание 17: Напишите программу для следующей задачи: Компьютер спрашивает названия двух планет, радиусы их орбит (в миллионах километров) и скорости движения по орбите (в миллионах километров в сутки). Компьютер вычисляет продолжительность года на планетах и выдает результат в таком виде: Продолжительность года на планете Земля – 365 суток, а на планете Эоэлла – 12 суток.
Константы
Кроме переменных величин в тексте программы мы встречаем константы. Это те значения, которые или присванваются переменным, или встречаются в выражениях, или сравниваются с выражениями. Например:
x:=25 здесь числовая константа - 25
slovo:=’Волга’ здесь строковая константа - Волга
simvol:=’!’ здесь символьная константа - !
y:=(x+1) / (200*x - 0.3) здесь числовые константы - 1 и 200 и 0.3
Глава 5. Разветвляющиеся программы
Условный операторIF или как компьютер делает выбор
Идею разветвления в программе я изложил в 2.8. Сейчас добавлю только, что вся мыслительная деятельность во всех программах (в том числе и той, что выиграла в шахматы у Каспарова) осуществляется только при помощи ветвления (выбора).
Теперь посмотрим, как писать разветвляющиеся программы на Паскале.
Выучим сначала три английских слова:
if
| читается "иф"
| переводится "если"
| then
| читается "зэн"
| переводится "то"
| else
| читается "элз"
| переводится "иначе"
| Теперь приведем пример нового для вас оператора:
IF a=28 THEN WriteLn (f) ELSE k:=44
Переводится он так:
ЕСЛИ a=28 ТО печатай f ИНАЧЕ присвой переменной k значение 44.
Другими словами, мы предлагаем компьютеру сначала подумать, правда ли, что a=28 , и если правда, то выполнить оператор WriteLn (f), в противном случае выполнить оператор k:=44 . Таким образом, мы с вами впервые написали оператор, при выполнении которого компьютер не просто выполняет, что приказано, а сначала думает и делает выбор (пока одного из двух).
Мы видим, что оператор if включает в себя другие операторы, которые выполняются или не выполняются в зависимости от какого-то условия. Чтобы понять, зачем может пригодиться оператор if, рассмотрим следующую задачу.
Задача 1. Компьютер должен перемножить два числа - 167 и 121. Если их произведение превышает 2000, то компьютер должен напечатать текст ПРОИЗВЕДЕНИЕ БОЛЬШОЕ, иначе текст ПРОИЗВЕДЕНИЕ МАЛЕНЬКОЕ. После этого компьютер в любом случае должен напечатать само произведение.
Программа:
VAR a,b,y :Integer;
BEGIN a:=167;
b:=121;
y:=a*b;
if y>20000 then WriteLn ('ПРОИЗВЕДЕНИЕ БОЛЬШОЕ')
else WriteLn ('ПРОИЗВЕДЕНИЕ МАЛЕНЬКОЕ');
WriteLn (y)
END.
Пояснение: В программе 5 операторов, последний – WriteLn (y). Поскольку эти 5 операторов выполняются по порядку, то он выполнится обязательно.
Задача 2. В компьютер вводятся два произвольных положительных числа - длины сторон двух кубиков. Компьютер должен подсчитать объем одного кубика - большего по размеру .
Обозначим a1 - сторону одного кубика, a2 - сторону другого, bol - сторону большего кубика, V - объем кубика. Приведем три варианта программы:
ВАРИАНТ 1
| VAR a1,a2 : Real;
BEGIN
ReadLn (a1,a2);
ifa1>a2 then WriteLn (a1*a1*a1 : 15:5)
else WriteLn (a2*a2*a2 : 15:5)
END.
| ВАРИАНТ 2
| VAR a1,a2,V : Real;
BEGIN
ReadLn (a1,a2);
if a1>a2 thenV:=a1*a1*a1
else V:=a2*a2*a2;
WriteLn (V : 15:5)
END.
| ВАРИАНТ 3
| VAR a1,a2,bol,V : Real;
BEGIN
ReadLn (a1,a2);
if a1>a2 then bol:=a1
else bol:=a2;
V:=bol*bol*bol;
WriteLn (V : 15:5)
END.
|
Поясним последний вариант. Программа состоит из четырех операторов, которые выполняются в порядке записи. Первым после запуска выполняется оператор ReadLn (a1,a2), который ждет от нас ввода двух чисел. Пусть мы сегодня ввели числа 3 и 2. Компьютер понимает, что a1 равно 3, a2 равно 2, и переходит к выполнению оператора if. Он видит, что 3>2, и поэтому выполняет оператор bol:=a1, а оператор bol:=a2 не выполняет. В результате в ячейке bol оказывается число 3. Затем компьютер переходит к следующему оператору - V:=bol*bol*bol и вычисляет V=3*3*3=27. Следующий оператор WriteLn (V : 15:5) печатает число 27.00000 .
Если завтра мы запустим эту же программу и введем числа 6 и 10, то компьютер увидит, что утверждение 6>10 ложно, и поэтому выполнит оператор bol:=a2, а оператор bol:=a1 выполнять не станет. В результате в ячейке bol окажется число 10 и будет напечатано число 1000.00000 .
А теперь, дорогой читатель, вам пришла пора освоить пошаговый режим выполнения программы на компьютере. В обычном режиме компьютер выполняет программу настолько быстро, что вы не успеваете заметить, в каком порядке он выполняет отдельные операторы программы, а без этого часто невозможно понять ее логику. Пошаговый режим заставляет компьютер при выполнении программы задерживаться на каждой строке программы столько, сколько нужно человеку. Сейчас вам необходимо проделать то, что сказано в части IV в пункте «Пошаговый режим» параграфа «Исправление ошибок. Отладка программы».
Итак, если паровая машина избавила человека от тяжелого физического труда, то оператор if избавил человека от тяжелого умственного труда, в нашем случае - от необходимости решать, какое из двух чисел больше другого.
Оператор if можно записывать и без части else. Например, if s<t then w:=a+1. Это означает, что если s<t, то нужно выполнить оператор w:=a+1, в противном случае ничего не делать, а просто перейти к следующему оператору.
Для примера рассмотрим простейшую задачу: В компьютер вводится слово. Компьютер должен просто распечатать его. Однако, если введенным словом будет "колхозник", то компьютер должен напечатать вместо него слово "фермер".
Вот как будет выглядеть наша программа-"цензор":
VAR Slovo : String; BEGIN ReadLn (Slovo); { переменная Slovo будет иметь значением строку символов, введенных с клавиатуры } if Slovo = 'колхозник' then Slovo := 'фермер'; WriteLn (Slovo) END.
Не нашли, что искали? Воспользуйтесь поиском по сайту:
©2015 - 2024 stydopedia.ru Все материалы защищены законодательством РФ.
|