Uploaded by kickkick2202

Батуров Н.В. ИВТ-124Б Лабораторная работа C# №4 Вариант 11

advertisement
ФГБОУ ВО
Уфимский государственный авиационный технический университет
Кафедра Информатики
100 1
2
3
4
5
6
7
8
9
10 11 12
90
80
70
60
50
40
30
20
10
Линейные и разветвляющиеся
конструкции в C#
ПОЯСНИТЕЛЬНАЯ ЗАПИСКА
к лабораторной работе по информатике
1306.501411.000ПЗ
(обозначение документа)
Группа
ИВТ-124Б
Фамилия, И., О.
Студент
Батуров Н.В.
Консультант
Минакова Е.А.
Принял
Уфа 2020 г.
Подпись
Дата
Оценка
Содержание
1
Задание №3................................................................................................................ 3
2
Задание №4 ................................................................................................................ 6
3
Задание №5 ................................................................................................................ 9
4
Задание №6 .............................................................................................................. 15
5
Индивидуальное задание №1 ................................................................................ 22
6
Индивидуальное задание №2 ................................................................................ 30
7
Индивидуальное задание №3 ................................................................................ 34
Изм. Лист
№ докум.
Подп.
Дата
1306.501411.000ПЗ
Разраб.
Батуров Н.В.
Лит.
Лист
Пров.
Минакова Е.А.
Д
2
Рецен.
ФИО
Н.контр.
ФИО
Утв..
ФИО
Линейные и разветвляющиеся
конструкции в C#
Листов
38
УГАТУ ИВТ-124Б
1
Задание №3
Формулировка: Создайте проект с многооконным интерфейсом, который
содержит четыре формы. Проект должен иметь имя «Лабораторная работа № X
Иванова А.А. студента группы XXX».
Напишите программный код, открывающий:
- вторую форму при нажатии на кнопку «Вычисление по заданной формуле»;
- третью форму при нажатии на кнопку «Вычисление по формуле, выбранной
пользователем»;
- четвертую форму при нажатии на кнопку «Калькулятор»;
Кнопка «Выход» должна прекращать выполнение проекта.
Макет формы:
Изм.
№ докум.
Подп.
Дата
3
Код программы:
using
using
using
using
using
using
using
using
using
System;
System.Collections.Generic;
System.ComponentModel;
System.Data;
System.Drawing;
System.Linq;
System.Text;
System.Threading.Tasks;
System.Windows.Forms;
namespace Лабораторная_работа__1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
Form2 form2 = new Form2();
form2.Show();
}
private void button2_Click(object sender, EventArgs e)
{
Form3 form3 = new Form3();
form3.Show();
}
private void button3_Click(object sender, EventArgs e)
{
Form4 form4 = new Form4();
form4.Show();
}
private void button4_Click(object sender, EventArgs e)
{
Close();
}
}
}
Выполнение программы:
Изм.
№ докум.
Подп.
Дата
4
Изм.
№ докум.
Подп.
Дата
5
2
Задание №4
Формулировка: В проекте, созданном в задании 3, оформите форму 2 и
напишите программный код, вычисляющий значение функции для заданного
пользователем аргумента (согласно варианту индивидуального задания).
Математическое решение: Пользователь вводит значение x, программа
вычисляет значение y по формуле y  e x  cos(3x   / 2) .
Блок-схема:
НАЧАЛО
Ввод: x
Вывод: y
КОНЕЦ
Макет формы:
Изм.
№ докум.
Подп.
Дата
6
Код программы:
using
using
using
using
using
using
using
using
using
System;
System.Collections.Generic;
System.ComponentModel;
System.Data;
System.Drawing;
System.Linq;
System.Text;
System.Threading.Tasks;
System.Windows.Forms;
namespace Лабораторная_работа__1
{
public partial class Form2 : Form
{
public Form2()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
double x, y;
try
{
x = Convert.ToDouble(textBox1.Text);
y = Math.Exp(x) + Math.Cos(-3 * x - Math.PI / 2);
textBox2.Text = Convert.ToString(y);
}
catch
{
MessageBox.Show("Проверьте правильность ввода чисел");
}
}
private void button2_Click(object sender, EventArgs e)
{
Close();
}
}
}
Выполнение программы:
Изм.
№ докум.
Подп.
Дата
7
Изм.
№ докум.
Подп.
Дата
8
Задание №5
3
Формулировка: В проекте, созданном в задании 3, создайте форму 3 и
напишите программный код, вычисляющий значения переменных по заданным
расчетным
формулам
и
наборам
исходных
данных(согласно
варианту
индивидуального задания).
Математическое решение: Пользователь вводит значения x, a, b, c,
выбирает формулу, по которой будет происходить вычисление, затем программа
рассчитывает значение функции по формуле
z  ecx
x xa
x
xb
f  ln(a  x 2 )  sin 2 ( x / b) или
.
Блок-схема:
НАЧАЛО
Ввод: x, a,
b, c
f=0
+
Выбрана 1
формула
-
+
Выбрана 2
формула
-
Вывод:
“Ошибка!”
1
Изм.
№ докум.
Подп.
Дата
9
1
Вывод: f
КОНЕЦ
Макет формы:
Изм.
№ докум.
Подп.
Дата
10
Код программы:
using
using
using
using
using
using
using
using
using
System;
System.Collections.Generic;
System.ComponentModel;
System.Data;
System.Drawing;
System.Linq;
System.Text;
System.Threading.Tasks;
System.Windows.Forms;
namespace Лабораторная_работа__1
{
public partial class Form3 : Form
{
public Form3()
{
InitializeComponent();
}
private void label4_Click(object sender, EventArgs e)
{
}
private void button1_Click(object sender, EventArgs e)
{
try
{
double x, a, c, b, f;
f = 0;
x = Convert.ToDouble(textBox2.Text);
a = Convert.ToDouble(textBox3.Text);
b = Convert.ToDouble(textBox4.Text);
c = Convert.ToDouble(textBox5.Text);
if(radioButton1.Checked)
{
if (b == 0)
{
MessageBox.Show("Вы не можете делить на ноль!");
f = double.NaN;
}
else f = Math.Log(a + x * x) + Math.Pow(Math.Sin(x / b), 2);
}
else if(radioButton2.Checked)
{
if ((x - Math.Sqrt(Math.Abs(x - b))) == 0)
{
MessageBox.Show("Вы не можете делить на ноль!");
f = double.NaN;
}
else f = Math.Exp(-c * x) * (x + Math.Sqrt(x + a)) / (x Math.Sqrt(Math.Abs(x - b)));
}
else MessageBox.Show("Ошибка! (Не выбрана формула)");
if (checkBox1.Checked) textBox1.Text = string.Format("{0,8:F4}", f);
else textBox1.Text = string.Format("{0}", f);
}
catch
{
Изм.
№ докум.
Подп.
Дата
11
MessageBox.Show("Проверьте правильность ввода чисел");
}
}
private void label1_Click(object sender, EventArgs e)
{
}
private void button2_Click(object sender, EventArgs e)
{
Close();
}
}
}
Выполнение программы:
Изм.
№ докум.
Подп.
Дата
12
Изм.
№ докум.
Подп.
Дата
13
Изм.
№ докум.
Подп.
Дата
14
4
Задание №6
Формулировка: В проекте, созданном в задании № 3, создайте форму 4 и
напишите программный код, позволяющий выполнять четыре основные
арифметические операции (+, -, /, *) над двумя (и более) любыми числами.
Математическое решение: Пользователь вводит число, при нажатии на
кнопку операции (+, -, /, *) первое число сохраняется в переменной val1, строка
очищается, у пользователя появляется возможность ввести второе число,
происходит расчёт, который зависит от введенной операции и выводится в
текстовом поле:
Вывод = val1 + второе число
Вывод = val1 – второе число
Вывод = val1 * второе число
Вывод = val1 / второе число
Если пользователь захочет нажать на вторую операцию до нажатия кнопки
“=”, (отслеживается по val1 != 0), произойдёт программное нажатие на кнопку “=”,
ответ выведется в текстовом поле, пользователь сможет ввести третье число и так
далее.
Кнопка “C” отчищает текстовое поле, “,” даёт возможность ввода
вещественных чисел, “+/- “ меняет знак введенного числа.
Предусмотрен запрет ввода более одного символа “,”, запрет деления на 0.
В коде программы есть комментарии, поясняющие некоторые из моментов
работы.
Макет формы: (на следующей странице)
Изм.
№ докум.
Подп.
Дата
15
Код программы:
using
using
using
using
using
using
using
using
using
System;
System.Collections.Generic;
System.ComponentModel;
System.Data;
System.Drawing;
System.Linq;
System.Text;
System.Threading.Tasks;
System.Windows.Forms;
namespace Лабораторная_работа__1
{
public partial class Form4 : Form
{
double val1;
/* Для хранения набранного до нажатия операции значения */
string operation = "";
/* Для использования с '+', '-', '*', '/' */
bool op_used = false;
/* Для того, чтобы отслеживать нажатие операции */
public Form4()
{
InitializeComponent();
}
private void button2_Click(object sender, EventArgs e)
{
}
private void button_Click(object sender, EventArgs e)
{
if (op_used) textBox1.Clear();
Button b = (Button)sender;
/*Метод позволяет избежать назначения этого действия для каждой кнопки отдельно,
но нужно назначить button_Click в События-Click*/
if (b.Text == ",")
Изм.
№ докум.
Подп.
Дата
16
{
if (textBox1.Text.Contains(","))
{
textBox1.Clear();
textBox1.Text = "0";
}
}
/* Не даём вводить больше одной ',' */
textBox1.Text = textBox1.Text + b.Text;
op_used = false;
}
private void button13_Click(object sender, EventArgs e)
{
textBox1.Clear();
val1 = 0;
}
private void button18_Click(object sender, EventArgs e)
{
switch (operation)
{
case "+":
textBox1.Text = Convert.ToString(val1 + Convert.ToDouble(textBox1.Text));
break;
case "-":
textBox1.Text = Convert.ToString(val1 - Convert.ToDouble(textBox1.Text));
break;
case "/":
if (Convert.ToDouble(textBox1.Text) == 0) MessageBox.Show("Ошибка! (На
ноль делить нельзя)");
else textBox1.Text = Convert.ToString(val1 /
Convert.ToDouble(textBox1.Text));
break;
case "*":
textBox1.Text = Convert.ToString(val1 * Convert.ToDouble(textBox1.Text));
break;
default:
break;
}
op_used = false;
val1 = Convert.ToDouble(textBox1.Text);
/* Для возможности проведения более одной операции */
operation = "";
}
private void operation_Click(object sender, EventArgs e)
{
Button b = (Button)sender;
if (val1 != 0)
{
button18.PerformClick();
/* Эмитируем нажатие на '=', чтобы иметь возможность производить операции с 3
и более числами */
op_used = true;
operation = b.Text;
}
else
{
operation = b.Text;
val1 = Convert.ToDouble(textBox1.Text);
op_used = true;
}
}
Изм.
№ докум.
Подп.
Дата
17
private void button11_Click(object sender, EventArgs e)
{
textBox1.Text = Convert.ToString(-1 * Convert.ToDouble(textBox1.Text));
}
}
}
Выполнение программы:
Изм.
№ докум.
Подп.
Дата
18
Изм.
№ докум.
Подп.
Дата
19
Изм.
№ докум.
Подп.
Дата
20
Изм.
№ докум.
Подп.
Дата
21
5
Индивидуальное задание №1
Формулировка: Написать программу, которая по введенному значению
аргумента вычисляет значение функции, заданной в виде графика.
Математическое решение:
 x  2, если  3  x  2;

2
 1  ( x  1) , если  2  x  1;

y  1, если  1  x  1;
 x  1,5, если 1  x  2;
1, если 2  x  5;

 Не ОДЗ , иначе
Блок-схема:
НАЧАЛО
Ввод: x
y=0
+
-
1
Изм.
№ докум.
2
Подп.
Дата
22
1
2
+
Вывод:”Не
ОДЗ”
-
+
-
+
y=1
3
Изм.
№ докум.
4
Подп.
Дата
5
6
-
+
-
7
8
23
3
4
5
6
7
8
y = -1
Вывод: y
КОНЕЦ
Макет формы:
Изм.
№ докум.
Подп.
Дата
24
Код программы:
using
using
using
using
using
using
using
using
using
System;
System.Collections.Generic;
System.ComponentModel;
System.Data;
System.Drawing;
System.Linq;
System.Text;
System.Threading.Tasks;
System.Windows.Forms;
namespace WindowsFormsApp1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button2_Click(object sender, EventArgs e)
{
Close();
}
private void button1_Click(object sender, EventArgs e)
{
double x, y;
y = 0;
x = Convert.ToDouble(textBox1.Text);
if ((x < -3) || (x > 5)) MessageBox.Show("Значение x не входит в ОДЗ");
else if ((x >= -3) && (x < -2)) y = (-1 * x) - 2;
else if ((x >= -2) && (x < -1)) y = Math.Sqrt(1 - Math.Pow((x + 1), 2));
else if ((x >= -1) && (x < 1)) y = 1;
else if ((x >= 1) && (x < 2)) y = (-1 * x) + 1.5;
else y = -1;
textBox2.Text = Convert.ToString(y);
}
}
}
Выполнение программы: (на следующей странице)
Изм.
№ докум.
Подп.
Дата
25
Изм.
№ докум.
Подп.
Дата
26
Изм.
№ докум.
Подп.
Дата
27
Изм.
№ докум.
Подп.
Дата
28
Изм.
№ докум.
Подп.
Дата
29
6
Индивидуальное задание №2
Формулировка: Создать приложение, определяющее, принадлежит ли
некоторая точка M с произвольными координатами x, y закрашенной области.
Математическое решение:
 y  sin x
y  x 1


 y  1
 x  1
( x  1 -условие, когда нам нужно захватить конкретную область функции
один раз)
Блок-схема: (на следующей странице)
Изм.
№ докум.
Подп.
Дата
30
НАЧАЛО
Ввод: x, y
+
-
Вывод:
“Не
принадлежит”
Вывод:
”Принадлежит”
КОНЕЦ
Изм.
№ докум.
Подп.
Дата
31
Макет формы:
Код программы:
using
using
using
using
using
using
using
using
using
System;
System.Collections.Generic;
System.ComponentModel;
System.Data;
System.Drawing;
System.Linq;
System.Text;
System.Threading.Tasks;
System.Windows.Forms;
namespace WindowsFormsApp2
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button2_Click(object sender, EventArgs e)
{
Close();
}
private void button1_Click(object sender, EventArgs e)
{
double x, y;
try
{
x = Convert.ToDouble(textBox1.Text);
y = Convert.ToDouble(textBox2.Text);
if ((y >= -1) && (x >= -1) && (y <= Math.Sin(x)) && (y >= x - 1))
MessageBox.Show("Точка принадлежит выделенной области!");
else MessageBox.Show("Точка не принадлежит выделенной области!");
}
Изм.
№ докум.
Подп.
Дата
32
catch
{
MessageBox.Show("Проверьте правильность ввода данных!");
}
}
private void label2_Click(object sender, EventArgs e)
{
}
}
}
Выполнение программы:
Изм.
№ докум.
Подп.
Дата
33
7
Индивидуальное задание №3
Формулировка: Написать программу, которая определяет, попадает ли
точка с заданными координатами в область, закрашенную рисунке серым цветом.
Результат работы вывести в виде текстового сообщения (принадлежит или не
принадлежит).
Математическое решение:
 x  0

 x   R
  y  R

 y  0

2
2
2
 ( x  R )  ( y  R )  R

 x  0
 x  R

 y  R
 y   R

 ( x  R ) 2  ( y  R ) 2  R 2
Блок-схема:
НАЧАЛО
Ввод: x, y, R
1
Изм.
№ докум.
Подп.
Дата
34
1
+
-
Вывод:
”Не
принадлежит”
Вывод:
”Принадлежит”
КОНЕЦ
Изм.
№ докум.
Подп.
Дата
35
Макет формы:
Код программы:
using
using
using
using
using
using
using
using
using
System;
System.Collections.Generic;
System.ComponentModel;
System.Data;
System.Drawing;
System.Linq;
System.Text;
System.Threading.Tasks;
System.Windows.Forms;
namespace WindowsFormsApp3
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button2_Click(object sender, EventArgs e)
{
Close();
}
private void button1_Click(object sender, EventArgs e)
{
double x, y, R;
try
{
x = Convert.ToDouble(textBox1.Text);
y = Convert.ToDouble(textBox2.Text);
R = Convert.ToDouble(textBox3.Text);
if (((x <= 0) && (x >= -R) && (y <= R) && (y >= 0) && (Math.Pow((x + R), 2) +
Math.Pow((y - R), 2) >= R * R)) || ((x >= 0) && (x <= R) && (y >= -R) && (y <= 0) &&
(Math.Pow((x - R), 2) + Math.Pow((y + R), 2) >= R * R)))
Изм.
№ докум.
Подп.
Дата
36
{
MessageBox.Show("Точка принадлежит выделенной области!");
}
else MessageBox.Show("Точка не принадлежит выделенной области!");
}
catch
{
MessageBox.Show("Проверьте правильность ввода данных!");
}
}
}
}
Выполнение программы:
Изм.
№ докум.
Подп.
Дата
37
Изм.
№ докум.
Подп.
Дата
38
Download