Тема 9. Табличные величины. Ввод и вывод табличных величин.
Существует много задач, в которых требуется обрабатывать значения достаточно большого количества переменных одного и того же типа.
Например, если надо составить программу для вычисления средней массы ста учеников 9-х классов,то очевидно нужно использовать 100 переменных типа real, значением каждой из которых будет масса соответствующего девятиклассника по данным ста учеников 9-х классов, найти сумму значений этих переменных и разделить ее на 100. Если использовать 100 переменных типа real с произвольными именами, например,а, Ь, с, ..., z, аа, ab, ас ..., az, ba, bb, be, .... bz, ca, cb, cc, ..., cv, то команда нахождения суммы их значений будет содержать в правой части 100 слагаемых или нужно включить в текст программы такие 100 команд: |
sum = а; |
Заключение: Все это делает текст программы громоздким и неудобным Кроме того количество учеников может быть: еще больше или вообще заранее неизвестным |
Для решения задач, в которых обрабатывается значения переменных одного типа, можно пойти таким путем:
- рассматривать все эти переменные как элементы некоторого упорядоченного набора переменных;
- этот набор переменных имеет имя, а имя каждой переменной набора состоит из имени набора и порядкового номера этой переменной в наборе.
Упорядоченный набор переменных одного типа называется массивом или табличной величиной.
- Каждая переменная, входящая в массив, называется элементом массива.
- Массив, в котором каждый элемент определяется только одним порядковым номером, называется одномерным (линейным).
- Имя элемента табличной величины состоит из имени этой табличной величины и порядкового номера этого элемента в табличной величине, который взят в квадратные скобки []
Так, для приведенного выше примера следует рассматривать табличную величину, состоящий из 100 элементов.
Если имя этой табличной величины а, то имена переменных - элементов этой табличной величины будут такие:
а [1], а [2], а [3], ..., а [100].
Каждая из этих переменных будет иметь тип real.
Тогда, чтобы найти сумму значений всех этих 100 переменных, достаточно записать следующие команды:
sum: = 0;
for i: = 1 to 100 do sum = sum + a [i];
Выполнение этого фрагмента программы будет происходить так:
В результате выполнения приведенного фрагмента программы значение переменной sum равна сумме значений всех 100 переменных - элементов табличной величины, то есть общей массе данных 100 учеников. После этого можно вычислить искомую среднюю массу.
В строке var переменная а типа табличная величина записывается так: var a: array [1..100] of real ; //англ. Array - массив, диапазон номеров элементов табличной величины от 1 до 100, тип элементов табличной величины
Описать переменную типа одномерный массив можно двумя способами: | |
В разделе type интерфейсного блока программного кода описать новый тип данных, и в разделе var описать переменную нового типа:
|
Описать переменную типа массива не вводя нового типа: var <список переменных>: array [диапазон индексов] of <тип элементов>; |
По этой записи:
- компилятор выделяет в памяти компьютера 100 участков под каждую из 100 переменных - элементов табличной величины;
- размер каждого участка зависит от типа элементов табличной величины.
Обращаем ваше внимание:
Иногда удобно нумеровать элементы табличной величины, начиная не с 1:
- в некоторых задачах (некоторые из них рассмотрим ниже) удобно нумеровать элементы табличной величины, начиная с 0, например, a: array [0..12] of real;
- в задаче, в которой используется ежегодная численность населения Украины в период с 1991 по 2017 год, удобно использовать табличную величину a: array [1991..2017] of integer;
Номер элемента табличной величины может задаваться как целым числом, так и значением выражения, результатом значений которого будут целые числа, например: а [2 * i - 5], где i - переменная типа integer.
Ввод и вывод табличных величин.
Замена значений всех элементов массива
Элементы массива могут принимать значения разными способами:
- присваиваться при объявлении массива,
- вводиться с клавиатуры,
- присваиваться при выполнении программы.
В визуальных приложениях среды Lazarus для формирования массивов, ввод значений его элементов с клавиатуры, а также вывода элементов чаще всего применяются :
- многострочные текстовые поля TMemo и TListBox;
-
компонент StringGrid (Вкладка Additional) предназначен для вывода различных данных в табличной форме;
- а также функции InputBox () и ShowMessage ();
- могут применяться также и однострочные текстовые поля TEdit и TLabel.
Основное предназначение компонента TMemo – работа с большим количеством строк (ввод, отображение и редактирование текстового материала). Элементы массива Memo1.Lines имеют нумерацию от 0 до Memo1.Lines.Count - 1. Среди свойств этого компонента много вам уже известных: Name, Color, Font, Enabled, Visible, Height, Width, Top, Left и другие. ssNone – Нет полосы прокрутки; ReadOnly - разрешает или запрещает редактирование текста. (Программно все равно текст можно добавлять). MaxLength - максимальная длина текста в поле Мето, значение 0 снимает ограничения длины |
Компонент Listbox (вкладка Standard на палитре компонентов) предназначен для хранения и обработки текстовых данных.
3. Для добавления строки в список программным путем назначен метод Add. Синтаксис его вызова таков: ListBox1.Items.Add ( 'Новая строка');
|
Методы компонента Memo:
2. Добавления новой строки в конец списка - Insert (): 3. Добавить элементы в массив Memo1.Lines:
4. Memo имеет метод Delete () для извлечения строки: Memo1.Lines.Delete (i) // Удаление строки с индексом 5. Для очистки всего содержимого поля Memo предназначен метод Clear - Memo1.Clear; |
Рассмотрим создание, ввод и вывод элементов одномерных массивов на конкретных примерах.
Использование компонента TMemo для ввода и компонента TListBox для вывода значений элементов одномерного массива.
Пример 1 Ввести значения элементов табличной величины из 10 чисел, находящихся в рядках Memo1, возвести в квадрат и вывести их в другое многострочное текстовое поле.(Для практики использования многострочных полей будем выводить элементы массива как в поле ListBox1 так и в поле Memo2 )
Интерфейс проекта
Ввод значений в текстовое поле Memo1 можно выполнять:
-
C клавиатуры, присвоив свойству ReadOnly значение false; (Но если закрыть окно выполнения проекта и затем еще раз запустить проект на выполнение, то нужно будет снова вводить числа в строки первого многострочного текстового поля.)
- Предварительно ввести числа в многострочное текстовое поле к запуску проекта на выполнение.. Для этого нужно:
- выбрать многострочное текстовое поле;
- в конце строки Lines окна Инспектор объектов выбрать кнопку...;
- в окне Редактор строк удалить текст первой строки и ввести 10 цифр;
- выбрать кнопку ОК.
(Тогда при сохранении проекта эти значения также сохранятся и автоматически появятся в многострочном текстовом поле после запуска проекта на выполнение.)
Выберем второй способ ввода данных в Memo1.
|
Определимся в следующем:
1. установим значение свойства Read Only в false для memo1:
- разрешение редактирования пользователем строк многострочного поля
2. выберем способ вывода данных в многострочное поле memo1:
-
memo2.Lines.Append(floattostr(a[i])); { для вывода значений элементов массива в строки поля memo2 применяем метод Append или метод Add}
или
- memo2.Lines[i]:= floattostr(a[i]);{ для вывода значений элементов массива в строки поля memo2 можно воспользоваться командой присваивания}
3. для вывод данных в многострочное поле tlistbox воспользуемся методом Add:
- ListBox1.Items.Add( floatToStr(a[i])); { вывести значение элементов массива в строки многострочного поля ListBox1 применив метод Add}
Замена значений всех элементов массива Алгоритм решения задачи: последовательно перебрать все элементы массива и значение очередного элемента изменить по определенному правилу например,
|
Программный код procedure TForm1.Button1Click(Sender: TObject); ListBox1.Items.Add( floatToStr(a[i])); { вывести значение элементов массива в строки многострочного поля ListBox1 применив метод Add} |
procedure TForm1.Button2Click(Sender: TObject); procedure TForm1.Button3Click(Sender: TObject); |
Замена значений элементов массива с проверкой условия
Алгоритм решения задачи:
Как условие может проверяться:
Например, 1. Отрицательные элементы массива А заменить числом 25: For i: = 1 to N do If A [i] <0 Then A [i]: = 25; 2. Элементы массива А, имеющие четные индексы, заменить нулем: For i: = 1 to N do If i mod 2 = 0 Then A [i]: = 0; |