Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Paskal_ucheb_posob_ch1_21_11_2011

.pdf
Скачиваний:
47
Добавлен:
09.04.2015
Размер:
943 Кб
Скачать

31

В стандартном Паскале есть две основных функции ввода информации Read и Readln, которые используются для чтения данных с клавиатуры.

Их формат:

Read (элемент, элемент,...); Readln (элемент, элемент,...); ,

где каждый элемент - это переменная целого, вещественного, символьного типа или строка. Числа должны отделяться друг от друга пробелами или нажатием клавиши Enter.

С клавиатуры напрямую можно ввести данные только следующих типов:

REAL

INTEGER

CHAR

STRING

ЛЕКЦИЯ 7.

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

Иногда бывает необходимо выполнить часть программы, если заданное условие имеет значение True или False, или когда заданное выражение принимает определенное значение.

Оператор if.

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

if (выражение)

then begin оператор 1 end

else begin оператор 2 end;

где выражение - любое булевское выражение (вырабатывающее в результате True или False); оператор 1 и оператор 2 - операторы Паскаля. Если выражение принимает значение True, то выполняется оператор 1, в противном случае - оператор 2.

Два важных момента, на которые следует обратить внимание при использовании if/then/else.

Во-первых, оператор else не является обязательным, другими словами, допустимо использовать оператор if в следующем виде:

if выражение

then оператор 1;

32

В этом случае оператор 1 выполняется только тогда, когда выражение имеет значение True. В противном случае пропускается оператор 1 и выполняется следующий оператор.

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

Составной оператор - это ключевое слово begin, несколько операторов разделенных точкой с запятой и ключевое слово end.

В примере используется один оператор: if B = 0.0 then

Writeln('деление на нуль невозможно');

Использование составного оператора в предложении else: if B = 0.0 then

Writeln('деление на нуль невозможно.') else

begin

Ratio := A / B; Writeln('Отношение =' , Ratio)

end;

Оператор выбора case

Оператор case - мощное средство выбора альтернатив. Позволяет уменьшить количество операторов if.

Оператор case состоит из выражения (селектора) и списков операторов, каждому из которых предшествует метка того же типа, что и селектор. Это значит, что в данный момент выполняется тот оператор, у которого значение метки совпадает с текущим значением селектора. Если совпадения значений не происходит, то не выполняется ни один из операторов, входящих в case или же выполняются операторы, стоящие после необязательного слова else (else - расширение стандартного Паскаля).

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

case BirdSight of

'C', 'c': begin Curlens := Curlens + 1;writeln(curlens);end; 'H', 'h': Herons := Herons + 1;

'E', 'e': Egrets := Egrets + 1; 'T', 't': Terns := Terns + 1;

End

Else

writeln(‘Let you get out of mine forever!’); end; {case}

33

Диапазон записывается в виде двух констант, разделенных двумя точками "..". Тип константы должен соответствовать типу селектора. Оператор, стоящий после двоеточия (:), выполняется в том случае, если значение селектора совпадает со значением константы или, если его значение попадает в диапазон значений.

34

ЛЕКЦИЯ 8. Часть 1.

Циклы.

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

Существует три основных вида циклов: цикл while (с предуслови-

ем), цикл repeat (с постусловием) и цикл for (с параметром). Рассмот-

рим их.

Цикл с параметром for.

Цикл for существует во многих языках программирования. В Паскале тоже. Однако, вариант этого цикла в Паскале как эффективен, так и ограничен.

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

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

Const n=10; Var

Chislo, summa, schetchik: integer; Begin

Summa:=0;

For schetchik:= 1 to n do begin

Write(‘Введи ’, schetchik,’-e число ->’);

Readln(chislo);

Summa:=summa+chislo;

End;

Writeln(‘summa=’,summa);

Readln;

End.

Данная программа работает следующим образом. Имеется константа N, где хранится количество суммируемых чисел. Chislo – число, вводимое с клавиатуры, summa – сумма все десяти чисел, schetchik используется для подсчета количества введенных с клавиатуры чисел и одновременно является параметром цикла.1 – начальный парметр цикла, n – конечный параметр цикла. Хотя по умолчанию все числовые переменные, описанные в разделе Var автоматически обнуляются, но по правилам хорошего «программистского» тона принято их, все же, обнулять в программе. Далее в

35

цикле делается ввод с клавиатуры чисел. Сначала значение schetchik равно 1 и вводится первое число, которое добавляется в сумму. Далее переход на начало цикла, где к значению параметра цикла schetchik прибавляется 1. Далее следует проверка – значение параметра цикла равно или меньше конечного параметра цикла. Если «да», то выполняется тело цикла, если «нет» то выход из цикла.

Формат цикла for:

for индекс:= do оператор;

где

индекс - скалярная переменная (целого типа, символьного, булевского и любого перечислимого типа);

выражение1 и выражение2 - выражения типа, совместимого с типом индекса; оператор - одиночный или составной. Индекс увеличивается на 1 после каждого выполнения цикла. Индекс можно умень-

шать на 1. Для этого ключевое слово to заменяется на downto. Главный недостаток цикла for - это возможность уменьшить или

увеличить индекс только на 1.

Основные преимущества - краткость, возможность использования символьного и перечислимого типа в диапазоне значений.

Const n=10; Var

Chislo, summa, schetchik: integer; Begin

Summa:=0;

For schetchik:= n downto 1 do begin

Write(‘Введи ’, schetchik,’-e число ->’);

Readln(chislo);

Summa:=summa+chislo;

End;

Writeln(‘summa=’,summa);

Readln;

End.

36

ЛЕКЦИЯ 8. Часть 2.

Цикл while – цикл с предусловием.

Цикл while используется для проверки некоторого условия в начале цикла.

Const n=10; Var

Chislo, summa, schetchik:integer; Begin

Summa:=0; schetchik:=1; while schetchik <= 10 do begin

Write(‘Введи ’, schetchik,’-e число ->’); readln(chislo);

Summa:=summa+chislo; schetchik:= schetchik +1;

End;

Writeln(‘summa=’,summa);

Readln;

End.

Во-первых, сначала переменной schetchik присвоится значение равное 1. Затем, при входе в цикл проверяется условие: значение schetchik меньше или равно 10. Если да, то выполняется тело цикла (операторы, находящиеся между ключевыми словами begin..end. Вводится очередное число, оно добавляется в сумму. Далее обязательно нужно значение schetchik увеличить на 1. После происходит возврат на начало цикла. Значение schetchik проверяется заново и тело цикла выполняется вновь, до тех пор пока значение переменной schetchik удовлетворяет условию. Как только значение schetchik становится равным 11, цикл завершается, и на экран выводится сообщение о значении суммы 10 чисел.

Формат оператора цикла while:

while выражение do оператор;

В цикле while вычисляется выражение. Если оно имеет результат- True, выполняется оператор. В противном случае выполнение цикла завершается.

 

 

37

 

 

Цикл Repeat....Until – цикл с постусловием.

 

 

Цикл repeat..until рассмотрим на примере предыдущего задания:

 

Const n=10;

 

 

Const n=10;

 

 

Var

 

 

Var

 

 

Chislo,

summa,

 

Chislo,

summa,

schetchik:integer;

 

 

schetchik:integer;

 

Begin

 

 

Begin

 

 

Summa:=0; schetchik:=1;

 

Summa:=0; schetchik:=1;

 

repeat

 

 

while schetchik <= 10 do

 

Write(‘Введи

’,

 

begin

Write(‘Введи

’,

schetchik,’-e число ->’);

 

 

schetchik’,-e число ->’);

 

readln(chislo);

 

readln(chislo);

 

Sum-

 

 

 

 

 

Sum-

 

ma:=summa+chislo;

 

 

 

 

 

ma:=summa+chislo;

 

schetchik:= schetchik

 

 

 

schetchik:= schetchik

+1;

 

 

 

 

+1;

 

 

until (schetchik>10);

 

 

 

 

End;

 

 

Writeln(‘summa=’,summa);

 

 

 

 

Writeln(‘summa=’,summa);

Readln;

 

 

 

 

Readln;

 

 

End.

 

 

 

 

 

 

End.

 

 

 

 

 

 

 

 

 

 

 

 

 

В этой программе повторяется выполнение операторов, находящихся между repeat..until, повторяются до тех пор, пока значение выражения при until не будет True.

Формат цикла:

repeat

оператор; оператор;

оператор; until выражение;

Существует несколько основных отличий цикла repeat от цикла while:

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

38

цикле while, если значение выражения False, тело его пропускается сразу;

цикл repeat выполняется пока выражение не станет True, в то время, как цикл while выполняется до тех пор, пока выражение

имеет значение True. При замене одного типа цикла на другой необходимо на это обращать особое внимание.

Дополнительно можно отметить, что в цикле repeat может использоваться просто группа операторов, а не составной оператор. При использовании этого цикла не используются слова begin..end, как в случае с циклом while.

Запомните, что цикл repeat выполнится хотя бы один раз, в то время, как цикл while может ни разу не выполниться в зависимости от значения выражения.

Структура программ.

В стандартном Паскале (до 4-й версии включительно) программы имели жесткий формат:

program <имя программы>;

uses <подключение дополнительных модулей>; label

метки;

const

объявление констант;

type

определение типов данных;

var

объявление переменных; Procedure и function;

описание и тело подпрограммы;

begin

тело программы;

End.

Наличие всех пяти секций объявлений - label, const, type, var, procedure и function - в программе необязательно. Однако для стандартного Паскаля, если они присутствуют, порядок их следования строго регламентирован, и в программе они должны присутствовать только один раз. За секцией объявлений, следуют процедуры и функции, и только затем тело программы.

В версиях Turbo Pascal выше четвертой оператор program может отсутствовать. Порядок описания остальных секций жестко не регламенти-

39

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

Комментарии.

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

Комментарий начинается левой фигурной скобкой {. Она указывает компилятору: игнорировать все, пока не встретится правая фигурная скобка }. Комментарий может занимать несколько строк:

{ Это пример длинного комментария,

занимающего несколько строк}

Кроме того, существует альтернативная форма комментария. Начинается (* и заканчивается *). Комментарий, начинающийся с (* игнорирует все фигурные скобки, и наоборот.

40

Процесс

Начало/конец

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Переход на метку или

 

 

условие

 

 

 

 

страницу

да

 

 

нет

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Печать

 

 

 

 

Переход к метке или

ввод/вывод

 

странице

 

 

Здесь располагается текст комментария к блоксхемному элементу

Подпрограмма

Рисунок 5. Некоторые элементы блок-схем.

СЕМИНАРЫ. ЧАСТЬ I

Упражнение 1.

Можно ли утверждать, что в ПАСКАЛЕ истинно выражение:

(1/3)*3-1=0

Ответ: НЕТ, т.к.1/3 =0,3333333…, а 0,333333*3=0,9999999…

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]