Flatik.ru

Перейти на главную страницу

Поиск по ключевым словам:

страница 1страница 2страница 3страница 4страница 5страница 6

Раздел 3.3.2. Условный оператор.


Ход выполнения программы может быть различным. Если в задаче, в зависимости от какого-либо условия, можно будет двигаться по разным путям, то алгоритм такой решения такой задачи называется ветвящимся. Как раз таким оператором и является условный оператор (if – если, else - иначе). Условный оператор позволяет проверить некоторое условие, и в зависимости от результатов проверки выполнить то или иное действие. Таким образом, условный оператор - это средство ветвления вычислительного процесса. Условный оператор имеет полную и краткую формы.

Полная форма условного оператора выглядит следующим образом:

if условие then оператор1
else оператор2

В качестве условия указывается какое-либо логическое выражение. Если условие оказывается истинным, то выполняется оператор1, в противном случае выполняется оператор2.



Краткая форма условного оператора имеет вид:

if условие then оператор

Если условие оказывается истинным, то выполняется оператор, в противном случае происходит переход к следующему оператору программы.

В случае конструкции вида



if условие1 then
  if условие2 then оператор1
  else оператор2

else всегда относится к ближайшему предыдущему оператору if, для которого ветка else еще не указана. Если в предыдущем примере требуется, чтобы else относилась к первому оператору if, то необходимо использовать составной оператор:

if условие1 then оператор
begin
  if условие2 then оператор1
end
else оператор2

Раздел 3.3.3. Составной и пустой операторы

Составной оператор предназначен для объединения нескольких операторов в один. Он имеет вид:

begin
  операторы
end

Операторы отделяются один от другого символом ";".


Как уже говорилось выше, служебные слова begin (начало) и end(конец), окаймляющие операторы, называются операторными скобками.

Например:



s:=0; p:=1;
for i:=1 to 10 do
begin //открывающая операторная скобка
  p:=p*i;
  s:=s+p
end //закрывающая операторная скобка

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


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

Раздел 3.3.4. Оператор выбора.

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


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

case переключатель of
  список выбора 1: оператор1;
  ...
  список выбора N: операторN;
  else оператор0
end;

Переключатель представляет собой выражение порядкового типа (целого, символьного, перечислимого или интервального), а списки выбора содержат константы совместимого типа. Как и в операторе if, ветвь else может отсутствовать.

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

Список выбора состоит либо из одной константы, либо из диапазона значений вида a..b (константа a должна быть меньше константы b). Можно также перечислить несколько констант или диапазонов через запятую:



case DayOfWeek of
  1..5: writeln('Рабочий день');
  6,7: writeln('Выходной');
end;

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



case i of
  1,5: write(1);
  4..9: write(2);
end;

программа завершится сообщением об ошибке:

" Ошибка: Пересечение диапазонов меток в операторе case".

Раздел 3.3.5. Оператор безусловного перехода goto.

Оператор безусловного перехода goto используется для изменения естествен-ной последовательности выполнения программы, и имеет следующую форму:



goto метка Содержимое строки можно интерпретировать как:
перейти к <метке>

Он передаёт выполнение программы к оператору, помеченному меткой.

Метка представляет собой идентификатор. Для совместимости со стандартным Паскалем в качестве метки можно использовать целое число без знака. Чтобы пометить оператор меткой, необходимо перед оператором указать метку с последующим двоеточием. Формат описания метки:

label1: оператор

Метки должны быть описаны в разделе меток с использованием служебного слова label:

label 1,2,3;

Например, в результате выполнения программы:



label 1,2;//метки
begin
  i:=6;
2: if i<0 then goto 1;//условие перехода к метке 1
  write(i); //выводим значение i
  Dec(i); //увеличиваем i на 1
  goto 2; //переходим к метке 2
1: //метка 1
end.

будет выведено 654321.

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

Оператор безусловного перехода (goto) надо использовать только в крайнем случае. По количеству применений этого оператора судят о квалификации программиста, хотя всё же, иногда его применение бывает оправдано. Например, при использовании меню в программе или при проверке данных при вводе их с клавиатуры.


Применение циклов в программах позволяет обходиться без применения оператора goto вообще.

Раздел 3.4. Циклы. Итерация.

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


В таком случае необходимо применять циклы.
Цикл предназначен для повторения одной и той же последовательности команд неоднократно (до тех пор, пока не выполнится какое-либо условие).
Каждое повторение цикла называется – итерация.
Цикл с известным количеством повторений называют циклом с параметром.
Для того, чтобы организовать циклы, используют специальные операторы.
Тело цикла в Pascal ABC не может быть пустым. Это сделано для защиты от часто встречающейся у начинающих ошибки, ставить после do точку с запятой.

Раздел 3.4.1. Цикл с известным количеством повторений FOR.

Оператор цикла for (для) имеет одну из двух форм:

for переменная:=начальное значение to конечное значение do оператор или

for переменная:=начальное значение downto конечное значение do оператор

для обеих форм содержимое строк можно интерпретировать как:
для <параметр цикла>:=<нач.знач> до <конеч.знач> выполнять <оператор>

Содержимое текста от слова for до слова do включительно называется заголовком цикла, а оператор после do - телом цикла. Переменная после слова for называется параметром цикла. Параметр цикла, его начальное и конечное значения должны принадлежать к одному и тому же, порядковому (целому, символьному, перечислимому или интервальному) типу данных, т.е. параметр выступает в качестве счётчика цикла.


Если в цикле изменяется простая переменная, то она является параметром цикла, если в цикле изменяется переменная с индексом, то параметром цикла является индекс этой переменной . В теле цикла параметр цикла не должен меняться.
Для цикла с ключевым словом to значение параметра цикла последовательно увеличивается на единицу при каждом прохождении цикла (повторе). Для цикла с ключевым словом downto значение параметра цикла при каждом повторе последовательно уменьшается на единицу.

Если для цикла for ... to начальное значение переменной цикла больше конечного значения или для цикла  for ... downto начальное значение переменной цикла меньше конечного значения, то тело цикла не выполнится ни разу.

Изменение переменной-параметра цикла внутри цикла является логической ошибкой. Например, следующий фрагмент со вложенным оператором for является ошибочным:

for i:=1 to 10 do
  for i:=1 to 5 do
    write(i);

Раздел 3.4.2. Цикл с неизвестным количеством повторений WHILE.

В цикле с неизвестным количеством повторений вместо счётчика цикла используется условие выхода из цикла.


Оператор цикла while имеет следующую форму:

while условие do оператор // эту строку можно интерпретировать как:
пока выполняется <условие> выполнять <оператор>

Условие представляет собой выражение логического типа и может быть простым, с использованием операций отношения (<, >, <=, >=, =, <>), или составным с ис-пользованием логических операций (‘и’, ’или’).
Оператор после do называется телом цикла.
Перед каждой итерацией цикла условие проверяется, и если оно истинно, то выполняется тело цикла, в противном случае происходит выход из цикла.

Если условие всегда оказывается истинным, то может произойти зацикливание:



while 2>1 do
  write(1);

Для выхода из зациклившейся программы, можно использовать комбинацию клавиш Ctrl-F2 или кнопку Stop.


Цикл WHILE является циклом с предусловием, т.е. сначала проверяется условие цикла и только в том случае, если оно истинно, выполняется тело цикла.

Раздел 3.4.3. Цикл с неизвестным количеством повторений REPEAT.

Оператор цикла repeat имеет следующую форму:



repeat операторы until условие // эту строку можно понимать как:
повторять < операторы > до тех пор, пока не выполнится < условие >

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

Если условие всегда оказывается ложным, то может произойти зацикливание:

repeat
  write(1);
until 2=1;

Для выхода из зациклившейся программы, можно использовать комбинацию клавиш Ctrl-F2 или кнопку Stop.


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

Раздел 3.4.4. Вложенные циклы.

Циклы могут быть простыми или вложенными (цикл в цикле).

Например:

Program VCicl;


var i,j:integer;
begin
for i:=1 to 5 do

begin
writeln;

for j:=10 to 13 do

write('i=',i,' j=',j);

end;

readln;
end.



Для цикла for i:=1 to 5 do телом цикла является:

begin for j:=10 to 13 do

write(' i= ', i, ' , j = ', j);

writeln;

end;

Этот цикл является внешним, по отношению к нему внутренним будет цикл:



for j:=10 to 13 do с телом write (' i = ', i , j =', j);

Разберём работу программы, с вложенным циклом.


Сначала программа и начинает выполнять внешний цикл: присваивает i=l, затем переходит к его телу, а здесь встречает внутренний цикл и присваивает j значение 10, после чего выполняет тело внутреннего цикла, т.е. выводит на экран i=l, j=10. Так как внутренний цикл еще не окончен, то машина продолжает его выполнять, т.е. присваивает j значение 11 и добавляет к уже выведенной строке i=l, j=11.

Заметим, что оператор write отличается от оператора writeln тем, что он не начинает вывод с новой строки, а продолжает писать в той же строке, т.е. после второго выполнения внутреннего цикла на экране появится

i= 1, j=10 i= 1, j=11.

Программа продолжит выполнение внутреннего цикла, и, когда он закончится (выполнится для j = 10,11,12,13), на экране будет строка

i = 1 j = 10 i =l j = 11 i = 1 j = 12 i = 1 j = 13.

Внутренний цикл закончится, однако тело внешнего цикла еще не закончи-лось, поэтому выполняется оператор writeln, который переводит курсор на новую строку. После этого тело внешнего цикла закончится, но сам цикл отработал только для i = 1. Поэтому внешний цикл продолжит работу, присвоив i: =2 и вновь начав выполнение своего тела. Встретив внутренний цикл j, на экран с новой строки выведется: i=2, j=10, затем к этой строке добавится i=2, j=11 и т.д., пока не закончится внутренний цикл.

Таким образом, внешний цикл, изменяя индекс i от 1 до 5, заставит каждый раз выполняться полностью внутренний цикл, и в результате работы программы на экране появится:

i=l, j=10 i=1, j=11 i=1, j=12 i=1, j=13

i=2, j=10 i=1, j=11 i=1, j=12 i=1, j=13

i=3, j=10 i=1, j=11 i=1, j=12 i=1, j=13

i=4, j=10 i=1, j=11 i=1, j=12 i=1, j=13

i=5, j=10 i=1, j=11 i=1, j=12 i=1, j=13


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

for i:=l to 9 do

for j:=l to 9 do

for k:=l to 9 do

writeln (i, j, k);

дает столбик цифр:

111 112 113 114 … 119

– – – – –

121 122 123 124 … 129

– – – – –

211 212 213 214 … 219

– – – – –

991 992 993 994 … 999

что составляет 1000 строчек.



Раздел 3.5. Процедуры и функции в ЯП Паскаль. Рекурсия.

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


Функциями называют такие группы команд, которые при своём выполнении производят какие-либо вычисления и соответственно возвращают какое-то значение (вычисляет синус, корень, модуль числа, длину строки и т.д.).
Процедурами называют какие-либо действия, которые выполняет программа (очищает экран, считывает данные с клавиатуры, выводит данные на экран, удаляет символы из строки и т.п.).

Все процедуры и функции делятся на две группы:


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

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


Описание процедуры:

procedure имя(список формальных параметров);
раздел описаний
begin
  операторы
end;

Описание функции:



function имя(список формальных параметров): тип возвращаемого значения;
раздел описаний
begin
  операторы
end;

Операторы подпрограммы, окаймленные операторными скобками beginend, называются телом этой подпрограммы.



Рекурсия — это такой метод организации работы подпрограммы, при котором эта подпрограмма (процедура или функция) в ходе ее выполнения обращается сама к себе (т.е. вызов метода из тела самого метода). Рекурсивный стиль программирования довольно эффектен, но не очень эффективен, с точки зрения расходования ресурсов компьютера. Применение рекурсии увеличивает время исполнения программы и требует значительного объёма памяти. В связи с этим, предпочтительнее использовать не рекурсию, а итерацию.

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


Примером рекурсивного алгоритма, является программа вычисляющая факториал числа N.
Program Factorial;

var n:integer;

function f(x:integer):real;//определяем функцию f обращающуюся,

begin //к предыдущему значению самой себя,

if x = 1 then f:= 1 else f:= x * f(x-1);//для вычисления своего значения

end;


begin

writeln('Введите число N (N=1..170)'); //при N>170 возникает

readln(n); // ошибка « Вещественное переполнение »

writeln('Факториал N!=',f(n));

end.

Раздел 3.5.1. Стандартные процедуры и функции.

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



1. Общие стандартные процедуры и функции.

Имя и параметры

Процедура или функция

Типы параметров

Тип возвращаемого значения

Действие

Read(a,b,...)

процедура

a,b - переменные числового или типа string

 

вводит значения с клавиатуры в переменные a, b ...

Write(a,b,..)

процедура

a,b,c - выражения числового типа или string

 

выводит значения a, b ... в окно вывода

Readln(a,b,.)

процедура

a,b,c - переменные простого типа или типа string

 

вводит значения с клавиатуры в переменные a, b ..., и переводит курсор на следующую строку.

Writeln(a,b,.)

процедура

a,b,c - выражения простого типа, типа string или указатели

 

выводит значения a, b ... в окно вывода и осуществляет переход на следующую строку. Если параметры процедуры не указаны, то выполняет только переход на следующую строку.

Abs(x)

функция

x - integer, real

совпадает с типом параметра

возвращает абсолютное значение (модуль) x

Sqr(x)

функция

x - integer, real

совпадает с типом параметра

возвращает квадрат x

Sqrt(x)

функция

x - real,

совпадает с типом параметра

возвращает квадратный корень из x

Sin(x)

функция

x - real,

совпадает с типом параметра

возвращает синус x

Cos(x)

функция

x - real,

совпадает с типом параметра

возвращает косинус x

Arctan(x)

функция

x - real,

совпадает с типом параметра

возвращает арктангенс x

Power(x,y)

функция

x, y - real

real

возвращает x в степени y

Round(x)

функция

x - real

integer

возвращает результат округления x до ближайшего целого

Int(x)

функция

x - real

real

возвращает целую часть х

Frac(x)

функция

x - real

real

возвращает дробную часть х

Ord(x)

функция

x - порядкового типа

integer

возвращает номер значения порядкового типа (символа)

Chr(x)

функция

x - integer

char

возвращает символ с кодом х

Odd(x)

функция

x - integer

boolean

возвращает True, если х - нечетное, и False в противном случае

Inc(x)

процедура

x - порядкового типа

 

Увеличивает x на 1

Dec(x)

процедура

x - порядкового типа

 

Уменьшает x на 1

Inc(x,n)

процедура

x - порядкового типа,
n - целого типа

 

Увеличивает x на n

Dec(x,n)

процедура

x - порядкового типа,
n - целого типа

 

Уменьшает x на n

Pred(x)

функция

x - порядкового типа

совпадает с типом параметра

возвращает предыдущее значение порядкового типа

Succ(x)

функция

x - порядкового типа

совпадает с типом параметра

возвращает следующее значение порядкового типа

Random(x)

функция

x - integer

integer

возвращает случайное целое в диапазоне от 0 до x-1

Random

функция

 

real

возвращает случайное вещественное в диапазоне [0..1)

2. Стандартные процедуры и функции для работы со строками

Имя и параметры

Процедура или функция

Типы параметров

Тип возвра-щаемого значения

Действие

Length(s)

функция

s - string

integer

возвращает длину строки s

Copy(s,index,
count)

функция

s - string, index и count - integer

string

возвращает подстроку строки s длины count, начиная с позиции index

Delete(s,in-dex,count)

процед.

s - string, index и count - integer

 

удаляет в строке s count символов начиная с позиции index

Insert(pods,
s,index)

процед.

s, pods - string, index - integer

 

вставляет подстроку pods в строку s с позиции index
















SetLength(s,n)

процед.

s - string, n - integer

 

устанавливает длину строки s равной n

Str(x,s)
Str(x:n,s)
Str(x:n:m,s)

процед.

s - string, x - integer, real и n, m - integer

 

преобразует x к строковому представлению (во втором и третьем случаях согласно формату вывода, устанавливаемому n и m) и записывает результат в строку s

Val(s,v,code)

процед.

s - string, v - integer, real, и code - integer

 

преобразует строку s к числовому представлению и записывает результат в переменную v. Если преобразование возможно, то в переменной code возвращается 0, если невозможно, то в code возвращается ненулевое значение

Concat(s1,..,sn)

функция

s1,..., sn - string

string

возвращает строку, являющуюся результатом слияния строк s1,..., sn. Результат тот же, что у выражения s1+s2+...+sn

IntToStr(i)

функция

i - integer

string

преобразует целое число к строке

StrToInt(s)

функция

s - string

integer

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



<предыдущая страница | следующая страница>


Пособие по программированию на языке Pascal abc. Ерёмин О. Ф. 2009г. Моздок

Методическое пособие рассчитано на школьников 9-11 классов, а также может быть полезно учащимся других учебных заведений среднего образования, изучающих основы программирования

823.46kb.

25 09 2014
6 стр.


Практикум по программированию на языке паскаль учебно-методическое пособие

Касторнов А. Ф., Касторнова В. А. Практикум по программированию на языке паскаль. Учебно-методическое пособие. – М.: Иио рао, 2011. – 84 с

950.69kb.

25 09 2014
16 стр.


I основы языка высокого уровня турбо pascal алфавит языка Pascal

Прописные и строчные буквы Pascal'eм не различаются. Знаки «возведение в степень» и двойная кавычка в языке отсутствуют

327.58kb.

25 09 2014
1 стр.


Программирование на языке Turbo Pascal Материалы к урокам

В данной брошюре собраны материалы для подготовки и проведения по программированию на Паскале, когда идет освоение языка и выработка навыков составления программ

1207.28kb.

02 10 2014
15 стр.


1. Среда языка программирования Pascal abc

Блеза Паскаля. На основе языка Паскаль в 1985 г фирма Borland выпустила версию Turbo Pascal версии с этого времени язык Паскаль используется во всем мире в учебных заведениях в кач

537.72kb.

02 10 2014
4 стр.


Интегрированная среда программирования Turbo Pascal Язык программирования Pascal

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

479.79kb.

25 09 2014
6 стр.


Краткая теория по курсу информатика Типы данных языка программирования Turbo Pascal

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

103.03kb.

13 10 2014
1 стр.


Международная дистанционная олимпиада по прикладному программированию для микропроцессорных систем на языке Ассемблер микроконтроллера стандарта mcs-51
37.58kb.

06 10 2014
1 стр.