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

Материал из НГПУ им. К.Минина
Перейти к: навигация, поиск
 
(Задание)
 
(не показана 21 промежуточная версия 3 участников)
Строка 1: Строка 1:
Работа с одномерными массивами
+
==Работа с одномерными массивами==
 +
<center>'''Работа с одномерными массивами'''</center>
  
 
Массивом называется упорядоченная последовательность однотипных объектов, обозначаемая одним именем. Чтобы выделить один из объектов (элемент) массива, надо указать имя массива и номер элемента в нем. Номер элемента называется индексом, индекс указывается в квадратных скобах и может быть числом, переменной, выражением. Имя массива образуется по правилам образования имен переменных.
 
Массивом называется упорядоченная последовательность однотипных объектов, обозначаемая одним именем. Чтобы выделить один из объектов (элемент) массива, надо указать имя массива и номер элемента в нем. Номер элемента называется индексом, индекс указывается в квадратных скобах и может быть числом, переменной, выражением. Имя массива образуется по правилам образования имен переменных.
Строка 19: Строка 20:
 
где <тип индекса> - порядковый тип;    <тип компоненты> - любой тип.
 
где <тип индекса> - порядковый тип;    <тип компоненты> - любой тип.
  
== Пример 1.==  
+
== Пример 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.==  
 
== Пример 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
  
 
{| border=1
 
{| border=1
!Таблица №11
+
  |-
|-
+
 
  !Номер варианта||Условие
 
  !Номер варианта||Условие
 
  |-
 
  |-
Строка 65: Строка 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) поменять местами максимальный и  минимальный элементы.
 +
|-
 +
|}
  
  |}
 
  
 +
Таблица 14
  
Таблица 16
+
{| border=1
 
+
  |-
==Литература==
+
  !Номер варианта||Условие||
 
+
  |-  
#Архангельский. Программирование на Delphi 6. – М: БИНОМ, 2002
+
|<center>1</center>||Вычислить среднее геометрическое элементов вектора У(k), кратных трем.
#Бобровский С. Delphi 7. Учебный курс. – СПб:  Питер, 2003
+
|-
#Культин Н. Основы программирования в Delphi 7. СПб: БХВ-Петербург, 2005.
+
 
+
  
 +
|<center>2</center>||Определить, кратна ли сумма элементов вектора  A(x) семи.
 +
|-
 +
|<center>3</center>||В векторе D(m) определить количество четных элементов.
 +
|-
 +
|<center>4</center>||В векторе У(k) поменять местами первый и  минимальный элементы.
 +
|-
 +
|<center>5</center>||Из вектора С(n) сформировать вектор А,  содержащий четные элементы вектора С и вектор В, содержащий нечетные элементы.
 +
  |-
 +
|<center>6</center>||Произвести сдвиг элементов вектора 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].
 +
  |-
 +
|<center>7</center>||Найти среднее геометрическое элементов массива С[k], стоящих на четных местах.
 +
  |-
 +
|<center>8</center>||В массиве X(n) поменять местами минимальный  и последний элементы.
 +
  |-}
 +
|<center>9</center>||В векторе Т(к) заменить все его элементы,  стоящие после максимального, нулями.
 +
  |-
 +
|<center>10</center>||Найти среднеквадратичное элементов вектора A(n). s=(a[1]*a[1] + a[2]*a[2] + ... +a[n]*a[n])/n
 +
  |-
 +
|<center>11</center>||Элементы вектора В, удовлетворяющие условию  B[i]>10, переписать в массив X, а элементы,  удовлетворяющие условию B[i] <= 10, переписать  в массив У.
 +
  |-
 +
|<center>12</center>||В векторе Z(m) определить сумму нечетных  элементов.
 +
|-
 +
|<center>13</center>||Определить индексы четных элементов массива А(к).
 +
|-
 +
|<center>14</center>||Определить, кратна ли сумма элементов вектора  D(12) пяти. 
 +
|-
 +
|-}
 
==Ссылки==
 
==Ссылки==
  

Текущая версия на 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) пяти.