Примеры программ на lazarus

Иногда возникает необходимость объединить в одном типе несколько разных типов данных. В Free Pascal для этого применяется структурный тип данных — запись. Запись состоит из фиксиро- ванного числа компонентов, называемого полями записи. В общем случае описание записи выглядит так: type имя_записи = record поле1: тип; поле2 : тип; . полеN : тип;

Алексеев Е.Р., Чеснокова О.В., Кучер Т.В. Самоучитель по программированию на Free Pascal и Lazarus 406

end; В программе переменная типа записи объявляется следующим образом: var имя_переменной : имя_записи; К каждому из полей записи можно получить доступ, используя составное имя. Для этого вначале пишется имя переменной, затем точка, затем имя поля. ЗАДАЧА 8.2. Известны длины сторон треугольника a , b и с . Вычислить площадь треугольника S . Подобная задача была рассмотрена во второй главе.

В задаче 2.1 подробно описана математическая постановка и алгоритм решения. Рассмотрим поставленную задачу в контексте данной главы. Создадим запись — Triangle (треугольник) с тремя полями – a , b и c (стороны треугольника) и вычислим площадь треугольника по форму- ле Герона. program Project1; type //Запись — треугольник, //поля — стороны треугольника Triangle= record a, b, c: real; end; //Объявление переменной типа Triangle. var x: Triangle;

[Примеры. Lazarus] Форма Авторизации

p, s:real;
begin
write(‘a=’); //Ввод значения в поле а.
readln(x.a);
write(‘b=’); //Ввод значения в поле b.
readln(x.b);
write(‘c=’); //Ввод значения в поле c.
readln(x.c);

//Вычисление полупериметра p:=(x.a+x.b+x.c)/2; //Проверка существования треугольника — //подкоренное выражение для формулы Герона //должно быть положительным. if p*(p-x.a)*(p-x.b)*(p-x.c)>0 then

Алексеев Е.Р., Чеснокова О.В., Кучер Т.В. Самоучитель по программированию на Free Pascal и Lazarus 407

begin //Вычисление и вывод площади. s:=sqrt(p*(p-x.a)*(p-x.b)*(p-x.c)); writeln(‘Площадь S=’, s:7:2); end else writeln(‘Треугольник с заданными сторонами не существует.’); end. Элементами записей могут быть как простые, так и структурированные типы. Никаких ограничений на вложение одной структуры в другую не существует. Например, создадим запись Student , которая будет состоять из полей: фамилия, имя, группа, оценки по пяти дисциплинам и адрес. В свою очередь поле «Адрес» также сделаем записью, состоящей из полей: город, улица, дом, квартира.

[Пишем программы на Lazarus]. Пишем калькулятор

type //Запись «Адрес».
adress = record
city, //поля:
//город,
street: string; //улица,
house, //дом,
apartment: integer; //квартира.
end; //Запись «Студент».
student = record
surname, //поля:
//фамилия,
name: string; //имя,
group: string; //группа,
//оценки,
estimation: array [1..5] of integer;
residence: adress; //адрес.
end;
Читайте также:
Программа кто выпустил собак

После объявления такой записи обращение к полям осуще- ствляется так: var Ivanov: student; x: array [1..100] of student; begin

Алексеев Е.Р., Чеснокова О.В., Кучер Т.В. Самоучитель по программированию на Free Pascal и Lazarus 408

Ivanov.group:=’Ф08′; Ivanov.residense.city:=’Киев’; //у первого студента 5-я оценка =3 x[1].estimation[5]:=3; . C использованием ключевого слова With к полям записи можно обращаться без указания префикса каждый раз с названием поля: with do Например: with stud do begin with residence do begin city:=’Донецк’; street :=’Артема’; house:=145; apartment:=31; end; surname:=’Иванов’; name:=’Андрей’; birthday :=’01.11.1990′; group :=’Ф07′; estimation[1]:=3; estimation[2]:=5; estimation[3]:=4; estimation[4]:=3; estimation[5]:=5; end; ЗАДАЧА 8.3. Создать базу данных «Сведения о студентах».

В программе предусмотреть расчет среднего балла студента, сортировку по алфавиту, вывод результатов в диалоговое окно и в текстовый файл. Создадим новый проект. На форму (рис. 8.3) поместим двенадцать объектов типа TEdit для ввода исходных данных, объект типа StringGrid ( ColCount=8 , RowCount=1 ) для вывода результатов и три кнопки типа Tbutton : • Button1 — для чтения данных из полей ввода и их последующей очистки;

Алексеев Е.Р., Чеснокова О.В., Кучер Т.В. Самоучитель по программированию на Free Pascal и Lazarus 409

• Button2 — для сортировки данных по алфавиту; • Button3 — для вывода результатов в таблицу StringGrid1 и записи их в текстовый файл. Текст программы с комментариями приведен далее. Рисунок 8.3: Пример формы для задачи 8.3 unit Unit1; interface uses Classes, SysUtils, LResources, Forms, Controls, Graphics, Dialogs, StdCtrls, Grids; type < TForm1 >TForm1 = class(TForm) Button1: TButton; Button2: TButton; Button3: TButton; Edit1: TEdit; Edit10: TEdit; Edit11: TEdit; Edit12: TEdit; Edit2: TEdit; Edit3: TEdit; Edit4: TEdit; Edit5: TEdit;

Алексеев Е.Р., Чеснокова О.В., Кучер Т.В. Самоучитель по программированию на Free Pascal и Lazarus 410

Edit6: TEdit; Edit7: TEdit; Edit8: TEdit; Edit9: TEdit; Label1: TLabel; Label2: TLabel; Label3: TLabel; Label4: TLabel; Label5: TLabel; Label6: TLabel; Label7: TLabel; Label8: TLabel; Label9: TLabel; StringGrid1: TStringGrid; procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); procedure Button3Click(Sender: TObject); procedure FormCreate(Sender: TObject); private < private declarations >public < public declarations >end; //Описание записи «Адрес студента».

adress = record //город, улица,
city, street : string;
house, apartment: integer;//дом, квартира.

end; //Описание записи «Сведения о студенте».

student = record //фамилия, имя,
surname , name : string;
group : string; //группа,
//оценки,
estimation: array [1..5] of integer;
residence : adress; //адрес,
s_ball: real; //средний балл.
end;
var
Читайте также:
Описание программы используемые методы
Алексеев Е.Р., Чеснокова О.В., Кучер Т.В. Самоучитель по программированию на Free Pascal и Lazarus 411

Form1: TForm1; //Массив переменных типа student. x: array [0..100] of student; //Локальная переменная для подсчета //количества студентов. i: integer; implementation < TForm1 >//Процедура инициализации формы. procedure TForm1.FormCreate(Sender: TObject); begin i:=0;//количество студентов равно 0. end; //Процедура работы кнопки «Запомнить данные». procedure TForm1.Button1Click(Sender: TObject); var sum, j:integer; begin //Чтение данных из полей ввода. x[i].surname:= Edit1.Text; x[i].name:= Edit2.Text; x[i].group:= Edit3.Text; x[i].residence.city:=Edit5.Text ; x[i].residence.street:= Edit6.Text; x[i].residence.house:= StrToInt(Edit7.Text); x[i].residence.apartment:= StrToInt(Edit8.Text); x[i].estimation[1]:=strToInt(Edit4.Text); x[i].estimation[2]:=strToInt(Edit9.Text); x[i].estimation[3]:=strToInt(Edit10.Text); x[i].estimation[4]:=strToInt(Edit11.Text); x[i].estimation[5]:= strToInt(Edit12.Text) ; //Вычисление среднего балла студента. sum:=0; for j:=1 to 5 do sum:=sum+x[i].estimation[j]; x[i].s_ball:=sum/5; inc(i);

Алексеев Е.Р., Чеснокова О.В., Кучер Т.В. Самоучитель по программированию на Free Pascal и Lazarus 412

//Очищение полей ввода для следующих данных. Edit1.Text:= »; Edit2.Text:= »; Edit3.Text:= »; Edit4.Text:= »; Edit5.Text:= »; Edit6.Text:= »; Edit7.Text:= »; Edit8.Text:= »; Еdit9.Text:= »; Edit10.Text:= »; Edit11.Text:= »; Edit12.Text:= »; end; //Процедура работы кнопки «Вывести данные». procedure TForm1.Button2Click(Sender: TObject); var f:textfile; j: integer; s: string; begin //Количество строк в таблице StringGrid //на один больше, чем количество студентов, //одна строка для шапки таблицы. StringGrid1.RowCount:= i+1; //Вывод шапки таблицы. StringGrid1.Cells[1,0]:=’Фамилия’ ; StringGrid1.Cells[2,0]:=’Имя’ ; StringGrid1.Cells[3,0]:=’Группа’ ; StringGrid1.Cells[4,0]:=’Город’ ; StringGrid1.Cells[5,0]:=’Улица’ ; StringGrid1.Cells[6,0]:=’Дом/кв.’ ; StringGrid1.Cells[7,0]:=’Средний балл’ ; //Вывод сведений о студентах в j-ю строку. for j:=1 to i do begin StringGrid1.Cells[1,j]:= x[j-1].surname ; StringGrid1.Cells[2,j]:=x[j-1].name; StringGrid1.Cells[3,j]:=x[j-1].group; StringGrid1.Cells[4,j]:= x[j-1].residence.city; StringGrid1.Cells[5,j]:= x[j-1].residence.street; s:=inttostr(x[j-1].residence.house)+ ‘/’+inttostr(x[j-1].residence.apartment); StringGrid1.Cells[6,j]:=s ;

Алексеев Е.Р., Чеснокова О.В., Кучер Т.В. Самоучитель по программированию на Free Pascal и Lazarus 413

StringGrid1.Cells[7,j]:= floattostr(x[j-1].s_ball); end //Вывод результатов в текстовый файл. assignfile(f,’g:student.txt’); rewrite(f); for j:=1 to i do begin writeln(f,x[j-1].surname:20, x[j-1].name:15, x[j-1].residence.city:15,’,’, x[j-1].residence.street:15, x[j-1].residence.house:4,’/’, x[j-1].residence.apartment, ‘ Sr_ball=’,x[j-1].s_ball:4:1); end; closefile(f); end; //Процедура работы кнопки //«Сортировать по алфавиту». procedure TForm1.Button3Click(Sender: TObject); var j, k :integer; temp: student; //Переменная для сортировки. f:textfile; Begin //Сортировка по полю surname методом пузырька. for j:= 0 to i-1 do for k:=j+1 to i-1 do if x[j].surname > x[k].surname then begin //Строки меняются местами. temp:=x[j]; x[j]:=x[k];x[k]:=temp; end; end; initialization end. Результаты работы программы представлены на рис. 8.5 — 8.7.

Алексеев Е.Р., Чеснокова О.В., Кучер Т.В. Самоучитель по программированию на Free Pascal и Lazarus 414

Источник: studfile.net

Параллельные вычисления в Lazarus (модуль MTProcs)

В Delphi библиотека для параллельных вычислений (Parallel Programming Library (PPL)) появилась в версии Delphi XE7. В принципе, неплохая библиотека, однако серьезно с ней я так и не познакомился. А недавно в Lazarus довелосьRead More…

Читайте также:
Через какую программу можно озвучивать видео

Работа с архивами zip в Lazarus и Free Pascal

Про работу с zip в Delphi 10.3 Rio я писал не так давно. На днях потребовалось использовать возможности работы с zip в Lazarus. Чем не повод рассмотреть возможные решения для работы сRead More…

[ВОССТАНОВЛЕНО] Делаем Lazarus более удобным в использовании

Обнаружил, что странным образом самоликвидировалась одна из последних статей в блоге, касающаяся работы с Lazarus (видимо статья была на столько плохая, что сам блог её и удалил). Восстанавливаю утраченное и рассказываю, какRead More…

Lazarus и Free Pascal: как измерить точное время выполнения операции?

Несколько лет назад я описывал четыре способа измерения точного времени выполнения операции в Delphi. Сегодня рассмотрим этот же вопрос, но уже применительно к Lazarus и Free Pascal. Учитывая, что Lazarus можно использоватьRead More…

Источник: webdelphi.ru

Потоки в Lazarus

tthread

Потоки в Lazarus создаются так же как и в Delphi. Для тех кто никогда не работал с потоками и не знают зачем они нужны, поясню: Основная идея создания потоков в том, что приложение может производить некоторую обработку информации в фоновом режиме во втором потоке, для избежания зависания интерфейса программы, а пользователь может продолжать работу с помощью основного потока. Основной поток создается автоматически ОС при запуске приложения.

Главным правилом при работе с потоками в Lazarus является то, что только главный поток должен быть единственным потоком, который обновляет компоненты, взаимодействующие с пользователем: иначе, приложение может зависнуть.

Итак. Создадим приложение, и добавим следующий код:

type MyThread=class(TThread) //Указываем имя private results:integer; //Переменная в которой будут хранитя вычисления protected procedure ShowResult; //Процедура которая будем показывать результат procedure Execute; //Основной код потока. end;

Для облегчения создания функцийпроцедур в приложении, можно поставить курсор на процедуру, нажать Shift+Ctrl+C и Lazarus автоматически создаст скилет данной процедуры ниже. Напишем код для процедуры Execute:

procedure MyThread.ShowResult; begin Form1.Edit1.Text:=IntToStr(results); //Переводим целое значение в строку и выводим в Edit1 end;

Напоминаю что данная процедура будет запускаться основным потоком, благодаря Synchronize.

Как вы понимаете на форме должны присутствовать 1 Edit и кнопка которая будет запускать наш поток.

Код для кнопки запуска потока, добавим следующий:

procedure TForm1.Button1Click(Sender: TObject); var ThreadBegin:MyThread; begin ThreadBegin:=MyThread.Create(False); //Создаем и запускаем поток ThreadBegin.Priority:=tpNormal; //Приоритет потока end;

Источник: devlaz.ru

Рейтинг
( Пока оценок нет )
Загрузка ...
EFT-Soft.ru