Программирование на языке высокого уровня Примеры. DataGridView. Ещё примеры Кафедра АСОИУ ОмГТУ, 2012 Богатов Р.Н.
Задача погони Волк гонится за зайцем, который бежит по прямой с постоянной скоростью. Волк тоже бежит с постоянной скоростью и всегда по направлению к зайцу. В некоторый момент времени угол между направлениями их движения составляет 90 0, а расстояние между ними составляет L 0. Через какое время волк настигнет зайца, при условии, что его скорость больше? // исходные данные: скорости uz и uv, // положение волка yv, шаг времени dt double gamma = Math.PI / 2; double xz = 0, xv = 0, t = 0, L; for (;; t = t + dt) { // вывод координат... xz = xz + dt * uz; gamma = Math.Atan2(yv, xz - xv); xv = xv + dt * uv * Math.Cos(gamma); yv = yv - dt * uv * Math.Sin(gamma); if (xv > xz) break; } // вывод окончательных результатов... // исходные данные: скорости uz и uv, // положение волка yv, шаг времени dt double gamma = Math.PI / 2; double xz = 0, xv = 0, t = 0, L; for (;; t = t + dt) { // вывод координат... xz = xz + dt * uz; gamma = Math.Atan2(yv, xz - xv); xv = xv + dt * uv * Math.Cos(gamma); yv = yv - dt * uv * Math.Sin(gamma); if (xv > xz) break; } // вывод окончательных результатов... // вывод координат L = Math.Sqrt(yv*yv + (xz-xv)*(xz-xv)); textBox1.Text = textBox1.Text + String.Format("Волк({0:0}; {1:0})\t Заяц({2:0}; 0)\t L={3:0.0}\t угол={4:0.0}\r\n", xv, yv, xz, L, 180*gamma/Math.PI); // вывод координат L = Math.Sqrt(yv*yv + (xz-xv)*(xz-xv)); textBox1.Text = textBox1.Text + String.Format("Волк({0:0}; {1:0})\t Заяц({2:0}; 0)\t L={3:0.0}\t угол={4:0.0}\r\n", xv, yv, xz, L, 180*gamma/Math.PI); // вывод окончательных результатов textBox1.Text = textBox1.Text + String.Format("\r\nL = {0:0.###}, t = {1:0.###}", L, t); // вывод окончательных результатов textBox1.Text = textBox1.Text + String.Format("\r\nL = {0:0.###}, t = {1:0.###}", L, t);
Искусственный нейрон Одного искусственного нейрона достаточно, чтобы… …реализовать логическую функцию (AND, OR, NOT) …моделировать, например, поведение таракана, который в случае опасности прячется в тёмное укрытие...обыграть человека в «Орёл/решку»! public partial class Form1 : Form { int[] x, w; int N = 8, win, loss, guess; Random r = new Random(); private void button1_Click(object sender, EventArgs e) { int sum = 0; for (int i = 0; i < N; i++) sum += x[i] * w[i]; guess = (sum == 0)? r.Next(2): ((sum < 0)? 0: 1); label2.Text = "Вы загадали " + guess + "?"; } private void button_YES_Click(object sender, EventArgs e) { win++; // обучение нейрона... } private void button_NO_Click(object sender, EventArgs e) { loss++; guess = (guess == 0) ? 1 : 0; // обучение нейрона... } public partial class Form1 : Form { int[] x, w; int N = 8, win, loss, guess; Random r = new Random(); private void button1_Click(object sender, EventArgs e) { int sum = 0; for (int i = 0; i < N; i++) sum += x[i] * w[i]; guess = (sum == 0)? r.Next(2): ((sum < 0)? 0: 1); label2.Text = "Вы загадали " + guess + "?"; } private void button_YES_Click(object sender, EventArgs e) { win++; // обучение нейрона... } private void button_NO_Click(object sender, EventArgs e) { loss++; guess = (guess == 0) ? 1 : 0; // обучение нейрона... } // обучение нейрона int sign = 2 * guess - 1; for (int i = 0; i < N; i++) w[i] += sign * x[i]; for (int i = 0; i > N-1; i++) x[i] = x[i + 1]; x[N - 1] = sign; // обучение нейрона int sign = 2 * guess - 1; for (int i = 0; i < N; i++) w[i] += sign * x[i]; for (int i = 0; i > N-1; i++) x[i] = x[i + 1]; x[N - 1] = sign;
DataGridView // ввод данных double[,] A, B, C; A = new double[K, L]; B = new double[M, N]; C = new double[K, N]; for (int i = 0; i < K; i++) for (int j = 0; j < L; j++) A[i, j] = Convert.ToDouble(dataGridView1[j, i].Value); for (int i = 0; i < M; i++) for (int j = 0; j < N; j++) B[i, j] = Convert.ToDouble(dataGridView2[j, i].Value); // расчёт for (int i = 0; i < K; i++) for (int j = 0; j < N; j++) { double sum = 0; for (int z = 0; z < L; z++) sum = sum + A[i, z] * B[z, j]; C[i,j] = sum; } // вывод данных for (int i = 0; i < K; i++) for (int j = 0; j < N; j++) dataGridView3[j, i].Value = C[i, j]; // ввод данных double[,] A, B, C; A = new double[K, L]; B = new double[M, N]; C = new double[K, N]; for (int i = 0; i < K; i++) for (int j = 0; j < L; j++) A[i, j] = Convert.ToDouble(dataGridView1[j, i].Value); for (int i = 0; i < M; i++) for (int j = 0; j < N; j++) B[i, j] = Convert.ToDouble(dataGridView2[j, i].Value); // расчёт for (int i = 0; i < K; i++) for (int j = 0; j < N; j++) { double sum = 0; for (int z = 0; z < L; z++) sum = sum + A[i, z] * B[z, j]; C[i,j] = sum; } // вывод данных for (int i = 0; i < K; i++) for (int j = 0; j < N; j++) dataGridView3[j, i].Value = C[i, j]; dataGridView1.RowCount = K; dataGridView1.ColumnCount = L; dataGridView2.RowCount = M; dataGridView2.ColumnCount = N; dataGridView3.RowCount = K; dataGridView3.ColumnCount = N; dataGridView1.RowCount = K; dataGridView1.ColumnCount = L; dataGridView2.RowCount = M; dataGridView2.ColumnCount = N; dataGridView3.RowCount = K; dataGridView3.ColumnCount = N;
Баланс роста и веса Для таблицы значений роста (см) и веса (кг) пациентов вычислить функцию «вес – (рост – 100)» и выделить те значения этой функции, которые по модулю превышают 20. public partial class Form1 : Form { int N = 0; private void numericUpDown1_ValueChanged(object sender, EventArgs e) { N = (int)numericUpDown1.Value; dataGridView1.RowCount = N; for (int i = 0; i < N; i++) { dataGridView1[0, i].Value = i+1; dataGridView1[0, i].ReadOnly = true; dataGridView1[0, i].Style.BackColor = Color.LightGray; dataGridView1[3, i].ReadOnly = true; dataGridView1[3, i].Style.BackColor = Color.LightGray; } private void button1_Click(object sender, EventArgs e) {... } public partial class Form1 : Form { int N = 0; private void numericUpDown1_ValueChanged(object sender, EventArgs e) { N = (int)numericUpDown1.Value; dataGridView1.RowCount = N; for (int i = 0; i < N; i++) { dataGridView1[0, i].Value = i+1; dataGridView1[0, i].ReadOnly = true; dataGridView1[0, i].Style.BackColor = Color.LightGray; dataGridView1[3, i].ReadOnly = true; dataGridView1[3, i].Style.BackColor = Color.LightGray; } private void button1_Click(object sender, EventArgs e) {... } private void button1_Click(object sender, EventArgs e) { // ввод данных double[] rost, ves, F; rost = new double[N]; ves = new double[N]; F = new double[N]; for (int i = 0; i < N; i++) { rost[i] = Convert.ToDouble(dataGridView1[1, i].Value); ves[i] = Convert.ToDouble(dataGridView1[2, i].Value); } // расчёт for (int i = 0; i < N; i++) F[i] = ves[i] - (rost[i] - 100); // вывод данных for (int i = 0; i < N; i++) { dataGridView1[3, i].Value = F[i]; if (Math.Abs(F[i]) > 20) dataGridView1[3, i].Style.ForeColor = Color.Red; } private void button1_Click(object sender, EventArgs e) { // ввод данных double[] rost, ves, F; rost = new double[N]; ves = new double[N]; F = new double[N]; for (int i = 0; i < N; i++) { rost[i] = Convert.ToDouble(dataGridView1[1, i].Value); ves[i] = Convert.ToDouble(dataGridView1[2, i].Value); } // расчёт for (int i = 0; i < N; i++) F[i] = ves[i] - (rost[i] - 100); // вывод данных for (int i = 0; i < N; i++) { dataGridView1[3, i].Value = F[i]; if (Math.Abs(F[i]) > 20) dataGridView1[3, i].Style.ForeColor = Color.Red; }
Домашнее задание Реализовать игру «Быки и коровы», в которой компьютер играет роль загадывающего игрока, а пользователь отгадывает.