Сдам Сам

ПОЛЕЗНОЕ


КАТЕГОРИИ







Оператор REPEAT. Процедуры INC и DEC





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

Repeat

{инструкции}

until условие;

 

где условие – выражение логического типа, определяющее условие завершения цикла.

Инструкция repeat выполняется следующим образом: сначала выполняются инструкции, следующие за словом repeat. Затем проверяется условие (вычисляется значение выражения условие). Если условие ложно (значение выражения условие равно FALSE), то инструкции цикла (инструкции, находящиеся между repeat и until) выполняются еще раз. Если условие истинно (значение выражения условие равно TRUE), то выполнение цикла прекращается. Таким образом, инструкции, находящиеся между repeat и until выполняются до тех пор, пока условие ложно (значение выражения условие равно FALSE).

 

Пример использования:

x:=0;

repeat

x:=x+1;

until x=10;

 

Алгоритм, соответствующий инструкции repeat, представлен на Рисунок 18 - Блок-схема, соответствующая инструкции repeat.

 

Рисунок 18 - Блок-схема, соответствующая инструкции repeat

Обратите внимание.

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

Для того чтобы цикл завершился, необходимо, чтобы инструкции цикла, находящиеся между repeat и until, изменяли значения переменных, входящих в выражение условие

Процедура INC увеличивает порядок на 1 или N и соответствует утверждению X:=X+1 или X: = X + N.

procedure Inc(var X [ ; N: Longint ] ),

где X - переменная порядкового типа, N - выражение типа целого числа.



Процедура DEC уменьшает на 1 или N от переменной и соответствует утверждению X: = X - 1, или X: = X - N.

 

procedure Dec(var X[ ; N: Longint]),
где X - переменная порядкового типа, N - выражение типа целого числа.

Цикл FOR

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

В общем виде инструкция for записывается так:

 

forсчетчик:=нач_значение toкон_значение do

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

нач_значение – выражение, определяющее начальное значение переменной – счетчика циклов; кон_значение – выражение, определяющее конечное значение переменной – счетчика циклов.

Условный оператор цикла позволяет остановить выполнение тела цикла, только когда все операторы, входящие в него, выполнены и достигнута проверка условия окончания. Такой подход иногда неудобен, особенно если тело цикла представляет собой длинную последовательность операторов и необходимость завершения цикла выясняется в середине этой последовательности. Обычно в качестве выражений, определяющих значения начального и ко­нечного состояния счетчика циклов, используют переменные или константы в этом случае последовательность операторов, находящаяся между begin и end, будет выполнена (кон_значение – нач_значение + 1) раз. Алгоритм, соответствующий инструкции for, представлен на Рисунок 19 - Блок-схема, соответствующая инструкции for. Обратите внима­ние, что в случае, если начальное значение счетчика превышает конечное значение счетчика, то последовательность операторов между begin и end ни разу не будет выполнена.

Пример использования:

s:=0;

for x:=1 to 10 do

begin

s:=s+10;

if s=40 then …

end;

 

 

Рисунок 19 - Блок-схема, соответствующая инструкции for

 

Команды BREAK и CONTINUE

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

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

Пример использования:

N:=0;

for i:=1 to Length(S) do

if S[i] = ’ ’ then

begin

N:=i;

Break;

end;

 

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

В программировании имеется команда, по своему действию противоположная команде прерывания цикла. Она позволяет немедленно продолжить выполнение цикла, пропустив все оставшиеся операторы в теле цикла. Эта команда (подпрограмма без параметров, играющая роль оператора) записывается так: Continue;

Пример использования:

N:=0;

for i:=1 to Length(S) do

Begin

If S[i] <> ‘ ’ then Continue;

N:=i;

Break;

End;

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

Вложенные циклы

Если цикл включает в себя один или несколько циклов, то содержащий внутри себя другие циклы называется внешним, а цикл, содержащийся в другом цикле вложенным.При программировании вложенных циклов необходимо выполнить правило: внутренний оператор цикла и принадлежащая ему область действия должны полностью содержаться внутри области внешнего цикла, таким образом внешний цикл всегда начинается раньше, а заканчивается позже, чем внутренний. Блок – схема вложенного цикла представлена на Рисунок 20 – Блок-схема, соответствующая вложенному циклу.

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

Рисунок 20 – Блок-схема, соответствующая вложенному циклу

 

Примеры задач с циклами

1) Вычисление суммы элементов ряда.

 

var

i:integer;

elem, summ:real;

begin

sum:=0;

for i:=1 to 5 do

begin

elem:=1/i;

sum:=sum+elem;

Memo1.Lines.Add (FloatToStr(elem));

end;

Label1.Caption:=‘Сумма элементов ряда: '+

FloatToStr(sum));

end;

2) Вычисление числа ПИ с заданной точностью.

 

program pi;

var

n:integer;

p, t, elem:real;

begin

p:=0;

n:=1;

elem:=1;

write(‘Задайте точность вычисления ПИ ’);

readln(t);

writeln(‘Вычисление ПИ с точностью’,t:9:6);

while elem >= t do

begin

elem:=1/(2*n-1);

if (n mod 2) = 0

then p:=p-elem

else p:=p+elem;

n:=n+1;

end;

p:=p*4;

writeln(‘Значение ПИ с точностью’,t:9:6,’равно’,p:9:5);

writeln(‘Просуммировано’,n,’ членов ряда’);

end.

3) Вычисление суммы положительных чисел, введенных с клавиатуры.

 

program summrep;

var

summ, numb:integer;

begin

writeln(‘Вычисление суммы положительных целых чисел’);

summ:=0;

repeat

write(‘->’);

readln(numb);

if numb>0 then sum:=sum+numb;

until numb <= 0;

writeln(‘Сумма введенных чисел: ’summ);

end.

 

Лекция 14

Массивы

 

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

Объявление массива

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

Имя: array [нижний_индекс. .верхний_индекс] ofтип

где:

· имя — имя массива;

· array — зарезервированное слово языка Delphi, обозначающее, что объявляемое имя является именем массива;

· нижний_индекс и верхний_индекс — целые константы, определяющие диапазон изменения индекса элементов массива и, неявно, количество элементов (размер) массива;

· тип — тип элементов массива.

Примеры объявления массивов:

temper:array[1..31] of real;

коef:array[0. .2] of integer;

name:array[1..30] of string[25];

 

В общем виде инструкция объявления двумерного массива выглядит так:

Имя: array[ НижняяГраница1..ВерхняяГраница1,

НижняяГраница2..ВерхняяГраница2] of Тип

где:

· Имя — имя массива;

· array — слово языка Delphi, указывающее, что объявляемый элемент данных является массивом;

· НижняяГраница1, ВерхняяГраница1, НижпяяГраница2, ВерхняяГраница2 — целые константы, определяющие диапазон изменения индексов и, следовательно, число элементов массива;

· Тип — тип элементов массива.

Количество элементов двумерного массива можно вычислить по формуле:

(ВГ1-НГ1+1) х (ВГ2-НГ2+1):

где:

ВГ1 и ВГ2 — верхняя граница первого и второго индексов;

НГ1 и НГ2 — нижняя граница первого и второго индексов.

 

При объявлении массива удобно использовать именованные константы. Именованная константа объявляется в разделе объявления констант, который обычно располагают перед разделом объявления переменных. Начинается раздел объявления констант словом const. В инструкции объявления именованной константы указывают имя константы и ее значение, которое отделяется от имени символом "равно". Например, чтобы объявить именованную константу YB, значение которой равно 10, в раздел const надо записать инструкцию: YB=10. После объявления именованной константы ее можно использовать в программе как обычную числовую или символьную константу. Ниже в качестве примера приведено объявление массива названий команд-участниц чемпионата по футболу, в котором используются именованные константы.

const

NT = 18; // число команд

SN = 25; // предельная длина названия команды

var

team: array[1..NT] of string[SN];

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

team [ 1] := 'Зенит';

d := koef[l]*koef[l]-4*koef[2]*koef[1];

ShowMessage(name[n+1]);

temper[i] := StrToFloat(Edit1.text);

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

Имя:array [нижний_индекс..верхний_индекс] of тип = (список);

где список — разделенные запятыми значения элементов массива. Например:

a: array[10] of integer = (0,0,0,0,0,0,0,0,0,0);

Team: array[1..5] of String[10]=('Зенит','Динамо','Спартак','Ротор','СКА');

Обратите внимание, что количество элементов списка инициализации должно соответствовать размерности массива. Если это будет не так, то компилятор выведет сообщения об ошибке: Number of elements differs from declaration (количество элементов не соответствует указанному в объявлении).

При попытке инициализировать локальный массив компилятор выводит сообщение об ошибке: Cannot initialize local variables (локальная переменная не может быть инициализирована). Локальный массив можно инициализировать только во время работы программы, например, так:

 

for i := 1 to 10 do

a[i]:= 0;

Операции с массивами

Типичными операциями при работе с массивами являются:

· вывод массива;

· ввод массива;

· поиск максимального или минимального элемента массива;

· поиск заданного элемента массива;

· сортировка массива.

Вывод массива

Под выводом массива понимается вывод на экран монитора (в диалоговое окно) значений элементов массива.

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

В качестве примера на Рисунок 21 приведено диалоговое окно приложения, которое демонстрирует инициализацию и процесс вывода значений элементов массива в поле метки. Программа выводит пронумерованный список футбольных команд. Следует обратить внимание, что для того чтобы список команд выглядел действительно как список, свойству Label1.AutoSize нужно присвоить значение False (присвойте свойству Label1.AutoSize значение True и посмотрите, как будет работать программа). Текст программы приведен в листинге 1.

 

Рисунок 21 - Форма и диалоговое окно приложения Вывод массива

 

Листинг 1. Инициализация и вывод массива

 

unit outar_;

Interface

Uses

Windows, Messages, SysUtils, Variants,

Classes, Graphics, Controls, Forms,

Dialogs, StdCtrls;

 

Type

TForm1 = class(TForm);

Button1: TButton;

Label1: TLabel;

 

procedure ButtonlClick(Sender: TObject);

Private

{ Private declarations }

Public

{ Public declarations }

end;

 

Var

Form1: TForm1;

 

Implementation

($R *.dfm}

Const

NT = 5;

 

Var

team: array[1..NT] of string[10] =

('Зенит','Динамо','Ротор','Спартак','СКА');

 

procedure TForml.ButtonlClick(Sender: TObject);

Var

st:string; // список команд

i:integer; // индекс, номер элемента массива

 

Begin

// формирование списка для отображения в форме

for i:=l to NT do st := st + IntToStr(i)+ ' '

+ team[i] + #13; // вывод списка Label1.Caption := st;

end;

end;

Ввод массива

Под вводом массива понимается процесс получения от пользователя (или из файла) во время работы программы значений элементов массива.

"Лобовое" решение задачи ввода элементов массива — для каждого элемента массива создать поле ввода. Однако если требуется ввести достаточно большой массив, то такое решение неприемлемо. Представьте форму, например, с десятью полями редактирования!

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









Не нашли то, что искали? Воспользуйтесь поиском гугл на сайте:


©2015- 2019 zdamsam.ru Размещенные материалы защищены законодательством РФ.