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

Материал из Wiki Mininuniver
Перейти к навигацииПерейти к поиску
(Пример 1.)
(Пример 1.)
Строка 14: Строка 14:
 
В операторе repeat сначала выполняются операторы, и только потом вычисляется логическое выражение. Если оно ложно, то управление возвращается в начало цикла, повторяется выполнение операторов тела цикла. Если условие истинно – то выход из цикла.
 
В операторе repeat сначала выполняются операторы, и только потом вычисляется логическое выражение. Если оно ложно, то управление возвращается в начало цикла, повторяется выполнение операторов тела цикла. Если условие истинно – то выход из цикла.
 
== Пример 1.==  
 
== Пример 1.==  
*Условие
+
*'''Условие'''
 
Алгоритм Евклида для подсчета НОД (наибольшего общего делителя) двух натуральных чисел.
 
Алгоритм Евклида для подсчета НОД (наибольшего общего делителя) двух натуральных чисел.
  
*Использованные компоненты
+
*'''Использованные компоненты'''
 
 
  
 
Label1 - для вывода описания
 
Label1 - для вывода описания
Строка 34: Строка 33:
 
BitBtn2 - для выхода из формы
 
BitBtn2 - для выхода из формы
  
 +
*'''Программный код'''
  
*Программный код
+
  unit Unit1;
 
+
interface
unit Unit1;
+
  uses
 
+
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
interface
+
Dialogs, StdCtrls, Buttons;
 
+
type
uses
+
    TForm1 = class(TForm)
 
+
    Label1: TLabel;
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
+
    Label2: TLabel;
 
+
    Edit2: TEdit;
Dialogs, StdCtrls, Buttons;
+
    Label3: TLabel;
 
+
    BitBtn1: TBitBtn;
type
+
    BitBtn2: TBitBtn;
 
+
    Edit1: TEdit;
TForm1 = class(TForm)
+
procedure BitBtn2Click(Sender: TObject);
 
+
procedure BitBtn1Click(Sender: TObject);
Label1: TLabel;
+
  private
 
+
{ Private declarations }
Label2: TLabel;
+
  public
 
+
{ Public declarations }
Edit2: TEdit;
+
end;
 
+
  var
Label3: TLabel;
+
    Form1: TForm1;
 
+
implementation
BitBtn1: TBitBtn;
+
{$R *.dfm}                       
 
+
  var  
BitBtn2: TBitBtn;
+
    a,b,x,y,z:integer;
 
+
procedure TForm1.BitBtn2Click(Sender: TObject);
Edit1: TEdit;
+
begin
 
+
close;
procedure BitBtn2Click(Sender: TObject);
+
end;
 
+
procedure TForm1.BitBtn1Click(Sender: TObject);
procedure BitBtn1Click(Sender: TObject);
+
begin
 
+
  a:=strtoint(edit1.Text);
private
+
  b:=strtoint(edit2.Text);
 
+
  x:=a; y:=b;
{ Private declarations }
+
  while (x<>y) do
 
+
  if x>y then x:=x-y
public
+
  else y:=y-x;
 
+
  z:=x;
{ Public declarations }
+
  label3.Caption:='НОД= '+inttostr(z);
 
+
end;
end;
+
end.
 
 
var
 
 
 
Form1: TForm1;
 
 
 
implementation
 
 
 
{$R *.dfm}                       
 
 
 
var  
 
a,b,x,y,z:integer;
 
 
 
procedure TForm1.BitBtn2Click(Sender: TObject);
 
 
 
begin
 
 
 
close;
 
 
 
end;
 
 
 
procedure TForm1.BitBtn1Click(Sender: TObject);
 
 
 
begin
 
 
 
a:=strtoint(edit1.Text);
 
 
 
b:=strtoint(edit2.Text);
 
 
 
x:=a; y:=b;
 
 
 
while (x<>y) do
 
 
 
if x>y then x:=x-y
 
 
 
else y:=y-x;
 
 
 
z:=x;
 
 
 
label3.Caption:='НОД= '+inttostr(z);
 
 
 
end;
 
 
 
end.
 
  
 
*Форма с результатом работы программы
 
*Форма с результатом работы программы

Версия 09:48, 11 апреля 2008

Программирование на Delphi циклов с условием

Для программирования циклов с условием в Delphi существуют оператор цикла с предусловием WHILE и оператор цикла с постусловием REPEAT.

Формат операторов:

while условие do оператор;

repeat операторы until условие;

условие – логическое выражение.

В операторе while сначала вычисляется логическое выражение и если оно истинно, то выполняется оператор. После этого управление возвращается в начало цикла на вычисление логического выражения. Если условие ложно, оператор завершает работу и управление передаётся на следующий оператор.

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

Пример 1.

  • Условие

Алгоритм Евклида для подсчета НОД (наибольшего общего делителя) двух натуральных чисел.

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

Label1 - для вывода описания

Label2 - для вывода описания

Label3 - для вывода описания

Edit2 - для ввода числа

Edit1 - для ввода числа

BitBtn1 - для запуска решения

BitBtn2 - для выхода из формы

  • Программный код
 unit Unit1;
interface
 uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Buttons;
type
    TForm1 = class(TForm)
    Label1: TLabel;
    Label2: TLabel;
    Edit2: TEdit;
    Label3: TLabel;
    BitBtn1: TBitBtn;
    BitBtn2: TBitBtn;
    Edit1: TEdit;
procedure BitBtn2Click(Sender: TObject);
procedure BitBtn1Click(Sender: TObject);
 private
{ Private declarations }
 public
{ Public declarations }
end;
 var
    Form1: TForm1;
implementation
{$R *.dfm}                       
 var 
    a,b,x,y,z:integer;
procedure TForm1.BitBtn2Click(Sender: TObject);
begin
close;
end;
procedure TForm1.BitBtn1Click(Sender: TObject);
begin
 a:=strtoint(edit1.Text);
 b:=strtoint(edit2.Text);
 x:=a; y:=b;
 while (x<>y) do
 if x>y then x:=x-y
 else y:=y-x;
 z:=x;
 label3.Caption:='НОД= '+inttostr(z);
end;
end.
  • Форма с результатом работы программы

-4-1.JPG

Пример 2.

  • Условие
  • Использованные компоненты
  • Программный код

var n:integer;

     s,z,e:real;

procedure TForm1.BitBtn2Click(Sender: TObject); begin close; end;

procedure TForm1.BitBtn1Click(Sender: TObject); 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.

  • Условие
  • Использованные компоненты
  • Программный код

var x1,x2,d,e,m:real; procedure TForm1.BitBtn2Click(Sender: TObject); begin close; end;

procedure TForm1.BitBtn1Click(Sender: TObject); begin m:=strtofloat(edit1.Text); e:=strtofloat(edit2.Text); x1:=m;

 repeat
   x2:=2/3*x1+m/3/sqr(x1);
   d:=abs(x1-x2);
   x1:=x2;                   
 until d<=e;

label3.Caption:='Корень= '+floattostr(x2); end;

end.

  • Форма с результатом работы программы


Задание

Таблица 9
№ варианта
Условие
1
Вычислить квадратный корень из заданного числа x с точностью Е по итерационному методу Ньютона по формуле:

Файл:Таблица9 Задание1.JPG

2
Для выражения exp(k)/k определить наименьшее k, при котором значение выражения становится больше заданного числа n.
3
Найти наибольшую степень двойки, не превышающую заданного числа n
4
Ввести и просуммировать любое количество целочисленных значений. Если введено значение 999, то вывести результат суммирования.
5
Найти наименьшее общее кратное двух чисел.
6
Найти наибольшую степень 3, не превышающую заданного числа m.
7
Для выражения Файл:Таблица9 Задание7.JPG определить наименьшее k, при котором значение выражения становится больше заданного числа m.
8
Кощей Бессмертный зарыл клад на глубину 1 м. Этого ему показалось не достаточно, он отрыл клад, углубил колодец до 2 м и снова зарыл. Этого ему опять показалось мало, он отрыл клад, углубил колодец до 3 м и зарыл. Затем он проделал тоже, углубив колодец до 4 м, потом до 5 м, 6 м и т.д. Известно, что колодец глубиной n метров Кощей вырывает за n2 дней. Известно также, что на 1001-й день Кощей умер от непосильной работы. На какой глубине остался клад? (Временем, необходимым для закапывания клада, пренебречь).
9
Два параллельных зеркала А и В обращены друг к другу. При падении луча на зеркало А он ослабляется на Т[%], а при его падении на зеркало В - на Р[%]. Определить, после скольких отражений луч, попеременно отражаясь то от зеркала А, то от зеркала В, ослабеет более чем в 50 раз. Первоначально он попадает на зеркало А.
10
В водохранилище каждые сутки поступает Т [м3] воды, а расходуется R [ м3] на орошение полей и испарение, к тому же ежесуточно теряется А(1-exp(-V)) [м3] воды на просачивание в почву, где А - коэффициент , V - объем воды в водохранилище. Определить, за сколько дней объем воды в водохранилище уменьшится на Р [%] заданного первоначального объема V0. Принять А = 100.
11
Найти число в последовательности Фибоначчи большее заданного числа m и его порядковый номер. Члены ряда Фибоначчи вычисляются по формуле:

F(1) = F(2) = 1

F(k) = F(k-1) + F(k-2), k > 2

12
На железнодорожном пути находится n разрозненных вагонов. К ним движется вагон с кинетической энергией W, он сцепляется с ближайшим вагоном, затем вместе с ним движется дальше, сцепляясь с очередным вагоном, и т.д. При каждой сцепке расходуется 20% имеющейся кинетической энергии, еще Р[ Дж ] затрачивается на то, чтобы стронуть с места неподвижный вагон и, если энергия не истрачена полностью, движение продолжается. Определить, сколько вагонов окажутся сцепленными.
13
Вычислить значения функции:

Файл:Задание13.JPG
для k = 1,2 ... Вычисления производить до тех пор, пока t >= z. x, y, z вводятся.

14
Извлечь корень степени m из числа x, воспользовавшись итерационной формулой:

Файл:Задание14.JPG
Вычисления продолжать пока Файл:Задание14-1.JPGне станет меньше заданной точности Е.

Таблица 14


№ варианта
Условие
1
Файл:Формула1.JPG
2
Файл:Формула2.JPG
3
Файл:Формула3.JPG
4
Файл:Формула4.JPG
5
Файл:Формула5.JPG
6
Файл:Формула6.JPG
7
Формула7.JPG
8
Формула8.JPG
9
Файл:Формула9.JPG
10
Файл:Формула10.JPG
11
Файл:Формула11.JPG
12
Файл:Формула12.JPG
13
Файл:Формула13.JPG
14
Файл:Формула14.JPG

Литература

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


Ссылки

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

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