ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 26.05.2021
Просмотров: 853
Скачиваний: 3
СОДЕРЖАНИЕ
Работа с переменными и массивами
Настройка компонента TStringGrid
procedure FormActivate(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure BitBtn1Click(Sender: TObject);
procedure BitBtn2Click(Sender: TObject);
Nmax=10; // Максимальная размерность массива
A : Mas2; // Объявление двумерного массива
B,Y : Mas1; // Объявление одномерных массивов
procedure TForm1.FormActivate(Sender: TObject);
{Процедура подготовки к началу работы}
N:=3; // Задание размерности массива
Edit1.Text:=IntToStr(N); // Вывод значения N в Edit1
{Задание числа строк и столбцов в таблицах}
{Ввод в левую верхнюю ячейку таблицы названия массива}
StringGrid1.Cells[0,0]:='Массив A:';
StringGrid2.Cells[0,0]:='Массив B:';
StringGrid3.Cells[0,0]:='Массив Y:';
{Заполнение верхнего и левого столбцов поясняющими подписями}
StringGrid1.Cells[0,i]:=' i= '+IntToStr(i);
StringGrid1.Cells[i,0]:=' j= '+IntToStr(i);
procedure TForm1.Button1Click(Sender: TObject);
{Процедура изменения размерности массива}
ShowMessage('Ошибочная запись числа '+Edit1.Text);
{Задание числа строк и столбцов в таблицах}
{Заполнение верхнего и левого столбцов поясняющими подписями}
StringGrid1.Cells[0,i]:=' i= '+IntToStr(i);
StringGrid1.Cells[i,0]:=' j= '+IntToStr(i);
procedure TForm1.BitBtn1Click(Sender: TObject);
{Заполнение массива А элементами из таблицы StringGrid1}
if StringGrid1.Cells[j,i]=' ' then
ShowMessage('Ошибка заполнения массива А');
A[i,j]:=StrToFloat(StringGrid1.Cells[j,i]);
ShowMessage('Ошибочная запись числа '+StringGrid1.Cells[j,i]);
{Заполнение массива B элементами из таблицы StringGrid2}
if StringGrid2.Cells[0,i]=' ' then
ShowMessage('Ошибка заполнения массива В!');
B[i]:=StrToFloat (StringGrid2.Cells[0,i]);
ShowMessage ('Ошибочная запись числа '+StringGrid2.Cells[0,i]);
{Умножение массива А на массив В}
{Вывод результата в таблицу StringGrid3}
StringGrid3.Cells[0,i]:=FloatToStrf(y[i],fffixed,6,2);
procedure TForm1.BitBtn2Click(Sender: TObject);
{Очищение всех ячеек таблиц перед очередным прогоном программы}
Создание приложений для работы с базами данных На ОСНОВЕ ТЕХНОЛОГИИ bde
Рис. 9.- Расположение компонентов на форме
Рис. 10.- Рабочее окно программы
Практическая работа №6
Написание программы
Займемся небольшой модификацией программы, которую Delphi генерирует по умолчанию, создавая файлы Project1.dpr и Unit1.pas.
Пример Изготовим приложение, у которого в заголовке окна находится текст «Моя первая программа», а в окне располагается надпись «Привет, Delphi!».
1) Чтобы изменить заголовок окна, щелкните мышью по форме Form1, расположенной в окне формы. Затем в инспекторе объектов на вкладке Properties (свойства) найдите свойство Caption, которое задает заголовок окна информирующий пользователя о названии программы. По умолчанию значением данного свойства является название Form1. Щелкните мышью по этому значению и введите с клавиатуры новое название — «Моя первая программа». Сделанное изменение сразу отобразится в окне формы, но исходный текст файла модуля Unit1.pas не изменится.
2) Чтобы проверить результат сделанного изменения, отправьте проект на компиляцию и выполнение, нажав клавишу F9.
3) Чтобы разместить в окне надпись «Привет, Delphi!», нужно в палитре компонентов, расположенной в главном окне системы Delphi, на вкладке Standard (стандартные компоненты) найти компонент Label (метка), щелкнуть по нему мышью, а затем щелкнуть мышью по форме Form1 в окне формы. В результате этих действий на форме появится компонент Labell. При этом изменится и исходный текст файла модуля Unit1.pas: в описании класса TForm1 появится описание объекта, который программист поместил на форму, имеющее вид Label1: TLabel.
4) О помощью инспектора объектов замените значение по умолчанию Label1 его свойства Caption на «Привет, Delphi!». Сделанное изменение сразу отобразится в окне формы.
5) Проверьте результаты компиляции и выполнения программы, нажав клавишу F9.
6) Сохраните текущее состояние проекта в папке Project1 командой File | Save Project As... главного меню Delphi.
Название компонента Label может сбить читателя, знакомого с понятием метки, которое используется во многих языках программирования (в том числе и в Паскале) для организации переходов. Компонент Label никакого отношения к переходам на метки не имеет. Он используется в Delphi исключительно для создания надписей.
Задание
Поэкспериментируйте немного с приложением Project 1. Попробуйте изменить атрибуты шрифта, который применяется по умолчанию для отображения в окне надписи «Привет, Delphi!». Используйте, например, шрифт Tahoma, сделайте надпись красной и более крупной. Этого легко добиться, меняя с помощью инспектора объектов значение свойства Font компонента Label 1.
О братите внимание, что в диалоговом окне для выбора шрифта должен присутствовать кириллический набор символов для выбранного шрифта.
Рис. 1.1. Первый пример программы
Второй пример программы
Пример. Изготовим приложение, у которого в заголовке окна находится текст «Моя вторая программа», в окне располагаются надпись «Привет, Delphi!» и кнопка. За основу нового приложения возьмем проект Project 1.
-
Откройте проект Project1.dpr, сделав в «Проводнике» Windows двойной щелчок мышью на этом файле либо воспользовавшись командой File | Open Project.. главного меню Delphi.
-
Создайте на компьютере папку с именем Project2 и сохраните в ней текущее состояние проекта под именем Project2. Используйте для этого команду File / Save Project As... главного меню Delphi.
-
Чтобы результаты компиляции также сохранялись в папке Project2, измените настройки Delphi, указав папку Project2 в качестве Output directory и Unit output directory.
-
Измените заголовок окна. Для этого щелкните мышью по форме Form1, затем в инспекторе объектов на вкладке Properties найдите свойство Caption и укажите текст «Моя вторая программа» в качестве значения даны свойства.
5) Поместите на форму кнопку Button1. Для этого в палитре компонентов на вкладке Standard найдите компонент Button (кнопка), щелкните по нему мышью, а затем щелкните мышью по форме Form1. В результате этих действий на форме появится компонент Button1. При этом изменится и исходный текст файла модуля Unit1.pas: и описании класса TForm1 появится описание объекта, Который программист поместил на форму, имеющее вид Button1: TButton.
6)C помощью инспектора объектов замените значение по умолчанию Button1 его свойства Caption на «Удалить надпись». Для такой надписи на кнопке не хватит места, Поэтому нужно сделать кнопку покрупнее. Удобнее всего использовать для этого мышь. Сначала нужно выделить кнопку, щелкнув по ней мышью. У кнопки появится прямоугольная окантовка с точками. Ухватившись за одну из них мышью, можно менять размер кнопки.
7) Создайте для этой кнопки обработчик события OnClick, которое происходит, когда пользователь программы щелкает по кнопке Button1 мышью. Для этого нужно в инспекторе объектов перейти на вкладку Events (события) и сделать двойной щелчок мышью на пустом поле, находящемся справа от названия события OnClick. В этом поле появится надпись Button1Click, а в текст файла модуля Unit1.pas система Delphi вставит заготовку для обработчика данного события, имеющую вид
procedure TForml.ButtonlClick(Sender: TQbject);
begin
end;
Помимо этого, Delphi скопирует заголовок данного обработчика в описание класса TForm1, делая его доступны другим частям приложения. Заметьте, что заголовок обработчика содержит квалификатор TForm1, позволяющий компилятору определить, что данный обработчик связан с кнопкой, расположенной на форме Form1. А вот у копии заголовка, которая содержится в описании класса TForm1, такого квалификатора нет, поскольку он подразумевается по умолчанию.
-
Поместите между операторными скобками begin и еnd оператор Label1.Caption:=". Такой оператор в Паскале называется оператором присваивания. Его правая часть для свойства Caption должна содержать строку символов, окаймленную апострофами. В рассматриваемом примере он в качестве значения свойства Caption компонента Label1 задает пустую строку — текст, который не содержит ни одного символа. Это и обеспечит удаление надписи из окна, когда пользователь щелкнет по данной кнопке во время выполнения программы.
-
Проверьте результаты компиляции и выполнения программы, нажав клавишу F9.
10) Сохраните текущее состояние проекта в папке Project2 командой File | Save Project As... главного меню Delphi
Замечания.
-
Обратите внимание на следующий важный факт. Размещая в окне компонент Label1, мы создаем экземпляр объекта, принадлежащего классу TLabel. Его имя программист может использовать в программном коде. Оно определяется значением свойства Label1.Name, которое можно задать в инспекторе объектов. Что же касается текста, расположенного на этом экземпляре, то он определяется значением свойства Label1.Caption.
2) Аналогично обстоит дело и с кнопкой. Размещая в окне компонент Button1, мы создаем экземпляр объекта класса TButton. Его имя программист может использовать н программном коде. Оно определяется значением свойства Buttonl.Name, а текст, расположенный на этом экземпляре, определяется значением свойства Button1.Caption.
Рис. 2.1. Второй пример программы
Продолжите работу с приложением Project2. Сделайте так, чтобы надпись «Привет, Delphi!» изначально отсутствовала в окне. Разместите в окне две кнопки с текстами «Удалить надпись» и «Восстановить надпись» и создайте для каждой из них обработчик события OnClick. Убедитесь, что программа работает правильно.
практическая работа № 7
Работа с переменными и массивами
Цель практической работы: изучить свойства компонента TStringGrid. Написать программу с использованием массивов.
Переменные.
Каждая переменная относится к некоторому типу даны, который указывается при ее объявлении (описании).
Все переменные должны быть описаны. Никакая переменная не может быть описана более одного раза. Описание переменной должно предшествовать ее использованию.
Каждая переменная имеет уникальное имя. В качестве имени переменной можно использовать только идентификатор.
Пример описания пременных:
Var I, J1, J2: integer; {целые}
A, B, C: extended; {вещественные }
Ch1, Ch2: char; {символьные}
S0: string {строковые}
B_1, B_2: boolean{булевские}
Для описания Символьных переменных используется стандартный тип данных Char(от англ. Character - символ). Значением символьной переменной являются символьные константы.
Для описания строковых переменных используется стандартный тип данных string (строка символов). Значениями строковых переменных, являются строковой переменной, называется элементами строки.
К элементам строки можно обращатся как к переменным с индексами. Синтаксис такого обращения показан в следующем примере:
Var S: string; {строковая переменная}
…
S:=’мама’;
S[1]:=’п’;
S[3]:=’п’; {теперь S= ‘папа’}
Переменные с индексами описывать не нужно, т.к. вся необходимая компилятору информация уже содержится в описаниях строковых переменных, которые их порождают.
Работа с массивами
Массив - упорядоченный набор однотипных элементов, объединенных под одним именем. Каждый элемент массива обозначается именем, за которым в квадратных скобках следует один или несколько индексов, разделенных запятыми, например: a[1], bb[i], c12[i,j*2], q[1,1,I*j-1].. В качестве индекса можно использовать любые порядковые типы за исключением LongInt.
Тип массива или сам массив определяются соответственно в разделе типов (Type) или переменных (Var) с помощью ключевого слова Array следующим образом:
array [описание индексов] of <тип элемента массива>;
Примеры описания массивов:
Const
N=20; // Задание максимального значения индекса;
Type
TVector=array[1..N] of real; // Описание типа одномерного массива вещественных чисел;
Var
a: TVector; // А – массив типа Tvector;
Ss: array[1..10] of integer; // Ss – одномерный массив из десяти целых чисел;
Y:array[1..5,1..10] of char; // Y – двумерный массив символьного типа.
Элементы массивов могут использоваться в выражениях так же, как и обычные переменные, например:
F:=2*a[3]+a[ss[I]+1]*3;
A[n]:=1+sqrt(abs(a[n-1]));
Компонент TStringGrid
При работе с массивами ввод и вывод информации на экран удобно организовывать в виде таблиц. Компонент TStringGrid предназначен для отображения информации в виде двумерной таблицы, каждая ячейка которой представляет собой окно однострочного редактора (аналогично окну TEdit). Доступ к информации осуществляется с помощью свойства Cells[ACol, ARow: Integer]: string, где ACol, Arow-индекс элемента двумерного массива. Свойства ColCount и RowCount устанавливают количество столбцов и строк в таблице, а свойства FixedCols и FixedRows задают количество столбцов и строк фиксированной зоны. Фиксированная зона выделена другим цветом, и в нее запрещен ввод информации с клавиатуры.
Порядок выполнения задания
Задание: создать программу для определения вектора , где А - квадратная матрица размерностью NxN, а Y, B – одномерные массивы размерностью N. Элементы вектора Y определяются по формуле . Значения N вводить в компонент TEdit, А и B - в компонент TStringGrid. Результат, после нажатия кнопки типа TBitBtn, вывести в компонент TStringGrid.
Панель диалога приведена на рис. 1.
Настройка компонента TStringGrid
Для установки компонента TStringGrid на форму необходимо на странице Additional меню компонентов щелкнуть мышью по пиктограмме . После этого щелкните мышью в нужном месте формы. Захватывая кромки компонента отрегулируйте его размер. В инспекторе объектов значения свойств ColCount и RowCount установите 2(две строки и два столбца), а FixedCols и FixedRows установите 1(один столбец и одна строка с фиксированной зоной). Т.к. компоненты StringGrid2 и StringGrid3 имеют только один столбец, то у них: ColCount=1, RowCount=2, FixedCols=0 и FixedRows=1. По умолчанию в компонент TStringGrid запрещен ввод
а)
б)
Рис. 1- Активная форма программы
а) работа программы без возникновения ошибки
б) работа программы при возникновении ошибки
(обработка исключительной ситуации)
информации с клавиатуры, поэтому необходимо свойство Options goEditing для компонентов StringGrid1 и StringGrid2 установить в положение True.
Текст программы выглядит следующим образом.
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, Grids, StdCtrls, Buttons;
type
TForm1 = class(TForm)
StringGrid1: TStringGrid;
StringGrid2: TStringGrid;
StringGrid3: TStringGrid;
Edit1: TEdit;
Label1: TLabel;
Button1: TButton;
BitBtn1: TBitBtn;
BitBtn2: TBitBtn;
procedure FormActivate(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure BitBtn1Click(Sender: TObject);
procedure BitBtn2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
const
Nmax=10; // Максимальная размерность массива
Type
Mas1 = array[1..Nmax] of extended; {Объявление типа одномерного массива вещественных чисел размерностью Nmax}
Mas2 = array[1..Nmax,1..Nmax] of extended; {Объявление типа двумерного массива вещественных чисел размерностью Nmax*Nmax}
Var
Form1: TForm1;
A : Mas2; // Объявление двумерного массива
B,Y : Mas1; // Объявление одномерных массивов
N,i,j : integer;
implementation
{$R *.dfm}
procedure TForm1.FormActivate(Sender: TObject);
{Процедура подготовки к началу работы}
begin
N:=3; // Задание размерности массива
Edit1.Text:=IntToStr(N); // Вывод значения N в Edit1
{Задание числа строк и столбцов в таблицах}
StringGrid1.ColCount:=N+1;
StringGrid1.RowCount:=N+1;
StringGrid2.RowCount:=N+1;
StringGrid3.RowCount:=N+1;
{Ввод в левую верхнюю ячейку таблицы названия массива}
StringGrid1.Cells[0,0]:='Массив A:';
StringGrid2.Cells[0,0]:='Массив B:';
StringGrid3.Cells[0,0]:='Массив Y:';
{Заполнение верхнего и левого столбцов поясняющими подписями}
for i:=1 to N do
begin
StringGrid1.Cells[0,i]:=' i= '+IntToStr(i);
StringGrid1.Cells[i,0]:=' j= '+IntToStr(i);
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
{Процедура изменения размерности массива}
begin
try
N:=StrToInt(Edit1.Text);
except
ShowMessage('Ошибочная запись числа '+Edit1.Text);
Edit1.SetFocus;
Exit;
end;
{Задание числа строк и столбцов в таблицах}
StringGrid1.ColCount:=N+1;
StringGrid1.RowCount:=N+1;
StringGrid2.RowCount:=N+1;
StringGrid3.RowCount:=N+1;
{Заполнение верхнего и левого столбцов поясняющими подписями}
for i:=1 to N do
begin
StringGrid1.Cells[0,i]:=' i= '+IntToStr(i);
StringGrid1.Cells[i,0]:=' j= '+IntToStr(i);
end;
end;
procedure TForm1.BitBtn1Click(Sender: TObject);
{Процедура расчета вектора Y}
var
s: extended;
begin
{Заполнение массива А элементами из таблицы StringGrid1}
for i:=1 to N do
for j:=1 to N do
begin
if StringGrid1.Cells[j,i]=' ' then
begin
ShowMessage('Ошибка заполнения массива А');
Exit;
end;
try
A[i,j]:=StrToFloat(StringGrid1.Cells[j,i]);
except
ShowMessage('Ошибочная запись числа '+StringGrid1.Cells[j,i]);
Exit;
end;
end;
{Заполнение массива B элементами из таблицы StringGrid2}
for i:=1 to N do
begin
if StringGrid2.Cells[0,i]=' ' then
begin
ShowMessage('Ошибка заполнения массива В!');
Exit;
end;
try
B[i]:=StrToFloat (StringGrid2.Cells[0,i]);
except
ShowMessage ('Ошибочная запись числа '+StringGrid2.Cells[0,i]);
Exit;
end;
end;
{Умножение массива А на массив В}
for i:=1 to N do
begin
s:=0;
for j:=1 to N do
s:=s+A[i,j]*B[i];
Y[i]:=s;
{Вывод результата в таблицу StringGrid3}
StringGrid3.Cells[0,i]:=FloatToStrf(y[i],fffixed,6,2);
end;
end;
procedure TForm1.BitBtn2Click(Sender: TObject);
begin
{Очищение всех ячеек таблиц перед очередным прогоном программы}
for i:=1 to N do
begin
StringGrid2.Cells[0,i]:=' ';
StringGrid3.Cells[0,i]:=' ';
for j:=1 to N do
StringGrid1.Cells[j,i]:=' ';
end;
end;
end.
Индивидуальные задания
Во всех заданиях скалярные переменные вводить с помощью компонента TEdit с соответствующим пояснением в виде компонента TLabel. Скалярный результат выводить в виде компонента TLabel. Массивы представлять на форме в виде компонентов TStringGrid, в которых 0-й столбец и 0-ю строку использовать для отображения индексов массивов. Вычисления выполнять, после нажатия кнопки типа TВutton или TBitBtn.