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

Материал из Wiki Mininuniver
Перейти к навигацииПерейти к поиску
(Пример 2.)
(Задание)
 
(не показано 17 промежуточных версий 3 участников)
Строка 1: Строка 1:
 +
==Работа с одномерными массивами==
 
<center>'''Работа с одномерными массивами'''</center>
 
<center>'''Работа с одномерными массивами'''</center>
  
Строка 19: Строка 20:
 
где <тип индекса> - порядковый тип;    <тип компоненты> - любой тип.
 
где <тип индекса> - порядковый тип;    <тип компоненты> - любой тип.
  
== Пример 1.==  
+
== Пример 1.==
 +
*'''Условие задачи'''
 
В векторе найти номера и значения первого минимального и последнего максимального элементов.
 
В векторе найти номера и значения первого минимального и последнего максимального элементов.
 +
*'''Использованные компаненты'''
 +
Label – метка, используется как надпись или как область вывода информации для чтения.
  
Label – метка, используется как надпись или как область вывода информации для чтения. Как и для кнопки, для метки можно определить клавишу быстрого доступа, но она будет запускать связанный с меткой компонент (по FocusControl). Свойство AutoSize=True определит минимизацию размера метки под текст надписи, Aligment – центровку этого текста, WordWrap – воз-можность расположения текста в несколько строк, Transparent – прозрачность при наложении на другие элементы.
+
Edit – строка ввода.
 
+
Edit – строка ввода. Заголовка (Caption) у этого компонента нет, но есть свой-ство Text как содержимое строки. Это свойство можно как считывать, так и присваивать (при необходимости с ограничением длины назначением свойства MaxLength). При вводе конфиденциальной информации указывают отображаемые символы (обычно "*"), при этом нужно переопределить свойство PasswordChar, задав его отличным от #0.
+
Button – стандартная кнопка, обычно кнопка используется для запуска действия, при этом задействуют только метод OnEvent (реакция на нажатие).
 
+
   
Button – стандартная кнопка, обычно кнопка используется для запуска действия, при этом задействуют только метод OnEvent (реакция на нажатие). Свойство Default=True ассоциирует вводимый компонент с кнопкой Enter, Cancel=True – с кнопкой Esc. Свойства Color для оформления надписи (Caption) у кнопки нет. Амперсант, помещенный в тексте надписи, указывает быструю Alt-клавишу запуска, например, Caption=A&Ppend вызывает срабатывание кнопки при нажатии Alt-P. Свойство ModalResult=true оп-ределит обязательность нажатия для закрытия дочернего окна.
 
 
 
 
StringGrid - используется для ввода и вывода массива.
 
StringGrid - используется для ввода и вывода массива.
var a:array[1..100] of real;
+
*'''Код программы'''
 +
unit Unit1;
 +
interface
 +
uses
 +
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 +
  Dialogs, StdCtrls, Buttons, Grids;
 +
type
 +
  TForm1 = class(TForm)
 +
    Label1: TLabel;
 +
    Edit1: TEdit;
 +
    Label2: TLabel;
 +
    StringGrid1: TStringGrid;
 +
    Label3: TLabel;
 +
    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}
 +
  var a:array[1..100] of real;
 
       n,i,nmin,nmax:integer;
 
       n,i,nmin,nmax:integer;
 
       amax,amin:real;
 
       amax,amin:real;
procedure TForm1.BitBtn2Click(Sender: TObject);
+
procedure TForm1.BitBtn2Click(Sender: TObject);
begin
+
begin
close;
+
  close;
end;
+
end;
 
+
procedure TForm1.BitBtn1Click(Sender: TObject);
procedure TForm1.BitBtn1Click(Sender: TObject);
+
begin
begin
+
  n:=strtoint(edit1.Text);
n:=strtoint(edit1.Text);
+
  for i:=1 to n do
for i:=1 to n do
+
  if n>30 then label3.Caption:='Большое число';
if n>30 then label3.Caption:='Большое число';
+
    randomize;
  randomize;
+
    for i:=1 to n do
  for i:=1 to n do
 
 
       begin
 
       begin
 
       a[i]:=random(81)- 30;
 
       a[i]:=random(81)- 30;
 
       stringgrid1.cells[i-1,0]:=floattostr(a[i]);
 
       stringgrid1.cells[i-1,0]:=floattostr(a[i]);
 
       end;
 
       end;
amin:=a[1]; nmin:=1;
+
  amin:=a[1]; nmin:=1;
amax:=a[1]; nmax:=1;
+
  amax:=a[1]; nmax:=1;
  for i:=1 to n do
+
      for i:=1 to n do
    begin
+
      begin
 
         if a[i]<amin then begin
 
         if a[i]<amin then begin
 
                             amin:=a[i]; nmin:=i
 
                             amin:=a[i]; nmin:=i
Строка 58: Строка 85:
 
                               amax:=a[i]; nmax:=i;
 
                               amax:=a[i]; nmax:=i;
 
                             end;
 
                             end;
               
+
                          end;
    end;
+
label3.Caption:='Минимальное= '+floattostr(amin)+#13+'Номер минимального= '+inttostr(nmin)+' '+#13+'Максимальное= '+floattostr(amax)+#13+'Номер максимального= '+inttostr(nmax);
label3.Caption:='Минимальное= '+floattostr(amin)+#13+'Номер минимального= '+inttostr(nmin)+' '+#13+
+
end;
                'Максимальное= '+floattostr(amax)+#13+'Номер максимального= '+inttostr(nmax);
+
end.
end;
+
*'''Форма с результатом работы программы'''
 
 
end.
 
 
 
*Форма с результатом работы программы
 
  
 
== Пример 2.==  
 
== Пример 2.==  
Создать массив из n случайных целых чисел, равномерно распределенных в диапазоне от 0 до 100. Вычислить среднее арифметическое и количество четных чисел.      
+
*'''Условие задачи'''
 
+
Создать массив из n случайных целых чисел, равномерно распределенных в диапазоне от 0 до 100. Вычислить среднее арифметическое и количество четных чисел.    
Label – метка, используется как надпись или как область вывода информации для чтения. Как и для кнопки, для метки можно определить клавишу быстрого доступа, но она будет запускать связанный с меткой компонент (по FocusControl). Свойство AutoSize=True определит минимизацию размера метки под текст надписи, Aligment – центровку этого текста, WordWrap – воз-можность расположения текста в несколько строк, Transparent – прозрачность при наложении на другие элементы.
+
*'''Использованные компаненты'''
 +
Label – метка, используется как надпись или как область вывода информации для чтения.
  
Edit – строка ввода. Заголовка (Caption) у этого компонента нет, но есть свой-ство Text как содержимое строки. Это свойство можно как считывать, так и присваивать (при необходимости с ограничением длины назначением свойства MaxLength). При вводе конфиденциальной информации указывают отображаемые символы (обычно "*"), при этом нужно переопределить свойство PasswordChar, задав его отличным от #0.
+
Edit – строка ввода.  
  
Button – стандартная кнопка, обычно кнопка используется для запуска действия, при этом задействуют только метод OnEvent (реакция на нажатие). Свойство Default=True ассоциирует вводимый компонент с кнопкой Enter, Cancel=True – с кнопкой Esc. Свойства Color для оформления надписи (Caption) у кнопки нет. Амперсант, помещенный в тексте надписи, указывает быструю Alt-клавишу запуска,  например, Caption=A&Ppend вызывает срабатывание кнопки при нажатии Alt-P. Свойство ModalResult=true оп-ределит обязательность нажатия для закрытия дочернего окна.
+
Button – стандартная кнопка, обычно кнопка используется для запуска действия, при этом задействуют только метод OnEvent (реакция на нажатие).  
  
 
StringGrid - используется для ввода и вывода массива.
 
StringGrid - используется для ввода и вывода массива.
 
+
*'''Код программы'''
 
+
unit Unit1;
const nmax=1000;
+
interface
 +
uses
 +
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 +
  Dialogs, StdCtrls, Buttons, Grids;
 +
type
 +
  TForm1 = class(TForm)
 +
    Label1: TLabel;
 +
    Edit1: TEdit;
 +
    StringGrid1: TStringGrid;
 +
    Label3: TLabel;
 +
    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}
 +
  const nmax=1000;
 
   type x=array[1..nmax] of integer;
 
   type x=array[1..nmax] of integer;
 
   var m:x;
 
   var m:x;
 
       k,i,n:integer;
 
       k,i,n:integer;
 
       s:real;
 
       s:real;
procedure TForm1.BitBtn2Click(Sender: TObject);
+
procedure TForm1.BitBtn2Click(Sender: TObject);
begin
+
begin
close;
+
  close;
end;
+
end;
 
+
procedure TForm1.BitBtn1Click(Sender: TObject);
procedure TForm1.BitBtn1Click(Sender: TObject);
+
begin
begin
+
  n:=strtoint(edit1.Text);
n:=strtoint(edit1.Text);
+
    randomize;
randomize;
+
    for i:=1 to n do
  for i:=1 to n do
+
    begin
    begin
 
 
       m[i]:=random(101);
 
       m[i]:=random(101);
 
       stringgrid1.Cells[i-1,0]:=inttostr(m[i]);
 
       stringgrid1.Cells[i-1,0]:=inttostr(m[i]);
    end;
+
    end;
s:=0;
+
  s:=0;
k:=0;
+
  k:=0;
  for i:=1 to n do
+
  for i:=1 to n do
 
     if not odd(m[i]) then begin
 
     if not odd(m[i]) then begin
 
                             s:=s+m[i];
 
                             s:=s+m[i];
Строка 107: Строка 153:
 
                           end;
 
                           end;
 
   s:=s/k;
 
   s:=s/k;
label3.Caption:='Среднее арифметическое= '+floattostr(s)+#13+
+
label3.Caption:='Среднее арифметическое= '+floattostr(s)+#13+
 
                 'Количество четных чисел= '+inttostr(k);
 
                 'Количество четных чисел= '+inttostr(k);
end;
+
end;
 
+
end.
end.
+
*'''Форма с результатом работы программы'''
         
 
 
 
*Форма с результатом работы программы
 
  
 
==Задание==
 
==Задание==
 +
Таблица 13
  
 
{| border=1
 
{| border=1
!Таблица №15
+
  |-
|-
 
 
  !Номер варианта||Условие
 
  !Номер варианта||Условие
 
  |-
 
  |-
Строка 144: Строка 187:
 
|<center>10</center>||Дан вектор Х. Все его элементы не равные нулю, переписать (сохраняя их порядок) в начало  массива, а нулевые элементы - в конец массива  (новый массив не заводить).
 
|<center>10</center>||Дан вектор Х. Все его элементы не равные нулю, переписать (сохраняя их порядок) в начало  массива, а нулевые элементы - в конец массива  (новый массив не заводить).
 
|-
 
|-
|<center>7</center>||Даны два вектора А и В. Сформировать вектор С, который содержит элементы, присутствующие  в обоих массивах.
+
|<center>11</center>||Даны два вектора А и В. Сформировать вектор С, который содержит элементы, присутствующие  в обоих массивах.
 
|-
 
|-
|<center>7</center>||Имеется n окружностей с центром в начале координат  и радиусами R[1], R[2], ..., R[n]. Определить номера окружностей между которыми находится точка с координатами (х, у).
+
|<center>12</center>||Имеется n окружностей с центром в начале координат  и радиусами R[1], R[2], ..., R[n]. Определить номера окружностей между которыми находится точка с координатами (х, у).
 
|-
 
|-
|<center>7</center>||В векторе X(n) поменять местами максимальный и последний элементы.
+
|<center>13</center>||В векторе X(n) поменять местами максимальный и последний элементы.
 
|-
 
|-
|<center>7</center>||В векторе У(m) поменять местами максимальный и  минимальный элементы.
+
|<center>14</center>||В векторе У(m) поменять местами максимальный и  минимальный элементы.
 
 
 
  |-
 
  |-
 
  |}
 
  |}
  
Таблица №16
+
 
{| border=2
+
Таблица 14
 +
 
 +
{| border=1
 
  |-
 
  |-
 
  !Номер варианта||Условие||
 
  !Номер варианта||Условие||
Строка 190: Строка 234:
 
|-
 
|-
 
  |-}
 
  |-}
 
 
==Литература==
 
 
#Архангельский. Программирование на Delphi 6. – М: БИНОМ,  2002
 
#Бобровский С. Delphi 7. Учебный курс. –  СПб:  Питер, 2003
 
#Культин Н. Основы программирования в  Delphi 7. СПб: БХВ-Петербург, 2005.
 
 
 
 
==Ссылки==
 
==Ссылки==
  

Текущая версия на 22:36, 27 июля 2008

Работа с одномерными массивами

Работа с одномерными массивами

Массивом называется упорядоченная последовательность однотипных объектов, обозначаемая одним именем. Чтобы выделить один из объектов (элемент) массива, надо указать имя массива и номер элемента в нем. Номер элемента называется индексом, индекс указывается в квадратных скобах и может быть числом, переменной, выражением. Имя массива образуется по правилам образования имен переменных.

Например, А [10], B [I, J], SUM [1, J+5].

Если для выделения элемента нужен один индекс, массив называется одномерным, два – двумерным и т.д. Число элементов массива называется длиной или размером массива. Одномерный массив называется вектором.

Для описания массивов используется служебное слово array. Массив в Delphi можно описывать двумя способами:

а) в разделе описания переменных var: var <имя переменной>: array [тип индекса] of <тип компоненты>;

б) определить сначала тип, а затем описать массив этим типом

type  <имя типа>= array [тип индекса] of <тип компоненты>;
 

var <имя переменной>: <имя типа>;

где <тип индекса> - порядковый тип; <тип компоненты> - любой тип.

Пример 1.

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

В векторе найти номера и значения первого минимального и последнего максимального элементов.

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

Label – метка, используется как надпись или как область вывода информации для чтения.

Edit – строка ввода.

Button – стандартная кнопка, обычно кнопка используется для запуска действия, при этом задействуют только метод OnEvent (реакция на нажатие).

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

  • Код программы
unit Unit1;
interface
uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs, StdCtrls, Buttons, Grids;
type
 TForm1 = class(TForm)
   Label1: TLabel;
   Edit1: TEdit;
   Label2: TLabel;
   StringGrid1: TStringGrid;
   Label3: TLabel;
   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}
 var a:array[1..100] of real;
     n,i,nmin,nmax:integer;
     amax,amin:real;
procedure TForm1.BitBtn2Click(Sender: TObject);
begin
 close;
end;
procedure TForm1.BitBtn1Click(Sender: TObject);
begin
  n:=strtoint(edit1.Text);
  for i:=1 to n do
  if n>30 then label3.Caption:='Большое число';
   randomize;
   for i:=1 to n do
     begin
      a[i]:=random(81)- 30;
      stringgrid1.cells[i-1,0]:=floattostr(a[i]);
     end;
  amin:=a[1]; nmin:=1;
  amax:=a[1]; nmax:=1;
     for i:=1 to n do
      begin
       if a[i]<amin then begin
                           amin:=a[i]; nmin:=i
                         end;
       if a[i]>=amax then begin
                             amax:=a[i]; nmax:=i;
                           end;
                          end;
label3.Caption:='Минимальное= '+floattostr(amin)+#13+'Номер минимального= '+inttostr(nmin)+' '+#13+'Максимальное= '+floattostr(amax)+#13+'Номер максимального= '+inttostr(nmax);
end;
end.
  • Форма с результатом работы программы

Пример 2.

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

Создать массив из n случайных целых чисел, равномерно распределенных в диапазоне от 0 до 100. Вычислить среднее арифметическое и количество четных чисел.

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

Label – метка, используется как надпись или как область вывода информации для чтения.

Edit – строка ввода.

Button – стандартная кнопка, обычно кнопка используется для запуска действия, при этом задействуют только метод OnEvent (реакция на нажатие).

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

  • Код программы
unit Unit1;
interface
uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs, StdCtrls, Buttons, Grids;
type
 TForm1 = class(TForm)
   Label1: TLabel;
   Edit1: TEdit;
   StringGrid1: TStringGrid;
   Label3: TLabel;
   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}
  const nmax=1000;
  type x=array[1..nmax] of integer;
  var m:x;
      k,i,n:integer;
      s:real;
procedure TForm1.BitBtn2Click(Sender: TObject);
begin
 close;
end;
procedure TForm1.BitBtn1Click(Sender: TObject);
begin
  n:=strtoint(edit1.Text);
   randomize;
    for i:=1 to n do
    begin
     m[i]:=random(101);
     stringgrid1.Cells[i-1,0]:=inttostr(m[i]);
    end;
  s:=0;
  k:=0;
  for i:=1 to n do
   if not odd(m[i]) then begin
                           s:=s+m[i];
                           k:=k+1;
                         end;
 s:=s/k;
label3.Caption:='Среднее арифметическое= '+floattostr(s)+#13+
               'Количество четных чисел= '+inttostr(k);
end;
end.
  • Форма с результатом работы программы

Задание

Таблица 13

Номер варианта Условие
1
Даны два вектора целых чисел А и В. Вычислить вектор С, который содержит нечетные элементы вектора А, которых нет в векторе В
2
Расположить элементы вектора в обратном порядке. Дополнительный массив не использовать.
3
Найти среднее арифметическое элементов массива X(n), исключив из них максимальное и минимальное значение.
4
Вектор B(n) заменить вектором, у которого элементы образуются делением вектора В на их сумму.
5
Заменить все элементы вектора X(m), стоящие до максимального, нулями.
6
В массиве R(k) найти минимальный элемент среди положительных и максимальный среди отрицательных.
7
В массиве У(n) заменить все его элементы, стоящие после минимального, нулями.
8
Даны массив A(n) целого типа и целое число х. Произвести перестановку элементов массива так, чтобы в начале массива стояли элементы, значения которых меньше х, затем элементы, равные х, а следом элементы, значения которых больше х, в том порядке, в каком они стояли в массиве.
9
На плоскости на расстоянии s[1], s[2], ..., s[10] от центра кругового кольца с внутренним радиусом r и внешним R расположены точки. Определить количество точек, расположенных внутри кольца.
10
Дан вектор Х. Все его элементы не равные нулю, переписать (сохраняя их порядок) в начало массива, а нулевые элементы - в конец массива (новый массив не заводить).
11
Даны два вектора А и В. Сформировать вектор С, который содержит элементы, присутствующие в обоих массивах.
12
Имеется n окружностей с центром в начале координат и радиусами R[1], R[2], ..., R[n]. Определить номера окружностей между которыми находится точка с координатами (х, у).
13
В векторе X(n) поменять местами максимальный и последний элементы.
14
В векторе У(m) поменять местами максимальный и минимальный элементы.


Таблица 14

Ссылки

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

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

Номер варианта Условие
1
Вычислить среднее геометрическое элементов вектора У(k), кратных трем.
2
Определить, кратна ли сумма элементов вектора A(x) семи.
3
В векторе D(m) определить количество четных элементов.
4
В векторе У(k) поменять местами первый и минимальный элементы.
5
Из вектора С(n) сформировать вектор А, содержащий четные элементы вектора С и вектор В, содержащий нечетные элементы.
6
Произвести сдвиг элементов вектора A(n) на к позиций влево так, что на место a[1] станет a[k+1], на место a[n-k] станет a[n], на место a[n-k+1] станет a[1], на место a[n-k+2] станет a[2], на место a[n] станет a[k].
7
Найти среднее геометрическое элементов массива С[k], стоящих на четных местах.
8
В массиве X(n) поменять местами минимальный и последний элементы.
9
В векторе Т(к) заменить все его элементы, стоящие после максимального, нулями.
10
Найти среднеквадратичное элементов вектора A(n). s=(a[1]*a[1] + a[2]*a[2] + ... +a[n]*a[n])/n
11
Элементы вектора В, удовлетворяющие условию B[i]>10, переписать в массив X, а элементы, удовлетворяющие условию B[i] <= 10, переписать в массив У.
12
В векторе Z(m) определить сумму нечетных элементов.
13
Определить индексы четных элементов массива А(к).
14
Определить, кратна ли сумма элементов вектора D(12) пяти.