ФГБОУ ВО Уфимский государственный авиационный технический университет Кафедра Информатики 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 ecx x xa x xb 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