Учебный курс Программирование на 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 | ||
− | + | |- | |
− | |||
!Номер варианта||Условие | !Номер варианта||Условие | ||
|- | |- | ||
Строка 65: | Строка 187: | ||
|<center>10</center>||Дан вектор Х. Все его элементы не равные нулю, переписать (сохраняя их порядок) в начало массива, а нулевые элементы - в конец массива (новый массив не заводить). | |<center>10</center>||Дан вектор Х. Все его элементы не равные нулю, переписать (сохраняя их порядок) в начало массива, а нулевые элементы - в конец массива (новый массив не заводить). | ||
|- | |- | ||
− | |<center> | + | |<center>11</center>||Даны два вектора А и В. Сформировать вектор С, который содержит элементы, присутствующие в обоих массивах. |
|- | |- | ||
− | |<center> | + | |<center>12</center>||Имеется n окружностей с центром в начале координат и радиусами R[1], R[2], ..., R[n]. Определить номера окружностей между которыми находится точка с координатами (х, у). |
|- | |- | ||
− | |<center> | + | |<center>13</center>||В векторе X(n) поменять местами максимальный и последний элементы. |
|- | |- | ||
− | |<center> | + | |<center>14</center>||В векторе У(m) поменять местами максимальный и минимальный элементы. |
+ | |- | ||
+ | |} | ||
− | |||
+ | Таблица 14 | ||
− | + | {| border=1 | |
− | + | |- | |
− | + | !Номер варианта||Условие|| | |
− | + | |- | |
− | + | |<center>1</center>||Вычислить среднее геометрическое элементов вектора У(k), кратных трем. | |
− | + | |- | |
− | |||
− | |||
+ | |<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
Номер варианта | Условие |
---|---|
Даны два вектора целых чисел А и В. Вычислить вектор С, который содержит нечетные элементы вектора А, которых нет в векторе В | |
Расположить элементы вектора в обратном порядке. Дополнительный массив не использовать. | |
Найти среднее арифметическое элементов массива X(n), исключив из них максимальное и минимальное значение. | |
Вектор B(n) заменить вектором, у которого элементы образуются делением вектора В на их сумму. | |
Заменить все элементы вектора X(m), стоящие до максимального, нулями. | |
В массиве R(k) найти минимальный элемент среди положительных и максимальный среди отрицательных. | |
В массиве У(n) заменить все его элементы, стоящие после минимального, нулями. | |
Даны массив A(n) целого типа и целое число х. Произвести перестановку элементов массива так, чтобы в начале массива стояли элементы, значения которых меньше х, затем элементы, равные х, а следом элементы, значения которых больше х, в том порядке, в каком они стояли в массиве. | |
На плоскости на расстоянии s[1], s[2], ..., s[10] от центра кругового кольца с внутренним радиусом r и внешним R расположены точки. Определить количество точек, расположенных внутри кольца. | |
Дан вектор Х. Все его элементы не равные нулю, переписать (сохраняя их порядок) в начало массива, а нулевые элементы - в конец массива (новый массив не заводить). | |
Даны два вектора А и В. Сформировать вектор С, который содержит элементы, присутствующие в обоих массивах. | |
Имеется n окружностей с центром в начале координат и радиусами R[1], R[2], ..., R[n]. Определить номера окружностей между которыми находится точка с координатами (х, у). | |
В векторе X(n) поменять местами максимальный и последний элементы. | |
В векторе У(m) поменять местами максимальный и минимальный элементы. |
Таблица 14
Ссылки
Учебный курс Программирование на Delphi
Учебный план курса Программирование на Delphi
Номер варианта | Условие | |
---|---|---|
Вычислить среднее геометрическое элементов вектора У(k), кратных трем. | ||
Определить, кратна ли сумма элементов вектора A(x) семи. | ||
В векторе D(m) определить количество четных элементов. | ||
В векторе У(k) поменять местами первый и минимальный элементы. | ||
Из вектора С(n) сформировать вектор А, содержащий четные элементы вектора С и вектор В, содержащий нечетные элементы. | ||
Произвести сдвиг элементов вектора 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]. | ||
Найти среднее геометрическое элементов массива С[k], стоящих на четных местах. | ||
В массиве X(n) поменять местами минимальный и последний элементы. | ||
В векторе Т(к) заменить все его элементы, стоящие после максимального, нулями. | ||
Найти среднеквадратичное элементов вектора A(n). s=(a[1]*a[1] + a[2]*a[2] + ... +a[n]*a[n])/n | ||
Элементы вектора В, удовлетворяющие условию B[i]>10, переписать в массив X, а элементы, удовлетворяющие условию B[i] <= 10, переписать в массив У. | ||
В векторе Z(m) определить сумму нечетных элементов. | ||
Определить индексы четных элементов массива А(к). | ||
Определить, кратна ли сумма элементов вектора D(12) пяти. |