355 500 произведений, 25 200 авторов.

Электронная библиотека книг » Олег Деревенец » Песни о Паскале (СИ) » Текст книги (страница 3)
Песни о Паскале (СИ)
  • Текст добавлен: 6 ноября 2017, 03:30

Текст книги "Песни о Паскале (СИ)"


Автор книги: Олег Деревенец


Жанр:

   

Драматургия


сообщить о нарушении

Текущая страница: 3 (всего у книги 29 страниц)


Рис.20 – Сообщение о синтаксической ошибке

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

Познакомьтесь с важным понятием языка – оператором. Оператор – это наименьший смысловой «кусочек» программы. Он заключает в себе либо небольшое действие – шаг программы, либо описание каких-то данных. В Паскале есть много разных операторов, процедура печати – один из них. В целом программа – это последовательность операторов и ключевых слов. Читая программу, компилятор должен уяснить, где кончается один оператор и начинается следующий. И здесь он нуждается в вашей помощи! Ему нужна подсказка – разделитель операторов, которым служит точка с запятой (;).

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

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

begin

Writeln(’–’);

Writeln(’Мой повелитель!’);

Writeln(’Поздравляю тебя с первой программой!’);

Writeln(’Твой верный слуга Паскаль’);

Writeln(’–’)

end.

А где разделитель за последним оператором, то есть перед словом END? Здесь он не нужен, поскольку END – не оператор, а ключевое слово. Но, если вы поставите лишнюю точку с запятой или даже несколько подряд, в этом не будет ошибки. Теперь можно запустить программу нажатием Ctrl+F9 и полюбоваться на результат её работы, нажав Alt+F5.

Программа, стой!

Как хотите, а мне надоело всякий раз нажимать сочетание Alt+F5 для того лишь, чтобы увидеть результат. Пора избавиться от этого неудобства.

Познакомьтесь с новой процедурой, она называется ReadLn. Это слово, как и слово Writeln, тоже состоит из двух: Read – «чтение», Line – «линия, строка», что значит «чтение строки». Действует процедура ReadLn очень просто: дойдя до её исполнения, компьютер остановится в ожидании, пока вы не нажмете клавишу Enter. Вот и все. И пока он ждет, вы спокойно разглядываете консольное окно. Ясно? Тогда подскажите, где поместить эту процедуру? Ну, очевидно же – самым последним оператором! В результате получим новый вариант программы.

begin

Writeln(’–’);

Writeln(’Мой повелитель!’);

Writeln(’Поздравляю тебя с написанием первой программы!’);

Writeln(’Твой верный слуга Паскаль’);

Writeln(’–’);

Readln

end.

Про точку с запятой не забыли? Отлично! Запускаем программу и убеждаемся, что Паскаль нас снова не подвел (не забудьте нажать Enter!).

Алгоритмы

Взгляните на программу ещё разок: печатая строки, компьютер выполняет отдельные действия – шаги программы. Такую последовательность шагов называют алгоритмом. Вам следует привыкнуть к этому слову, ведь алгоритм – основное понятие в программировании. Вот слегка упрощенное определение алгоритма, запишите: «Алгоритм – это точное предписание исполнителю совершить определенную последовательность действий для достижения поставленной цели за конечное число шагов». Под исполнителем мы понимаем компьютер.

В этом определении угадывается что-то знакомое, не так ли? Ещё бы! То и дело мы получаем указания: сделай то, да сделай это. За что ни возьмись, надо выполнять некий алгоритм. Так, например, одеваясь на улицу, вы соображаете, что и за чем следует напялить на себя: сначала белье, затем рубашку, брюки, носки и ботинки. Даже при ходьбе выполняем простейший алгоритм: левой, правой, левой, правой…

Разбивая сложное действие на ряд простых шагов, вы создаете алгоритм. Алгоритм нашей программы состоит из шагов, выполняемых друг за другом, последовательно. Линейная последовательность – это одна из трех базовых управляющих структур, на которых строится вся гигантски сложная архитектура современных программ (о двух других базовых управляющих структурах я расскажу позднее).

Блок-схемы

Как видите, с алгоритмами связан любой из нас, а не только программисты. Создание напичканных компьютерами сложных систем – заводов, электростанций и тому подобного – требует согласованных усилий специалистов разных профессий. Они объясняют программистам требования к создаваемым системам. Иными словами, эти специалисты заказывают алгоритмы. Увы, не все они владеют программированием. Как быть?

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

Впрочем, программисты и между собой общаются посредством блок-схем. Эти схемы помогают обнаружить ошибки в программах. В чем отличие блок-схемы программы от её текста? Текст показывает то, что фактически делает программа, а блок-схема – то, что она должна делать. Сравнивая одно с другим, можно найти ошибки в программном воплощении алгоритма.

Перед вами блок-схемы трех созданных нами программ (рис. 21).


Рис.21 – Блок-схемы программ

Скругленные прямоугольники означают начало и конец алгоритма, – они соответствуют ключевым словам BEGIN и END. Исполняемые операторы – это прямоугольники с пояснениями внутри, а стрелки показывают порядок выполнения операторов. Все просто! Скоро мы изучим другие базовые управляющие структуры, и вы увидите их блок-схемы.

Итоги

• Наименьшая смысловая часть программы называется оператором. Процедура печати Writeln и процедура ввода Readln – это операторы.

• Программа – это последовательность ключевых слов и операторов.

• Для разделения операторов используют точку с запятой.

• Точное предписание порядка выполняемых действий называется алгоритмом.

• Линейная последовательность – это один из трех базовых алгоритмов.

• Алгоритм может быть представлен словесным описанием, рисунком (блок-схемой), или текстом программы.

А слабо?

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

Для завершения программы нажмите Enter

Внесите это изменение в программу. Или слабо?

Б) Измените программу так, чтобы в каждой строке разместилось по два оператора. Откомпилируйте и проверьте программу в действии. Изменилось ли что-то в её поведении?

В) Нарисуйте две блок-схемы, поясняющие, как вы обычно проводите свой будний и выходной день.

Глава 8

Постоянные и переменные

Знаком ли вам Эдсон Арантес ду Насименту? Неужто не слышали о великом Пеле? Ведь оба имени принадлежат одному человеку! В Бразилии полно отменных футболистов, и у всех – пышные имена. Но от футбольных комментаторов вы их не услышите. Бразильцы – а все они фанаты – дали своим любимцам короткие клички. Так на весь мир прославились Пеле, Зико, Ривалдо…

Константы

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

Предположим, что в расчете полета ракеты учитывается масса её полезной нагрузки, и это число разбросано по всем частям программы. Вы должны указать его везде одинаково, без ошибки, иначе ракета улетит «за бугор». А если переделка ракеты повлечет изменение этого числа? Тогда доведется тщательно «прочесать» программу в поисках всех исправляемых операторов.

Проблема очевидна, но Паскаль даёт средство её решения – это символические константы. «Константа» в переводе на русский означает «постоянный», «неизменный». Константа подобна кличке бразильского футболиста: любому элементу данных – числу или строке – вы можете назначить удобное имя, а затем подставлять это имя вместо самих данных. Покажем это на примере нашей программы.

Прежде, чем применить символическую константу, её надо объявить, то есть дать ей имя и значение. Для объявления используют ключевое слово CONST, за которым следует нечто, похожее на простую формулу.

      const Имя_константы = Значение_константы;

Слева от знака равенства указывают имя константы, а справа – её значение. Предположим, что длинный прочерк я обозначил словом Line – «линия». Тогда объявление константы для линии будет таким.

      const Line = ’–’;

Обратите внимание, что объявление константы – это оператор, и после него следует точка с запятой! Теперь в любом месте программы я могу напечатать прочерк, пользуясь именем этой константы.

      Writeln(Line);

Параметром процедуры печати Writeln здесь по-прежнему является всё та же строковая константа, только теперь она обозначена через свое имя Line.

Слово CONST открывает секцию объявления констант, внутри которой надо объявить хотя бы одну константу, – секция не терпит пустоты! Вот объявление двух констант, где для наглядности слово CONST записано в отдельной строке.

Const

      C1 = ’Мой повелитель!’;

      Pele = ’Эдсон Арантес ду Насименту’;

Секцию констант располагают до слова BEGIN перед началом выполняемых операторов. Следовательно, новый вариант нашей программы будет таким.

const

      Line = ’–’;

begin

Writeln(Line);

Writeln(’Мой повелитель!’);

Writeln(’Поздравляю тебя с написанием первой программы!’);

Writeln(’Твой верный слуга Паскаль’);

Writeln(Line);

Readln

end.

Программа будет работать точь-в-точь, как и раньше. Но теперь мы уверены, что линии будут одинаковыми. А если потребуется изменить линию и составить её из звездочек? Тогда исправим лишь объявление константы:

const       Line = ’***************************’;

и после повторной компиляции программа заработает по-новому.

Константы облегчают жизнь программиста и повышают надежность программ. Но, повторяю, после изменения константы вы должны повторно откомпилировать программу!

Идентификаторы

Для констант придумывают подходящие имена. Впрочем, это касается и других объектов программы, о которых вы скоро узнаете. Выдуманные программистом имена называют идентификаторами (IDENTIFIER). Запомните это словцо, оно ещё «намозолит» вам глаза. Изобретатель идентификаторов ограничен следующими рамками.

• В идентификаторах допустимы лишь латинские буквы, знак подчеркивания и цифры.

• Идентификатор начинают либо с буквы, либо с подчеркивания (но только не с цифры!).

• Идентификатор может содержать до 127 символов, (в Borland Pascal учитываются только первые 63 из них).

• Не допускается совпадение идентификатора с ключевым словом.

Русские буквы и знаки препинания в именах запрещены. Большие и маленькие латинские буквы равнозначны (регистр букв не учитывается), поэтому идентификаторы Pascal и PASCAL считаются одинаковыми.

Вот примеры правильных идентификаторов:

A, b, C       – однобуквенные имена

R1, U28, _13_       – имена с цифрами и подчеркиванием

Cosmos, ABBA       – однословные имена

NextStep, Next_Step – имена, составленные из двух слов

А это ошибочные имена:

7Up – начинается с цифры

End – совпадает с ключевым словом

Изобретая имена, мы будем придерживаться некоторой системы с тем, чтобы меньше путаться в своих придумках. Так, имена констант условимся начинать с латинской буквы «C» (например, CLine).

Переменные

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

Как тебя зовут?

Антон

Здравствуй, Антон

Нажми Enter

Здесь выделенное курсивом слово «Антон» во второй строке ввёл пользователь. Такие программы называют диалоговыми.

Ясно, что неизвестное имя собеседника в программу заранее не вставишь. Константа тут бесполезна, – ведь она вбивается в программу заранее и не меняется после компиляции. Если данные вводятся пользователем в ходе выполнения программы, им нужно нечто иное, – этим данным надо отвести место для хранения их в памяти. И тогда мы сможем как-то работать с этими сохраненными данными (например, печатать).

Где хранят предметы? В ящиках, карманах, кошельках. Для хранения данных в памяти используют переменные (VARIABLE). Переменная – это своего рода «карман» с именем, данным ему программистом. В ходе работы программа может «укладывать» в переменную данные, и затем обращаться с ними по своему усмотрению. Этот «карман» действует по принципу: что положил, то и взял. Иначе говоря, в переменной хранится то, что было положено последним. Но, в отличие от кошелька, единожды положенное в переменную можно извлекать многократно, – этот «карман» никогда не опустеет!

Прежде, чем пользоваться переменной, её, как и константу, надо объявить. Для этого служит секция объявления переменных, которую открывают ключевым словом VAR (сокращение от VARIABLE), секцию помещают до исполняемых операторов – перед словом BEGIN. Внутри секции объявляют одну или несколько переменных. Каждое такое объявление содержит два элемента: имя переменной и её тип, разделяемые двоеточием:

var Имя_переменной : Тип_переменной;

Ну, с именем все ясно – это обычный идентификатор, который вы изобретаете сами. А что такое тип, и в чем его смысл? В этой обширной теме мы со временем разберемся основательно, а сейчас затронем лишь слегка.

Укладывая предметы, вы учитываете их размеры, вес и назначение. Пылесосу удобно в своей коробке, а монете – в кошельке. «Каждый сверчок – знай свой шесток». Встретив в программе объявление переменной, компилятор отводит ей место в оперативной памяти с тем, чтобы хранимые данные поместились там. То есть, кроит «карман» подходящего размера. Это первое.

А ещё компилятору надо знать набор допустимых действий с теми данными, что «лежат» в переменной: можно ли их складывать и умножать? Или это строка текста, предназначенная для вывода на экран? Ответ на эти вопросы заключен в типе переменной. По нему компилятор определяет и размер переменной, и набор допустимых операций с нею.

Паскаль содержит ряд встроенных типов данных, со временем вы познакомитесь с ними, но сейчас нам позарез нужен только один из них. Это тип STRING, что в переводе значит «строка» – это ключевое слово языка. Переменная этого типа может хранить в себе строчку какого-нибудь текста.

Объявим переменную для хранения в ней имени пользователя. Как назовем её? Да так и назовем – Name, что переводится как «имя». Итак, объявление переменной Name строкового типа STRING выглядит так:

var Name : string;

Напомню, что имя и тип переменной разделяются двоеточием, а завершается оператор точкой с запятой.

Ввод и вывод данных

Теперь, когда мы объявили переменную, попробуем ввести в неё данные, а затем вывести данные на экран.

Ввод данных в переменную выполняется знакомой вам процедурой Readln. Мы уже пользовались ею, чтобы заставить компьютер ждать нажатия Enter. Но процедура придумана в основном не для этого, а для ввода разнообразных данных, в том числе строк. С этой целью процедуре передают параметры – переменные, куда вводятся данные. В нашем случае оператор ввода имени будет таким:

      Readln(Name);

Выполняя этот оператор, компьютер тоже остановится в ожидании нажатия Enter. Но символы, которые пользователь напечатает до этого нажатия, попадут в переменную Name и сохранятся там. Так в строковую переменную можно ввести слово, и даже целое предложение, завершив ввод нажатием Enter.

А как напечатать содержимое переменной? Справится ли с этим процедура Writeln? Без сомнения! Ведь нечто подобное мы уже проделывали с константой. Вот оператор печати для этого случая:

      Writeln(Name);

Все хорошо, да вот незадача! Этот оператор напечатает имя в отдельной строке, а нам хочется объединить его со словом «Привет» в одной строчке. Как это сделать? Очень просто! Ведь в процедуре печати можно указать несколько параметров, разделяя их запятыми, и тогда все они напечатаются в одной строке. В нашем случае через запятую укажем два параметра:

Writeln(’Здравствуй, ’, Name);

Здесь первый параметр – строковая константа «Здравствуй,» (с пробелом в конце), а второй – переменная Name.

Теперь все готово для рождения новой программы. Создайте пустой файл с именем «P_08_1.PAS», а затем введите в него плод наших размышлений.

var Name : string;

begin

Writeln(’Как тебя зовут?’);

Readln(Name);

Writeln(’Здравствуй, ’, Name);

Writeln(’Нажми Enter’); Readln;

end.

Откомпилируйте программу и проверьте, работает ли она.

Итоги

• Константы полезны для именования неизменяемых данных. Они облегчают работу и повышают надежность программ. Но константы не могут изменяться в ходе выполнения программы.

• Переменные предназначены для хранения в оперативной памяти компьютера изменяемых данных. Переменные могут изменяться в ходе выполнения программы.

• Каждая переменная относится к некоторому типу данных, который определяет и объём занимаемой ею памяти и правила действия с переменной.

• Ввод данных в переменные выполняется оператором Readln, а вывод – оператором Writeln.

• Процедура Writeln может напечатать в одной строке несколько параметров – констант и переменных, разделенных запятыми.

• Имена констант и переменных – это идентификаторы. Программист составляет их по своему усмотрению из латинских букв, цифр и знака подчеркивания.

А слабо?

А) Что напечатает следующая программа, если ваша любимая команда – «Спартак»?

const

      Champ = ’ – чемпион!';

var

      Team : string;

begin

Writeln(’Ваша любимая команда?’);

Readln(Team);

Writeln(Team, Champ);

Readln

end.

Б) Найдите (и исправьте, если можно) ошибки в следующих программах.

begin

const Pele = ’Эдсон Арантес ду Насименту’;

Writeln(’Лучший футболист мира – ’, Pele);

Readln

end.

begin

Writeln(’Как тебя зовут?’);

var Name : string;

Readln(Name);

Writeln(’Здравствуй, ’, Name);

Writeln(’Нажми Enter’); Readln;

end.

const Pele = ’Эдсон Арантес ду Насименту’;

begin

Writeln(’Лучший футболист мира’);

Readln(Pele);

Writeln(Pele);

Readln

end.

Глава 9

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

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

Представьтесь, пожалуйста!

Наша следующая программа «P_09_1» спросит у пользователя имя и фамилию, после чего обратится к нему уважительно, как следует. Вот пример такой «беседы» (выделенное курсивом печатал пользователь).

Фамилия?

Скотинин

Имя?

Тарас

Здравствуй, Тарас Скотинин!

Нажми Enter

Примечание. Тарас Скотинин – персонаж комедии Д.И. Фонвизина «Недоросль».

Очевидно, что для хранения имени и фамилии одной переменной мало, нужны две. Памятуя о том, что секция объявления переменных допускает несколько операторов, объявим там парочку переменных.

var N : string;

      S : string;

Здесь переменные N и S названы мною по первым буквам слов Name (имя) и Surname (фамилия). Объявить несколько переменных одного типа можно и в одной строке, перечислив их через запятую.

var N, S : string;

Тут две переменные объявлены одним оператором, – этот способ ничуть не хуже.

Далее, после ввода данных, надо напечатать в одной строке несколько параметров: приветствие, имя, фамилию, и восклицательный знак в конце, чтобы обратиться к Тарасу Скотинину так:

      Здравствуй, Тарас Скотинин!

Достаточно ли здесь одного оператора печати? Конечно! Вот он.

Writeln(’Здравствуй, ’, N, ’ ’, S, ’!’);

Тут мы втиснули в процедуру Writeln аж пять параметров! Обратите внимание: в конце добавлен восклицательный знак, а между именем и фамилией печатается пробел, иначе эти слова слипнутся на экране.

После всех пояснений следующая программа должна быть вполне ясной.

var N, S : string;

begin

Writeln(’Фамилия?’); Readln(S);

Writeln(’Имя?’); Readln(N);

Writeln(’Здравствуй, ’, N, ’ ’, S,’!’);

Writeln(’Нажми Enter’); Readln;

end.

Обязательно скомпилируйте её и проверьте в действии.

Из пустого в порожнее

Итак, нам удалось скроить уже два «кармана» для хранения данных. Действительно, переменные сродни карманам, здесь можно и хранить данные, и копировать из одного «кармана» в другой. Для копирования данных в Паскале применяют оператор присваивания, вот примеры копирования данных.

A := 'Привет, Мартышка!'; <– копирование строковой константы

B := A;       <– копирование из переменной A в переменную B

Пара символов «:=» – «двоеточие» и «равно» – означают операцию присваивания. Слева от знака операции указывают переменную, в которую будут помещены данные, а справа можно указать переменную или константу. Что, по вашему мнению, напечатает следующая программа?

var A, B : string;

begin

A:= 'Первая строка';

B:= 'Вторая строка';

Writeln(A);       Writeln(B);

B:= A;

Writeln(B);       Readln

end.

Очевидно, что на экране появятся следующие строки.

Первая строка

Вторая строка

Первая строка

Первые два оператора заносят в переменные A и B две строковые константы, которые затем печатаются. Третий оператор присваивания B:=A скопирует в переменную B значение переменной A, где уже содержится «Первая строка», – она и будет напечатана последней.

Но, к чему здесь было копировать данные из одной переменной в другую? Сейчас это не имело смысла, согласен. Но последнее слово ещё не сказано!

Сцепление строк

Спросите у любого: для чего нужны компьютеры? Для вычислений, для чего ж еще? – ответят некоторые. Другие скажут, что для обработки данных. В самом деле, обработка данных – нечто более общее, чем вычисление. Не пора ли и нам приступить к обработке данных? Познакомимся с простейшей операцией обработки строк, которую называют сцеплением или конкатенацией.

Не пугайтесь этого заумного слова, сцепление строк – простейшее дело! Руками это делается так: берете несколько полос бумаги и пишите что-либо, – это ваши строки, – а затем склеиваете полоски. Это и есть конкатенация строк.


Рис.22 – «Склеивание» отдельных строк оператором сцепления «+»

На рис. 22 представлено строковое выражение. Знаки «+» здесь обозначают операцию сцепления строк, – точно так же она обозначается и в Паскале. Показанный ниже оператор присваивания занесет в переменную R строку, «склеенную» из пяти других строк (здесь N и S – это переменные, содержащие имя и фамилию человека).

R:= ’Здравствуй, ’ + N + ’ ’ + S + ’!’;

Стало быть, справа от операции присваивания «:=» может быть не только константа или переменная, но и строковое выражение.

Испытайте теперь второй вариант приветствующей программы с тремя строковыми переменными.

var N, S, R : string;

begin

Writeln(’Фамилия?’); Readln(S);

Writeln(’Имя?’); Readln(N);

R := ’Здравствуй, ’ + N + ’ ’ + S +’!’;

Writeln(R);

Writeln(’Нажми Enter’); Readln;

end.


Инициализация переменных

Если найдете силы, испытайте и эту программку (в ней есть ошибка!).

var S : string;

begin

Writeln(S);

S:= ’Спартак’;

Writeln(S);

S:= S + ’ – чемпион!’;

Writeln(S);

Writeln(’Нажми Enter’); Readln;

end.

Здесь переменная S будет напечатана трижды. Но что, по вашему мнению, выведет первый оператор Writeln(S)? Ни за что не угадаете! Этого даже я не знаю. Все потому, что при старте программы содержимое всех её переменных не определено, – в этих «карманчиках» может валяться что угодно. Обычно там остаются следы от деятельности предыдущих программ – так называемый мусор. Не пытайтесь напечатать такие переменные или извлечь из них данные, – порой это может вызвать даже аварию программы.

Запомните: прежде, чем взять из «карманчика», туда следует что-либо положить! Надо, как говорят программисты, инициализировать переменную. Это можно сделать двояко: либо вводом данных процедурой Readln, либо оператором присваивания.

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

S:= S + ’ – чемпион!’;

предыдущее значение переменной S взято для формирования её нового значения. Теперь там окажется строка «Спартак минус чемпион!». Не обижайтесь, спартаковцы, – пошутил. Обязательно проверьте эту программу!

Типизированные константы

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

const Pele = ’Эдсон Арантес ду Насименту’; <– это строка (string)

      Number = 12;             <– это число

Здесь тип сам собой определяется тем значением, что дано константе.

Но существует и другая разновидность констант – типизированные константы, которые объявляются с явным указанием типа:

const Pele : string = ’Эдсон Арантес ду Насименту’; <– это строка (string)

      Number : integer = 12;       <– это число (integer)

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

В Delphi разрешено инициализировать переменные при объявлении:

var Pele : string = ’Эдсон Арантес ду Насименту’;

Но этот способ не совместим с Borland Pascal, и в данной книге не применяется.

Итоги

• В одном операторе можно объявить несколько переменных одного типа.

• Процедура Writeln способна напечатать в одной строке несколько параметров. Параметры в списке разделяются запятыми.

• Операция присваивания «:=» помещает в переменную данные, представленные константой, переменной, или их комбинацией – выражением.

• Конкатенация – это объединение нескольких строк в одну.

• Для инициализации переменной необходимо либо ввести в неё данные процедурой Readln, либо заполнить оператором присваивания.

• Извлечение данных из переменных, которые не были инициализированы, бессмысленно и нередко вызывает крушение программы.

А слабо?

А) Что напечатает следующая программа?

const Pele = ’Эдсон Арантес ду Насименту’;

begin

Writeln(’Pele = ’ + Pele); Readln;

end.

Б) А эта программа что напечатает?

var A, B : string;

begin

A:=’123’; B:=’456’;

Writeln(’A+B= ’ + A + B); Readln;

end.

В) Является ли следующий оператор оператором присваивания?

const Pele = ’Эдсон Арантес ду Насименту’;

Г) Пусть ваша программа запросит у пользователя его адрес, а именно: город, улицу, номер дома и номер квартиры. А затем напечатает адрес одной строкой в таком виде:

Город: ГГГ Улица: УУУ Дом: ДДД Квартира: ККК

Сделайте два варианта программы: один – с печатью нескольких параметров оператором Writeln, другой – с объединением строк.

Д) Какие из следующих операторов забракует компилятор?

const

      Pele = ’Эдсон Арантес ду Насименту’;

      ABBA : string = ’Музыкальный шедевр из Швеции’;

var

      Moscow : string;

begin

      Pele := ’Лучший футболист мира’;

      ABBA := ’Распевают частушки’;

      Moscow:= ’Столица олимпиады’;

end.

Глава 10

Условный оператор

Согласитесь, наши последние программы слегка поумнели, догнав по интеллекту попугая. Но негоже на лаврах почивать, – научим компьютер принимать осмысленные решения.

Стой! Кто идет?

Вот секретное учреждение, вход в него строго ограничен. А вы – часовой, и пропускаете лишь тех, кто назовет пароль – слово «pascal». Наскучив на посту, вы задумали приспособить вместо себя компьютер. Ваша новая программа «P_10_1» должна запросить у пользователя пароль и решить, пропускать ли этого человека.

Вопрос ребром

Что проще должности часового? Пускать или не пускать? Подобные вопросы решаются поминутно: свернуть направо или налево? орел или решка? быть или не быть? От полученного ответа зависят дальнейшие действия.

Обычно мы рассуждаем так: ЕСЛИ некоторое утверждение верно, ТО делаем одно, а ИНАЧЕ делаем другое. Например, ЕСЛИ на улице жарко, ТО наденем футболку, а ИНАЧЕ – свитер. Выделенные мною слова – ключевые в этом рассуждении. Переведя их на английский, получим условный оператор языка Паскаль.

Существуют два варианта условного оператора – полный и неполный. Полный оператор выражается тремя ключевыми словами: IF – «если», THEN – «то» и ELSE – «иначе», и записывается он так:

IF <условие> THEN <Оператор_1> ELSE <Оператор_2>

Первый оператор выполняется, если условие верно, а второй – если ложно. Стало быть, условный оператор – это сложная конструкция, которая включает в себя другие операторы.

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

      if S = ’pascal’ then Writeln(’Проходите!’) else Writeln (’Стойте!’)

Здесь логическое выражение выделено курсивом. То же самое можно записать чуть иначе.

if ’pascal’ = S

      then Writeln(’Проходите!’)

      else Writeln (’Стойте!’)

Теперь переменная S и константа «pascal» поменялись местами, и это никак не сказалось на условном операторе, поскольку знак равенства в логических выражениях означает сравнение (а не присваивание!).

Части условного оператора THEN и ELSE называют ветвями (положительной и отрицательной соответственно). Стало быть, и условие, и ветви оператора можно размещать в нескольких строках – это удобно как для чтения, так и для отладки программ.

В главе 7 мы познакомились с графическим изображением алгоритмов. Существуют лишь три базовые управляющие конструкции, из которых вяжется хитроумная паутина современных программ: 1) линейная последовательность, 2) условный переход и 3) цикл. Условный оператор Паскаля – это и есть один из вариантов условного перехода. На блок-схемах его изображают так (рис. 23).


Рис.23 – Блок схема полного условного оператора

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

Пост номер один

Вам понятен условный оператор? Тогда обратимся к программе-часовому. Вероятно, вы написали её раньше меня, и нам осталось лишь сверить варианты.

var S : string;

begin

Writeln(’Пароль?’); Readln(S);

if S = ’pascal’

      then Writeln(’Проходите!’)


    Ваша оценка произведения:

Популярные книги за неделю