Belova_TM
.pdfПрограммирование простых циклических алгоритмов в системе 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);