Учебный курс Программирование на Delphi. Модуль 14: различия между версиями

Материал из Wiki Mininuniver
Перейти к навигацииПерейти к поиску
(Задание)
 
(не показано 19 промежуточных версий 7 участников)
Строка 1: Строка 1:
<Center>'''Использование функций'''</Center>
+
<center>'''Использование функций'''</center>
Для программирования циклов с условием в Delphi существуют оператор цикла с предусловием WHILE и оператор цикла с постусловием REPEAT.
 
  
Формат операторов:
+
== Использование функций ==
 +
Функция отличается от процедуры тем, что результат ее работы возвращается в виде значения этой функции и, следовательно, вызов функции может использоваться наряду с другими операндами в выражения.
 +
Рекурсия - такой способ организации вычислительного процесса, при котором подпрограмма в ходе выполнения составляющих ее операторов обращается сама к себе.
  
while условие do оператор;
+
== Пример 1.==
 +
*'''Условие задачи:'''
 +
Даны все действительные числа a,b,c.Вычислить
 +
max(a,b,+c)+max(a+b,c)/1+max(a+bc,12)                                                 
 +
*'''Использованные компоненты:'''
 +
 
 +
Label1 - используется для текстовых комментариев;
 +
 
 +
Label2 - используется для вывода суммы;
 +
 
 +
edit1 - используется для ввода числа;
 +
 
 +
edit2 - используется для ввода числа;
 +
 
 +
edit3 - используется для ввода числа;
  
repeat операторы until условие;
+
BitBtn1 - запуск программы;
  
условие – логическое выражение.
+
BitBtn2 - выход из программы;
  
В операторе while сначала вычисляется логическое выражение и если оно истинно, то выполняется оператор. После этого управление возвращается в начало цикла на вычисление логического выражения. Если условие ложно, оператор завершает работу и управление передаётся на следующий оператор.
+
*'''Программный код:'''
  
В операторе repeat сначала выполняются операторы, и только потом вычисляется логическое выражение. Если оно ложно, то управление возвращается в начало цикла, повторяется выполнение операторов тела цикла. Если условие истинно – то выход из цикла.
+
  unit Unit2;
== Пример 1.==  
+
  interface
*Условие
+
  uses
Алгоритм Евклида для подсчета НОД (наибольшего общего делителя) двух натуральных чисел.
+
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 +
  Dialogs, StdCtrls, ExtCtrls, Grids, XPMan, Buttons;
 +
  type
 +
  TForm1 = class(TForm)
 +
    Edit1: TEdit;
 +
    Edit2: TEdit;               
 +
    Edit3: TEdit;
 +
    Label1: TLabel;
 +
    Label2: TLabel;
 +
    Label3: TLabel;
 +
    Label4: TLabel;
 +
    Label5: TLabel;
 +
    XPManifest1: TXPManifest;
 +
    BitBtn1: TBitBtn;
 +
    BitBtn2: TBitBtn;
 +
    procedure BitBtn2Click(Sender: TObject);
 +
    procedure BitBtn1Click(Sender: TObject);
 +
  private
 +
    { Private declarations }
 +
  public
 +
    { Public declarations }
 +
  end;
 +
  var
 +
  Form1: TForm1;
 +
  implementation
 +
  {$R *.dfm}
 +
  function max (x,y: real): real;
 +
    begin
 +
        if x > y
 +
            then  max:=x
 +
            else  max:=y
 +
    end;
 +
  var z, a, b, c: real;
 +
  procedure TForm1.BitBtn2Click(Sender: TObject);
 +
  begin
 +
      a:=strtoint(edit1.Text);
 +
      b:=strtoint(edit2.text);
 +
      c:=strtoint(edit3.Text);
 +
      z:=(max(a, b+c) + max(a+b, c*c))/(1+ max(a+b*c, 12));
 +
      Label4.Caption:=floattostr(z);
 +
    end;
 +
  procedure TForm1.BitBtn1Click(Sender: TObject);
 +
  begin
 +
  close;
 +
  end;
 +
  end.
 +
 
 +
*'''Форма с результатом работы программы:'''
 +
[[Изображение:-12-1.JPG]]
 +
== Пример 2.==  
 +
*'''Условие задачи:'''
 +
Найти N число последовательности Фибоначчи. Использовать рекурсивную функцию.
 +
Числа  Фибоначчи образуют  последовательность, у которой  каждый очередной член  равен сумме двух  предыдущих: 0 1 1 2 3 5 8 13 . . . Обозначив N-й член ряда Фибоначчи  F(N), можно записать следующую рекурсивную зависимость:  F(N) = F(N - 1) + F(N - 2), n >= 3, F(1) = 1 и F(2) = 1
 +
 
 +
*'''Использованные компоненты:'''
  
*Использованные компоненты
+
Label1 - используется для текстовых комментариев;
  
 +
Label2 - используется для текстовых комментариев;
  
*Программный код
+
edit1 - используется для ввода числа;
  
var a,b,x,y,z:integer;
+
BitBtn1 - запуск программы;
  
procedure TForm1.BitBtn2Click(Sender: TObject);
+
BitBtn2 - выход из программы;
begin
 
close;
 
end;
 
  
 +
*'''Программный код:'''
 +
unit Unit1;
 +
interface
 +
uses
 +
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 +
  Dialogs, XPMan, StdCtrls, Buttons;
 +
type
 +
  TForm1 = class(TForm)
 +
    Edit1: TEdit;
 +
    Label1: TLabel;
 +
    Label2: TLabel;
 +
    XPManifest1: TXPManifest;
 +
    Label3: TLabel;
 +
    BitBtn1: TBitBtn;
 +
    BitBtn2: TBitBtn;
 +
    procedure BitBtn1Click(Sender: TObject);
 +
    procedure BitBtn2Click(Sender: TObject);
 +
  private
 +
    { Private declarations }
 +
  public
 +
    { Public declarations }
 +
  end;
 +
var
 +
  Form1: TForm1;
 +
implementation
 +
{$R *.dfm}
 +
function F(k: integer): integer;
 +
begin
 +
    if (k=1) or (k=2)
 +
            then F:=1
 +
            else F:= F(k-1) + F(k-2)
 +
end;
 
  procedure TForm1.BitBtn1Click(Sender: TObject);
 
  procedure TForm1.BitBtn1Click(Sender: TObject);
 +
var N: integer;
 +
  begin
 +
  N:=strtoint(Edit1.Text);
 +
  label2.Caption:=inttostr(F(n));
 +
  end;
 +
procedure TForm1.BitBtn2Click(Sender: TObject);
 +
begin
 +
close;
 +
end;
 +
end.
 +
 
 +
*'''Форма с результатом работы программы:'''
 +
[[Изображение:-12-2.JPG]]
  
  begin
+
==Задание==
a:=strtoint(edit1.Text);
+
{| border=1
b:=strtoint(edit2.Text);
+
!Номер варианта||Условие
   x:=a; y:=b;
+
  |-
    while (x<>y) do
+
|<center>1</center>||Вычислить число сочетаний из n по m(n>m) по формуле:[[Изображение:Модуль14вар1.JPG]]
      if x>y then x:=x-y
+
|-
              else y:=y-x;
+
|<center>2</center>||Вычислить:  [[Изображение:Модуль14вар2.JPG]]
      z:=x;
+
   |-
label3.Caption:='НОД= '+inttostr(z);
+
|<center>3</center>||Вычислить: [[Изображение:Модуль14вар3.JPG]]
end;
+
|-
end.
+
|<center>4</center>||Найти все трехзначные числа, равные сумме факториалов своих цифр.
*Форма с результатом работы программы
+
|-
[[Изображение:-4-1.JPG]]
+
|<center>5</center>||Два треугольника заданы координатами своих вершин. Вычислить площади треугольников с помощью формулы Герона и определить, какой треугольник имеет  большую площадь.
== Пример 2.==
+
|-
*Условие
+
|<center>6</center>||Решить уравнение: ax + b = 0, где
 +
 
 +
[[Изображение:Модуль14вар6.JPG]]
 +
 
 +
Значения k, l, m вводятся.
 +
|-
 +
|<center>7</center>||Даны действительные числа s,t. Вычислить:
 +
 
 +
[[Изображение:Модуль14вар7(1).JPG]]
  
*Использованные компоненты
+
где
  
*Программный код
+
[[Изображение:Модуль14вар7(2).JPG]]
 +
|-
 +
|<center>8</center>||Вычислить число сочетаний с повторениями по  формуле:
  
var n:integer;
+
[[Изображение:Модуль14вар8.JPG]]
      s,z,e:real;
+
|-
procedure TForm1.BitBtn2Click(Sender: TObject);
+
|<center>9</center>||Найти наибольший общий делитель целых  положительных чисел a, b, c.   
begin
+
|-
close;
+
|<center>10</center>||Даны действительные числа х, у. Вычислить:
end;
 
  
procedure TForm1.BitBtn1Click(Sender: TObject);
+
[[Изображение:Модуль14вар10(1).JPG]]
begin
 
e:=strtofloat(edit1.Text);
 
n:=1; z:=1/6; s:=0;
 
    while abs(z)>=e do
 
      begin
 
        s:=s+z;
 
        n:=n+1;                         
 
        z:=n/((n+1)*(n+2));
 
      end;
 
label2.Caption:='Сумма= '+floattostr(s);
 
end;
 
  
end.
+
где
*Форма с результатом работы программы
 
== Пример 3.==
 
  
*Условие
+
[[Изображение:Модуль14вар10(2).JPG]]
 +
|-
 +
|<center>11</center>||Решить уравнение: [[Изображение:Модуль14вар11(1).JPG]] ,  где
  
*Использованные компоненты
+
[[Изображение:Модуль14вар11(2).JPG]]
  
*Программный код
+
Значения r, m, n вводятся.
 +
|-
 +
|<center>12</center>||Используя функцию нахождения наибольшего общего  делителя, найти наименьшее общее кратное двух чисел.
 +
|-
 +
|<center>13</center>||Вычислить:
 +
[[Изображение:Модуль14вар13.JPG]]
 +
|-
 +
|<center>14</center>||Вычислить:
 +
[[Изображение:Модуль14вар14.JPG]]
 +
|}
  
var x1,x2,d,e,m:real;
 
procedure TForm1.BitBtn2Click(Sender: TObject);
 
begin
 
close;
 
end;
 
  
procedure TForm1.BitBtn1Click(Sender: TObject);
+
{| border=1
begin
+
! Номер варианта|| Условие
m:=strtofloat(edit1.Text);
+
|-
e:=strtofloat(edit2.Text);
+
| <Center>1</Center>|| Найти НОД двух неотрицательных целых чисел m и n  с использованием первого алгоритма Евклида:
x1:=m;
+
[[Изображение:T14-1.jpg]]
  repeat
+
|-
    x2:=2/3*x1+m/3/sqr(x1);
+
| <Center>2</Center>|| Найти НОД двух неотрицательных целых чисел m и n  c использованием второго алгоритма Евклида:
    d:=abs(x1-x2);
+
[[Изображение:T14-2.jpg]]
    x1:=x2;                 
+
|-
  until d<=e;
+
| <Center>3</Center>|| Вычислить функцию Аккермана A(n, m) для  неотрицательных целых чисел m и n по формуле:
label3.Caption:='Корень= '+floattostr(x2);
+
[[Изображение:T14-3.jpg]]
end;
+
|-
 +
| <Center>4</Center>|| Вычислить числа Каталана K(n) для натурального n  по формуле:
 +
              K(1) = K(2) = 1
 +
              K(n) = K(n - 1)*(4*n - 6)/n, при n * 3
 +
|-
 +
| <Center>5</Center>|| Вычислить n-ый член арифметической прогрессии.  Заданы первый член а1 и разность d.
 +
[[Изображение:T14-5.jpg]]
 +
|-
 +
| <Center>6</Center>|| Вычислить n-ый член геометрической прогрессии. Заданы первый член а1 и знаменатель геометрической  прогрессии q.
 +
[[Изображение:T14-6.jpg]]
 +
|-
 +
| <Center>7</Center>||Вычислить сумму n членов арифметической прогрессии. Заданы первый член а1 и разность d. Для вычисления  члена арифметической прогрессии использовать формулу  варианта 5.
 +
[[Изображение:T14-7.jpg]]
 +
|-
 +
| <Center>8</Center>||Вычислить сумму n членов геометрической прогрессии. Заданы первый член а1 и знаменатель геометрической  прогрессии q. Для вычисления члена геометрической  прогрессии использовать формулу варианта 6.
 +
[[Изображение:T14-8.jpg]]
  
end.
+
|-
 +
| <Center>9</Center>||Вычислить:
 +
[[Изображение:T14-9а.jpg]]
  
*Форма с результатом работы программы
+
Для вычисления факториала воспользоваться формулой:
  
 +
[[Изображение:T14-9б.jpg]]
  
==Задание==
+
|-
 +
| <Center>10</Center>||Найти максимум из двух величин НОД(a, b) и НОД(c, d). Для вычисления наибольшего общего делителя воспользоваться формулой варианта 1.
 +
|-
 +
| <Center>11</Center>||Вычислить a!+b!. Для вычисления факториала  воспользоваться формулой варианта 9.
 +
|-
 +
| <Center>12</Center>||Вычислить F(k) -F(m), где F(k) - k-ый член  последовательности Фибоначчи, F(m) - m-ый член  последовательности Фибоначчи.
  
Таблица 13
+
                  F(1) = F(2) = 1
 +
                  F(n) = F(n-1) + F(n-2)    для n >= 3
  
Таблица 14
+
|-
 +
| <Center>13</Center>||Вычислить:
 +
[[Изображение:T14-13.jpg]]
 +
 +
Для вычисления наибольшего общего делителя  воспользоваться формулой варианта 2.
 +
|-
 +
| <Center>14</Center>||Вычислить величину pow(x, n) для вещественного  х<>0  и целого n по формуле:
 +
[[Изображение:T14-14.jpg]]
 +
|-
 +
|}
  
 
==Литература==
 
==Литература==
Строка 116: Строка 263:
 
#Бобровский С. Delphi 7. Учебный курс. –  СПб:  Питер, 2003
 
#Бобровский С. Delphi 7. Учебный курс. –  СПб:  Питер, 2003
 
#Культин Н. Основы программирования в  Delphi 7. СПб: БХВ-Петербург, 2005.
 
#Культин Н. Основы программирования в  Delphi 7. СПб: БХВ-Петербург, 2005.
 
  
 
==Ссылки==
 
==Ссылки==

Текущая версия на 11:31, 20 мая 2008

Использование функций

Использование функций

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

Пример 1.

  • Условие задачи:

Даны все действительные числа a,b,c.Вычислить max(a,b,+c)+max(a+b,c)/1+max(a+bc,12)

  • Использованные компоненты:

Label1 - используется для текстовых комментариев;

Label2 - используется для вывода суммы;

edit1 - используется для ввода числа;

edit2 - используется для ввода числа;

edit3 - используется для ввода числа;

BitBtn1 - запуск программы;

BitBtn2 - выход из программы;

  • Программный код:
 unit Unit2;
 interface
 uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs, StdCtrls, ExtCtrls, Grids, XPMan, Buttons;
 type
 TForm1 = class(TForm)
   Edit1: TEdit;
   Edit2: TEdit;                
   Edit3: TEdit;
   Label1: TLabel;
   Label2: TLabel;
   Label3: TLabel;
   Label4: TLabel;
   Label5: TLabel;
   XPManifest1: TXPManifest;
   BitBtn1: TBitBtn;
   BitBtn2: TBitBtn;
   procedure BitBtn2Click(Sender: TObject);
   procedure BitBtn1Click(Sender: TObject);
 private
   { Private declarations }
 public
   { Public declarations }
 end;
 var
 Form1: TForm1;
 implementation
 {$R *.dfm}
 function max (x,y: real): real;
    begin
        if x > y
           then  max:=x
           else  max:=y
    end;
  var z, a, b, c: real;
 procedure TForm1.BitBtn2Click(Sender: TObject);
 begin
     a:=strtoint(edit1.Text);
     b:=strtoint(edit2.text);
     c:=strtoint(edit3.Text);
     z:=(max(a, b+c) + max(a+b, c*c))/(1+ max(a+b*c, 12));
     Label4.Caption:=floattostr(z);
    end;
 procedure TForm1.BitBtn1Click(Sender: TObject);
 begin
 close;
 end;
 end.
  • Форма с результатом работы программы:

-12-1.JPG

Пример 2.

  • Условие задачи:

Найти N число последовательности Фибоначчи. Использовать рекурсивную функцию. Числа Фибоначчи образуют последовательность, у которой каждый очередной член равен сумме двух предыдущих: 0 1 1 2 3 5 8 13 . . . Обозначив N-й член ряда Фибоначчи F(N), можно записать следующую рекурсивную зависимость: F(N) = F(N - 1) + F(N - 2), n >= 3, F(1) = 1 и F(2) = 1

  • Использованные компоненты:

Label1 - используется для текстовых комментариев;

Label2 - используется для текстовых комментариев;

edit1 - используется для ввода числа;

BitBtn1 - запуск программы;

BitBtn2 - выход из программы;

  • Программный код:
unit Unit1;
interface
uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs, XPMan, StdCtrls, Buttons;
type
 TForm1 = class(TForm)
   Edit1: TEdit;
   Label1: TLabel;
   Label2: TLabel;
   XPManifest1: TXPManifest;
   Label3: TLabel;
   BitBtn1: TBitBtn;
   BitBtn2: TBitBtn;
   procedure BitBtn1Click(Sender: TObject);
   procedure BitBtn2Click(Sender: TObject);
 private
   { Private declarations }
 public
   { Public declarations }
 end;
var
 Form1: TForm1;
implementation
{$R *.dfm}
function F(k: integer): integer;
begin 
    if (k=1) or (k=2)
           then F:=1
           else F:= F(k-1) + F(k-2)
end;
procedure TForm1.BitBtn1Click(Sender: TObject);
var N: integer;
 begin
 N:=strtoint(Edit1.Text);
 label2.Caption:=inttostr(F(n));
 end;
procedure TForm1.BitBtn2Click(Sender: TObject);
begin
close;
end;
end.
 
  • Форма с результатом работы программы:

-12-2.JPG

Задание

Номер варианта Условие
1
Вычислить число сочетаний из n по m(n>m) по формуле:Модуль14вар1.JPG
2
Вычислить: Модуль14вар2.JPG
3
Вычислить: Модуль14вар3.JPG
4
Найти все трехзначные числа, равные сумме факториалов своих цифр.
5
Два треугольника заданы координатами своих вершин. Вычислить площади треугольников с помощью формулы Герона и определить, какой треугольник имеет большую площадь.
6
Решить уравнение: ax + b = 0, где

Модуль14вар6.JPG

Значения k, l, m вводятся.

7
Даны действительные числа s,t. Вычислить:

Модуль14вар7(1).JPG

где

Модуль14вар7(2).JPG

8
Вычислить число сочетаний с повторениями по формуле:

Модуль14вар8.JPG

9
Найти наибольший общий делитель целых положительных чисел a, b, c.
10
Даны действительные числа х, у. Вычислить:

Модуль14вар10(1).JPG

где

Модуль14вар10(2).JPG

11
Решить уравнение: Модуль14вар11(1).JPG , где

Модуль14вар11(2).JPG

Значения r, m, n вводятся.

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

Модуль14вар13.JPG

14
Вычислить:

Модуль14вар14.JPG


Номер варианта Условие
1
Найти НОД двух неотрицательных целых чисел m и n с использованием первого алгоритма Евклида:

T14-1.jpg

2
Найти НОД двух неотрицательных целых чисел m и n c использованием второго алгоритма Евклида:

T14-2.jpg

3
Вычислить функцию Аккермана A(n, m) для неотрицательных целых чисел m и n по формуле:

T14-3.jpg

4
Вычислить числа Каталана K(n) для натурального n по формуле:
              K(1) = K(2) = 1
              K(n) = K(n - 1)*(4*n - 6)/n, при n * 3
5
Вычислить n-ый член арифметической прогрессии. Заданы первый член а1 и разность d.

T14-5.jpg

6
Вычислить n-ый член геометрической прогрессии. Заданы первый член а1 и знаменатель геометрической прогрессии q.

T14-6.jpg

7
Вычислить сумму n членов арифметической прогрессии. Заданы первый член а1 и разность d. Для вычисления члена арифметической прогрессии использовать формулу варианта 5.

T14-7.jpg

8
Вычислить сумму n членов геометрической прогрессии. Заданы первый член а1 и знаменатель геометрической прогрессии q. Для вычисления члена геометрической прогрессии использовать формулу варианта 6.

T14-8.jpg

9
Вычислить:

T14-9а.jpg

Для вычисления факториала воспользоваться формулой:

T14-9б.jpg

10
Найти максимум из двух величин НОД(a, b) и НОД(c, d). Для вычисления наибольшего общего делителя воспользоваться формулой варианта 1.
11
Вычислить a!+b!. Для вычисления факториала воспользоваться формулой варианта 9.
12
Вычислить F(k) -F(m), где F(k) - k-ый член последовательности Фибоначчи, F(m) - m-ый член последовательности Фибоначчи.
                 F(1) = F(2) = 1
                 F(n) = F(n-1) + F(n-2)    для n >= 3
13
Вычислить:

T14-13.jpg

Для вычисления наибольшего общего делителя воспользоваться формулой варианта 2.

14
Вычислить величину pow(x, n) для вещественного х<>0 и целого n по формуле:

T14-14.jpg

Литература

  1. Архангельский. Программирование на Delphi 6. – М: БИНОМ, 2002
  2. Бобровский С. Delphi 7. Учебный курс. – СПб: Питер, 2003
  3. Культин Н. Основы программирования в Delphi 7. СПб: БХВ-Петербург, 2005.

Ссылки

Учебный курс Программирование на Delphi

Учебный план курса Программирование на Delphi