Файл: Основы программирования на языке Pascal (Алгоритм, свойства алгоритма).pdf

ВУЗ: Не указан

Категория: Курсовая работа

Дисциплина: Не указана

Добавлен: 25.06.2023

Просмотров: 42

Скачиваний: 2

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

>= - больше или равно

<= - меньше или равно

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

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

  • унарная операция логического отрицания not, унарный минус -, взятие адреса @
  • операции умножения (в том числе логического):  *  /  div  mod  and
  • операции сложения (в том числе логического):  :  +  -  or  xor
  • операции отношения:  =  <>  <  >  <=  >=  in

Можно переопределить порядок выполнения операций с помощью скобок. Так, 2*6+11 равно 23, но 2*(6+11) равно 34.

Оператор присваивания, операторы ввода и вывода

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

переменная:=выражение

В качестве переменной может выступать простая переменная, разыменованный указатель, переменная с индексом или поле переменной типа запись (record). Символ := называется знаком присваивания. Выражение справа должно быть совместимым по присваиванию с переменной в левой части. Оператор присваивания заменяет текущее значение переменной значением выражения.

Например, следующая запись увеличивает значение переменной i на 1:

i:=i + 1;

Процедура ввода с клавиатуры имеет следующий формат:

Read(<cписок ввода>)

где <список ввода> представляет собой последовательность имен переменных, разделенных запятыми. Read является оператором обращения к стандартной процедуре ввода.

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


В примере ниже объявим три переменные вещественного, целого и символьного типа:

Набираем на клавиатуре значения, которые будут присвоены объявленным переменным:

Другой вариант оператора ввода с клавиатуры имеет вид:

Где слово ReadLn означает выражение read line — читать строку. Отличие этого оператора от Read заключается в том, что после считывания последнего значения в списке для одного оператора ReadLn данные для следующего оператора будут читаться с начала новой строки.

Оператор вывода на экран является обращением к стандартной процедуре вывода и имеет следующий формат:

Здесь элементами списка вывода могут являться выражения различных типов (например, константы и переменные):

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

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

Слово WriteLn — write line — как и случае с ReadLn означает выражение писать строку. Отличие этого оператора от Write заключается в том, что после вывода последнего значения в списке происходит перевод курсора к началу следующей строки. Оператор WriteLn, записанный без параметров, осуществляет перевод строки.

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

Оператор условного перехода в Паскаль имеет следующий вид:

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

условие - это логическое выражение, в зависимости от которого происходит выбор одной из двух альтернативных ветвей алгоритма. Если значение условия равно TRUE (истинно), тогда будет выполнен оператор 1, который записан после ключевого слова then. Иначе будет выполнен оператор 2, идущий за словом else, при этом исполнение оператора 1 пропускается. После выполнения указанных в той или иной ветке операторов программа передает управление команде, следующей непосредственно за оператором if.

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

Else - часть условного оператора if может отсутствовать:

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

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

Синтаксис языка Паскаль разрешает запись только одного оператора после ключевых слов then и else, в связи с этим группа инструкций обязательно должна быть объединена в составной оператор, ограниченный операторными скобками begin ... end. Если этого не сделать, возникнет логическая ошибка программы, когда компилятор не выдает ошибку, но программа будет работать неправильно.


Примеры.

if z > 0 then modul := z else modul := -z;

if num > 0 then WriteLn('num – положительное число');

if min > max then begin

temp := min;

min := max;

max := temp;

end;

Достаточно часто при решении задач возникают ситуации, когда нужно реализовать выбор одного из нескольких альтернативных путей выполнения программы. Конечно, такой выбор можно сделан с помощью оператора if .. then, но структура программы будет громоздкой, гораздо удобнее применить специальный оператор выбора.

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

case выражение of

вариант : оператор;

...

вариант : оператор;

end;

или

case выражение of

вариант : оператор;

...

вариант : оператор;

else оператор

end;

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

Пример:

case symb of

'A'..'Z', 'a'..'z' : Write('Это буква');

'0'..'9' : Write('Это цифра');

'+', '-', '*', '/' : Write('Это оператор');

else Write('Это спецсимвол')

end;

6 Операторы цикла

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

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

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

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


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

Синтаксис:

for переменная := значение 1 to значение 2 do оператор

или

for переменная := значение 1 downto значение 2 do оператор

Оператор for передает управление оператору, находящемуся после слова do, по одному разу для каждого значения в диапазоне от значения 1 до значения 2.

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

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

Как и при использовании условного оператора, необходимо помнить, что синтаксис языка разрешает запись только одного оператора после ключевого слова do, поэтому, если в цикле нужно выполнить выполнить группу операторов, обязательно надо заключить их в операторные скобки begin ... end.

Пример 1. Квадраты чисел от 2-х до 15-и.

for i:=2 to 15 do WriteLn(i*i);

Пример 2. Латинский алфавит из заглавных букв.

for symb:='A' to 'Z' do Writeln(symb);

Пример 3. Использование цикла с downto.

for k:=20 downto 1 do WriteLn(k);

Пример 4. Использование составного оператора.

for arg:=1 to 8 do

begin

z:=4*arg+2;

WriteLn('f(',arg,')=',z);

end;

6.2 Итерационные циклы с условием

а) Итерационные циклы с предусловием

Синтаксис:

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

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

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

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

Пример.

eps:=0.0001;

while num > eps do num:=num/2;

б) Итерационные циклы с постусловием

Синтаксис:

repeat


оператор;

until выражение

Оператор между ключевыми словами repeat и until повторяются, пока логическое выражение является ложным (False). Как только логическое выражение принимает значение True (истина), происходит выход из цикла.

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

Пример.

repeat

WriteLn('Введите отрицательное число');

ReadLn(x);

until x<0;

6.3 Операторы завершения цикла

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

В версии Турбо Паскаль 7.0 определены стандартные процедуры:

Break

Continue

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

Процедура Continue обеспечивает переход к началу новой итерации цикла.

7 Пример разработки программы на языке Паскаль

Рассмотрим решение следующей задачи: определение параметров движения тела (определить расстояние, пройденное физическим телом за время t, если тело движется с постоянным ускорением а и имеет в начальный момент времени скорость V0).

7.1 Блок-схема

7.2 Текст программы

var

V0, a, t, s : real;

begin

writeln('***************************************************************');

writeln('Определить расстояние, пройденное физическим телом за время t,');

writeln(' если тело движется с постоянным ускорением а');

writeln(' и имеет в начальный момент времени скорость V0');

writeln('***************************************************************');

repeat

writeln('Введите скорость в начальный момент времени V0, м/с');

write('->');

readln(v0);

until V0 > 0;

repeat

writeln('Введите время t, сек.');

write('->');

readln(t);

until t > 0;

repeat

writeln('Введите постоянное ускорение a, м/с^2');

write('->');

readln(a);

until a > 0;

s := V0 * t + (a * sqr(t) / 2);

writeln('***************************************************************');

writeln('Ответ: за время ', t, ' сек. точка при постоянном ускорении ', a,