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

практика

.pdf
Скачиваний:
18
Добавлен:
13.03.2015
Размер:
665.99 Кб
Скачать

Рис. 4

Впроекте использованы:

главная форма приложения – объект класса TForm;

главное меню – объект класса TMainMenu (вкладка Standard);

окно ввода многострочного текста – объект класса TMemo (вкладка Standard);

стандартные диалоги – объекты классов TOpenDialog, TSaveDialog, TFontDialog, TColorDialog (вкладка Dialogs).

Спомощью Object Inspector для объекта Memo1:

очистите свойство Lines;

установите для свойства Align значение alClient для того, чтобы окно ввода текста занимало все пространство окна приложения.

Окно ввода текста обеспечивает возможность ввода, редактирования, копирования и вставки фрагментов текста, т. е. эта часть работы не потребует написания программного кода.

Конфигурация меню настраивается посредством Конструктора меню, который вызывается двойным щелчком по объекту MainMenu1. Пункт меню Файл конструируется в соответствии с рис. 4, пункт Формат содержит подпункты Шрифт и Цвет. Для написания кода обработчика нужного пункта меню достаточно дважды щелкнуть мышью по его названию в конструкторе меню – откроется заготовка процедуры вида:

procedure TForm1.N3Click(Sender: TObject); begin

{здесь пишется код обработчика} end;

Для открытия файла код программы будет выглядеть следующим образом:

OpenDialog1.Execute;

Memo1.Lines.LoadFromFile(OpenDialog1.FileName);

Код программы для сохранения файла (Сохранить как):

11

SaveDialog1.Execute;

Memo1.Lines.SaveToFile(SaveDialog1.FileName);

Аналогично выглядят программы для установки шрифта и цвета фона ок-

на:

FontDialog1.Execute;

Memo1.Font:=FontDialog1.Font;

ColorDialog1.Execute;

Memo1.Color:=ColorDialog1.Color;

Для реализации пункта Создать требуется только очистить окно ввода.

Memo1.Lines.Clear;

Разработайте первый вариант приложения с минимальными (разобранными выше) возможностями (режим Сохранить пока не реализуйте). Запустите программу. Проверьте правильность ее работы во всех возможных режимах. При необходимости исправьте ошибки.

Задания для самостоятельного выполнения

1.Добавьте к своему проекту возможности, имеющиеся у стандартного системного блокнота – автоматическое присвоение файлам расширения txt и отображения в диалоговых окнах только файлов соответствующего типа. Для этого нужно использовать свойства Filter и DefaultExt объектов

OpenDialog и SaveDialog.

2.Добавьте к своему проекту отображение имени открытого файла в области заголовка формы приложения аналогично стандартному приложению Блокнот (рис. 5).

Имя файла

Рис. 5

12

Лабораторная работа 5

Инструкция ветвления

Задача 1. Доработайте проект «Лампочка» так, чтобы лампочку можно было включать и выключать одной и той же кнопкой. Программа обработки нажатия кнопки может выглядеть примерно так:

if Shape1.Brush.Color = clYellow

{если горит}

then begin

 

 

{выключить}

Shape1.Brush.Color := clGray;

 

end

{в противном случае}

else begin

Shape1.Brush.Color := clYellow;

{включить}

end;

 

 

 

Задача 2. Доработайте аналогичным образом проект «Светофор».

Задача 3. Усовершенствуйте проект «Блокнот» так, чтобы оно корректно работало при нажатии кнопки Отмена во всех диалогах. Для этого замените команду …Dialog1.Execute; на условие if …Dialog1.Execute then

для всех использованных диалогов.

Задача 4. Реализуйте пункт меню Сохранить, позволяющий, если файл ранее был открыт или сохранен, сохранять его по прежнему адресу без дополнительного диалога (аналогично стандартному приложению Блокнот). Для этого потребуется использовать текстовую переменную (типа String), которая будет хранить имя файла, если оно уже имеется (файл был открыт или сохранен), и быть пустой, если имени еще нет (приложение только что запущено или было выполнено создание файла).

Задача 5*. Смоделируйте работу городского светофора с тремя огнями и одной кнопкой.

Лабораторная работа 6

Проект «Калькулятор»

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

13

Рис. 3

В проекте использованы:

главная форма приложения – объект класса TForm;

кнопки – объекты класса TButton (вкладка Standard);

окно ввода – объект класса TEdit (вкладка Standard).

Спомощью Object Inspector очистите свойство Text объекта Edit1. Размеры и положение объектов настройте согласно рис. 3.

Для реализации проекта потребуется использовать глобальные переменные программы. Их описание помещается в блок var окна unit1 после имеющихся там описаний:

var

Form1: TForm1;

a, b, c :

real;

{описание нужных}

d

:

char;

{переменных

}

implementation

{$R *.dfm}

Обработчиком события onClick для кнопки Button1 (знак «плюс») будет такая программа:

a := StrToFloat(Edit1.Text); {запомнили первое введенное число, преобразовав его из текстовой формы в числовую }

d := '+';

{запомнили требуемую операцию}

Аналогичная программа вводится для кнопки со знаком «минус». Следующая программа является обработчиком события onClick для кнопки

со знаком «равно»:

b := StrToFloat(Edit1.Text); {запомнили второе введенное число, преобразовав его из текстовой формы в числовую }

if d = '+' {если ранее нажимали кнопку '+'}

14

then c := a + b {производится сложение} if d = '-' then c := a – b;

Edit1.Text := FloatToStr(c); {результат преобразуется из чи-

словой формы в текстовую и выводится в окно Edit1}

Запустите программу. Проверьте на различных примерах правильность ее работы. В качестве примеров вводите как целые, так и дробные числа (обратите внимание, что в качестве разделителя целой и дробной части для функций StrToFloat и FloatToStr требуется запятая, а для записи констант в программе требуется точка).

Задания для самостоятельного выполнения

1.Добавьте к калькулятору кнопки с операциями умножения и деления. Предусмотрите разумную реакцию программы в случае деления на 0 (программа должна либо выдавать сообщение, либо просто не выполнять операцию, но не выдавать при этом непонятных пользователю системных сообщений).

2.Добавьте к калькулятору кнопки для ввода чисел (цифры и запятую). Для каждой из этих кнопок напишите обработчик:

Edit1.Text:=Edit1.Text+Button….Caption;

Обеспечьте невозможность ввести в число две и более запятых (например, блокируя кнопку с запятой после ее нажатия и разблокируя, когда это требуется).

3.Добавьте к своему проекту возможности, имеющиеся у стандартного калькулятора (кнопки «sqrt», «+/-», «1/x»). Если не знаете их назначения – обратитесь к справочной системе стандартного калькулятора.

Лабораторная работа 7 Проект «Вычисление площадей»

Задача: найти приближенно площадь фигуры, ограниченной осью абсцисс и кривой y = 4 x2 на промежутке [2;4] (рис. 6) методом прямоугольников.

Идея метода: криволинейная фигура разбивается на много узких полосок, каждая полоска заменяется прямоугольником. Площадь фигуры приближенно равна сумме площадей этих прямоугольников.

Для решения задачи разобьем фигуру, скажем, на 100 полосок. Каждую из них заменим прямоугольником шириной, равной 1/100 отрезка [-2;2], и

высотой, равной значению функции y = 4 x2 в средней точке разбиения1. Площадь каждого из них равна произведению ширины на высоту.

1 Этот метод носит название метод средних прямоугольников.

15

 

 

Рис. 6

Фрагмент программы, предназначенный для вычисления площади, может

выглядеть примерно так:

{вычисляем ширину полоски}

w:=(2-(-2))/100;

s:=0;

{переменная для накопления площади}

x:=-2;

 

{начальное значение х}

while x < 2 do

{продолжаем вычисление, пока не дошли до конца отрезка } begin

s:=s+w*(4-(x+w/2)*(x+w/2)); {добавляем к s площадь очередной полоски}

x:=x+w; {переходим к следующей полоске}

end;

Для того чтобы программа была работоспособной и выдавала результат, нужно добавить описание всех используемых переменных и предусмотреть выдачу результата (переменной s) с помощью какого-либо подходящего компонента (Edit или Label) с соответствующим преобразованием данных.

Полученный результат сравните с точным ответом, вычисленным с помощью интеграла.

Задания для самостоятельного выполнения

1.Измените программу таким образом, чтобы она позволяла вычислять площадь фигуры на произвольном отрезке [a;b]. Границы его должны вводиться пользователем.

2.Добавьте к своему проекту возможность менять количество полосок n.

3.Добавьте возможность вычисления площади какой-либо другой фигуры.

16

Лабораторная работа 8 Проект «Метод Монте-Карло»

Задача: вычислить приближенно площадь криволинейной фигуры (см. предыдущую лабораторную работу) методом Монте-Карло2.

Идея метода – смоделировать случайное «бросание» большого количества точек в прямоугольник, содержащий криволинейную фигуру. При этом отношение числа точек, попавших внутрь фигуры, к общему числу точек будет приближенно равно отношению площади фигуры к площади прямоугольника. Понятно, что чем больше точек, тем точнее результат, однако оценить точность при использовании метода Монте-Карло не удается.

Возьмем, например, 10000 точек. Прямоугольник, содержащий фигуру, имеет размеры 4х4.

Фрагмент программы, предназначенный для вычисления площади, может выглядеть примерно так:

k:=0; {количество точек, попавших в фигуру} for i:=1 to 10000 do {моделируем 10000 бросаний } begin

x:=random*4-2;{случайная координата x} y:=random*4; {случайная координата y} if y<=4-x*x {если точка попала в фигуру}

then k:=k+1;

end;

s:=4*4*k/10000;{площадь прямоугольника 4*4 умножаем на число попавших в фигуру точек и делим на общее число точек }

Завершите программу, добавив описание переменных и вывод результата. Проверьте результат, сравнив его с результатом предыдущей лабораторной работы.

Задания для самостоятельного выполнения

1.Измените программу таким образом, чтобы она позволяла вычислять площадь фигуры на произвольном отрезке. Границы его должны вводиться пользователем.

2.Добавьте возможность вычисления площади другой фигуры.

3.*Напишите программу для решения следующей задачи. Для обеспечения

секретности агент и резидент используют следующую схему передачи

2 Метод Монте-Карло – общее название вычислительных методов, в которых для вычисления какой-либо величины используется датчик случайных чисел (по названию города Монте-Карло, где расположено множество игорных заведений)

17

сведений: каждый из них приходит к месту встречи в случайный момент времени между 11 и 13 часами и ждет 15 минут, после чего уходит. Иногда они встречаются, а иногда нет. Требуется определить, сколько раз в течение года происходит передача сведений. Здесь мы используем метод Монте-Карло для моделирования случайного процесса. Программа будет очень похожа на предыдущую. Нужно смоделировать 365 опытов (по числу дней в году), взять случайные моменты прихода действующих лиц (время удобно измерять в минутах) и проверить, превышает их разность 15 минут, или нет. Отметим, что сравнивать следует модуль разности, так как нам не важно, кто пришел раньше. Это сравнение записывается сле-

дующим образом: if abs(t1-t2)<15…

Лабораторная работа 9

Проект «Решение уравнений»

Задача: найти приближенно корень уравнения x2 5 = 0 на промежутке [1;3] с точностью 0,01 методом деления пополам.

Идея метода: делим промежуток пополам, определяя на каждом шаге, в какой половине находится корень. Корень находится там, где знаки левой части уравнения на концах промежутка различны. Процесс продолжается до тех пор, пока длина промежутка остается больше, чем требуемая точность. После завершения корень уравнения приближенно равен середине оставшегося отрезка.

Важно помнить, что метод работает только в том случае, если известно, что на указанном промежутке уравнение имеет ровно один корень. В противном случае программа «зацикливается» или дает неверный результат.

Фрагмент программы, предназначенный для вычисления площади, может выглядеть примерно так:

a:=1;

{ левый конец промежутка }

b:=3;

{ правый конец промежутка }

c:=2;

{начальное значение х}

while b-a > 0.01 do

{продолжаем вычисление до нужной точности } begin

c:=(a+b)/2; {середина промежутка [a,b]} if (a*a-5)*(c*c-5)<=0

{корень находится на отрезке [a,c], т.к. на концах этого отрезка произведение левых частей отрицательно, значит знаки разные}

then b:=c else a:=c;

18

{отрезок уменьшился вдвое, осталась либо левая, либо правая половина}

end;

x:=(a+b)/2;

Для того чтобы программа была работоспособной и выдавала результат, нужно добавить описание всех используемых переменных и предусмотреть выдачу результата (переменной s) с помощью какого-либо подходящего компонента (Edit или Label) с соответствующим преобразованием данных.

Задания для самостоятельного выполнения

1.Добавьте возможность решения другого уравнения.

2.Предусмотрите для пользователя возможность задавать точность в процессе работы программы.

Лабораторная работа 10

Проект «Интернет-магазин»

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

Впроекте использованы:

две формы – объекты класса TForm;

списки товаров и цен – объекты класса TListBox (вкладка Standard);

выпадающий список товаров – объект класса TComboBox (вкладка Standard);

окно многострочного текста – объект класса TMemo (вкладка Standard);

окно текста – объект класса TEdit (вкладка Standard);

надписи – объекты класса TLabel (вкладка Standard);

кнопки – объекты класса TButton (вкладка Standard).

19

Рис. 7

Порядок выполнения работы

1.Подготовьте во внешних текстовых файлах списки товаров и цен и создайте кнопку загрузки этих файлов, используя метод

ListBox….Items.LoadFromFile(имя_файла).

2.Обеспечьте возможность выделения нескольких строк в списке

ListBox1, установив с помощью Object Inspector для свойства MultiSelect значе-

ние true. Создайте кнопку для копирования выбранных товаров в корзину. Программа должна выглядеть примерно так:

for i:=0 to ListBox1.Count-1 do

{просматриваем весь список товаров} if ListBox1.Selected[i] then

{если очередной товар выделен} begin

ListBox3.Items.Add(ListBox1.Items[i]);

{добавляем его в «корзину»}

ListBox4.Items.Add(ListBox2.Items[i]);

{и добавляем его цену в список цен} end;

20