Приклад 2
Я
к
приклад використання деяких вбудованих
об’єктів розглянемо таке завдання:
Створити діалогову програму розрахунку таблиці значень математичних функцій, котра виконує наступне:
- забезпечує обрання математичної функції за допомогою ієрархічного меню. На першому рівні обирається клас функцій: тригонометричні, поліноми тощо. На другому рівні для кожного класу обирається математичний вираз, наприклад Y= a*Sin(b*X+c),
Y=a1*Sin(b1*X+c1)+a2*Cos(b2*X+c2)
та Y= a*Sin(b1*X+c1)*Cos(b2*X+c2).
- для обраного виразу функції забезпечує введення параметрів (у даному прикладі це коефіцієнти a, b, c, a1, b1, c1, a2, b2, c2).
- пропонує стандартний інтервал і крок обчислення значень виразу та забезпечує їх редагування користувачем.
- після натиснення кнопки „Розрахувати” заповняє таблицю з двома стовпчиками: у першому значення змінної X, у другому відповідні значення змінної Y.
Оскільки кожен вираз має власну кількість параметрів, оберемо метод введення даних через RichTextBox, та розташуємо цей об’єкт на формі і встановимо для нього шрифт Microsoft Sans Serif; 16pt.
Для створення меню розташуємо на формі об’єкт MenuStrip і заповнимо поля ієрархії відповідними назвами пунктів і формулами. Налагодимо розмір шрифту для меню в цілому.
Добавимо до форми мітку Label, в яку буде виводитися обраний вираз, і також налагодимо розмір шрифту.
Для подання результатів обчислення розташуємо на формі об’єкт DataGridView, започаткуємо в ньому два стовпчики і налагодимо їх властивості так, щоб користувач не міг змінювати в них дані.
Щоб система запрацювала, додамо в клас форми потрібні дані:
public partial class Form1 : Form
{
int gr_f = 0; //номер графіку за меню
int n_par=3; //кількість параметрів графіку
double x_min = 0, x_max = 10, dx = 0.50;
double[] par = new double[10]; // параметри виразів
Для розташованих на формі елементів керування запрограмуємо наступні обробники подій (реалізовано тільки для першої функції, решта аналогічна):
private void синусToolStripMenuItem_Click(object sender, EventArgs e)
{ // Обрано 1-й пункт 1-го розділу меню,
// виводимо в мітку з пункту меню вираз, що буде розразовано
label2.Text = синусToolStripMenuItem.Text;// "Y=a*Sin(b*X+c)";
// Затираємо результати попередніх обчислень.
richTextBox1.Clear();
// Встановлюємо значення параметрів розразунку і виразу "за замовченням"
par[0] = 0;
par[1] = 0;
par[2] = 0;
par[3] = 1;
par[4] = 1;
par[5] = 0;
// Пропонуємо користовачу перевірити і виправити значення параметрів
richTextBox1.AppendText(
"Початкове Х_min= "+x_min
+";\nКінцеве Х_max= "+x_max
+";\nКрок dХ= " +dx
+";\n\na= " +par[3]
+ ";\nb= " +par[4]
+ ";\nc= " +par[5]
+ ";");
// Встановлюємо службові параметри
gr_f = 0;
n_par = 6;
}
private void косинусToolStripMenuItem_Click(object sender, EventArgs e)
{
label2.Text = "Y=a1*Sin(b1*X+c1)+a2*Cos(b2*X+c2)";
// Заглушка для другого пункту меню
gr_f = 1;
n_par = 9;
}
private void yaSinb1Xc1Cosb2Xc2ToolStripMenuItem_Click(object sender, EventArgs e)
{
label2.Text = "Y=a*Sin(b1*X+c1)*Cos(b2*X+c2)";
// Заглушка для третього пункту меню
gr_f = 2;
n_par = 8;
}
private void button3_Click(object sender, EventArgs e)
{ // Натиснуто кнопку "Розрахувати"
// З використанням методу Find виділяємо значення параметрів,
// розташованих між символами "=" та ";"
int n1=0,n2=0;
string s;
char[] r1={'='};
char[] r2={';'};
for (int j = 0; j < n_par; j++)
{
n1 = richTextBox1.Find(r1, ++n2);
n2 = richTextBox1.Find(r2, ++n1);
richTextBox1.Select(n1, n2 - n1);
s = richTextBox1.SelectedText;
par[j] = double.Parse(s);
}
x_min = par[0];
x_max = par[1];
dx = par[2];
