Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

практикум

.pdf
Скачиваний:
45
Добавлен:
13.05.2015
Размер:
1.34 Mб
Скачать

Программирование в среде Deplhi 61

5.Определить количество точек с целочисленными координатами, лежащих внутри окружности радиуса R с центром в точке 0 , у0 ).

6.Найти координаты точек пересечения двух окружностей радиуса R1 и R2 с центрами в точках 1 , у1 ) и 2 , у2 ) соответственно.

7.Найти координаты точки, симметричной данной точке М с координатами 1 , у1) относительно прямой Ах+Ву+С=0.

8.Даны две точки М1 1 , у1 ), М22 , у2 ) и прямая Ах+By+С=0. Необходимо найтинаэтойпрямойтакуюточкуМ0 0 , у0 ), чтобысуммарноерасстояниеотнее до двух данных точек было минимально.

9.Даны три точки с координатами 1 , у1 ), (х2 , у2 ), 3 , у3 ), которые являются вершинами некоторого прямоугольника со сторонами, параллельными осям координат. Найти координаты четвертой точки.

10.Даныкоординатычетырехточек1 , у1 ), (х2 , у2 ), (х3 , у3 ), (х4 , у4 ). Необходимо определить, образуют ли они выпуклый четырехугольник.

11.Даныкоординатычетырехточек1 , у1 ), (х2 , у2 ), (х3 , у3 ), (х4 , у4 ). Необходимо определить, образуют ли они: а) ромб; б) квадрат; в) трапецию.

12.Даны координаты .двух вершин 1 , у1 ) и 2 , у2 ). некоторого квадрата. Необходимо найти возможные координаты других его вершин.

13.Даныкоординатыдвухвершин1 , у1 ) и(х2 , у2 ) некоторогоквадрата, которые расположены по диагонали, и точка 3, у3 ). Необходимо определить, лежит или не лежит точка внутри квадрата.

14.Даны координаты трех вершин 1 , у1 ), (x2 , y2 ), (х3 , у3 ) треугольника. Необходимо найти координаты точки пересечения его медиан.

15.Даны координаты трех вершин 1, у1 ), (x2 , y2 ), (х3 , у3 ) треугольника. Необходимо найти длины его высот.

16-30. Постройте графики функций для соответствующих вариантов из темы №1. Таблицу данных получить изменяя параметр X с шагом h. Ввод исходных данных организовать через окна TEdit. Самостоятельно выбрать удобные параметры настройки.

31.Разработать программу реализующую игру «Бега лошадей по кругу ипподрома». Предусмотреть возможность устанавливать ставки на лошадей и расчета выигрыша. Скорость движения лошадей должна задаваться случайным образом функцией Random.

32.Разработать программу реализующую игру «Бега лошадей по прямой». Предусмотреть возможность устанавливать ставки на лошадей и расчета выигрыша. Скорость движения лошадей должна задаваться случайным образом функцией Random.

33.Разработать программу игры в крестики – нолики. В основу положить компонент DrawGrid.

34.Разработатьпрограммуигры«Минер» поподобиютакойжеигрывсистеме

62

Windows. Начальная расстановка мин должна выполняться случайным образом.

Воснову положить компонент DrawGrid.

35.Разработать программу игры стрельбы из подводной лодки по кораблю используя вид из перископа. На заднем плане должен периодически проплывать кораблик с постоянной поперечной скоростью. С помощью клавиш влево-вправо следует менять вид в перископе. Клавиша «Ввод» должна запускать торпеду. В перископе должна отображаться траектория движения торпеды с уменьшением скорости движения при приближении к кораблю. Попадание должно сопровождаться видимым взрывом и исчезновением корабля.

36.Разработатьпрограммыигры«Бомбометаниессамолетапоназемнойцели». С летящего с постоянной скоростью самолета клавишей «Ввод» производить бомбометание. Траекториядвижениябомбыдолжнасоответствоватьфизическим законампадениятелназемлю. Попаданиевцельдолжносопровождатьсявидимым взрывом и исчезновением цели. Самолет должен периодически вылетать из-за края канвы компонента рисования.

37.Разработатьпрограммуигры«Морскойбой». Программадолжнаслучайным образом на сетке 10х10 расставлять корабли: один четырех клеточный, два трех клеточных, тридвухклеточныхичетыреодноклеточных. Онинемогутизгибаться и соприкасаться друг с другом. Игрок выбирает определенный квадрат и как бы стреляет в него. Программа должна сообщать, попал ли игрок в корабль или нет. Она также должна отображать все старые выстрелы и показывать ячейки, куда уже не имеет смысла стрелять. Аналогично строится и вторая таблица, где игрок располагаетсвоикораблипокоторымужеслучайнымобразомстреляетпрограмма. Выигрываеттот, ктобыстрейпотопиткораблинеприятеля. Предусмотретьвконце игры показ расположения кораблей программы. Для таблиц использовать компоненты TdrawGrid.

38.Разработатьпрограммыигры«Стрельбаизпушки». Пушкадолжнастрелять через гору по какой-то цели. Траектория полета снаряда должна подчиняться законам физики. Игрок может управлять углом подъема ствола относительно горизонтаиначальнойскоростьюснарядавдискретныхвеличинах(определяется типом снаряда). При попадании должен происходить видимый взрыв и исчезновение цели.

39.Разработать программу показа в форме текущего времени в виде обычных стрелочных часов со стрелками часов, минут и секунд.

40.Разработать программу простейшего графического редактора (аналога программы Paint системы Windows). Он должен рисовать в канве компонента TpaintBox произвольныекривыеспомощьюмышки. Предусмотретьвозможность:

а) изменения толщины кривых, б) изменение цвета кривых,

в) сохранение рисунка в графическом файле.

41.Разработать программу простейшего графического редактора (аналога программы Paint системы Windows). Он должен рисовать в канве компонента

Программирование в среде Deplhi 63

TpaintBox ломанные линии с помощью нажатия на клавиши мышки. Предусмотреть возможность:

а) изменения толщины линий, б) изменение цвета линий,

в) сохранение рисунка в графическом файле.

42.Разработать программу простейшего графического редактора (аналога программы Paint системы Windows). Он должен рисовать в канве компонента TpaintBox с помощью мышки прямоугольники. Предусмотреть возможность:

а) изменения толщины линий, б) изменение цвета линий,

в) заливку областей текущей кистью, г) изменение цвета кисти,

д) сохранение рисунка в графическом файле.

43.Разработать программу простейшего графического редактора (аналога программы Paint системы Windows). Он должен рисовать в канве компонента TpaintBox с помощью мышки эллипсов. Предусмотреть возможность:

а) изменения толщины линий, б) изменение цвета линий,

в) заливку областей текущей кистью, г) изменение цвета кисти,

д) сохранение рисунка в графическом файле.

44.Разработать программу простейшего графического редактора (аналога программы Paint системы Windows). Он должен рисовать в канве компонента TpaintBox любой текст в указанном мышкой месте. Предусмотреть возможность:

а) изменения типа, размера и цвета шрифта, б) сохранение рисунка в графическом файле.

45.Разработать программу простейшего графического редактора (аналога программы Paint системы Windows). Он должен помещать в канву компонента TpaintBox из графического файла произвольный рисунок и обеспечивать возможность:

а) стирания произвольной области рисунка, б) изменение размеров стирки, в) сохранение рисунка в графическом файле.

64

ТЕМА 9. ИСПОЛЬЗОВАНИЕ ЗАПИСЕЙ ДЛЯ РАБОТЫ С КОМПЛЕКСНЫМИ ЧИСЛАМИ.

Цель лабораторной работы: изучить правила работы с записями и их использование для работы с комплексными числами.

9.1. Определение типа запись

Запись– этоструктураданных, объединяющаяэлементыодногоилиразличных типов, называемые полями. Записи удобны для создания структурированных баз данных с разнотипными элементами, например:

Type

TStudent = record

{Объявление типа}

 

Fio:string[20];

{Поле Ф.И.О.}

 

Group:integer;

{Поле номера студ. группы}

 

Ocn:array[1..3] of integer;

{Поле массива оценок}

 

end;

 

Var Student: TStudent;{Объявление переменной типа запись}

Доступ к каждому полю осуществляется указанием имени записи и поля, разделенных точкой, например:

Student.Fio:= ’Иванов А.И.’; {Внесениеданныхаполязаписи} Student.Group:=720603;

Доступ к полям можно осуществлять также при помощи оператора with:

With Student do begin

Fio:= ’Иванов А.И.’; Group:=720603;

end;

9.2. Использование типа запись для работы с комплексными числами.

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

Unit Cmplx;

 

Interface

 

Type Complex=record

 

re:extended;

// Действительная часть числа

im:extended;

// Мнимая часть числа

end;

function Addc(x,y:Complex):Complex; // (x+y) function Mulc(x,y:Complex):Complex; // (x*y) function Divc(x,y:Complex):Complex; // (x/y)

Программирование в среде Deplhi 65

Implementation function Addc;

begin Addc.re:=x.re+y.re; Addc.im:=x.im+y.im; end;

function Mulc; begin

Mulc.re:=x.re*y.re-x.im*y.im;

Mulc.im:=x.re*y.im+x.im*y.re;

end; function Divc;

var z;extended; begin

z:=sqr(y.re)+sqr(y.im);

Divc.re:=(x.re*y.re+x.im*y.im)/z;

Divc.im:=(x.im*y.re-x.re*y.im)/z; end;

end.

Вычислениезначениявыраженияu=(a+b)/(a b) (где, a иb – комплексныечисла)

выглядит следующим образом: u:=Divc(Addc(a,b),Mulc(a,b)).

9.3. Порядок выполнения задания.

Задание: написать программу для расчета комплексной функции,

представленной в виде ряда: S(X )= N

ak e jkx ,ak =

j + k

 

(точка над переменной

jk +1

k

1

 

=

 

 

 

означаеткомплексноечисло). Вывестиграфикидействительнойимнимойчастей Sre (X ), Sim (X ). Для выполнения этой задачи модуль Cmplx нужно дополнить двумя функциями:

Function Expj(a:extended):Complex;//Expj=exp(j*a) begin

Expj.re:=cos(a);

Expj.im:=sin(a);

end;

Function Cplx(a,b:Extended):Complex; //Cplx=a+j*b begin

Cplx.re:=a;

Cplx.im:=b;

end;

9.3.1. Работа с программой

Послезапускапрограммынавыполнениепоявитсядиалоговоеокнопрограммы. Необходимо ввести исходные данные в для расчета: N, Xmin, Xmax, h. Затем нажать кнопку “Расчет”, после чего будут выведены графики.

66

Панель диалога будет иметь вид (рис. 9.1).

Рис. 9.1

Текст программы приведен ниже. unit unit9;

interface uses

Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,Dialogs,StdCtrls, Buttons, TeEngine, Series, ExtCtrls, TeeProcs, Chart, Cmplx;

type

TForm1 = class(TForm) Chart1: TChart;

Edit1: TEdit; Label1: TLabel; Edit2: TEdit; Label2: TLabel; BitBtn1: TBitBtn; Edit3: TEdit; Label3: TLabel; Edit4: TEdit; Label4: TLabel;

Series1: TFastLineSeries;

Series2: TFastLineSeries;

procedure BitBtn1Click(Sender: TObject); private

{ Private declarations } public

Программирование в среде Deplhi 67

{ Public declarations }

 

 

end;

 

 

var

 

 

Form1: TForm1;

 

 

implementation

 

 

{$R *.DFM}

 

 

procedure TForm1.BitBtn1Click(Sender: TObject);

//Расчет

var

 

 

n,k:integer;

 

 

xmin,xmax,h,x:extended;

 

 

s,a,b,c,d:complex;

 

 

begin

 

 

series1.Clear;

 

 

series2.Clear;

 

 

n:=strtoint(edit1.text);

 

 

xmin:=strtofloat(edit2.text);

 

 

xmax:=strtofloat(edit3.text);

 

 

h:=strtofloat(edit4.text);

 

 

x:=xmin;

 

 

repeat

 

 

s.re:=0;

 

 

s.im:=0;

 

 

for k:=1 to n do

 

 

begin

 

 

b:=Cplx(k,1);

 

 

c:=Cplx(1,k);

 

 

a:=Divc(b,c);

 

 

d:=mulc(a,Expj(k*x));

 

 

s:=addc(s,d);

 

 

end;

 

 

series1.AddXY(x,s.re,’’,clteecolor);

//Вывод реальной части

series2.AddXY(x,s.im,’’,clteecolor);

//Вывод мнимой части

x:=x+h;

 

 

until x>xmax;

 

 

end;

 

 

end.

 

 

Варианты индивидуальных заданий

Написатьпрограммудлярасчетакомплекснойфункции S (x). Вывестиграфики действительной и мнимой частей Sre (x), Sim (x). x (1,3), N= 10 .

1. S(x) = N

j + e j+x

e jk +x , Sre (2) = −0.446, Sim (2) = 3.499.

jk + x

k =0

 

68

2.

S(x) = N

 

k =0

3.

S(x) = N

 

k =0

4.

S(x) = N

 

k =0

5.

S(x) = N

 

k =0

6.

S(x) = N

 

k =0

7.

S(x) = N

 

k =0

8.

S(x) = N

 

k =0

 

j + x

 

2 j k 5

 

 

 

 

 

 

 

 

jx k

 

 

 

 

 

 

4

 

 

 

 

 

 

 

 

 

 

 

 

, Sre (2)

= −5.905*10

 

, Sim (2) = −0.002 .

 

jxk +1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

k

 

 

 

jkx+x

 

 

 

 

 

 

 

 

 

 

 

e

 

 

 

 

, Sre

(2) =1.103, Sim (2)

= 2.408.

2 jx + kx

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ln(kx j)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

2 j x

 

, Sre

(2) = −0.031, Sim (2) = 0.007 .

 

 

 

 

x

 

 

 

 

 

 

 

 

x2 jk

ln

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

j k

 

e jxk +x , Sre (2) = 9.605, Sim (2) = 4.281.

 

ln ( j x)

+ jkx

 

 

 

 

 

 

ln(kx j)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

2 j e jx

 

, Sre

(2) = −524.624, Sim (2) = 73.265.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

x2 jk 3 j

 

 

x

j

 

 

 

 

 

 

 

3 jk

 

 

 

 

 

 

 

 

e

 

 

 

 

 

, Sre (2) = −3.019, Sim

(2) = 1.085.

2xj + jkx

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

j + x

 

j 2k 3

 

 

 

 

 

 

 

j kx

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ln( jx)

 

 

 

 

, Sre (2)

= 466,381, Sim

(2) = −962.124.

 

 

 

 

 

 

 

 

 

 

 

 

9.S(

10.S

11.S

12.S

13.S

14.S

15.S

N

 

 

 

j x

 

 

 

 

 

 

 

 

 

 

 

x) =

 

 

 

 

e jx

, Sre (2) = −3.548, Sim (2) = 3.497 .

 

 

 

 

 

 

 

k =0 ln( jx kx)

 

 

 

 

 

 

 

 

 

 

(x) = N

 

4ln(

jk 5)

, Sre (2) = 7.92, Sim (2) = −15.136 .

 

 

 

 

k =0

 

 

jk x

 

 

 

 

 

 

 

 

 

N

 

 

 

jk x

 

 

 

 

 

 

 

 

(x) =

 

 

 

 

 

 

 

 

 

 

e jxk , Sre (2) = −0.556, Sim (2) = 0.09 .

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ln(( jx 2k)

2

)

k =0

 

 

 

 

 

(x) =

N

 

ln( jk x)

, Sre (2) =103.695, Sim (2) = −189.537 .

 

 

 

e

2 jx

 

 

k =0

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ln(

 

 

 

 

 

 

2

 

 

 

 

 

(x) = N

 

 

jk x)

 

 

 

 

e jxk , Sre (2) = 0.55, Sim (2) = 0.625.

 

 

 

2

)

 

k =0

ln(( jx 2k)

 

 

 

 

 

 

 

 

 

ln(kx

 

 

j

 

 

 

 

 

)

 

(x) = N

 

2 j x

, Sre (2) = −0.399, Sim (2) = −0.028.

 

 

 

jk x

 

 

 

 

 

 

k =0

 

 

 

 

 

 

 

 

 

 

(x) =

N

10ln((kx j)2 )

, Sre (2) = −43.068, Sim (2) = 22.94

 

 

 

( jx 5)

2

 

 

 

 

 

 

k =0

 

 

 

 

 

 

 

 

 

Программирование в среде Deplhi 69

ТЕМА 10. ПРОГРАММИРОВАНИЕ С ИСПОЛЬЗОВАНИЕМ ФАЙЛОВ

Цель лабораторной работы: изучить правила работы с компонентами TOpenDialog и TSaveDialog. Написать программу с использованием файлов.

10.1. Работа с файлами

Файл – это именованная область данных на внешнем физическом носителе. В Object Pascal различаюттривидафайловвзависимостиотспособаихорганизации

идоступа к элементам: текстовые, типизированные и нетипизированные. Текстовой файл – это файл, состоящий из строк. Примером текстового файла

может служить файл исходного текста программы в DELPHI (расширение *.pas). Дляработыстекстовымфайломдолжнабытьописанасоответствующаяфайловая переменная: Var F: TextFile;.

Типизированныефайлыимеютстрогозаданнуюихописаниемструктуру, когда все элементы имеют фиксированный и одинаковый размер. Это свойство типизированных файлов позволяет получить доступ к любому компоненту файла по его порядковому номеру. Элементами такого файла являются, как правило, записи. В описании файловой переменной указывается ее тип: Var F: TStudent;.

Нетипизированный файл – это файл, в котором данные не имеют определенного типа и рассматриваются как последовательность байт. Файловая переменная объявляется: Var F: File;.

Порядок работы с файлами следующий:

. . .

 

AssignFile(F, ‘Filename.txt’);

// Связывание файловой переменной F

 

// с именем дискового файла “Filename.txt”

Rewrite(F);

// Создание нового или открытие (Reset(F);)

. . .

// уже существующего файла

 

Read(F, Stud);

// Чтение данных из файла или

. . .

// запись (Write(F, Stud)) в файл

 

CloseFile(F);

// Закрытие файла

10.2. Подпрограммы работы с файлами

AssignFile(var F; FileName: string) - связываетфайловуюпеременнуюF ифайл с именем FileName.

Reset(var F[: File; RecSize: word]) - открывает существующий файл. При

70

открытии нетипизированного файла RecSize задает размер элемента файла.

Rewrite(var F[: File; RecSize: word]) - создает и открывает новый файл.

Append(var F: TextFile) - открывает текстовой файл для дописывания текста в конец файла.

Read(F,v1[,v2,…vn]) - чтениезначенийпеременныхначинаястекущейпозиции для типизированных файлов и строк для текстовых.

Write(F,v1[,v2,…vn]) - записьзначенийпеременныхначинаястекущейпозиции для типизированных файлов и строк для текстовых.

CloseFile(F) - закрывает ранее открытый файл.

Rename(var F; NewName: string) - переименовывает неоткрытый файл любого типа.

Erase(var F) - удаляет неоткрытый файл любого типа.

Seek(var F; NumRec: Longint) - длянетекстовогофайлаустанавливаетуказатель на элемент с номером NumRec.

SetTextBuf(var F: TextFile; var Buf[;Size: word]) - для текстового файла устанавливает новый буфер ввода-вывода объема Size.

Flush(var F: TextFile) - немедленная запись вфайл содержимогобуфера вводавывода.

Truncate(var F) - урезает файл, начиная с текущей позиции. LoResult: integer - код результата последней операции ввода-вывода.

FilePos(var F): longint - для нетекстовых файлов возвращает номер текущей позиции. Отсчет ведется от нуля.

FileSize(var F): longint - для нетекстовых файлов возвращает количество компонентов в файле.

Eoln(var F: TextFile): boolean - возвращает True, если достигнут конец строки. Eof(var F) ): boolean - возвращает True, если достигнут конец файла.

SeekEoln(var F: TextFile): boolean – возвращает True, если пройден последний значимый символ в строке или файле, отличный от пробела или знака табуляции.

SeekEof(var F: TextFile): boolean - то же, что и SeekEoln, но для всего файла. BlockRead(var F: File; var Buf; Count: word[; Result: word]) , BlockWrite(var F: File; var Buf; Count: word[; Result: word]) - соответственно процедуры чтения

и записи переменной Buf с количеством Count блоков.

10.3. Компоненты TOpenDialog и TSaveDialog

КомпонентыTOpenDialog иTSaveDialog находятсянастраницеDIALOGS (см. прил. 2). Все компоненты этой страницы являются невизуальными, т.е. не видны в момент работы программы. Поэтому их можно разместить в любом удобном месте формы. Оба рассматриваемых компонента имеют идентичные свойства и отличаются только внешним видом. После вызова компонента появляется диалоговое окно, с помощью которого выбирается имя программы и путь к ней. Вслучаеуспешногозавершениядиалогаимявыбранногофайлаимаршрутпоиска содержaтся в свойстве FileName. Для фильтрации файлов, отображаемых в окне