![]()
Главная Обратная связь Дисциплины:
Архитектура (936) ![]()
|
Дополнение класса формы средствами решения прикладной задачи
Пусть задана задача: сколько элементов одномерного массива меньше его среднего арифметического. В классе Form1 имеются объявление данных, а также функции для ее решения. Вызов функций выполняется при нажатии на командные кнопки. Форма для этой задачи представлена на рис. 5.1.
Рис. 5.1
Класс Form1: namespace Exampl_51 { public partial class Form1 : Form { double[] x;// данные для задачи Int kol; Double SrAr;
public Form1() { InitializeComponent(); }
private void button4_Click(object sender, EventArgs e) { Close(); } Private void Input() { // ввод исходных данных string[] temp; string dan; dan = textBox1.Text; temp = dan.Split(';'); x = new double[temp.Length]; for (int i = 0; i < x.Length; i++) x[i] = Convert.ToDouble(temp[i]); } Private void Comp_aver() { // нахождение среднего арифметического SrAr = 0; for (int i = 0; i < x.Length; i++) SrAr += x[i]; SrAr = SrAr / x.Length; } Private void Comp_Count() {// определение требуемого количества элементов kol = 0; for (int i = 0; i < x.Length; i++) if (x[i] < SrAr) kol++;
}
private void button1_Click(object sender, EventArgs e) { // реализация кнопки ввода исходных данных Input(); Sred.Enabled = true; }
private void Sred_Click(object sender, EventArgs e) { // реализация кнопки нахождения среднего арифметического Comp_aver(); KolVo.Enabled = true; }
private void KolVo_Click(object sender, EventArgs e) { //нахождение и вывод количества Comp_Count(); label3.Text = "" + kol; }
private void textBox1_Click(object sender, EventArgs e) {// перевод задачи в исходное состояние textBox1.Text = ""; Sred.Enabled = false; KolVo.Enabled = false; label3.Text = ""; } } }
Первоначально кнопки «Среднее арифметическое» и «Количество» заблокированы, потому что до ввода исходных данных на них нажать нельзя. Щелчок мышью на строке ввода исходных данных переводит программу в исходное состояние.
Создание отдельных классов
Поступим следующим образом. Объявим несколько классов и используем их методы при нажатии командных кнопок на форме. В принципе, можно использовать сколь угодно сложные структуры данных в классах, но мы не будем тратить на это время, потому что вопросы передачи структурированных данных в качестве формальных/фактических параметров функций были подробно рассмотрены выше. Создавать классы можно двумя способами: - написать классы самому «с нуля»; не забудьте, что класс формы должен быть впереди собственных классов; - ставить курсор мыши на имя проекта, нажать на правую клавишу, выбрать из выпадающего меню пункт «Add», далее «Class».
namespace Klassid { public class Cl1 { protected int a1 = 0; protected double a2 = 3.5; private Cl3 _Cl3; public Cl1(int i, double x) { a1 = i; a2 = x; } public string opp() { _Cl3 = new Cl3("Greeting from Moscow"); return _Cl3.get_c1();
} public double op2() { return (a1*a2); }
} public class Cl2 : Cl1 { public string st1; public Cl2(int i, double x, string s) : base(i, x) { st1 = s; } public string op21() { return st1; } } public class Cl3 {
public string c1; public Cl3(string t) { c1 = t; } public string get_c1() { return c1; } } public class Cl4 { public int i1; public Cl4(int k) { i1 = k; } public int fun2() { return i1; } } class Cl5 // обработка массива { int[] k; public Cl5(int[] temp) { k = new int[temp.Length]; for (int i = 0; i < temp.Length; i++) k[i] = temp[i]; } public int sum_pol() { int u=0; for (int i = 0; i < k.Length; i++) if (k[i] > 0) u += k[i]; return u; } } }
Работа с классами из формы: namespace Klassid { public partial class Form1 : Form { public Form1() { InitializeComponent(); }
private void button1_Click(object sender, EventArgs e) { Close(); }
private void button2_Click(object sender, EventArgs e) {// создание объекта класса Cl3 Cl3 pp = new Cl3(textBox1.Text); textBox2.Text = pp.get_c1(); }
private void button3_Click(object sender, EventArgs e) { // работа с классом Cl2 Cl2 q; string s1; s1 = textBox1.Text; q = new Cl2(6, 2.5, s1); textBox2.Text = q.st1; }
private void button4_Click(object sender, EventArgs e) { // работа с классом Cl2 Cl2 q; string s1; int i; s1 = textBox1.Text; i=Convert.ToInt32(textBox2.Text); q=new Cl2(i,2.5,s1); textBox2.Text=Convert.ToString(q.op21()); }
private void button5_Click(object sender, EventArgs e) {// работа с классом Cl1, а через него с Cl3 Cl1 f1 = new Cl1(5, 3.7); textBox1.Text = f1.opp(); } private void button6_Click(object sender, EventArgs e) {// обработка массива string[] z; string s1; int[] t; s1 = textBox1.Text; z = s1.Split(';'); t=new int[z.Length]; for (int i = 0; i < z.Length; i++) t[i] = Convert.ToInt32(z[i]); Cl5 My_Cl = new Cl5(t); textBox2.Text = "Summa " + My_Cl.sum_pol(); } } }
![]() |