В отличии от процедур, объявление функций в разделе объявлений модуля среды Delphi не требуется.
function Mytg(x: real): real;
begin
Mytg := sin(x)/cos(x);
end;
procedure TForm1.Button1Click(Sender: TObject);
var x, y :real;
begin
x:=StrToFloat(Edit1.Text);
y := Mytg(x)+ 1/Mytg(x) + sqr(Mytg(x));
Label3.Caption:=FloatToStr(y);
end;
Лабораторная работа №13
Используя подпрограммы образовать и вывести двумерный массив A с элементами am, n=2mfi(n), где m, n = 1, 2, 3, 4. Составить еще одну программу для поиска в данном массиве, критерий которого взят из условия лабораторной работы № 8. Выполнить два варианта: один – в среде Pascal, другой – в среде Delphi.
Рекурсия
Рекурсией называется алгоритмическая конструкция, в которой подпрограмма вызывает сама себя. Рекурсия позволяет записывать циклические алгоритмы, не используя команды цикла.
Пример
Рекурсивная функция вычисления суммы целых чисел от a до b.
function Sum(a, b: integer) : integer;
begin
if a = b then Sum := a; { Это условие остановки рекурсии}
else Sum := b+ Sum(a, b-1); {Это условие продолжения рекурсии, неявный цикл}
end;
Таким образом,
Sum(3, 5)=5+ Sum(3,4) + 5+4+ Sum(3,3)=5+4+3
Пример
Составить рекурсивную функцию Factorial для вычисления n!, которая основывается на формуле n!=n * (n – 1)!
Код программы в среде Pascal
program Factorial (n: integer) : integer;
begin
if n = 0 then Factorial := 1
else Factorial :=n*Factorial(n-1);
end.
Внешний вид формы в Delphi
В конструкторе | При выполнении |
|
|
Код программы в среде Delphi
function Factorial (n: integer) : integer;
begin
if n = 0 then Factorial := 1
else Factorial :=n*Factorial(n-1);
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
Label3.Caption:=IntToStr(Factorial(StrToInt(Edit1.Text)));
end;
Лабораторная работа №14
Составить программу вычисления суммы и произведения
X=У(fi(k)) и Y = П(fi+1(k)),
где k от 1 до заданного пользователем числа, используя рекурсивные функции.
Вывести значение выражения z. Выполнить два варианта: один – в среде Pascal, другой – в среде Delphi.
№ | Формулировка задания | № | Формулировка задания |
1. | z = x+y | 14. | z = xy – 12 |
2. | z = xy | 15. | z = x – 2y |
3. | z = tg y – x | 16. | z = 2xy – x |
4. | z = (x+y)2 | 17. | z = cos (xy) |
5. | z =5xy – 4 | 18. | z = |x – y| |
6. | z = sin x + y | 19. | z = ctg 2x – y |
7. | z = x + y2 | 20. | z = exy |
8. | z = x2y-3 | 21. | z = 4xy – y |
9. | z = (xy)1/4 | 22. | z = 2x – y |
10. | z = |12x – y| | 23. | z = 2x2 – 4y |
11. | z = tg (x+y) | 24. | z = ln |x + 4y| |
12. | z = 3xy – cos y | 25. | z = 4x + ey |
13. | z = 5x – 2y |
Записи
Запись – это структура (тип данных), предназначенная для хранения в оперативной памяти компьютера сложных данных, состоящих из дополнительных компонент различных типов, которые называются полями. Синтаксис описания записей в разделе type или в разделе var:
ИмяЗаписи = record
ИмяПоля1 : ТипПоля1;
…
ИмяПоляN : ТипПоляN;
end;
Синтаксис доступа к конкретному полю конкретной записи
ИмяЗаписи. ИмяПоля
Однако, составным именем пользоваться не всегда удобно. Для их упрощения служит команда присоединения with.
with ИмяПеременной do Команда;
Пример
Используя тип массив записей, составить программу для учета и обработки данных о наличии на складе автомашин. Вывести на экран информацию о моделях и годах выпуска машин, цена которых меньше 3000 у. е.
Код программы в среде Pascal
program Autoprice;
uses Crt;
const n =10;
type MyAuto = record
mark : string[15];
year, price : integer;
end;
var a1 : array[1..n] of MyAuto;
i : integer;
begin
clrscr;
for i:=1 to 10 do
with a1[i] do
begin
writeln(‘введите марку машины’);
readln(mark);
writeln(‘введите год выпуска’);
readln(year);
writeln(‘введите цену’);
readln(price);
end;
writeln();
writeln(‘Фирма предлагает такие машины’);
for i:=1 to 10 do
with a1[i] do
writeln (mark:15, yeat:10, ‘$’, price);
writeln();
writeln(‘Выведем информацию об отобранных машинах’);
for i:=1 to 10 do
with a1[i] do
if price < 3000 then writeln (mark:15, yeat:10);
readln;
end.
Внешний вид формы в Delphi
В конструкторе |
|
При выполнении |
|
Код программы в среде Delphi
{полный код модуля}
unit uRecord;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Grids, StdCtrls;
const n =10;
type
MyAuto = record
mark : string[15];
year, price : integer;
end;
TForm1 = class(TForm)
Button1: TButton;
StringGrid1: TStringGrid;
Button2: TButton;
Label1: TLabel;
Edit1: TEdit;
StringGrid2: TStringGrid;
Label2: TLabel;
Label3: TLabel;
procedure Button1Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
a1 : array[1..n] of MyAuto;
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
begin
StringGrid1.Cells[0,0]:='марка';
StringGrid2.Cells[0,0]:='марка';
StringGrid1.Cells[1,0]:='год выпуска';
StringGrid2.Cells[1,0]:='год выпуска';
StringGrid1.Cells[2,0]:='стоимость';
StringGrid2.Cells[2,0]:='стоимость';
end;
procedure TForm1.Button1Click(Sender: TObject);
var i : integer;
begin
for i:=1 to 3 do
with a1[i] do
|
Из за большого объема этот материал размещен на нескольких страницах:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |






