Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Практикум1_2014.doc
Скачиваний:
19
Добавлен:
25.02.2016
Размер:
1.79 Mб
Скачать

Введение

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

Автор старался дать минимум теоретических сведений об алгоритмизации и программировании на языке Delphi (этот материал дается на лекциях), а больше внимания уделить решению примеров. В качестве примеров выбирались наиболее типичные или интересные (с точки зрения автора). Решение каждого примера сопровождается краткими пояснениями и комментариями. Как правило, приводится несколько вариантов решения каждого примера.

Некоторые задания по лабораторным работам содержат задания повышенной сложности (второй уровень) и дополнительные.

В электронном варианте данный практикум постоянно пополняется новыми заданиями.

Для удобства пользования данный практикум представлен в двух частях. Первая часть включает описания десяти лабораторных работ и задания по ним. При выполнении этих работ учащиеся могут ограничиться разработкой только консольных приложений Вторая часть предусматривает разработку приложений с использованием компонентов Delphi.

Требования безопасности при работе на ПЭВМ

При эксплуатации ПЭВМ запрещается:

- подключать и отключать разъемы кабелей электропитания и блоков вентиляции при поданном напряжении электросети;

- заменять съемные элементы под напряжением;

- производить пайку в аппаратуре, находящейся под напряжением;

- пользоваться электрическими паяльниками и другими электроинструментами с напряжением 36 В и выше с незазем-ленными корпусами;

- оставлять без надзора включенные ПЭВМ;

- закрывать двери на замок при проведении занятий;

- самостоятельно устранять неисправности и неполадки в работе ПЭВМ.

Обо всех нарушениях правил ТБ сообщать преподавателю или дежурному лаборанту.

Требования безопасности при возникновении

аварийных ситуаций

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

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

Телефон скорой помощи – 103.

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

Телефон пожарной службы – 101.

Требования безопасности по окончании работ

При техническом обслуживании аппаратуры ПЭВМ обязательным является следующее:

- при проверке и обслуживании съемных блоков электропитания их корпуса должны заземляться;

- измерение напряжений в токоведущих частях с напряже-нием 36 В необходимо производить, пользуясь резиновыми ков-риками и изолированными щупами;

- при прозвонке электрических цепей необходимо предварительно эти цепи обесточить и проверить отсутствие напряжения с помощью вольтметра. Прозвонку схем ТЭЗов производить прибором с источником постоянного напряжения не более 1,5 В;

- металлические корпуса приборов следует заземлять.

Рекомендации по выполнению лабораторных работ

и оформлению отчета

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

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

В отчете по лабораторной работе должны содержаться следующие пункты:

- условие задания;

- краткое описание алгоритма решения задачи, метода решения;

- схема программы и ее частей, выполненная в соответствии со стандартами. Если задача достаточно большая, разрешается вместо схемы программы приводить схему работы системы или дать только словесное описание алгоритма (по усмотрению преподавателя);

- контрольные примеры для испытания программы в нормальных, экстремальных условиях и исключительных ситуациях;

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

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

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

Отдельные, наиболее трудоемкие работы, могут выполняться на двух-трех лабораторных занятиях.

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

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

Разветвляющиеся алгоритмы и программы

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

Что нужно знать для выполнения работы

1. Символы, используемые в схемах программ, и правила их применения.

2. Структуру программы.

3. Оператор присваивания, математические и логические операции, их приоритет.

4. Операторы ввода-вывода read(ln), write(ln).

5. Стандартные математические функции Паскаля.

6. Условный оператор ifthenelse.

7. Оператор выбора case … of…else…end.

Для разработки полноэкранных приложений необходимо умение работать с компонентами страницы Standard и Additional.

Примеры выполнения задания лабораторной работы

Пример 1. Даны два числа a и b. Получите число maxab, равное наибольшему из исходных. Если исходные числа равны, то maxab положить равным любому из них.

Решение. Для решения задачи нужно ввести значения переменных a и b, сравнить их значения и, в зависимости от результата сравнения, maxab положить равным а или b.

Обратите внимание на то, что вместе с результатом выводятся и исходные данные. Это позволит упростить тестирование и повысить наглядность вывода (рис. 1.1). Во втором варианте решения данной задачи, не сравнивая, присваиваем переменной-результату maxab первое «попавшееся» значение, а затем сравниваем это значение со вторым числом (рис. 1.2).

Рис. 1.1. Схема алгоритма программы (вариант 1)

Возможно и более «экзотическое» решение данной задачи, в котором maxab находится не прибегая к сравнению исходных чисел [15]. Вместо этого хитроумно используется стандартная функция Delphi «abs» вычисления модуля числа.

Рис. 1.2. Схема алгоритма программы (вариант 2)

Текст программы

program lr1_1_1;

{Даны два числа a и b. Получите число maxab, равное наибольшему из исходных..

Если исходные числа равны, то maxab положить равным любому из них.

}

{$APPTYPE CONSOLE}

uses

SysUtils;

var

a,b,maxab:real;

begin

write(‘Vvedite a i b ’);

readln(a,b);

if a>=b then

maxab:=a

else

maxab:=b;

writeln(‘ a= ’,a:8:2,’ b= ‘,b:8:2,maxab= ‘,maxab:8:2);

readkln;

end.

Основная часть программы, соответствующая второй схеме, будет выглядеть так.

maxab:=a;

if maxab<b then

maxab:=b;

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

Контрольные примеры

Контрольный пример 1.

Исходные данные: a=1, b=2; результат maxab=2.

Контрольный пример 2.

Исходные данные: a=3, b=1; результат maxab=3.

Контрольный пример 3.

Исходные данные: a=1, b=1; результат maxab=1.

П р и м е ч а н и е. При записи результата мы не учитываем формат вывода его в программе.

При разработке приложения с использованием компонентов Delphi форма приложения может иметь вид (рис. 1.3):

С формой связан Unit1, который может быть таким:

unit Unit1;

//Пример 1_1 полноэкранная реализация

//Нахождение наибольшего из двух вещественных чисел

Interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;

type

TForm1 = class(TForm)

lbl1: TLabel;

lbl2: TLabel;

edt1: TEdit;

lbl3: TLabel;

edt2: TEdit;

lbl4: TLabel;

btn1: TButton;

btn2: TButton;

procedure btn2Click(Sender: TObject);

procedure btn1Click(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

Form1: TForm1;

Implementation

{$R *.dfm}

procedure TForm1.btn2Click(Sender: TObject);

//Обработка события btn2Click для выхода из программы

begin

Close;

end;

procedure TForm1.btn1Click(Sender: TObject);

{Обработка события btn1Click для выполнения вычислений}

var

a,b,maxab:Real;

begin

//Преобразование из строкового типа в

//число с плавющей точкой

a:=StrToFloat(edt1.Text);

b:=StrToFloat(edt2.Text);

if a>=b then

maxab:=a

else

maxab:=b;

//Преобразование числа с плавающей точкой в строку и

//вывод результата в естественной форме

lbl4.Caption:='maxab = '+ FloatToStrF(maxab,ffFixed,8,2);

end;

end.

В данном приложении задавались только свойства Caption для формы и компонентов Label и свойства Text для компонентов Edit. Обрабатываются только два события, связанные с кликаньем на командных кнопках Button.

Рис.1.3 Форма приложения примера 1_1

Пример 2. Рассмотрим следующую задачу. Даны координаты точки М(х, у). Определите, принадлежит ли данная точка замкнутому множеству D (a > 0; b > 0) (рис. 1.4).

Рис. 1.4

Решение. Точка М(х, у) принадлежит замкнутому множеству D, если ее абсцисса не меньше 0 и не больше а, а ордината не меньше 0 и не больше b.

В данном варианте в каждом блоке «решения» проверяется простое условие (вычисляется булевское выражение), имеющее вид «арифметическое выражение», «знак сравнения», «арифметическое выражение», которое может принимать одно из двух значений: «истина» (true) или «ложь» (false) (рис. 1.5).

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

Учитывая законы булевой алгебры (законы де Моргана), сложное выражение во втором варианте можно записать: не (x < 0 или x > a или y < 0 или y > b)? Если данное выражение принимает значение «истина», то точка принадлежит области, иначе – не принадлежит.

Рис. 1.5. Схема алгоритма программы (вариант 1)

Рис. 1.6. Схема алгоритма программы (вариант 2)

Текст программы (вариант 1)

program lr1_2_1;

{Даны координаты точки М(х,у). Определите, принадлежит ли данная точка замкнутому множеству D. D – прямоугольник с координатами вершин (0;0), (a;0), (a;b), (0;b) (a>0; b>0).

Исходные данные: a, b, x, y.

Результат: сообщение на экране «Ne prinadlegit» или «Prinadlegit»

}

{$APPTYPE CONSOLE}

uses

SysUtils;

var

a,b,x,y:real;

begin

{Ввод исходных данных}

write(‘Vvedite a,b,x,y’);

readln(a,b,x,y);

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

if x>=0 then

if x<=a then

if y>=0 then

if y<=b then

writeln(‘Prinadlegit’)

else

writeln(‘Ne prinadlegit’ )

else

writeln(‘Ne prinadlegit ’)

else

writeln(‘Ne prinadlegit’)

else

writeln(‘Ne prinadlegit’);

readkln; {ожидание нажатия клавиши Enter}

end.

Текст программы (вариант 2)

program lr1_2_2;

{Даны координаты точки М(х,у). Определите, принадлежит ли данная точка замкнутому множеству D. D – прямоугольник с координатами вершин (0;0), (a;0), (a;b), (0;b) (a>0; b>0).

Исходные данные: a, b, x, y.

Результат: сообщение на экране «Точка не принадлежит» или «Точка принадлежит»

}

{$APPTYPE CONSOLE}

uses

SysUtils;

var

a,b,x,y:real;

begin

{Ввод исходных данных}

write(‘Vvedite a,b,x,y ’);

readln(a,b,x,y);

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

if (x>=0) and (x<=a) and (y>=0) and (y<=b) then

writeln(‘Prinadlegit)

else

writeln(‘Ne prinadlegit);

readkln; {ожидание нажатия клавиши Enter}

end.

Возможны и другие варианты реализации определения принадлежности точки:

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

if (x<0) or (x>a) or (y<0) or (y>b) then

writeln(‘Ne prinadlegit)

else

writeln(‘Prinadlegit);

или

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

if not (x<0) or (x>a) or (y<0) or (y>b) then

writeln(Prinadlegit)

else

writeln(Ne prinadlegit);

Контрольные примеры

Контрольный пример 1.

Исходные данные: a=4; b=2; x=2; y=1.

Результат: ‘Точка принадлежит’.

Контрольный пример 2.

Исходные данные: a=4; b=2; x=2; y=0.

Результат: ‘Точка принадлежит’.

Контрольный пример 3.

Исходные данные: a=4; b=2; x=0; y=0.

Результат: ‘Точка принадлежит’.

Контрольный пример 4.

Исходные данные: a= 4; b=2; x=-2; y=1.

Результат: ‘Точка не принадлежит’.

Контрольный пример 5.

Исходные данные: a=4; b=2; x=2; y=3.

Результат: ‘Точка не принадлежит’.

Недостаток вышеприведенных алгоритмов и программ в том, что они не предусматривают контроль вводимой информации. Для лабораторной работы 1 контроль не обязателен. Дело в том, что для качественной реализации контроля понадобятся более сложные конструкции языка Delphi (например, оператор цикла repeat…until).

При разработке приложения с использованием компонентов Delphi форма приложения может иметь вид (рис. 1.7):

Рис. 1.7 Форма примера 1_2

Для создания формы с помощью Image Editor-а (меню Tools) создан рисунок (Bitmap File) и сохранен в папке с проектом. На форму поместили компонент страницы Additional Image, свойство Picture которого имя файла изображения.

Для выхода из программы используется компонент страницы Additional BitBtn, свойство Kind которого Close.

Чтобы не повторять несколько раз присваивание Lbl6.Caption, воспользовались флажком Flag булевского типа.

Текст Unit-а может быть следующим:

unit Unit1;

{Даны координаты точки М(х,у). Определите, принадлежит ли данная точка замкнутому множеству D. D -

прямоугольник с координатами вершин (0;0), (a;0),

(a;b), (0;b) (a>0; b>0).

Исходные данные: a, b, x, y.

Результат: сообщение на экране "Принадлежит"

или "Не принадлежит"

}