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

Belova_TM

.pdf
Скачиваний:
56
Добавлен:
06.05.2015
Размер:
2.46 Mб
Скачать

Программирование простых циклических алгоритмов в системе Delphi 81

Операторы:

Значения:

for k := 10 to 14 do

10 11 12 13 14

for k := 14 downto 11 do

14 13 12 11

for c := ’a’ to ‘e’ do

a

b

c d

e

for c := ’e’ downto ‘a’ do

e

d

c b

a

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

Пример программирования циклического алгоритма

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

1. Разработка алгоритма (рис. 4.4):

а) входные данные: х1, x2 – целочисленные переменные; б) выходные данные: s – целочисленная переменная.

x1, x2

s:=0

Нет

x1<=x2

Да

s:=s+x1

x1:=x1+1

s

Рис. 4.4. Схема алгоритма вычисления суммы чисел

82Программирование простых циклических алгоритмов в системе Delphi

2.Разработка формы (рис. 4.5).

Рис. 4.5. Внешний вид формы

Чтобы сконструировать форму, изменим свойства каждой компоненты соответствующим образом (табл. 4.1).

Таблица 4.1

Используемые компоненты

 

Имя

Страница

Настраи-

 

 

палитры

ваемые

Значение

компонента

компонент

свойства

 

1.

Form1

Caption

Пример лабораторной работы №4

2.

Edit1

Standard

Text

 

3.

Edit2

Standard

Text

 

4.

Label1

Standard

Caption

ВНИМАНИЕ! Вводить только целые

 

 

 

 

числа!

5.

Label2

Standard

Caption

Введите границу диапазона (снизу)

6.

Label3

Standard

Caption

Введите границу диапазона (сверху)

7.

Label4

Standard

Caption

Результат

8.

Label5

Standard

Caption

 

9.

Label6

Standard

Caption

Для вывода результата – щелчок по

 

 

 

 

метке «Результат»

3. Текст программы: unit Unit1; interface

Программирование простых циклических алгоритмов в системе Delphi 83

uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;

type

TForm1 = class(TForm) Label1: TLabel; Label2: TLabel; Label3: TLabel; Label4: TLabel; Edit1: TEdit;

Edit2: TEdit;

Label5: TLabel;

Label6: TLabel;

procedure Label4Click(Sender: TObject); private

{Private declarations } public

{Public declarations }

end; var

Form1: TForm1;

implementation {$R *.dfm}

{обработчик события OnClick} procedure TForm1.Label4Click(Sender: TObject); var x1,x2,s:integer;

begin

{преобразуем текст из Edit1 в целое число} x1:=StrToInt(Edit1.Text);

{преобразуем текст из Edit2 в целое число} x2:= StrToInt(Edit2.text);

{обнуление суммы} s:=0;

{организация цикла} while x1<=x2 do {тело цикла} begin

{прибавление к сумме текущего значения х1}

84 Программирование простых циклических алгоритмов в системе Delphi

s:=s+x1;

{увеличение значения х1 на 1} x1:=x1+1;

end; {конец тела цикла}

{преобразуем число s в строку и покажем результат в метке} Label5.Caption:=IntToStr(s);

end;

end.

Контрольные вопросы к главе 4

1.Как функционирует оператор цикла for и какая типовая схема алгоритма ему соответствует?

2.Как функционирует оператор цикла while и какая типовая схема алгоритма ему соответствует?

3.Как функционирует оператор цикла repeat и какая типовая схема алгоритма ему соответствует?

4.Определить значение переменной s после выполнения операторов:

s:=0; i:=1;

while i>5 do i:=i+1; s:=s+1/i;

5.Определить значение переменной s после выполнения операторов:

s:=0; i:=1;

repeat s:=s+1/i; i:=i+1; until i>1;

6.Определить значение переменной s после выполнения операторов:

s:=0; i:=1;

while i>1 do begin s:=s+1/i; i:=i–1; end;

7.Определить значение переменной s после выполнения операторов:

s:=1; n:=1;

for i:=2 to n do s:=s+s1/i;

8.Сколько раз будет выполнятся тело цикла?

k:=0;

Программирование простых циклических алгоритмов в системе Delphi 85

for i:=0 to 9 do k:=k+1;

9.Найдите ошибки в следующих фрагментах программы, ес-

ли var k, i: integer; x, y: real:

а) y:=0; for x:=0.1 to 0.9 do y:=y+sin x;

б) k:=82; y:=1; for i:=1 to sqrt (k) do y:=2*y;

10.Найдите ошибки в следующих фрагментах программы,

если var k, i: integer; x, y: real:

а) k:=0; for i:=1 to 9 do i:=k+sqr(i); k:=k+1;

б) k:=1; for i:=64 to 1 do begin i:=2*i; k:=k+1; end;

Задания к лабораторной работе № 4

1.Дано натуральное число n. Вычислить f=n!

2.Подсчитать k – количество цифр в десятичной записи целого неотрицательного числа n.

3.Задача Л. Эйлера. Некий чиновник купил лошадей и быков на 1770 талеров. За каждую лошадь он уплатил по 31 талеру, а за каждого быка – по 21 талеру. Сколько лошадей и быков купил чиновник? Выяснить, если решения в целых числах имеются, то сколько их – одно или несколько?

4.Вычислить y = cos x+cos2x + cos3 x +...+cos30x.

5.Вычислить y = sin 1+ sin 1,1 + ... +sin 2.

6.Логической переменной p присвоить значение true, если целое n (n>1) – простое число, и значение false иначе.

7.Вычислить:

20

s= xi2, ãäå xi=xi-1+dx; x1=1,8; dx=0,5.

i=1

8.Определить k – количество трехзначных натуральных чисел, сумма цифр которых равна n (значение n может быть в диапо-

зоне 1<n<27).

9.Напечатать в возрастающем порядке все трехзначные числа, в десятичной записи которых нет одинаковых цифр.

10.Определить количество натуральных чисел, не превышающих n, которые не делятся нацело на 7.

11.Дано натуральное число n. Необходимо:

а) выяснить, входит ли цифра 3 в запись числа n;

86 Программирование простых циклических алгоритмов в системе Delphi

б) поменять порядок цифр числа n на обратный. 12. Дано натуральное число n. Необходимо:

а) переставить первую и последнюю цифры числа n;

б) приписать по единице в начало и в конец записи числа n. 13. Вычислить:

10

s (x3i +8,5) , ãäå xi = xi-1+dx; x1=1,2; dx=0,2.

i=1

14. Вычислить:

15

s = (xi2+1,5)/( xi +5) , ãäå xi =xi-1+dx; x1=2,8; dx=0,3.

i=1

15. Вычислить:

15

y= x3i , ãäå xi = xi-1+dx; x1=1; dx=0,2.

i=1

16.Математик Христиан Гольдбах (1690 – 1764) выдвинул гипотезу о том, что любое четное число, большее 2, представимо в виде суммы двух простых чисел. Проверьте эту гипотезу для всех четных чисел, не превышающих число 30.

17.Дано натуральное число n. Подсчитать количество единиц

взаписи данного числа в двоичной системе счисления.

18.Дано натуральное число n. Подсчитать количество нулей в записи данного числа в двоичной системе счисления.

19.Дано натуральное число n. Подсчитать количество нулей в записи данного числа в десятичной системе счисления.

20.Вычислить среднее арифметическое значение всех целых чисел, значения которых лежат в диапозоне от a до b.

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

22.Вычислить:

12

y= (xi2 +3,5), ãäå xi = xi-1+ dx; x1=1; dx=0,3.

i=1

23. Вычислить:

15

y= (5+sin xi2 ), ãäå xi = xi-1+dx; x1=0,3; dx=0,2.

i=1

24. Вычислить:

Задания к лабораторной работе № 4

87

20

s= (xi2+xi+7), ãäå xi = xi-1+dx; x1=2; dx=0,3.

i=1

25. Вычислить:

20

s= xi , ãäå xi=xi-1+dx; x1 =1,2; dx=0,5.

i=1

26. Вычислить:

20

s= cos xi2, ãäå xi =xi-1+dx; x1=0,2; dx=0,1.

i=1

27. Вычислить:

10

s= ctg xi2, ãäå xi=xi-1+dx; x1 =0,3; dx=0,1.

i=1

5. ПРОГРАММИРОВАНИЕ С ИСПОЛЬЗОВАНИЕМ ОДНОМЕРНЫХ МАССИВОВ В СИСТЕМЕ DELPHI

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

Массив и одномерный массив

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

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

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

Одномерный массив – это набор элементов одного типа, расположенных в одну строку.

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

Описание массива

Для описания массива предназначены зарезервированные слова array и of (массив, из). За словом array в квадратных скобках указывается тип-диапазон (в качестве тип-диапазона может выступать любой порядковый тип), с помощью которого компилятор определяет общее число элементов массива. Тип-диапазон задается левой и правой границами изменения индекса массива. За словом of указывается тип элементов, образующих массив.

Программирование с использованием одномерных массивов

89

type

<имя типа> = array[тип индекса] of <тип компонент>; var

<идентификатор,...> : <имя типа>;

<идентификатор,...> : array [тип индекса] of <тип компонент>;

Примеры

{Описания одномерных массивов} type

t1 = array [1..10] of integer; var

m : t1;

m1 : array [0..19] of real;

В данном примере описаны два одномерных массива: М – массив, состоящий из 10 целых чисел; М1 – массив, состоящий из 20 вещественных чисел.

Для объявления размерности массива можно использовать константы:

Const N = 5; var

mas: array [0..N-1] of real;

Массив может быть описан в разделе описания констант как типизированная константа c заданными значениями:

Const

x : array [0..4] of integer = (8,10,1,5,3);

Действия над одномерными массивами

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

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

90

Программирование с использованием одномерных массивов

Над массивами как над единым целым можно выполнять три действия: «равно», «неравно» и оператор присваивания:

Выражение А=В

А<>B

А:=В

Результат

TRUE, если значение каждого элемента массива А равно соответствующему значению элемента массива В

TRUE, если хотя бы одно значение элемента массива А не равно значению соответствующего элемента массива В Все значения элементов массива В присваиваются соответствующим элементам массива А. Значения элементов массива В остаются неизменными

Ввод значений элементов одномерного массива с клавиатуры и вывод на форму приложения можно осуществить с помощью компоненты StringGrid страницы Additional, предназначенной для создания таблиц, в ячейках которых располагаются произвольные текстовые строки. С помощью компоненты Edit, представляющей собой однострочный редактор текста, можно вводить и (или) отображать длинные текстовые строки.

Пример

//позволяет вывести содержимое ячейки

Edit1.Text:=StringGrid1.Cells[i,0];

где i – номер столбца; 0 – номер строки.

После выполнения этого оператора присваивания в поле Edit1.Text будет содержаться текст из ячейки таблицы; StringGrid1.Cells[i,0] – определяет содержимое ячейки с табличными координатами (i,0).

В четвертой версии Delphi были введены динамические массивы. Размер динамического массива может изменяться во время выполнения программы.

Описание одномерных динамических массивов:

var

x:array of real; y:array of integer;

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

SetLength(x, n);

SetLength(y, n);