Пятница, 19.04.2024, 10:44
Главная | Регистрация | Вход Приветствую Вас Гость | RSS


Меню сайта


Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0


Тестування онлайн
тестування онлайн 


Социальные закладк

Тема 9. Табличные величины.  Ввод и вывод табличных величин.
              С
уществует много задач, в которых требуется обрабатывать значения достаточно большого количества переменных одного и того же типа.

Например, если надо составить программу для вычисления средней массы ста учеников 9-х классов,то очевидно нужно использовать 100 переменных типа real, значением каждой из которых будет масса соответствующего девятиклассника по данным ста учеников 9-х классов, найти сумму значений этих переменных и разделить ее на 100.

Если использовать 100 переменных типа real с произвольными именами, например,а, Ь, с, ..., z, аа, ab, ас ..., az, ba, bb, be, .... bz, ca, cb, cc, ..., cv, то команда нахождения суммы их значений будет содержать в правой части 100 слагаемых или нужно включить в текст программы такие 100 команд:

 sum = а;
 sum = sum + b;
 sum = sum + с;
 ...
 sum = sum + cv;

  Заключение: Все это делает текст программы громоздким и неудобным

Кроме того количество учеников может быть:     еще больше          или     вообще заранее неизвестным

 

Для решения задач, в которых обрабатывается значения переменных одного типа, можно пойти таким путем:

  • рассматривать все эти переменные как элементы некоторого упорядоченного набора переменных;
  • этот набор переменных имеет имя, а имя каждой переменной набора состоит из имени набора и порядкового номера этой переменной в наборе.

Упорядоченный набор переменных одного типа называется массивом или табличной величиной.

  • Каждая переменная, входящая в массив, называется элементом массива. 
  • Массив, в котором каждый элемент определяется только одним порядковым номером, называется одномерным (линейным).
  • Имя элемента табличной величины состоит из имени этой табличной величины и порядкового номера этого элемента в табличной величине, который взят в квадратные скобки []

Так, для приведенного выше примера следует рассматривать табличную величину, состоящий из 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 описать переменную нового типа:

  • type <имя типа> = array [диапазон индексов] of <тип элементов>;
  • var <список переменных> <имя типа>;

 Описать переменную типа массива не вводя нового типа:

 var <список переменных>: array [диапазон индексов] of <тип элементов>;

По этой записи:

  • компилятор выделяет в памяти компьютера 100 участков под каждую из 100 переменных - элементов табличной величины;
  • размер каждого участка зависит от типа элементов табличной величины.

Обращаем ваше внимание:
Иногда удобно нумеровать элементы табличной величины, начиная не с 1:

  1. в некоторых задачах (некоторые из них рассмотрим ниже) удобно нумеровать элементы табличной величины, начиная с 0, например, a: array [0..12] of real;
  2.  в задаче, в которой используется ежегодная численность населения Украины в период с 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 и другие.
Рассмотрим еще несколько свойств многострочного текстового поля:

 Text - текст, находящийся в поле Memo, рассматривается как единое целое.
 Lines - массив строк, соответствующий содержимому поля., доступ к строке осуществляется по номеру, строки нумеруются с нуля.
 
Lines.Count    -   количество строк текста в поле Memo.
 
WantReturns - клавиша для ввода конца строки: TRUE – клавиша ENTER; FALSE – сочетание клавиш CTRL + ENTER.
 
WordWrap - переход в начало следующей строки при вводе длинных строк: TRUE –производится автоматически; FALSE – не производиться, при включенной горизонтальной полосе прокрутке это свойство игнорируется.
 
ScrollBar - использование полосы прокрутки, если текст большой и не помещается в компоненте Memo:

ssNone – Нет полосы прокрутки;
ssHorizontal – Установлена горизонтальная прокрутка;
ssVertical – Установлена вертикальная прокрутка;
ssBoth – Установленs две полосы прокрутки.

ReadOnly - разрешает или запрещает редактирование текста. (Программно все равно текст можно добавлять).

 MaxLength - максимальная длина текста в поле Мето, значение 0 снимает ограничения длины

 Компонент Listbox (вкладка Standard на палитре компонентов) предназначен для хранения и обработки текстовых данных.

  1.  Каждая строка Listbox сохраняет строку данных в формате String.
  2. .Доступ в строки предоставляет свойство Items этого компонента.

       3. Для добавления строки в список программным путем назначен метод Add. Синтаксис его вызова таков:                                                    ListBox1.Items.Add ( 'Новая строка');
      4.Добавить в список ListBox значение выражения 2 * х:                                     ListBox1.ltems.Add (IntToStr (2 * x))
     5. Чтобы очистить содержимое списка, для элемента управления ListBox вызывают метод Clear:                                                                                                 ListBox1.Clear;
     6.  Свойство Count сохраняет количество строк, добавленных в список.

 

Методы компонента Memo:
 1. Для создания новых строк служат методы:

  • Add () - Memo1.Lines.Add ()
  • Lines.Append - aнгл. Append - добавлять,что добавляет в многострочное текстовое поле новую строку и выводит в нее значение параметра, указанного в скобках

  2. Добавления новой строки в конец списка - Insert ():
                                  
Memo1.Lines.lnsert (N, Text) - вставка строки Text перед строкой с индексом N

 3. Добавить элементы в массив Memo1.Lines:

  •  Memo1.Lines.Add ( 'Это будет последняя строка');
  • Memo1.Lines.lnsert (2, 'Эта строка будет третьей'); //Отсчет от нуля!

 4. Memo имеет метод Delete () для извлечения строки: Memo1.Lines.Delete (i) // Удаление строки с индексом 

 5. Для очистки всего содержимого поля Memo предназначен метод ClearMemo1.Clear;

Рассмотрим создание, ввод и вывод элементов одномерных массивов на конкретных примерах.

Использование компонента TMemo для ввода и компонента TListBox для вывода значений элементов одномерного массива.

Пример 1      Ввести значения элементов табличной величины из 10 чисел, находящихся в рядках Memo1, возвести в квадрат  и вывести их  в другое многострочное текстовое поле.(Для практики использования многострочных полей будем выводить элементы массива как в поле ListBox1 так и в поле Memo2 )

Интерфейс проекта

Ввод значений в текстовое поле Memo1 можно выполнять:

  1. C клавиатуры, присвоив свойству ReadOnly значение false; (Но если закрыть окно выполнения проекта и затем еще раз запустить проект на выполнение, то нужно будет снова вводить числа в строки первого многострочного текстового поля.)

  2. Предварительно ввести числа в многострочное текстовое поле к запуску проекта на выполнение.. Для этого нужно:
  • выбрать многострочное текстовое поле;
  • в конце строки 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);
    var a: array[0..9] of real; i:integer;
begin
   for i:= 0 to 9 do   a[i]:= strtofloat(memo1.Lines[i]);
{ данные из строк многострочного текстового поля memo1  перевести в числа и присвоить соответствующим элементам  массива }
  for i:= 0 to 9 do    a[i]:=a[i]*a[i];   // изменение значений элементов массива,  возведение в степень
  memo2.Clear;  //  очистить второе многострочное поле

  ListBox1.Clear; //  очистить  многострочное поле ListBox1
  for i:= 0 to 9 do
      
begin
        memo2.Lines.Append(floattostr(a[i]));
{
для  вывода значений элементов массива в строки поля memo2 применяем метод Append или метод Add}

       ListBox1.Items.Add( floatToStr(a[i])); {  вывести значение элементов массива в строки многострочного поля ListBox1 применив метод Add}
   
 end;

end;

procedure TForm1.Button2Click(Sender: TObject);
begin
   ListBox1.Clear;     memo2.Clear;
end;

procedure TForm1.Button3Click(Sender: TObject);
begin
  form1.Close;
end;


  Замена значений элементов массива с проверкой условия

 Алгоритм решения задачи:

  • последовательно перебрать все элементы массива;
  • если очередной элемент соответствует некоторому условию, его значение изменить по определенному правилу.

 Как условие может проверяться:

  •  значение элемента массива на кратность некоторому числу, положительность, равенство нулю и тому подобное.
  •  также и значение индекса элемента массива (например, меняются элементы, стоящие на четных местах).

Например,

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;

 

Поиск элементов массива с заданными свойствами

Форма входа
Поиск
Календарь
«  Апрель 2024  »
ПнВтСрЧтПтСбВс
1234567
891011121314
15161718192021
22232425262728
2930
Архив записей
Друзья сайта
  • Официальный блог
  • Сообщество uCoz
  • FAQ по системе
  • Инструкции для uCoz

  • Рейтинг@Mail.ru
    Copyright MyCorp © 2024
    Конструктор сайтов - uCoz