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

Материал из Wiki Mininuniver
Перейти к навигацииПерейти к поиску
(Пример 1)
(Задание)
 
(не показано 9 промежуточных версий 3 участников)
Строка 17: Строка 17:
 
Оба описания равноценны.
 
Оба описания равноценны.
 
== Пример 1==  
 
== Пример 1==  
*'''Условие.'''
+
*'''Условие:'''
  
 
Получить матрицу, элементами которой являются произведения номеров строк i и номеров столбцов j.   
 
Получить матрицу, элементами которой являются произведения номеров строк i и номеров столбцов j.   
Строка 30: Строка 30:
  
 
*'''Программный код:'''
 
*'''Программный код:'''
  program umnog;
+
  unit Unit1;
      type mat = array[1..9, 1..9] of integer;
+
interface
      var i,j: integer; p: mat;
+
uses
 +
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 +
  Dialogs, StdCtrls, Buttons, Grids;
 +
type
 +
  TForm1 = class(TForm)
 +
    StringGrid1: TStringGrid;
 +
    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}
 +
  type mat=array[1..9,1..9] of integer;
 +
  var i,j:integer;
 +
      p:mat;
 +
procedure TForm1.BitBtn2Click(Sender: TObject);
 
  begin
 
  begin
    for i:=1 to 9 do
+
close;
        begin
+
end;
          for j:=1 to 9 do
+
procedure TForm1.BitBtn1Click(Sender: TObject);
              begin
+
begin
                  p[i,j]:=i*j;
+
for i:=1 to 9 do
                  write (p[i,j]: 3)
+
  begin
              end;
+
    for j:=1 to 9 do
              writeln;
+
      begin
          end
+
        p[i,j]:=i*j;
 +
        stringgrid1.Cells[j-1,i-1]:=inttostr(p[i,j]);
 +
      end;
 +
  end;
 +
end;               
 
  end.
 
  end.
  
Строка 52: Строка 78:
 
== Пример 2==  
 
== Пример 2==  
  
*'''Условие.'''
+
*'''Условие:'''
  
 
Из матрицы А[3,4] получить вектор В, элементами которого являются наибольшие элементы столбцов матрицы.
 
Из матрицы А[3,4] получить вектор В, элементами которого являются наибольшие элементы столбцов матрицы.
Строка 62: Строка 88:
 
StringGrid2 - для вывода результирующего вектора
 
StringGrid2 - для вывода результирующего вектора
  
Label1 - для подписи матрицы
+
Label1 - для вывода текстовых сообщений
  
Label2 - для подписи вектора
+
Label2 - для вывода текстовых сообщений
  
 
BitBtn1 - для запуска программы
 
BitBtn1 - для запуска программы
Строка 70: Строка 96:
 
BitBtn2 - для закрытия формы
 
BitBtn2 - для закрытия формы
 
*'''Программный код:'''
 
*'''Программный код:'''
  type x = array[1..3, 1..4] of integer;
+
unit Unit1;
          y = array[1..4] of integer;
+
interface
  var i, j: integer; a: x; b: y;
+
uses
 +
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 +
  Dialogs, StdCtrls, Buttons, Grids;
 +
  type
 +
  TForm1 = class(TForm)
 +
    Label1: TLabel;
 +
    StringGrid1: TStringGrid;
 +
    Label2: TLabel;
 +
    StringGrid2: TStringGrid;
 +
    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}
 +
  type x=array[1..4,1..3] of integer;
 +
        y=array[1..4] of integer;
 +
  var i,j:integer;
 +
        a:x; b:y;
 +
procedure TForm1.BitBtn2Click(Sender: TObject);
 
  begin
 
  begin
    writeln ('Введите матрицу А');
+
close;
    for i:=1 to 3 do begin
+
end;
      for j:=1 to 4 do begin
+
procedure TForm1.BitBtn1Click(Sender: TObject);
          read(a[i,j]);
+
begin
          write (' ')
+
randomize;
      end;
+
  for i:=1 to 3 do begin
      writeln
+
  for j:=1 to 4 do
     end;
+
    begin
    writeln ('Массив В');
+
      a[i,j]:=random(41)-10;
    for j: = 1 to 4 do
+
      stringgrid1.Cells[j-1,i-1]:=inttostr(a[i,j]);
        begin
+
     end;                
            b[j]: = a[1,j];
+
            end;
            for i: = 2 to 3 do
+
    for j:=1 to 4 do
                if b[j] < a[i, j]
+
      begin
                then b[j]: = a[i, j];
+
        b[j]:=a[1,j];
            write(b[j]:4)
+
        for i:=2 to 3 do
        end
+
          if b[j]<a[i,j] then b[j]:=a[i,j];
 +
        stringgrid2.Cells[j-1,0]:=inttostr(b[j]);
 +
      end;
 +
end;
 
  end.
 
  end.
 +
                             
  
  
Строка 99: Строка 155:
 
==Задание==
 
==Задание==
  
Таблица 19
+
<CENTER>'''Таблица №19'''</CENTER>
 +
{| border=1
 +
|-
 +
!Номер варианта||Условие
 +
|-
 +
|<center>1</center>||Для данного целого положительного n создать  матрицу A(n,n), в которой элементы, стоящие  по диагонали, равны единице, а все остальные  элементы - нулевые.
 +
|-
 +
|<center>2</center>||Для данного целого положительного n сформировать матрицу A(n,n), в которой элементы диагонали равны номеру строки, а все остальные элементы - нулевые.
 +
|-
 +
|<center>3</center>||В матрице A(n,n) поменять местами две строки  с номерами р и q.
 +
|-
 +
|<center>4</center>||В матрице A(n,m) поэлементно вычесть последнюю строку из всех строк, кроме последней.
 +
|-
 +
|<center>5</center>||В матрице х(k,l) поменять местами максимальный и минимальный элементы.
 +
|-
 +
|<center>6</center>||Матрицу A(n,n) сформировать по следующему принципу: по диагонали расположены единицы, выше диагонали - нули, а элементы, расположенные ниже диагонали, равны сумме соответствующих индексов.
 +
|-
 +
|<center>7</center>||Задана матрица В(3,5). Получить матрицу V путем  удаления из В строки и столбца, в которых  содержится минимальный элемент.
 +
|-
 +
|<center>8</center>||Дана матрица A(m,n). Дополнить ее (m+1)-й строкой и (n+1)-м столбцом, в которых записать суммы элементов соответствующих строк или столбцов исходного массива А.
 +
|-
 +
|<center>9</center>||Транспонировать матрицу x(m,n).
 +
|-
 +
|<center>10</center>||Из матрицы А(3,4) получить вектор В, элементами которого являются произведения элементов в каждой строке матрицы.
 +
|-
 +
|<center>11</center>||Создать вектор М, содержащий количество отрицательных элементов каждого столбца матрицы z(3,4).
 +
|-
 +
|<center>12</center>||Сформировать матрицу У(n,n) таким образом, чтобы значения всех элементов 1-го столбца были равны 1, второго - 2, n-го - n.
 +
|-
 +
|<center>13</center>||Имеется матрица A(m,n). Найти максимальный из всех минимальных элементов строк. Вывести номер строки, в которой расположено выбранное число.
 +
|-
 +
|<center>14</center>||Сформировать диагональную матрицу C(m,m).  У диагональной матрицы все элементы равны нулю, кроме диагональных.
 +
 
 +
  |}
 +
 
 +
<CENTER>'''Таблица №20'''</CENTER>
 +
{| border=1
 +
|-
 +
!Номер варианта||Условие
 +
|-
 +
|<center>1</center>||Найти среднее арифметическое элементов матрицы  Х(n,m) и сформировать вектор У из элементов,  больших среднего арифметического.
 +
|-
 +
|<center>2</center>||Сформировать одномерный массив из элементов, стоящих над главной диагональю матрицы K(m,m). Найти сумму элементов этого массива.
 +
|-
 +
|<center>3</center>||Из матрицы У(k,k) получить вектор Т, элементами которого являются элементы главной диагонали матрицы.
 +
|-
 +
|<center>4</center>||Сформировать матрицу Z(n,n) по следующему  правилу: элементы, расположенные выше диагонали, равны нулю, а остальные элементы имеют произвольные значения.
 +
|-
 +
|<center>5</center>||Заполнить массив A(n,m) целыми случайными числами  таким образом, чтобы и в каждой строке и в каждом столбце каждый следующий элемент был не меньше предыдущего элемента.
 +
|-
 +
|<center>6</center>||В матрице X(m,m) найти максимальный диагональный  элемент  и вывести всю строку, в которой он расположен.
 +
|-
 +
|<center>7</center>||Вычислить сумму элементов двух главных диагоналей матрицы С(5,5).
 +
|-
 +
|<center>8</center>||Вычислить среднее арифметическое четных элементов  матрицы У(4,5).
 +
|-
 +
|<center>9</center>||Дана матрица X(m,m). Сформировать вектор из  элементов, расположенных по спирали.
 +
[[Изображение:Т14-З9.JPG]]
 +
 
 +
Пример заполнения матрицы (3,3).
 +
|-
 +
|<center>10</center>||Сформировать вектор С из элементов матрицы L(m,n), больших заданного числа Z.
 +
|-
 +
|<center>11</center>||Вычислить сумму элементов матрицы X(l,l), расположенных в закрашенной области.
 +
[[Изображение:Т14-З11.JPG]]
 +
|-
 +
|<center>12</center>||Найти произведение элементов матрицы T(k,k),  расположенных в закрашенной области.
 +
[[Изображение:Т14-З12.JPG]]
 +
|-
 +
|<center>13</center>||Сформировать Вектор Т из четных элементов  матрицы P(k,l). Найти в нем максимальный элемент.
 +
|-
 +
|<center>14</center>||Найти разность среднего арифметического элементов первых трех и элементов последних трех столбцов матрицы X(5,6). 
  
Таблица 20
+
  |}
  
 
==Литература==
 
==Литература==

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

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

Описание двумерного массива

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

массиве, другой - номер столбца.

В Delphi возможны массивы и большей размерности. Для их описания возможны два подхода:

а) массив рассматривается как массив других массивов:

type x = array[1..100] of real; y = array[1..2] of x;

б) массив рассматривается как многоиндексный

type y = array [ 1...100, 1...2 ] of real;

Оба описания равноценны.

Пример 1

  • Условие:

Получить матрицу, элементами которой являются произведения номеров строк i и номеров столбцов j.

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

StringGrid1 - для выврда результирующей таблицы

BitBtn1 - для запуска программы

BitBtn2 - для закрытия формы

  • Программный код:
unit Unit1;
interface
uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs, StdCtrls, Buttons, Grids;
type
 TForm1 = class(TForm)
   StringGrid1: TStringGrid;
   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}
 type mat=array[1..9,1..9] of integer;
 var i,j:integer;
     p:mat;
procedure TForm1.BitBtn2Click(Sender: TObject);
begin
close;
end;
procedure TForm1.BitBtn1Click(Sender: TObject);
begin
for i:=1 to 9 do
 begin
   for j:=1 to 9 do
     begin
       p[i,j]:=i*j;
       stringgrid1.Cells[j-1,i-1]:=inttostr(p[i,j]);
     end;
 end;
end;                 
end.


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

-6-1.JPG

Пример 2

  • Условие:

Из матрицы А[3,4] получить вектор В, элементами которого являются наибольшие элементы столбцов матрицы.

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

StringGrid1 - для вывода исходной матрицы

StringGrid2 - для вывода результирующего вектора

Label1 - для вывода текстовых сообщений

Label2 - для вывода текстовых сообщений

BitBtn1 - для запуска программы

BitBtn2 - для закрытия формы

  • Программный код:
unit Unit1;
interface
uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs, StdCtrls, Buttons, Grids;
type
 TForm1 = class(TForm)
   Label1: TLabel;
   StringGrid1: TStringGrid;
   Label2: TLabel;
   StringGrid2: TStringGrid;
   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}
  type x=array[1..4,1..3] of integer;
       y=array[1..4] of integer;
  var i,j:integer;
       a:x; b:y;
procedure TForm1.BitBtn2Click(Sender: TObject);
begin
close;
end;
procedure TForm1.BitBtn1Click(Sender: TObject);
begin
randomize;
 for i:=1 to 3 do  begin
 for j:=1 to 4 do
    begin
     a[i,j]:=random(41)-10;
     stringgrid1.Cells[j-1,i-1]:=inttostr(a[i,j]);
    end;                  
           end;
   for j:=1 to 4 do
     begin
       b[j]:=a[1,j];
       for i:=2 to 3 do
         if b[j]<a[i,j] then b[j]:=a[i,j];
       stringgrid2.Cells[j-1,0]:=inttostr(b[j]);
     end;
end;
end.
                              


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

-6-2.JPG

Задание

Таблица №19
Номер варианта Условие
1
Для данного целого положительного n создать матрицу A(n,n), в которой элементы, стоящие по диагонали, равны единице, а все остальные элементы - нулевые.
2
Для данного целого положительного n сформировать матрицу A(n,n), в которой элементы диагонали равны номеру строки, а все остальные элементы - нулевые.
3
В матрице A(n,n) поменять местами две строки с номерами р и q.
4
В матрице A(n,m) поэлементно вычесть последнюю строку из всех строк, кроме последней.
5
В матрице х(k,l) поменять местами максимальный и минимальный элементы.
6
Матрицу A(n,n) сформировать по следующему принципу: по диагонали расположены единицы, выше диагонали - нули, а элементы, расположенные ниже диагонали, равны сумме соответствующих индексов.
7
Задана матрица В(3,5). Получить матрицу V путем удаления из В строки и столбца, в которых содержится минимальный элемент.
8
Дана матрица A(m,n). Дополнить ее (m+1)-й строкой и (n+1)-м столбцом, в которых записать суммы элементов соответствующих строк или столбцов исходного массива А.
9
Транспонировать матрицу x(m,n).
10
Из матрицы А(3,4) получить вектор В, элементами которого являются произведения элементов в каждой строке матрицы.
11
Создать вектор М, содержащий количество отрицательных элементов каждого столбца матрицы z(3,4).
12
Сформировать матрицу У(n,n) таким образом, чтобы значения всех элементов 1-го столбца были равны 1, второго - 2, n-го - n.
13
Имеется матрица A(m,n). Найти максимальный из всех минимальных элементов строк. Вывести номер строки, в которой расположено выбранное число.
14
Сформировать диагональную матрицу C(m,m). У диагональной матрицы все элементы равны нулю, кроме диагональных.
Таблица №20
Номер варианта Условие
1
Найти среднее арифметическое элементов матрицы Х(n,m) и сформировать вектор У из элементов, больших среднего арифметического.
2
Сформировать одномерный массив из элементов, стоящих над главной диагональю матрицы K(m,m). Найти сумму элементов этого массива.
3
Из матрицы У(k,k) получить вектор Т, элементами которого являются элементы главной диагонали матрицы.
4
Сформировать матрицу Z(n,n) по следующему правилу: элементы, расположенные выше диагонали, равны нулю, а остальные элементы имеют произвольные значения.
5
Заполнить массив A(n,m) целыми случайными числами таким образом, чтобы и в каждой строке и в каждом столбце каждый следующий элемент был не меньше предыдущего элемента.
6
В матрице X(m,m) найти максимальный диагональный элемент и вывести всю строку, в которой он расположен.
7
Вычислить сумму элементов двух главных диагоналей матрицы С(5,5).
8
Вычислить среднее арифметическое четных элементов матрицы У(4,5).
9
Дана матрица X(m,m). Сформировать вектор из элементов, расположенных по спирали.

Т14-З9.JPG

Пример заполнения матрицы (3,3).

10
Сформировать вектор С из элементов матрицы L(m,n), больших заданного числа Z.
11
Вычислить сумму элементов матрицы X(l,l), расположенных в закрашенной области.

Т14-З11.JPG

12
Найти произведение элементов матрицы T(k,k), расположенных в закрашенной области.

Т14-З12.JPG

13
Сформировать Вектор Т из четных элементов матрицы P(k,l). Найти в нем максимальный элемент.
14
Найти разность среднего арифметического элементов первых трех и элементов последних трех столбцов матрицы X(5,6).

Литература

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


Ссылки

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

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