Файл: Практикум по информатике рекомендовано в качестве учебного пособия.pdf

ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 30.11.2023

Просмотров: 733

Скачиваний: 14

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

43
Рис. 4.3. Отладка программы
Желтым цветом выделяется оператор, который будет выполнен.
Значение переменных во время выполнения можно увидеть, наведя на них курсор. Для прекращения отладки и остановки программы нужно выполнить команду меню Отладка → Остановить отладку.
Для поиска алгоритмических ошибок можно контролировать значе- ния промежуточных переменных на каждом шаге выполнения подозри- тельного кода и сравнивать их с результатами, полученными вручную.
4.6. Порядок выполнения задания
З а д а н и е : Вычислить и вывести на экран таблицу значений функ- ции y
=
a·ln(x) при x, изменяющемся от x
0
до x
k
с шагом dx, a – константа.
Панель диалога представлена на рис. 4.4. Текст обработчика нажа- тия кнопки Вычислить приведен ниже. private void button1_Click(
object sender,
EventArgs e)
{
// Считывание начальных данных double x0 =
Convert
.ToDouble(textBox1.Text); double xk =
Convert
.ToDouble(textBox2.Text); double dx =
Convert
.ToDouble(textBox3.Text); double a =
Convert
.ToDouble(textBox4.Text); textBox5.Text =
"Работу выполнил ст. Иванов М.А."
+
Environment
.NewLine;
// Цикл для табулирования функции double x = x0; while
(x <= (xk + dx / 2))
{ double y = a *
Math
.Log(x); textBox5.Text +=
"x="
+
Convert
.ToString(x) +
"; y="
+
Convert
.ToString(y) +
Environment
.NewLine; x = x + dx;
}
}

44
После отладки программы следует проверить правильность работы программы с помощью контрольного примера (см. рис. 4.4). Установите точку останова на оператор перед циклом и запустите программу. После попадания на точку остановки, выполните пошагово программу и про- следите, как меняются все переменные в процессе выполнения.
Рис. 4.4. Окно программы для табулирования функции
Индивидуальные задания
Составьте программу табулирования функции y(x), выведите на экран значения x и y(x). Нужный вариант задания выберите из нижеприведенного списка по указанию преподавателя. Откоррек- тируйте элементы управления в форме в соответствии со своим ва- риантом задания.
-2 3
0 1) y 10
/
cos
,
1.5;
3.5;
0.5;
1.25;
1.5;
0.75;
k
bc x
a x
x
x
dx
a
b
c


 


 
 

2 3
0 2) y 1.2(a-b)
,
0.75;
1.5;
0.05;
1.5;
1.2;
x
k
e
x
x
x
dx
a
b


 
 
 



45
;
25 1
b
;
2 10
a
;
05 0
dx
;
5 2
x
;
5 0
x
),
bx a
(
tg ax
10
y
3)
k
0 3
-1








;
25 6
b
;
35 1
a
;
25 0
dx
;
3 10
x
;
3 5
x
),
b x
(
cos ax y
4)
k
0 3
2 3









;
3 1
d
;
2 0
dx
;
8 5
x
;
6 4
x
),
d x
2
cos(
x y
5)
k
0 3
4








;
8 0
b
;
5 0
dx
;
5 2
x
;
5 1
x
),
x
/
b x
5
(
tg x
y
6)
k
0 2











;
5 2
b
;
2 0
dx
;
1
x
;
4 2
x
),
b x
15 9(x y
7)
k
0 3
3








4 0
8) y 9x sin(57.2
),
0.75;
2.05;
0.2;
k
x
x
x
dx



 
 
 
;
3 2
b
;
5 0
dx
;
4
x
;
1
x
,
e x
0.0025bx y
9)
k
0 82 0
3








;
4 3
b
;
2 0
dx
;
05 3
x
;
05 2
x
),
0.0084
- b
x sin(
x y
10)
k
0










;
1 0
a
;
2 0
dx
;
2 6
x
;
4
x
,
be a
x x
y
11)
k
0
x
3











;
2 3
b
;
2 0
dx
;
2 2
x
;
1
x
,
tgx
)
b
9(x y
12)
k
0 3
3






;
2
b
;
1 0
dx
;
73 1
x
;
73 0
x
,
b x
ln x
b
/
b x
y
13)
k
0 2
/
3 3
3 2
/
1













;
8 0
b
;
3 0
dx
;
2 5
x
;
25 0
x
),
7 12
x ln(
)
b
(x y
14)
k
0 2
5/2







;
4 35
b
;
25 0
dx
;
5 2
x
;
75 1
x
,
b x
ln x
10
y
15)
k
0 2
/
5 3










;
6 12
b
;
3 0
dx
;
4 2
x
;
23 1
x
),
b x
cos(ln x
15.28
y
16)
k
0 2
/
3










;
2 74
b
;
05 0
dx
;
2
x
;
35 2
x
),
82 3
x
/(
)
b x
(ln
00084 0
y
17)
k
0 2
4
/
5









;
74 6
b
;
01 0
dx
;
15 0
x
;
05 0
x
,
)
b x
(
10 0.8
y
18)
k
0 6
/
7 3
3
-5








3 3/2 3
0 19) y (ln(sin(
0.0025)))
0.8 10 ,
0.12;
0.64;
0.2;
k
x
x
x
dx








2/3 0
20) y a x cos(
),
5.62;
15.62;
0.5;
0.41
x
k
x e
x
x
dx
a
 







46
ЛАБОРАТОРНАЯ РАБОТА № 5.
КЛАССЫ И ОБЪЕКТЫ
Цель лабораторной работы:
изучить основные понятия, относя- щиеся к классам и объектам, освоить динамическое создание объектов в программном коде.
5.1. Классы и объекты
В объектно-ориентированном подходе существуют понятия класс и объект.
Класс – это программная единица, которая задает общий шаблон для конкретных объектов. Класс содержит все необходимые описа- ния переменных, свойств и методов, которые относятся к объекту.
Примером класса в реальной жизни является понятие «автомобиль»: как правило, автомобиль содержит некоторое количество колес, две- рей, имеет какой-то цвет, но эти конкретные детали в классе не опи- сываются.
Объект – это экземпляр класса. Свойства объекта содержат кон- кретные данные, характерные для данного экземпляра. В реальной жиз- ни примером объекта будет конкретный экземпляр автомобиля с 4 коле- сами, 5 дверками и синего цвета.
5.2. Динамическое создание объектов
Чаще всего для размещения на форме кнопки, поля ввода или дру- гих управляющих элементов используется дизайнер среды Visual Studio: нужный элемент выделяется в панели элементов и размещается на фор- ме. Однако иногда создавать элементы нужно уже в процессе выполне- ния программы. Поскольку каждый элемент управления представляет собой отдельный класс, его помещение на форму программным спосо- бом включает несколько шагов:
1.
Создание экземпляра класса.
2.
Привязка его к форме.
3.
Настройка местоположения, размеров, текста и т. п.
Например, чтобы создать кнопку, нужно выполнить следующий код (его следует разместить в обработчике сообщения
Load или в каком- либо другом методе):
Button b = new
Button
();

47
Здесь объявляется переменная b
, относящаяся к классу
Button
, как и в предыдущих лабораторных работах. Однако дальше идет нечто но- вое: с помощью оператора new создается экземпляр класса
Button
, и ссылка на него присваивается переменной b
. При этом выполняется целый ряд дополнительных действий: выделяется память под объект, инициализируются все свойства и переменные.
Далее нужно добавить объект на форму. Для этого служит свойство
Parent
, которое определяет родительский элемент, на котором будет размещена кнопка: b.Parent = this
;
Ключевое слово this относится к тому объекту, в котором разме- щен выполняемый в данный момент метод. Поскольку все методы в ла- бораторных работах размещаются в классе формы, то и this относится к этому конкретному экземпляру формы.
Вместо формы кнопку можно поместить на другой контейнер. На- пример, если на форме есть элемент управления Panel, то можно помес- тить кнопку на него следующим образом: b.Parent = panel1;
Чтобы задать положение и размеры кнопки, нужно использовать свойства Location и Size: b.Location = new
Point
(10, 20); b.Size = new
Size
(200, 100);
Обратите внимание, что
Location и
Size
– это тоже объекты. Хотя внутри у
Location содержатся координаты x и y, задающие левый верхний угол объекта, не получится поменять одну из координат, нужно менять целиком весь объект
Location
. То же самое относится и к свойству
Size
На самом деле, каждый раз, когда на форму помещается новый эле- мент управления или вносятся какие-то изменения в свойства элементов управления, Visual Studio генерирует специальный служебный код, кото- рый проделывает приведенные выше операции по созданию и настройке элементов управления. Попробуйте поместить на форму кнопку, изменить у нее какие-нибудь свойства, а затем найдите в обозревателе решений вет- ку формы
Form1
, разверните ее и сделайте двойной щелчок по ветке
Form1.Designer.cs
. Откроется файл с текстом программы на языке C#, ко- торую среда создала автоматически. Менять этот код вручную крайне не рекомендуется! Однако можно его изучить, чтобы понять принципы соз- дания элементов управления в ходе выполнения программы.


48
5.3. Область видимости
Переменные, объявленные в программе, имеют область видимости.
Это значит, что переменная, описанная в одной части программы, не обязательно будет видна в другой. Вот наиболее часто встречающиеся ситуации:
1.
Переменные, описанные внутри метода, не будут видны за пре- делами этого метода. Например: void
MethodA()
{
// Описываем переменную delta int delta = 7;
} void
MethodB()
{
// Ошибка: переменная delta в этом методе неизвестна!
int gamma = delta + 1;
}
2.
Переменные, описанные внутри блока или составного операто- ра, видны только внутри этого блока. Например: void
Method()
{ if
(a == 7)
{
int b = a + 5;
}
// Ошибка: переменная b здесь уже неизвестна!
MessageBox
.Show(b.ToString());
}
3.
Переменные, описанные внутри класса, являются глобальными и доступны для всех методов этого класса, например: class
Form1 :
Form
{ int a = 5; void
Method()

49
{
// Переменная a здесь действительна
MessageBox
.Show(a.ToString());
}
}
1   2   3   4   5   6   7   8   9   ...   12

5.4. Операции
is
и
as
Часто бывает удобно переменные разных классов записать в один спи- сок, чтобы было легче его обрабатывать. Чтобы проверить, к какому классу принадлежит какой-либо объект, можно использовать оператор is
: он воз- вращает истину, если объект принадлежит указанному классу. Пример:
Button b = new
Button
(); if
(b is
Button
)
MessageBox
.Show(
"Это кнопка!"
);
else
MessageBox
.Show(
"Это что‐то другое..."
);
Как правило, в общих списках объекты хранятся в «обезличенном» состоянии, так, чтобы у всех у них был лишь минимальный общий для всех набор методов и свойств. Для того чтобы получить доступ к рас- ширенным свойствам объекта, нужно привести его к исходному классу с помощью операции приведения as
:
(someObject as
Button
).Text =
"Это кнопка!"
;
Следует помнить, что операция приведения сработает только в том случае, если объект изначально принадлежит тому классу, к которому его пытаются привести (или совместим с ним), в противном случае опе- ратор as выбросит исключение и остановит выполнение программы.
Поэтому более безопасный подход состоит в комбинированном приме- нении операторов as и is
: сначала проверяем совместимость объекта и класса, и только потом выполняем операцию приведения: if
(someObject is
Button
)
(someObject as
Button
).Text =
"Это кнопка!"
;
В качестве практического примера использования этих операций рассмотрим пример программы, которая перебирает все элементы управления на форме, и у кнопок (но не у других элементов управле- ния!) заменяет текст на пять звездочек «*****»: private void
Form1_Load(
object sender,
EventArgs e)
{

50
// Перебираем все элементы управления foreach
(
Control c in this
.Controls) if
(c is
Button
)
// Кнопка?
(c as
Button
).Text =
"*****"
;
// Да!
}
5.5. Сведения, передаваемые в событие
Когда происходит какое-либо событие (например, событие
Click при нажатии на кнопку), в обработчик этого события передаются до- полнительные сведения об этом событии в параметре e
Например, при щелчке кнопки мыши на объекте возникает событие
MouseClick
. Для этого события параметр e
содержит целый ряд пере- менных, которые позволяют узнать информацию о нажатии:

Button
– какая кнопка была нажата;

Clicks
– сколько раз была нажата и отпущена кнопка мыши;

Location
– координаты точки, на которую указывал курсор в мо- мент нажатия, в виде объекта класса
Point
;

X
и
Y
– те же координаты в виде отдельных переменных.
Индивидуальные задания
Если в индивидуальном задании используется элемент
Panel
, изме- ните его цвет, чтобы он визуально выделялся на форме. Если использу- ется элемент
Label
, не забудьте присвоить ему какой-либо текст, иначе он не будет виден на форме.
1.
Разработать программу, динамически порождающую на окне кнопки. Левый верхний угол кнопки определяется местоположением курсора при щелчке. Вывести надпись на кнопке с координатами ее ле- вого верхнего угла.
2.
Разработать программу, динамически порождающую на окне кноп- ки и поля ввода. Левый верхний угол элемента управления определяется ме- стоположением курсора при щелчке. Кнопка порождается, если курсор на- ходится в левой половине окна, в ином случае порождается поле ввода.
3.
На форме размещен элемент управления
Panel
. Написать про- грамму, которая при щелчке мыши на элементе управления Panel до- бавляет в него кнопки
Button
, а при щелчке на форме в нее добавляются поля ввода
TextBox
4.
На форме размещены 3 панели (элемент управления Panel). На- писать программу, которая при щелчке мыши на первой панели добав- ляет во вторую панель кнопки Button, при щелчке на второй панели до- бавляет в третью панель поля ввода TextBox, а при щелчке на третьей панели добавляет на первую панель метки Label.


51 5.
Написать программу, добавляющую на форму кнопки. Кнопки добавляются в узлы прямоугольной сетки. Расстояния между кнопками и расстояния между крайней кнопкой и границей окна должны быть равны как по горизонтали, так и по вертикали.
6.
Разработать программу, при щелчке мыши динамически порож- дающую на окне кнопки или поля ввода. Каждый четный элемент управ- ления является кнопкой, нечетный – полем ввода. Левый верхний угол кнопки определяется местоположением курсора при щелчке. Для поля ввода положение курсора определяет координаты правого нижнего угла.
7.
Создать программу с кнопкой, меткой и полем ввода. При щелчке на соответствующий элемент на форме динамически должен создаваться подобный ему элемент. Предусмотреть возможность выво- да количества кнопок, меток и полей ввода.
8.
Создать программу, добавляющую различные элементы управ- ления на форму и на панель
Panel
. Тип элементов управления выбира- ется случайным образом. Предусмотреть возможность вывода инфор- мации о количестве элементов по типам и информацию о расположении элементов.
9.
Разработать программу, добавляющую на форму последова- тельность элементов управления случайной длины. Тип элементов управления задается случайным образом. Предусмотреть возможность вывода информации о количестве элементов по типам.
10.
Написать программу, динамически порождающую на окне кнопки или метки. Левый верхний угол элемента управления определя- ется местоположением курсора при щелчке. При нажатии правой кноп- ки мыши на форме с нее удаляются все кнопки.
11.
Написать программу, динамически порождающую на окне по- очередно кнопки или поля ввода. Левый верхний угол элемента управ- ления определяется местоположением курсора при щелчке. При нажа- тии правой кнопки мыши на форме с нее удаляются все порожденные элементы.
12.
Разработать программу с двумя кнопками на форме. При нажа- тии на первую на форму добавляется одна панель
Panel
. При нажатии на вторую кнопку в каждую панель добавляется поле ввода.
13.
Разработать программу с двумя кнопками на форме. При нажа- тии на первую на форму добавляется одна кнопка или поле ввода.
При нажатии на вторую кнопку каждое поле увеличивается по вертика- ли в два раза.
14.
Написать программу с кнопкой и тремя полями ввода. При на- жатии на кнопку программа анализирует содержимое первого поля и динамически порождает элемент управления. Если в первом поле вво-

52 да содержится буква «
К
», то на форму добавляется кнопка, если «
П
» – поле ввода, если «
М
» – метка. Во втором и третьем поле ввода содержат- ся координаты левого верхнего угла будущего элемента управления.
15.
Разработать программу, добавляющую на форму метки с тек- стом. Местоположение и размеры меток определяются в программе ди- намически через поля ввода. В заголовок окна, анализируя размер всех меток, вывести количество маленьких и больших меток. Маленькой меткой считается метка размером менее 50 пикселей по горизонтали и вертикали.
16.
Создать программу с двумя кнопками на форме, динамически порождающую на окне метки или поля ввода. При нажатии на первую кнопку каждая метка увеличивается по горизонтали в два раза. При нажа- тии на вторую кнопку каждое поле уменьшается по вертикали в два раза.
17.
Разработать программу, динамически порождающую на окне кнопки и поля ввода. Координаты элемента управления определяются случайным образом. Элементы управления не должны накладываться друг на друга. Если нет возможности добавить элемент управления (нет места для размещения элемента), то предусмотреть вывод информации об этом.
18.
Разработать программу, динамически порождающую на окне кнопки и поля ввода. Координаты элемента управления определяются случайным образом. При наведении курсора на элемент управления он должен быть удален с формы.
19.
Разработать программу, динамически порождающую при щелчке на окне различные элементы (поля ввода, кнопки, метки). Тип элементов определяется с помощью радиокнопок. Все элементы распо- лагаются горизонтально в ряд. При достижении правой границы окна начинается новый ряд элементов.
20.
Разработать программу, динамически порождающую или поле ввода (при нажатии на окне левой кнопкой мыши), или кнопку (при на- жатии на окне правой кнопкой мыши). Все элементы располагаются на- искосок, начиная с левого верхнего угла окна. Реализовать обработчик события изменения размера окна, в котором удалить все порожденные элементы.