Выбери формат для чтения
Загружаем конспект в формате doc
Это займет всего пару минут! А пока ты можешь прочитать работу в формате Word 👇
Лекция 2. Массивы строк
Рассмотрим программу, которая читает из файла список слов и затем выполним поиск в этом списке слов по заданному буквосочетанию.
Лучшим вариантом является чтение файла строк в массив.
Для визуального просмотра списка слов их можно вывести в компонент Memo.
Все остальные операции со строками, которые требуются по какому-либо алгоритму, нужно выполнять в массиве.
Работа с файлами при создании любых проектов является основной задачей, поэтому рассмотрим этот вариант работы.
1. Сформируем текстовый файл flow.txt:
astra
lilia
pion
tulpan
romashka
roza
siren
2. Описание файловой переменной и массива строк
Var ft:textfile; - текстовый файл на диске;
Ms:array[1..100] of string; - массив строк.
3. Назначение файловой переменной имени файла на диске:
Begin
Assignfile(ft,’flow.txt’); - файл цветов
4. Открытие файла на чтение:
Reset(ft);
5. Чтение файла и вывод строк в многострочный редактор Memo.
K:=0; - количество строк; s- строка
While not eof(ft) do
Begin
Readln(ft,s); - чтение строки в s
Inc(k); - увеличение счетчика на 1
Ms[k]:=s; - запись в массив
Form1.Memo1.Lines.Add(s); - запись в Memo
End;
Closefile(ft) - закрытие файла
В конце цикла в k – количество строк. Можно записать:
Kols:=k;
Далее мы в однострочном редакторе Edit вводили букву или буквосочетание и выводили найденные слова в Memo2.
Допустим мы создали событие при нажатии на кнопку «Найти».
Напишем команды поиска и вывода найденных слов в Memo2.
St:=Form1.Edit1.Text; - выбираем буквосочетание из Edit
Form1.Memo2.Clear; - очищаем Memo2
For i:=1 to kols do
Begin
n:=pos(st,ms[i]); - n<>0, если буквосочетание найдено, n равно номеру
Позиции
If (n<>0) then
Begin
Form1.Memo2.Lines.Add(ms[i]); - заносим слово в Memo2
End;
End;
2. Полная программа представлена ниже.
unit ustroka;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls;
type
{ TForm1 }
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
Edit1: TEdit;
Memo1: TMemo;
Memo2: TMemo;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
{ private declarations }
public
{ public declarations }
end;
var
Form1: TForm1;
ft:textfile;
Ms:array[1..100] of string;
s:string;
kols:integer;
implementation
{$R *.lfm}
{ TForm1 }
procedure TForm1.FormCreate(Sender: TObject);
begin
form1.Memo1.Clear;
form1.Memo2.Clear;
form1.Edit1.Clear;
end;
procedure TForm1.Button1Click(Sender: TObject);
var k:integer;
begin
Assignfile(ft,'flow.txt'); // файл цветов мы создали
Reset(ft); // Открытие файла на чтение:
K:=0; // количество строк; s- строка
While not eof(ft) do // чтение, пока не конец файла
Begin
Readln(ft,s); // - чтение строки в s
// If eof(ft) then break; // - прерывание цикла по концу файла
Inc(k); // - увеличение счетчика на 1
Ms[k]:=s; // - запись в массив
Form1.Memo1.Lines.Add(s); // - запись в Memo
End;
closefile(ft); // - закрытие файла
Kols:=k;
end;
procedure TForm1.Button2Click(Sender: TObject);
var st:string;
i,n:integer;
begin
St:=Form1.Edit1.Text; // - выбираем буквосочетание из Edit
Form1.Memo2.Clear; // - очищаем Memo2
For i:=1 to kols do
Begin
n:=pos(st,ms[i]); // - если n<>0, то n равно номеру позиции буквосочетания
If (n<>0) then
Begin
Form1.Memo2.Lines.Add(ms[i]); // - заносим слово в Memo2
End;
End;
end;
end.
3. Результат работы
4. Зачетное задание по теме.
Разработать фрагмент урока и программу.
Необходимо при чтении файла в Memo1 после всех слов вывести строку с сообщением о количестве прочитанных слов, например:
«Прочитано 10 слов».
При поиске в Memo2 тоже вывести сообщение:
«Найдено 5 слов»
Для вывода этих сообщений необходимо воспользоваться командами перевода целых чисел в символьный вид:
Sk:=inttostr(k); - sk – строка, k- целое число.
Кроме того нужно для получения результата сложить отдельные части
результирующей строки, например: s:=s+s1+s2;
Программу можно написать в среде визуального проектирования Lazarus и на языке Паскаль.
Лекция 3. Штриховка уголка.
1. Рассмотрим штриховку наклонными линиями уголка, составленного из отрезков прямых линий.
Введем переменные и их значения для координат концов отрезков..
x1,y1,x2,y2,x3,y3 – координаты точек уголка.
xl1,yl1- координаты начала линии штриховки.
xl2,yl2- координаты конца линии штриховки.
hx1,hy1 – шаг перемещения точки начала линии
hx2,hy2 – шаг перемещения точки конца линии
Например: x1=50, y1=50, x2=100,y2=200, x3=250, y3=200.
Введем 2 кнопки: «Уголок» и «Построить»
Событие: «Уголок» - Procedure buttonclick1.
Присвоим начальные значения координатам точек уголка:
X1:=50; y1:=50;
X2:=100; y2:=200;
X3:=250; y3:=200;
Нарисуем уголок синим цветом.
Методы: Moveto – перемещение курсора к точке x1,y1.
Lineto – рисование линии к точке x2,y2.
Form1.Canvas.pen.color:=clblue; - синий цвет для уголка
Form1.Canvas.Moveto(x1,y1); - курсор к первой точке
Form1.Canvas.Lineto(x2,y2); - рисование уголка
Form1.Canvas.Lineto(x3,y3);
Если мы в edit1 зададим k линий, то можно записать для нашего рисунка:
Procedure buttonclick2;
Var i:integer;
Begin
Form1.Canvas.pen.color:=clred; - красный цвет для штриховки
Xl1:=x1; yl1:=y1; - начальные значения координат
Xl2:=x2+hx2; концов первой линии
Yl2:=y2;
K:=strtoint(Form1.Edit1.Text); - перевод строки в целый вид
Hx1:=(x2-x1) div k; - расчет шагов
Hy1:=(y2-y1) div k;
Hx2:=(x3-x2) div k;
Hy2:=0;
For i:=1 to k do
Begin
Form1.Canvas.Moveto(xl1,yl1); - курсор в начало линии
Form1.Canvas.Lineto(xl2,yl2); - рисование линии
Xl1:=xl1+hx1; yl1:=yl1+hy1; - изменение координат концов линии
Xl2:=xl2+hx2; yl2:=yl2+hy2;
End;
2. Пример программы.
unit ushtrih;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls;
type
{ TForm1 }
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
Edit1: TEdit;
Label1: TLabel;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
{ private declarations }
public
{ public declarations }
end;
var
Form1: TForm1;
x1,y1,x2,y2,x3,y3:integer; //– координаты точек уголка.
xl1,yl1:integer; //- координаты начала линии штриховки.
xl2,yl2:integer; //- координаты конца линии штриховки.
hx1,hy1:integer; // – шаг перемещения точки начала линии
hx2,hy2:integer; //– шаг перемещения точки конца линии
implementation
{$R *.lfm}
{ TForm1 }
procedure TForm1.FormCreate(Sender: TObject);
begin
form1.Edit1.Clear;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
Begin
// вывод прямоугольника
Form1.Canvas.brush.color:=clwhite; // - заполнение белым цветом
Form1.Canvas.rectangle(10,10,350,300); // левый верхний и правый нижний угол
X1:=50; y1:=50;
X2:=100; y2:=200;
X3:=250; y3:=200;
// вывод уголка
Form1.Canvas.pen.color:=clblue; // - синий цвет для уголка
Form1.Canvas.Moveto(x1,y1); // - курсор к первой точке
Form1.Canvas.Lineto(x2,y2); // - рисование уголка
Form1.Canvas.Lineto(x3,y3);
End;
end;
procedure TForm1.Button2Click(Sender: TObject);
Var i,k:integer;
Begin
K:=strtoint(Form1.Edit1.Text); // - перевод строки в целый вид
Form1.Canvas.pen.color:=clred; // - красный цвет для штриховки
Hx1:=(x2-x1) div k; // - расчет шагов
Hy1:=(y2-y1) div k;
Hx2:=(x3-x2) div k;
Hy2:=0;
Xl1:=x1; yl1:=y1; // - начальные значения координат
Xl2:=x2+hx2; // концов первой линии
Yl2:=y2;
For i:=1 to k do // штриховка
Begin
Form1.Canvas.Moveto(xl1,yl1); // - курсор в начало линии
Form1.Canvas.Lineto(xl2,yl2); // - рисование линии
Xl1:=xl1+hx1; yl1:=yl1+hy1; // - изменение координат концов линии
Xl2:=xl2+hx2; yl2:=yl2+hy2;
End;
end;
end.
3. Результат работы программы.
4. Необходимо выполнить штриховку по индивидуальному заданию.
Итоговое задание .
Разработайте фрагмент урока для выполнения штриховки уголка в графическом режиме.
Напишите программу, выполняющую штриховку. Сделайте и отправьте скриншот работы программы.
Работу выполните по номеру своей фамилии в общем списке.
1
Var1
2
Var2
3
Var3
4
Var4
5
Var5
6
Var6
7
Var7
8
Var8
9
Var9
10
Var10
11
Var11
12
Var12
13
Var13
14
Var14