Вторник, 17.09.2019, 19:39
Главная | Регистрация | Вход Приветствую Вас Гость | RSS


Меню сайта


Статистика

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


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


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

Тема. Отображение данных в табличной форме

Вы уже ознакомились с приемами ввода и вывода значений элементов одномерного массива с использованием компонентов Memo, ListBox. Но поскольку алгоритмы обработки массивов предназначены для работы с таблицами данных, для большей наглядности работы программы желательно отображать содержимое массива в виде таблицы.

Использование компонента StringGrid

  1. Компонент StringGrid (Вкладка Additional) предназначен для вывода различных данных в табличной форме.
  2. Как следует из названия, клетки компонента StringGrid могут содержать данные типа String.

Таблица StringGrid может состоять из фиксированных клеток-заголовков FixedCols и FixedRows, выделенных серым цветом, и обычных клеток белого цвета:


 

  1. Обращение к ячейке таблицы, находящейся на пересечении столбца с номером col и строки с номером  row, имеет вид StringGrid1.Cells [col, row]


     
  2. Нумерация столбцов (col) и строк (row) начинается с нуля.

Рассмотрим основные свойства компонента StringGrid, с помощью которых можно определить структуру и вид таблицы.

 

Задание 1. Рассмотрим пример настройки вида элемента StringGrid1 для отображения одномерного массива

Вариант 1. 

 

  1. Выполним загрузку Lazarus
  2. Установим на форме  компоненты  StringGrid1 и Button1 , Button2.
  3. Для компонента назначим значение свойств согласно таблице:

                        
    Вывод фиксированной строки с индексами  элементов массива не является обязательным, но бывает очень полезным при  анализе работы программы.

  4. Заполним ячейки нулевой строки значениями  индексов (i) элементов массива. Содержание фиксированных клеток меняется только программным способом, обычно в процедуре обработки события OnCreate для формы:

    procedure TForm1.FormCreate(Sender: TObject);
    var i: Integer;
    begin   
    // нумерация столбцов и строк начинается с нуля
    For  i := 1 to 6 do StringGrid1.Cells[i - 1, 0] := IntToStr(i);// нумерация столбцов нулевой строки
    end;

     

  5.  Заполним массив случайными числами в диапазоне от 0 до 40
     

    procedure TForm1.Button1Click(Sender: TObject);
    var a: array[1..6] of Integer; i: Integer;
    begin
    Randomize;
    For i := 1 to 6 do
     
     begin
    a[i] := Random(40);
    StringGrid1.Cells[i - 1, 1] := IntToStr(a[i]);
    //заполнение ячеек второй строки данными
       end;
    end; 

    Очистить содержимое таблицы: 

    procedure TForm1.Button2Click(Sender: TObject);
    begin
       StringGrid1.
    Rows[1].Clear;
    end;

Вариант 2.

 

Программный код

procedure TForm1.Button1Click(Sender: TObject);
        var a:array[1..6] of integer; i: integer;
begin
  randomize;
  for i:=1 to 6 do
 
begin
    a[i]:= random(40);  // формирование элементов массива от 1 до 6

     stringGrid1.cells[i-1, 0]  := inttostr(i);{создание заголовка первой строки таблицы,     следует помнить что  нумерация строк и столбцов начинается с нуля}

    stringGrid1.cells[i-1, 1]  := inttostr(a[i]);  // вывод элементов массива в ячейки  второй строки таблицы
  end;
 end;                     

Вариант 3.

Программный код

var
  Form1: TForm1;
   a: array[1..6] of integer; i: integer;
// объявление глобальных переменных

Процедура для кнопки " нумерация столбцов":

procedure TForm1.Button1Click(Sender: TObject);
Begin
For i:=0 to 5 do      stringGrid1.cells[i, 0]  := inttostr(i+1);
{создание заголовка первой строки таблицы,
     следует помнить что  нумерация строк и столбцов начинается с нуля}

End;

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

 

procedure TForm1.Button2Click(Sender: TObject);
Begin
For i:=0 to 5 do

Begin
A[i]:= random(20);
Stringgrid1.cells[i,1] := inttostr(a[i]); // вывод элементов массива в ячейки  второй строки таблицы

End;
end;

Редактирования содержимого ячеек таблицы StringGrid

1.    За возможность редактирования обычных клеток соответствуют значения свойства Options.
2.    В окне Инспектор объектов список значений свойства Options содержит 32 элемента, которые могут принимать значения True или False.
3.    Чтобы в ходе выполнения программы можно было редактировать содержимое ячеек, необходимо предоставить значение True таким элементам списка Options:


 

Задание 2. Заполнить таблицу с клавиатуры и найти среднее арифметическое элементов массива

В качестве примера использования компонента stringGrid для ввода массива рассмотрим программу, которая вычисляет среднее арифметическое значение элементов массива.

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

Компонент stringGrid используется для ввода массива,
Компоненты Label1 ,Label2   - для вывода пояснительного текста и результата расчета,
Button1 - для запуска процесса расчета.

Значение свойств  компонента StringGrid1

Свойство Значение

ColCount

5
FixedCols     0
FixedRows   0
RowCount     1
DefaultRowHeight     24
Height     24
DefaultColWidth    64
Width     328
Options. goEditing     True
Options. AlwaysShowEditing     True
Options .goTabs     True

PS! фиксированная строка с индексами  элементов массива отсутствует

Программный код 

 procedure TForm1.Button1Click(Sender: TObject);
 
var a: array[1..5] of Integer; sum, i: Integer; //массив,  сумма элементов, индекс
 sr: Real; //среднее арифметическое
 begin
  For i := 1 to 5 do 
         If
Length(StringGrid1.Cells[i - 1, 1]) <> 0 
                Then a[i] := StrToInt(StringGrid1.Cells[i- 1, 1]) Else a[i] := 0; // формирование массива
 
sum := 0;
   For i := 1 to 5 do sum := sum + a[i];  // накопление суммы

   sr := sum / 5;   // вычисление среднего арифметического

   Label2.Caption := 'Сумма элементов: ' + IntToStr(sum) + LineEnding +
       'Среднее арифметическое: ' + FloatToStrF(sr, ffFixed,10,3);           //LineEnding —                                         константа,устанавливающая конец строки 
 end;   

Вариант вывода информации:

Label2.Caption := 'сумма элементов: '+ FloatToStrF(summ,ffFixed,10,3)+ #13 + 'среднее арифметическое:' + FloatToStrF(sr,ffFixed,10,3);

 

  Задание 3. Найти  наибольшее и наименьшее значение среди элементов линейного массива и поменять их местами.

Алгоритм проекта

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


  Вариант 2

 

Программный код
var
  Form1: TForm1;
   var a:array[1..10] of real; nmin, nmax, i: integer; max, min: real;
// объявляем переменные - глобальными

Вариант 1.

procedure TForm1.Button1Click(Sender: TObject);
begin
   randomize;
   for i:=  1 to 10 do
   
begin
     a[i]:= random(60) + 0.5;    // формируем массив
     memo1.lines[i] := 'a['+ inttostr(i) + ' ]= '+ floattostr(a[i]); //вывод элементов массива построчно в многострочное поле
     end;
    max:=a[1]; nmax :=1;    //первый элемент массива считаем максимальным
    min:=a[1];nmin := 1; //второй элемент массива считаем  минимальным

   for i:=  2 to 10 do
     if
 a[i]> max  //сравниваем очередной элемент массива с наибольшим на данный момент
                 then       begin max:= a[i]; nmax := i; end  //меняем значение наибольшего элемента и его номер    
                 else if
a[i]< min  then  //сравниваем очередной элемент массива с наименьшим на данный момент
                                       begin min:= a[i]; nmin := i; end ; //меняем значение наименьшего элемента и его номер
 
      label2.caption:= floattostr(max);
      label4.caption:= floattostr(nmax);
      label6.caption:= floattostr(min);
      label8.caption:= floattostr(nmin);

    a[nmax] := min; a[nmin] := max;    //обмен значениями наибольшего и наименьшего элементов массива
     for i:=  1 to 10 do   // вывод преобразованного массива
        memo2.lines[i] := 'a['+ inttostr(i) + ' ]= '+ floattostr(a[i]);
end;

 

Вариант 2.

procedure TForm1.FormCreate(Sender: TObject);
 begin  
// нумерация столбцов и строк начинается с нуля
for  i := 1 to 10 do StringGrid1.Cells[i - 1, 0] := IntToStr(i);// нумерация столбцов нулевой строки
for  i := 1 to 10 do StringGrid2.Cells[i - 1, 0] := IntToStr(i);// нумерация столбцов нулевой строки
 end;

procedure TForm1.Button1Click(Sender: TObject);
begin
       randomize;
   for i:=  1 to 10 do
 
 begin
     a[i]:= random(60) + 0.5;    //создаем массив
     StringGrid1.Cells[i - 1, 1] := floattostr(a[i]); //заполнение ячеек второй строки таблицы StringGrid1 соответствующими элементами массива
   end;
    max:=a[1];   nmax :=1;    //первый элемент массива считаем максимальным
    min:=a[1];   nmin := 1; //второй элемент массива считаем  минимальным

   for i:=  2 to 10 do
 
 begin
    if  a[i]> max  //сравниваем очередной элемент массива с наибольшим на данный момент
                then
                       
begin max:= a[i];  nmax := i;  end   //меняем значение наибольшего элемента и его номер
    else if a[i]< min  //сравниваем очередной элемент массива с наименьшим на данный момент
              then  
                   
  begin min:= a[i];  nmin := i; end ;  //меняем значение наименьшего элемента и его номер
    end;
      label2.caption:= floattostr(max);
      label4.caption:= floattostr(nmax);
      label6.caption:= floattostr(min);
      label8.caption:= floattostr(nmin);
      a[nmax] := min;   a[nmin] := max;  
 //обмен значениями наибольшего и наименьшего элементов массива
     
  for
i:=  1 to 10 do  
// вывод преобразованного массива
                StringGrid2.Cells[i - 1, 1] := floattostr(a[i]);        //заполнение ячеек второй строки таблицы StringGrid2 соответствующими элементами массива
 end;

procedure TForm1.Button2Click(Sender: TObject);
begin
      StringGrid1.Rows[1].Clear;
      StringGrid2.Rows[1].Clear;
      label2.caption:= '';
      label4.caption:= '';
      label6.caption:= '';
      label8.caption:= '';
end;

обработка табличных величин

Форма входа
Поиск
Календарь
«  Сентябрь 2019  »
ПнВтСрЧтПтСбВс
      1
2345678
9101112131415
16171819202122
23242526272829
30
Архив записей
Друзья сайта
  • Официальный блог
  • Сообщество uCoz
  • FAQ по системе
  • Инструкции для uCoz

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