Учебный курс Программирование на Delphi. Модуль 13: различия между версиями
(→Задание) |
|||
(не показаны 23 промежуточные версии 6 участников) | |||
Строка 1: | Строка 1: | ||
+ | == Использование процедур== | ||
<Center>'''Использование процедур'''</Center> | <Center>'''Использование процедур'''</Center> | ||
− | В Delphi7, | + | Часто в программе появляются участки, выполняющие одни и те же действия с различными данными. |
+ | Такие участки лучше всего оформлять в виде подпрограмм. | ||
+ | Выделяют два вида подпрограмм: Процедуры и функции. | ||
+ | Процедурой называют особенным образом оформленный фрагмент программы, имеющий собственное имя. | ||
+ | В заголовке процедуры, может быть задан список формальных параметров.При вызове процедур, формальные параметры, будут заменены фактическими. | ||
+ | |||
+ | В Delphi7, объявления процедур происходит автоматически при создании действия с элементом. | ||
Создать такое действие можно либо просто дважды щёлкнув на объекте (click), либо выбрав нужное действие из подменю events в object inspector | Создать такое действие можно либо просто дважды щёлкнув на объекте (click), либо выбрав нужное действие из подменю events в object inspector | ||
Строка 6: | Строка 13: | ||
procedure TForm1.Button1Click(Sender: TObject); | procedure TForm1.Button1Click(Sender: TObject); | ||
− | Эта строка означает, что если нажать (click) на кнопку button1, находящуюся на форме form1, то будут выполнятся действия, которые указаны | + | Эта строка означает, что если нажать (click) на кнопку button1, находящуюся на форме form1, то будут выполнятся действия, которые указаны в теле процедуры. |
− | + | ||
== Пример 1.== | == Пример 1.== | ||
− | *Условие | + | *'''Условие''' |
− | + | Массив A(n) отсортировать в порядке возрастания элементов.<br> | |
− | + | Сортировка осуществляется методом выбора. | |
− | + | Для этого в процедуре max ищется номер максимального элемента. В основном алгоритме максимальный эемент и последний меняются местами. Цикл повторяется до тех пор, пока не останется только один не отсортированный элемент. | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
+ | *'''Использованные компоненты''' | ||
+ | label1 - для текстовых комментарий; <br> | ||
+ | label2 - для текстовых комментарий; <br> | ||
+ | label3 - для текстовых комментарий; <br> | ||
+ | Button1 - для формирования вектора;<br> | ||
+ | Button2 - для вызова процедуры сортировки;<br> | ||
+ | Button3 - для выхода;<br> | ||
+ | StringGrid1 - для вывода исходного массива;<br> | ||
+ | StringGrid2 - для вывода отсортированного массива.<br> | ||
+ | *'''Программный код''' | ||
+ | unit Unit1; | ||
+ | interface | ||
+ | uses | ||
+ | Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, | ||
+ | Dialogs, XPMan, Grids, StdCtrls, Buttons; | ||
+ | type | ||
+ | x=array [1..20] of real; | ||
+ | TForm1 = class(TForm) | ||
+ | Button1: TButton; | ||
+ | Edit1: TEdit; | ||
+ | Label1: TLabel; | ||
+ | StringGrid1: TStringGrid; | ||
+ | Label2: TLabel; | ||
+ | Button2: TButton; | ||
+ | StringGrid2: TStringGrid; | ||
+ | Label3: TLabel; | ||
+ | XPManifest1: TXPManifest; | ||
+ | BitBtn1: TBitBtn; | ||
+ | procedure Button1Click(Sender: TObject); | ||
+ | procedure Button2Click(Sender: TObject); | ||
+ | procedure BitBtn1Click(Sender: TObject); | ||
+ | private | ||
+ | { Private declarations } | ||
+ | public | ||
+ | { Public declarations } | ||
+ | end; | ||
+ | var | ||
+ | Form1: TForm1; | ||
+ | a:x; i, j, n, k: integer; R: real; | ||
+ | implementation | ||
+ | {$R *.dfm} | ||
+ | procedure max (q: integer; var nmax: integer); | ||
+ | var m: real; l: integer; | ||
+ | begin | ||
+ | m:=A[1]; nmax:=1; | ||
+ | for l:=1 to q do | ||
+ | if A[l]>m then | ||
+ | begin | ||
+ | m:= A[l]; nmax:= l | ||
+ | end | ||
+ | end; {конец описания процедуры} | ||
+ | procedure TForm1.Button2Click(Sender: TObject); | ||
+ | begin | ||
+ | randomize; | ||
+ | n:=strtoint(edit1.Text); | ||
+ | j:=n; | ||
+ | for i:=1 to n do begin | ||
+ | a[i]:=random(11); | ||
+ | stringgrid1.Cells[i-1,0]:=floattostr(a[i]); | ||
+ | end; | ||
+ | end; | ||
+ | procedure TForm1.Button1Click(Sender: TObject); | ||
+ | begin {основная программа} | ||
+ | while j <> 1 do | ||
+ | begin | ||
+ | max (j, k); | ||
+ | R:= A[k]; A[k]:= A[j]; A[j]:= R; | ||
+ | j:= j-1; | ||
+ | end; | ||
+ | for i:=1 to n do | ||
+ | stringgrid2.Cells[i-1,0]:=floattostr(a[i]); | ||
+ | end; | ||
procedure TForm1.BitBtn1Click(Sender: TObject); | procedure TForm1.BitBtn1Click(Sender: TObject); | ||
− | |||
begin | begin | ||
− | + | close; | |
− | + | end; | |
− | + | end. | |
− | + | *'''Форма с результатом работы программы''' | |
− | + | [[Изображение:-11-1.JPG]] | |
− | |||
− | |||
− | |||
− | end; | ||
− | end. | ||
− | *Форма с результатом работы программы | ||
− | [[Изображение:- | ||
− | |||
− | |||
− | + | ==Задание== | |
+ | Таблица 13 | ||
− | + | {| border=1 | |
+ | ! Номер варианта|| Условие | ||
+ | |- | ||
+ | | <Center>1</Center>|| В массиве A(n) и B(n) все элементы, следующие за максимальным (за первым по порядку, если их несколько), заменить на 1. | ||
+ | |- | ||
+ | | <Center>2</Center>|| Дана матрица A(n,m). Упорядочить столбцы по убыванию элементов. | ||
+ | |- | ||
+ | | <Center>3</Center>|| Дана матрица X(n,m). Упорядочить строки по возрастанию элементов. | ||
+ | |- | ||
+ | | <Center>4</Center>|| Дана матрица У(k,l). Получить из нее вектор, содержащий суммы элементов строк. Отсортировать его в порядке убывания элементов. | ||
+ | |- | ||
+ | | <Center>5</Center>|| Из текста выделить слова и вывести их в алфавитном порядке. | ||
+ | |- | ||
+ | | <Center>6</Center>|| Вычислить: | ||
− | + | [[Изображение:Формула вар 6.jpg]] | |
− | + | ||
− | + | где Xmax - максимальный элемент вектора X(n) Уmax - максимальный элемент вектора У(m). | |
− | |||
− | |||
− | |||
− | + | |- | |
− | + | | <Center>7</Center>||Вычислить суммы элементов векторов У(k) и X(L), находящиеся в интервале от а до b. | |
− | + | |- | |
− | + | | <Center>8</Center>||Вычислить: | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | + | [[Изображение:Формула вар 8.jpg]] | |
− | * | + | |- |
− | + | | <Center>9</Center>||Решить уравнение a*x+b=0, | |
+ | где а - длина вектора У(n), b - длина вектора Z(m). | ||
+ | |- | ||
+ | | <Center>10</Center>||Решить уравнение [[Изображение:Формула вар 10.jpg]] | ||
+ | где а - произведение элементов целочисленного вектора Т(к), b - произведение элементов целочисленного вектора D(L), с - произведение элементов целочисленного вектора R(n). | ||
− | + | |- | |
+ | | <Center>11</Center>||Дана матрица У(к,к). Сформировать вектор, содержащий диагональные элементы матрицы У. Отсортировать его в порядке убывания элементов. | ||
+ | |- | ||
+ | | <Center>12</Center>||Решить уравнение [[Изображение:Формула вар 12.jpg]] | ||
+ | |||
+ | где р - минимальный элемент матрицы A(3,3), q - минимальный элемент матрицы B(4,4), r - минимальный элемент матрицы С(5,5). | ||
− | + | |- | |
− | + | | <Center>13</Center>||Заданы три матрицы A(m,m), B(n,n), C(k,k). Найти минимальный из всех максимальных элементов главных диагоналей матриц. | |
− | + | |- | |
− | + | | <Center>14</Center>||Вычислить: | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | + | [[Изображение:Формула вар 14.jpg]] | |
+ | |- | ||
+ | |} | ||
==Литература== | ==Литература== |
Текущая версия на 11:55, 20 мая 2008
Использование процедур
Часто в программе появляются участки, выполняющие одни и те же действия с различными данными. Такие участки лучше всего оформлять в виде подпрограмм. Выделяют два вида подпрограмм: Процедуры и функции. Процедурой называют особенным образом оформленный фрагмент программы, имеющий собственное имя. В заголовке процедуры, может быть задан список формальных параметров.При вызове процедур, формальные параметры, будут заменены фактическими.
В Delphi7, объявления процедур происходит автоматически при создании действия с элементом. Создать такое действие можно либо просто дважды щёлкнув на объекте (click), либо выбрав нужное действие из подменю events в object inspector
Пример объявления процедуры:
procedure TForm1.Button1Click(Sender: TObject); Эта строка означает, что если нажать (click) на кнопку button1, находящуюся на форме form1, то будут выполнятся действия, которые указаны в теле процедуры.
Пример 1.
- Условие
Массив A(n) отсортировать в порядке возрастания элементов.
Сортировка осуществляется методом выбора.
Для этого в процедуре max ищется номер максимального элемента. В основном алгоритме максимальный эемент и последний меняются местами. Цикл повторяется до тех пор, пока не останется только один не отсортированный элемент.
- Использованные компоненты
label1 - для текстовых комментарий;
label2 - для текстовых комментарий;
label3 - для текстовых комментарий;
Button1 - для формирования вектора;
Button2 - для вызова процедуры сортировки;
Button3 - для выхода;
StringGrid1 - для вывода исходного массива;
StringGrid2 - для вывода отсортированного массива.
- Программный код
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, XPMan, Grids, StdCtrls, Buttons; type x=array [1..20] of real; TForm1 = class(TForm) Button1: TButton; Edit1: TEdit; Label1: TLabel; StringGrid1: TStringGrid; Label2: TLabel; Button2: TButton; StringGrid2: TStringGrid; Label3: TLabel; XPManifest1: TXPManifest; BitBtn1: TBitBtn; procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); procedure BitBtn1Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; a:x; i, j, n, k: integer; R: real; implementation {$R *.dfm} procedure max (q: integer; var nmax: integer); var m: real; l: integer; begin m:=A[1]; nmax:=1; for l:=1 to q do if A[l]>m then begin m:= A[l]; nmax:= l end end; {конец описания процедуры} procedure TForm1.Button2Click(Sender: TObject); begin randomize; n:=strtoint(edit1.Text); j:=n; for i:=1 to n do begin a[i]:=random(11); stringgrid1.Cells[i-1,0]:=floattostr(a[i]); end; end; procedure TForm1.Button1Click(Sender: TObject); begin {основная программа} while j <> 1 do begin max (j, k); R:= A[k]; A[k]:= A[j]; A[j]:= R; j:= j-1; end; for i:=1 to n do stringgrid2.Cells[i-1,0]:=floattostr(a[i]); end; procedure TForm1.BitBtn1Click(Sender: TObject); begin close; end; end.
- Форма с результатом работы программы
Задание
Таблица 13
Литература
- Архангельский. Программирование на Delphi 6. – М: БИНОМ, 2002
- Бобровский С. Delphi 7. Учебный курс. – СПб: Питер, 2003
- Культин Н. Основы программирования в Delphi 7. СПб: БХВ-Петербург, 2005.