- •Программирование на языке
- •Object pascal в среде delphi
- •(Лабораторные работы)
- •Содержание
- •Лабораторная работа 1. Программирование линейных алгоритмов
- •1.1. Базовые элементы языка Object Pascal
- •1.1.1. Алфавит языка
- •1.1.2. Синтаксис языка
- •1.1.3. Основные типы данных
- •1.1.4. Оператор присваивания
- •1.1.5. Целые типы данных
- •1.1.6. Вещественные (действительные) типы данных
- •1.1.8. Cимвольные типы данных
- •1.1.9. Строкоые типы данных
- •1.1.10. Арифметические вычисления
- •1.2. Интегрированная среда разработчика delphi
- •1.3. Структура программ delphi
- •Interface
- •Implementation
- •1.4. Пример написания программы
- •1.4.2. Изменение заголовка формы
- •1.4.6. Написание программы обработки события
- •1.4.7. Написание программы обработки события
- •2.3. Оператор выбора Case
- •2.4. Составной оператор
- •2.5. Некоторые возможности, предоставляемые Delphi для организации разветвлений
- •Interface
- •Implementation
- •2.7. Индивидуальные задания
- •3.1.2. Организация цикла с помощью оператора repeat
- •3.2. Организация вложенных циклов
- •3.3. Организация прерывания цикла
- •3.4. Алгоритмы, использующие рекуррентную последовательность
- •3.5. Пример написания программы
- •Interface
- •Implementation
- •3.6. Индивидуальные задания
- •Лабораторная работа 4. Программирование с использованием массивов
- •4.1. Работа с массивами
- •4.2. Операции над массивами
- •4.3. Примеры часто встречающихся алгоритмов работы с массивами
- •4.4. Компонент tStringGrid для ввода/вывода массивов
- •4.5. Пример написания программы с использованием tStringGrid
- •Interface
- •Implementation
- •4.6. Компонент tEdit для ввода одномерных массивов
- •4.7. Пример написания программы с использованием tEdit
- •4.7. Компонент tMemo для ввода/вывода одномерных массивов
- •4.8. Пример написания программы с использованием tMemo
- •4.9. Индивидуальные задания
- •Лабораторная работа 5. Программирование с использованием строковых данных
- •5.1. Работа со строками
- •5.2. Пример написания программы
- •Лабораторная работа 6. Программирование с использованием подпрограмм и модулей
- •6.1. Описание подпрограмм
- •6.2. Передача данных через формальные параметры
- •6.3. Процедурные типы
- •6.4. Область видимости переменных
- •6.5. Пример написания программы с использованием процедур
- •Interface
- •Implementation
- •6.6. Использование модулей
- •6.7. Пример написания программы с использованием модуля
- •6.7.1. Создание модуля
- •6.7.2. Подключение модуля
- •Implementation
- •6.8. Индивидуальные задания
- •Лабораторная работа 7. Построение графиков
- •7.1. Компонент tChart
- •7.2. Пример написания программы
- •7.4. Индивидуальные задания
- •Лабораторная работа 8. Работа с файлами
- •8.2. Прямая работа с файлами (классический способ)
- •Доступ к файлам
- •Подпрограммы для работы с файлами
- •Запись и чтение типизированных файлов
- •Запись и чтение нетипизированных файлов
- •8.3. Диалоги открытия и сохранения файлов
- •8.4. Пример написания программы
- •8.5. Индивидуальные задания
- •Средства отладки программ в delphi
- •Литература
Interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Grids, StdCtrls, jpeg, ExtCtrls, Spin;
type
TForm1 = class(TForm)
Label1: TLabel;
Label2: TLabel;
StringGrid1: TStringGrid;
Button2: TButton;
Memo1: TMemo;
Button1: TButton;
Label3: TLabel;
Image1: TImage;
SpinEdit1: TSpinEdit;
SpinEdit2: TSpinEdit;
Label4: TLabel;
Label5: TLabel;
procedure FormCreate(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure StringGrid1KeyPress(Sender: TObject; var Key: Char);
procedure SpinEdit1Change(Sender: TObject);
procedure SpinEdit2Change(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
Type
TMatr = array[1..10,1..10] of real; // Объявление типа матрицы размером 10 х 10
var
Form1: TForm1;
A : TMatr; // Глобальное объявление матрицы
n, m : integer;
Implementation
{$R *.dfm}
//------------------------------------------------------------
procedure TForm1.FormCreate(Sender: TObject);
//первоначальное формирование интерфейса программы
var i, j: integer;
begin
Memo1.Clear;
SpinEdit1.Text := '4';
SpinEdit2.Text := '4';
With StringGrid1 do begin
RowCount := StrToInt(SpinEdit1.Text)+1;
ColCount := StrToInt(SpinEdit2.Text)+1;
Cells[0, 0] := ' A';
for i := 1 to RowCount do Cells[0,i] := ' i=' + IntToStr(i);
for j := 1 to ColCount do Cells[j,0] := ' j=' + IntToStr(j);
end;
end;
//---------------------------------------------------------------
procedure TForm1.SpinEdit1Change(Sender: TObject);
//изменение Числа строк в таблице
var i:integer;
begin
if SpinEdit1.Text = '' then Exit;
//подготовка таблицы по строкам
With StringGrid1 do begin
RowCount:=StrToInt(SpinEdit1.Text)+1;
for i:=1 to RowCount do Cells[0,i] := ' i=' + IntToStr(i);
end;
end;
//--------------------------------------------------------
procedure TForm1.SpinEdit2Change(Sender: TObject);
//изменение Числа столбцов в таблице
var j : integer;
Begin
if SpinEdit2.Text='' then Exit;
//подготовка таблицы по столбцам
With StringGrid1 do begin
ColCount := StrToInt(SpinEdit2.Text)+1;
for j := 1 to ColCount do StringGrid1.Cells[j, 0] := ' j=' + IntToStr(j);
end;
end;
//--------------------------------------------------------------
procedure TForm1.Button1Click(Sender: TObject);
//выполнить
var
i, j, k, ke : integer;
p, pe : real;
s : string;
begin
{Проверка на заполненность таблицы}
With StringGrid1 do begin
for i := 1 to RowCount-1 do
for j := 1 to ColCount-1 do
if Cells[j, i] = '' then begin
ShowMessage('Надо заполнить все ячейки таблицы !!!');
Exit;
end;
end;
n := StrToInt(SpinEdit1.Text); // число строк матрицы
m := StrToInt(SpinEdit2.Text); // число столбцов матрицы
{Заполнение матрицы А[1..n,1..m] элементами из таблицы StringGrid1}
for i := 1 to n do
for j := 1 to m do
A[i, j] := StrToFloat(StringGrid1.Cells[j, i]);
{Расчет}
k := 0; ke := 0;
p := 0; pe := 1;
for i := 1 to n do
for j := 1 to m do
if A[i, j] > 0 then begin k := k+1; p := p+A[i, j]; end
else
if (A[i, j] < 0) then begin ke := ke+1; pe := pe * A[i, j]; end;
{формируем обобщеную строку для показа в Мемо1 введенной матрицы }
s:='Введенная матрица:'+#13#10;
for i := 1 to n do begin
for j := 1 to m do
s := s+FloatToStr(A[i, j])+#9;
s:=s+#13#10;
end;
Memo1.Clear;
{показываем в Мемо1 введенную матрицу}
Memo1.Lines.Add(s);
{показываем в Мемо1 результаты расчета}
if k = 0 then Memo1.Lines.Add('Положительных элементов нет !')
else begin
Memo1.Lines.Add('Количество положительных элементов: ' +IntToStr(k));
Memo1.Lines.Add('Сумма положительных элементов: ' + FloatToStr(p));
end;
Memo1.Lines.Add('');
if ke = 0 then Memo1.Lines.Add('Отрицательных элементов нет !')
else begin
Memo1.Lines.Add('Количество отрицательных элементов: ' +IntToStr(ke));
Memo1.Lines.Add('Произведение отрицательных элементов: '+ FloatToStr(pe));
end;
end;
//-------------------------------------------------------------------
procedure TForm1.StringGrid1KeyPress(Sender: TObject; var Key: Char);
//ВВОД В StringGrid ДОПУСТИМЫХ СИМВОЛОВ ВЕЩЕСТВЕННОГО ЧИСЛА
//По нажатию Enter курсор перемещается в выбранной строке слева направо.
//Если строка заканчивается, то происходит переход на следующую строку.
//Если курсор доходит до конца таблицы, то он возвращается на 1-ю ячейку.
Begin
With StringGrid1 do begin
if not (Key in ['0'..'9','-',',','.',#8,#13]) then Key:=#0; //разреш.символы
if Key='-' then //минус ввод. только 1-м символом, т.е. когда ячейка пустая
if Length(Cells[Col, Row]) <>0 then Key := Chr(0) ;
if (Key='.') or (Key=',') then begin
if Key='.' then Key:=','; // заменить точку на запятую
if Pos(',' ,Cells[Col,Row])<>0 then Key := Chr(0); //запятая только одна
end;// if
if Key=#13 then begin //Enter
if (Row=RowCount-1) and (Col=ColCount-1) then begin //конец табл.
Row:=1; Col:=1;
end
else
if Col = ColCount-1 then begin //конец строки
Row:=Row+1; Col:=1;
end
else
if Col<ColCount-1 then Col := Col+1; //не конец строки
end; //#13
end; //With
end;
//---------------------------------------------------
end.