- •Тема 1. Разработка линейных программ
- •Этапы разработки программы
- •Переменные и константы
- •Оператор присваивания
- •Структура программы на языке Object Pascal
- •Некоторые функции преобразования типов
- •Среда программирования Delphi Главные составные части среды программирования
- •Состав проекта
- •Сохранение проекта
- •Структура модуля
- •Компиляция и выполнение проекта
- •Тема 2. Стандартные и библиотечные функции в линейных программах в данной теме рассматриваются следующие вопросы:
- •Некоторые стандартные библиотечные функции
- •Некоторые функции и процедуры даты
- •Ввод из окна ввода
- •Вывод в окно сообщения
- •Тема 3. Программы с разветвлениями
- •Логические выражения
- •Условный оператор
- •Оператор выбора
- •Оператор перехода
- •Компонент ListBox
- •Компонент ComboBox
- •Некоторые приемы работы с отладчиком
- •Тема 4. Циклы
- •Операторы цикла
- •Оператор цикла с параметром
- •Оператор цикла с предусловием
- •Оператор цикла с постусловием
- •Компонент Memo
- •Тема 5. Использование массивов в программах, компонента Memo для ввода данных в массив в данной теме рассматриваются следующие вопросы:
- •Массивы
- •Компонент Memo для ввода и вывода массивов
- •Тема 6. Разработка многооконных проектов. Двумерные массивы. Компонента StringGrid
- •Компонент StringGrid
- •Технология создания многооконных проектов
- •Ввод и вывод двумерных массивов c помощью компонента StringGrid
- •Тема 7. Внешние файлы
- •Процедуры работы с файлами
- •Главное меню
- •Тема 8. Разработка внутренних процедур и функций в данной теме рассматриваются следующие вопросы:
- •Процедуры
- •Функции
- •Литература
- •Оглавление
Тема 5. Использование массивов в программах, компонента Memo для ввода данных в массив в данной теме рассматриваются следующие вопросы:
массивы, компонент Memo для ввода и вывода массивов
Теория
Массивы
Массивом называется упорядоченная индексированная совокупность однотипных элементов, имеющих общее имя. Элементами массива могут быть данные различных типов, включая структурированные. Каждый элемент массива однозначно определяется именем массива и индексом (номером этого элемента в массиве) или индексами, если массив многомерный. Для обращения к отдельному элементу массива указываются имя этого массива и номер (номера) элемента, заключенный в квадратные скобки, например,
arrl[3, 35] , arrl[3] [35] или аrr3[7].
Количество индексных позиций определяет мерность массива (одномерный, двумерный и т. д.), при этом мерность массива не ограничивается. В математике аналогом одномерного массива является вектор, а двумерного массива — матрица. Индексы элементов массива должны принадлежать порядковому типу. Разные индексы одного и того же массива могут иметь различные типы. Наиболее часто типом индекса является целочисленный тип.
Различают массивы статические и динамические. Статический массив представляет собой массив, границы индексов и соответственно размеры которого задаются при объявлении — известны до компиляции программы.
Формат описания типа статического массива:
Array [Тип индексов] of <Тип элементов>;
Пример. Объявление статических массивов.
Type tm = Array[l .. 10, 1 .. 100] of real;
Var arrl, arr2: tm;
arr3: Array[20 .. 100] of char;
arr4: Array['a' .. 'z'] of integer;
Переменные arrl и arr2 являются двумерными массивами по 1000 элементов — 10 строк и 100 столбцов. Каждый элемент этих массивов представляет собой число типа real. Для объявления массивов arrl и аrr2 введен специальный тип tm. Переменные аrrз и аrr4 являются одномерными массивами, соответственно на 81 символ и 26 целых чисел.
Доступ к каждому элементу массива осуществляется по индексу. Например, arr1[2,3] — элемент массива arr1, находящийся во второй строке и третьем столбце; arr3[34] — элемент массива arr3 с индексом 34, но пятнадцатый по порядку; arr4[i] — i–ый элемент массива arr4.
Компонент Memo для ввода и вывода массивов
При использовании компонента Memo для ввода массива значение каждого элемента массива следует вводить в отдельной строке и после ввода каждого элемента массива нажимать клавишу ENTER.
Получить доступ к находящейся в поле Memo строке текста можно при помощи свойства Lines, указав в квадратных скобках номер нужной строки (строки нумеруются с 0).
Следующий цикл демонстрирует ввод символьного массива из компонента Memo:
For i:=1 to Size do
a[i]:=Memo1.Lines[i];
Вывод массива в компонент Memo можно осуществить таким образом:
For i:=0 to N-1
Memo2.Lines.Add(FloatToStr(massiv[i+1]);
Практика
Задача
Составить программу для сортировки массива вещественных чисел по желанию пользователя: по возрастанию или по убыванию. Результаты сортировки вывести в окно сообщения.
Компоненты
Имя компонента |
Свойства компонент |
Значение |
Назначение |
Form1 |
Caption |
Сортировка массива методом прямого выбора |
Заголовок формы |
Label1 |
Caption |
Программа предназначена для сортировки массива вещественных чисел по возрастанию либо по убыванию |
Справочная информация для пользователя программы |
Label2 |
Caption |
Количество элементов в массиве |
Подсказка пользователю |
Edit1 |
Text |
….. |
Поле для ввода количества элементов в массиве |
Memo1 |
Lines |
….. |
Компонент для ввода элементов массива в столбик (в одной строке — один элемент) |
Button1 |
Caption |
Сортировка по возрастанию |
Кнопка для выполнения сортировки по возрастанию |
Button2 |
Caption |
Сортировка по убыванию |
Кнопка для выполнения сортировки поубыванию |
Button3 |
Caption |
Завершение работы |
Кнопка для завершения работы программы |
Переменные и массивы
Обозначение в программе |
Содержание |
Тип |
N |
Количество элементов в массиве действительных чисел |
целый |
Massiv |
Массив действительных чисел |
вещественный, расширенный |
I |
Текущий индекс элемента массива |
целый |
J |
индекс элемента массива, с которого начинается поиск минимального либо максимального элемента |
целый |
min |
номер минимального элемента в массиве или части массива |
целый |
max |
номер максимального элемента в массиве или части массива |
целый |
buf |
буфер для обмена местами элементов массива |
вещественный, расширенный |
st |
строковое сообщение, содержащее результат |
строковый |
Проект формы
|
Текст модуля
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Label1: TLabel;
Label2: TLabel;
Edit1: TEdit;
Memo1: TMemo;
Button1: TButton;
Button2: TButton;
Button3: TButton;
procedure Button3Click(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
Massiv: array [1..100] of Extended;// массив действительных чисел
N : Integer;
implementation
{$R *.dfm}
procedure TForm1.Button3Click(Sender: TObject);
begin
Form1.Close
end;
procedure TForm1.Button1Click(Sender: TObject);
Var I:Integer;// индекс элемента массива
min: Integer; // номер минимального элемента в массиве
//или части массива
j : Integer; //индекс элемента массива
//с которого начинается
// поиск минимального элемента
buf: Extended; // буфер для обмена местами
// элементов массива
St:String; // строковое сообщение, содержащее результат
begin
//ввод количества элементов в массиве
N:=StrToInt(Edit1.Text);
//ввод массива действительных чисел
For I:=1 To N do
Massiv[I]:=StrToFloat(Memo1.Lines[I-1]);
// поиск минимального элемента массива методом пузырька
{алгоритм метода прямого выбора можно описать следующими словами. Сначала в качестве минимального элемента берется первый элемент и с ним последовательно сравниваются все следующие элементы массива, если попадается элемент меньше принятого за минимальный, то они меняются местами. В результате на первом месте оказывается самый маленький элемент массива. Затем берется второй или следующий элемент массива и просматривается с перестановкой оставшаяся часть массива. Эта последовательность шагов повторяется пока номер минимального элемента не достигнет N-1}
For I:=1 to N-1 do
begin
min:=I;
For j:=I+1 to N do
if Massiv[j] < Massiv[min]
then min:=j;
buf:=Massiv[I];
Massiv[I]:=Massiv[min];
Massiv[min]:=buf;
end;
//вывод результатов сортировки
st:='Отсортированный по возрастанию массив'+#13;
For I:=1 to N do
st:=st+IntToStr(i)+ ' '+FloatToStrF(Massiv[I],Fffixed,10,2)+#13;
ShowMessage(st);
end;
procedure TForm1.Button2Click(Sender: TObject);
Var I:Integer;// индекс элемента массива
max: Integer; // максимальный элемент в массиве
j : Integer; //индекс элемента массива, с которого
// начинается поиск максимального элемента
buf: Extended; // буфер для обмена местами элементов
// массива
St:String;// строковое сообщение, содержащее результат
begin
//ввод количества элементов в массиве
N:=StrToInt(Edit1.Text);
//ввод массива действительных чисел
For I:=1 To N do
Massiv[I]:=StrToFloat(Memo1.Lines[I-1]);
// поиск максимального элемента массива методом прямого выбора
// алгоритм аналогичен поиску минимального элемента.
// отличие состоит в знаке сравнения
For I:=1 to N-1 do
begin
max:=I;
For j:=I+1 to N do
if Massiv[j] > Massiv[max] then max:=j;
buf:=Massiv[I];
Massiv[I]:=Massiv[max];
Massiv[max]:=buf;
end;
//вывод результатов сортировки
st:='Отсортированный по убыванию массив'+#13;
For I:=1 to N do
st:=st+IntToStr(i)+ ' '+FloatToStrF(Massiv[I],Fffixed,10,2)+#13;
ShowMessage(st);
end;
end.
Задачи для самостоятельного решения
№ 5.1 Дан массив действительных чисел. Найти сумму элементов массива.
№ 5.2 Дан массив действительных чисел. Найти произведение элементов массива.
№ 5.3 Дан массив действительных чисел. Найти сумму квадратов элементов массива.
№ 5.4 Дан массив действительных чисел. Найти модуль суммы и квадрат произведения элементов массива.
№ 5.5 Дан массив действительных чисел. Найти наибольший элемент массива.
№ 5.6 Дан массив действительных чисел. Найти наименьший элемент массива.
№ 5.7 Дан массив действительных чисел. Найти наибольший элемент массива.
№5.8 Дан массив действительных чисел. Найти наименьший из элементов массива с четными номерами.
№5.9 Написать программу для определения среднего роста студентов группы.
№5.10 Написать программу для вычисления среднего гармонического
Mn = n / (1/a1+ 1/a2+...+ 1/an), где ai0.