Файл: Обзор языков программирования высокого уровня (Реализация цикла с предусловием).pdf

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

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

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

Добавлен: 01.04.2023

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

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

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

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

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

Начальные условия

Выражение

Операторы

Начальные условия

Модификация параметра цикла

Начальные условия

Выражение

Операторы

Начальные условия

Модификация параметра цикла

Цикл с предусловием

Цикл с постусловием

Рисунок 9 – Структурные схемы операторов цикла

Цикл завершается, если условие его продолжения не выполняется. Возможно принудительное завершение как текущей итерации, так и цикла в целом. Для этого служат операторы break, continue и goto. Передавать управление извне внутрь цикла не рекомендуется, потому что при этом могут не выполниться начальные условия [16].

В Паскале существуют три вида циклов:

  • цикл с предусловием while … do;
  • цикл с постусловием repeat … until;
  • цикл с параметром for.

Рассмотрим более подробно каждый из видов цикла.

2.1 Реализация цикла с предусловием

Синтаксис оператора имеет следующий вид:

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

Выражение должно быть логического типа. Например, это может быть операция отношения или просто логическая переменная. Если результат вычисления выражения равен true, выполняется расположенный после служебного слова do простой или составной оператор. Эти действия повторяются до того момента, пока результатом выражения не станет значение false. После окончания цикла управление передается на следующий за ним оператор [15].

Представим практическую реализацию данного оператора.

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

Представим словесный алгоритм:

1) ввести исходные данные;

2) взять первое значение аргумента;


3) определить, какому промежутку оно принадлежит;

4) вычислить значение функции по соответствующей формуле;

5) вывести строку таблицы;

6) перейти к следующему значению аргумента;

7) если оно превышает конечное значение, повторить шаги 3-6, иначе закончить.

Шаги 3-6 повторяются несколько раз, поэтому рационально для них организовать цикл. Введем следующие переменные:

х0 – начальное значение аргумента;

xn – конечное значение аргумента;

h – шаг изменения аргумента; k – параметр.

Все введенные переменные будут вещественного типа. Листинг программы будет иметь следующий вид:

program tab_func;

uses crt;

var x0,xn: real; //начальное и конечное значение аргумента

h: real; // шаг изменения аргумента

k: real; // параметр

x,y: real; //текущие значения аргумента

begin

writeln('Input x0,xn,h,k');

readln(x0,xn,h,k);

writeln(' -----------------------');

writeln('| X | Y |');

writeln(' -----------------------');

x:=x0;

while x<=xn do

begin

if x<-3 then y:=2*k;

if (x>=-3) and (x<=3) then y:=sqr(x);

if x>3 then y:=k;

writeln('|',x:9:2,' |',y:9:2,' |');

x:=x+h

end;

writeln(' -----------------------');

readkey

end.

Параметром этого цикла является х. Для верной работы цикла нужно параметру присвоить начальное значение до входа в цикл (шаг 2). Блок модификации параметра цикла представлен оператором, выполняющимся на шаге 6. Для перехода к следующему значению аргумента текущее значение наращивается на величину шага и заносится в ту же переменную [20]. Рисунок 10 демонстрирует результат работы данной программы.

Рисунок 10 – Результат работы программы

Рассмотрим еще один пример на реализацию цикла с предусловие.

Пример. Вывести все четные числа, начиная с числа n и до числа m. Числа n и m задает пользователь.

Введем следующие переменные:

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

Листинг программы примет вид:

Program even_numbers;

uses crt;

var n,m:integer;

Begin

clrscr;

writeln('Input n and m (n<=m)');

readln(n,m);

writeln('even numbers in an interval from ',n,' to ',m);

while m>n do

begin

if n mod 2=0 then writeln(n);

n:=n+1;

end;

readkey;

End.

Рисунок 11 демонстрирует результат работы данной программы.

Рисунок 11 – Результат работы программы

2.2 Реализация цикла с постусловием


Синтаксис оператора имеет следующий вид:

repeat

тело цикла

until выражение;

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

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

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

Рассмотрим задачу, в которой реализуется цикл с постусловием.

Пример. Определить, является ли введенное число простым.

Введем следующие переменные:

n – величина, обозначающая введенное число; тип – integer;

d – величина, обозначающая количество делителей; тип – integer;

s – переменная, использующаяся для пересчета делителей числа n; тип – integer.

Листинг программы имеет вид:

Program prostie_chisla;

uses crt;

var n,d,s:integer;

Begin

clrscr;

writeln('Input number');

readln(n);

s:=1;

d:=0;

repeat

if n mod s=0 then d:=d+1;

s:=s+1;

until s>n;

if d=2 then write ('Prime number')else write ('the number isn`t simple');

readkey;

End.

Рисунок 12 демонстрирует результат работы данной программы.

Рисунок 12 – Результат работы программы

2.3 Реализация цикла for

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

I:= nz, kz

Тело цикла

Рисунок 13 – Структурная схема цикла с параметром

Синтаксис данного цикла:

for параметр:=n1 to n2 do оператор;

for параметр:=n1 downto n2 do оператор;

Цикл for-to работает следующим образом:

1) вычисляется значение верхней границы n2;

2) переменной цикла присваивается значение нижней границы n1;

3) производится проверка того, что переменная цикла не превосходит n2;

4) если это так, то выполняется <оператор>;

5) значение переменной цикла увеличивается на единицу;

6) пункты 3-5, составляющие одну итерацию цикла, выполняются до тех пор, пока переменная цикла не станет строго больше, чем n2; как только это произошло, выполнение цикла прекращается, а управление передается следующему за ним оператору [19].


Из этой последовательности действий можно понять, какое количество раз отработает цикл for-to в каждом из трех случаев:

  • n1 < n2: цикл будет работать n2-n1+1 раз;
  • n1 = n2: цикл отработает ровно один раз;
  • n1 > n2: цикл вообще не будет работать.

После окончания работы цикла переменная-счетчик может потерять свое значение. Таким образом, нельзя с уверенностью утверждать, что после того, как цикл завершил работу, обязательно окажется, что ее значение равно n2+1.Поэтому попытки использовать переменную-счетчик сразу после завершения цикла могут привести к непредсказуемому поведению программы при отладке.

Цикл for-downto работает следующим образом:

1) вычисляется значение верхней границы n2;

2) переменной цикла присваивается значение нижней границы n1;

3) производится проверка того, что переменная цикла не меньше n2;

4) если это так, то выполняется <оператор>;

5) значение переменной цикла уменьшается на единицу;

6) пункты 1-3 выполняются до тех пор, пока переменная цикла не станет меньше, чем n2; как только это произошло, выполнение цикла прекращается, а управление передается следующему за ним оператору.

Из этой последовательности действий можно понять, какое количество раз отработает цикл for-downto в каждом из трех случаев:

  • n1 < n2: цикл вообще не будет работать;
  • n1 = n2: цикл отработает ровно один раз;
  • n1 > n2: цикл будет работать n1-n2+1 раз.

Рассмотрим реализация цикла с параметром.

Пример. Вычислить факториал числа n (число n вводится пользователем).

По определению факториал числа n (n!) = 1*2*3*…*n. Используя программу, описанную ниже, вычислить p как произведение чисел от 1 до n, т.е. p каждый раз умножается не на одно и то же число, а на значение переменной цикла.

Введем следующие переменные:

p – величина, обозначающая число, полученное в результате вычисления факториала, тип – longint.

n – величина, обозначающая число, для которого находится факториал, тип – integer.

i – величина, обозначающая переменную цикла, тип – integer.

Листинг программы имеет вид:

Program faktorial;

uses crt;

var i,n:integer;

p:longint;

Begin

clrscr;

writeln('Input number n:');

readln(n);

p:=1;

for i:= 1 to n do

p:=p*i;

writeln;

writeln('Result:');

writeln(n, '!=' ,p);

readkey;

End.

Рисунок 14 демонстрирует результат работы данной программы.

Рисунок 14 – Результат работы программы


2.4 Операторы ограничения и прерывания цикла

Оператор break

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

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

Формат: Break;

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

Оператор continue

Действие оператора сontinue заключается в передаче управления на начало цикла, при этом контролируется условие выхода из цикла, т.е. прерывается работа текущей итерации цикла и передается управление [4]:

– следующей итерации (цикл с постусловием)

– или на предшествующую ей проверку (циклы с параметром и с предусловием).

Формат: Continue;

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

For i:= 1 to 3 do

begin

write('Введите ПАРОЛЬ:');

readln(S); //S и Parol – переменные одного типа

if S=Parol then break //прерывание цикла

else if i<>3 then continue;

//ограничение цикла

writeln( 'Доступ к программе ЗАПРЕЩЕН' );

writeln( 'Нажмите Enter' );

readln;

halt //прерывание программы

end;

3 Массивы данных

3.1 Одномерные массивы

Массив это структура данных, представленная в виде группы ячеек одного типа, объединенных под одним единым именем. Массивы применяются для обработки большого объема однотипных данных. Имя массива является указателем. Отдельная ячейка данных массива называется элементом массива. Элементами массива могут быть данные любого типа. Массивы могут иметь как одно, так и более одного измерений. В зависимости от размерности массивы делятся на одномерные массивы, двумерные массивы, трёхмерные массивы и так далее до n-мерного массива. Чаще всего в программировании используются одномерные и двумерные массивы.

Одномерный массив может быть числовой последовательностью с известным количеством членов. Так же, как и в последовательности, в массиве можно указать элемент с конкретным номером, например а5, или записать общий вид элемента, используя в качестве индекса переменную и указывая диапазон ее изменения: аi, i=1, 2, …, n.

Задачи на обработку массивов могут иметь различную формулировку. Например, начинаться со слов «Дано n чисел...», а далее говорится, что требуется сделать с этими числами. Чтобы решить такую задачу на компьютере с использованием языка программирования Паскаль, необходимо выполнить следующее: