Блок схема.
Текст программы.
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace WindowsFormsApplication9
{
public partial class f1 : Form
{
public f1()
{
InitializeComponent();
}
private void PointInGrap_Tick(object sender, EventArgs e)
{
}
private bool isNumber = false;
private void txtFirst_KeyDown(object sender, System.Windows.Forms.KeyEventArgs e)
{
isNumber =
e.KeyCode >= Keys.D0 && e.KeyCode <= Keys.D9 // keyboard - основная клавиатура
|| e.KeyCode >= Keys.NumPad0 && e.KeyCode <= Keys.NumPad9 // keypad - дополнительная клавиатура
|| e.KeyCode == Keys.Back;
}
private void txtFirst_KeyPress(object sender, System.Windows.Forms.KeyPressEventArgs e)
{
TextBox box = (TextBox)sender;// Явное преобразование типов
switch (e.KeyChar) // Переключатель
{
case '-': // Разрешаем минус, если он первый
if (box.Text.Length == 0)
isNumber = true;
break;
case '.':
// Точка не должна быть первой
if (box.Text.Length == 0)
break;
// Точка не должна следовать сразу за минусом
if (box.Text[0] == '-' && box.Text.Length == 1)
break;
// Точка должна быть одна
if (box.Text.IndexOf('.') == -1)
isNumber = true; // Еще не было точек
break;
}
// Запрещаем в текстовом поле лишние символы
if (!isNumber)
e.Handled = true;
}
static string numA, numB, numC;
static double A, B, C;
private void comboBox2_SelectedIndexChanged(object sender, EventArgs e)
{
}
private void comboBox3_SelectedIndexChanged(object sender, EventArgs e)
{
}
private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
{
}
private void checkBox1_CheckedChanged(object sender, EventArgs e)
{
}
private void checkBox2_CheckedChanged(object sender, EventArgs e)
{
}
private void checkBox3_CheckedChanged(object sender, EventArgs e)
{
}
private void textBox1_TextChanged(object sender, EventArgs e)
{
}
private void textBox2_TextChanged(object sender, EventArgs e)
{
}
private void textBox3_TextChanged(object sender, EventArgs e)
{
}
public void button1_Click(object sender, EventArgs e)
{
// визуализация графика
Graphics gr; // Создаём переменную gr типа Graphics (холст для рисования)
gr = pictureBox1.CreateGraphics(); // Инициализируем созданную переменную
Pen MyPen;
Pen MyPen2; // Создаем карандш MyPen типа Pen
// Создаем карандш MyPen типа Pen
MyPen = new Pen(Color.Red); // Нашему карандашу присваиваем красный цвет
MyPen2 = new Pen(Color.Black);
float B2 = 0, A2 = 0, C2 = 0;
A = Convert.ToDouble(numA); A2 = (float)A;
B = Convert.ToDouble(numB);
B2 = (float)B;
C = Convert.ToDouble(numC); C2 = (float)C;
double y3;
int ninv = 900, np = 0;
float xmin = -10, xmax = 10, ymin = -10, ymax = 10;
float xstep = (xmax - xmin) / ninv;
float ystep = (ymax - ymin) / ninv;
float kx = pictureBox1.Width / (xmax - xmin), ky = kx;
float x = xmin, y = 0, x2, y2;
for (int i = 0; i < ninv; i++)
{
x2 = x + xstep;
y3 = (A2 * x * x + B2 * x + C2) ; y2 = (float)y3;
gr.DrawLine(MyPen, kx * x + 300, pictureBox1.Height / 2 - ky * y, kx * x2 + 300, pictureBox1.Height / 2 - ky * y2);
x = x2;
y = y2;
}
int xx = 0, yy = 0, xx1 = 0, yy1 = 0, kk;
kk = (int)ky;
for (int n = -300; n < 600; n += kk)
{
xx1 = xx + 900;
yy1 = 0;
gr.DrawLine(MyPen2, xx, pictureBox1.Height / 2 - n + 6, xx1, pictureBox1.Height / 2 - n + 6);
}
for (int n = -500; n < 900; n += kk)
{
xx1 = 0;
yy1 = yy + 900;
gr.DrawLine(MyPen2, n + 18, 0, n + 18, pictureBox1.Height);
}
gr.DrawLine(MyPen, 300, pictureBox1.Height - 0, 300, pictureBox1.Height - 500);
gr.DrawLine(MyPen, 0, pictureBox1.Height / 2, 900, pictureBox1.Height / 2);
gr.DrawString("Y", new Font("Arial", 22), new SolidBrush(Color.Green), 300, 10);
gr.DrawString("X", new Font("Arial", 22), new SolidBrush(Color.Green), 650, 125);
for (int n = -1000; n < 1000; n += kk)
{
x = xmin++ - 28;
x2 = x++;
np = n;
gr.DrawString(" " + Math.Round(x2, 1).ToString(), new Font("Arial", 10), new SolidBrush(Color.Green), np, pictureBox1.Height / 2 + 5);
x = x2++;
}
for (int n = -1000; n < 1000; n += kk)
{
x = ymin++ - 19;
x2 = x++;
np = n;
gr.DrawString(" " + Math.Round(x2, 1).ToString(), new Font("Arial", 10), new SolidBrush(Color.Green), 292, pictureBox1.Height / 2 - np - 10);
x = x2++;
}
}
private void kk_01_Load(object sender, EventArgs e)
{
}
private void textA_TextChanged(object sender, EventArgs e)
{
numA = this.textA.Text;
}
private void textB_TextChanged(object sender, EventArgs e)
{
numB = this.textB.Text;
}
private void textC_TextChanged(object sender, EventArgs e)
{
numC = this.textC.Text;
}
private void pictureBox1_Click(object sender, EventArgs e)
{
}
private void button2_Click(object sender, EventArgs e)
{
Graphics gr; // Создаём переменную gr типа Graphics (холст для рисования)
gr = pictureBox1.CreateGraphics(); // Инициализируем созданную переменную
Pen MyPen;
Pen MyPen2; // Создаем карандш MyPen типа Pen
// Создаем карандш MyPen типа Pen
MyPen = new Pen(Color.Red); // Нашему карандашу присваиваем красный цвет
MyPen2 = new Pen(Color.Black);
float B2 = 0, A2 = 0, C2 = 0;
A = Convert.ToDouble(numA); A2 = (float)A;
B = Convert.ToDouble(numB);
B2 = (float)B;
C = Convert.ToDouble(numC); C2 = (float)C;
double y3;
int ninv = 900, np = 0;
float xmin = -10, xmax = 10, ymin = -10, ymax = 10;
float xstep = (xmax - xmin) / ninv;
float ystep = (ymax - ymin) / ninv;
float kx = pictureBox1.Width / (xmax - xmin), ky = kx;
float x = xmin, y = 0, x2, y2;
for (int i = 0; i < ninv; i++)
{
x2 = x + xstep;
y3 = A * Math.Sin(B2 * x + C2); y2 = (float)y3;
gr.DrawLine(MyPen, kx * x + 300, pictureBox1.Height / 2 - ky * y, kx * x2 + 300, pictureBox1.Height / 2 - ky * y2);
x = x2;
y = y2;
}
int xx = 0, xx1 = 0, kk;
kk = (int)ky;
for (int n = -300; n < 600; n += kk)
{
xx1 = xx + 900;
gr.DrawLine(MyPen2, xx, pictureBox1.Height / 2 - n + 6, xx1, pictureBox1.Height / 2 - n + 6);
}
for (int n = -500; n < 900; n += kk)
{
gr.DrawLine(MyPen2, n + 18, 0, n + 18, pictureBox1.Height);
}
gr.DrawLine(MyPen, 300, pictureBox1.Height - 0, 300, pictureBox1.Height - 500);
gr.DrawLine(MyPen, 0, pictureBox1.Height / 2, 900, pictureBox1.Height / 2);
gr.DrawString("Y", new Font("Arial", 22), new SolidBrush(Color.Green), 300, 10);
gr.DrawString("X", new Font("Arial", 22), new SolidBrush(Color.Green), 650, 125);
for (int n = -1000; n < 1000; n += kk)
{
x = xmin++ - 28;
x2 = x++;
np = n;
gr.DrawString(" " + Math.Round(x2, 1).ToString(), new Font("Arial", 10), new SolidBrush(Color.Green), np, pictureBox1.Height / 2 + 5);
x = x2++;
}
for (int n = -1000; n < 1000; n += kk)
{
x = ymin++ - 19;
x2 = x++;
np = n;
gr.DrawString(" " + Math.Round(x2, 1).ToString(), new Font("Arial", 10), new SolidBrush(Color.Green), 292, pictureBox1.Height / 2 - np - 10);
x = x2++;
}
}
private void button4_Click(object sender, EventArgs e)
{
Graphics gr; // Создаём переменную gr типа Graphics (холст для рисования)
gr = pictureBox1.CreateGraphics();
gr.Clear(SystemColors.Window);
}
private void button3_Click_1(object sender, EventArgs e)
{
Graphics gr; // Создаём переменную gr типа Graphics (холст для рисования)
gr = pictureBox1.CreateGraphics(); // Инициализируем созданную переменную
Pen MyPen;
Pen MyPen2; // Создаем карандш MyPen типа Pen
// Создаем карандш MyPen типа Pen
MyPen = new Pen(Color.Red); // Нашему карандашу присваиваем красный цвет
MyPen2 = new Pen(Color.Black);
float B2 = 0, A2 = 0, C2 = 0;
A = Convert.ToDouble(numA); A2 = (float)A;
B = Convert.ToDouble(numB);
B2 = (float)B;
C = Convert.ToDouble(numC); C2 = (float)C;
double y3;
int ninv = 600, np = 0;
float xmin = -10, xmax = 10, ymin = -10, ymax = 10;
float xstep = (xmax - xmin) / ninv;
float ystep = (ymax - ymin) / ninv;
float kx = pictureBox1.Width / (xmax - xmin), ky = kx;
float x = xmin, y = 0, x2=0, y2=0;
for (int i = 0; i < ninv; i++)
{
x2 = x + xstep;
if ((B * x + C) > 0)
{
y3 = A * Math.Log(B * x + C);
y2 = (float)y3;
gr.DrawLine(MyPen, kx * x + 300, pictureBox1.Height / 2 - ky * y, kx * x2 + 300, pictureBox1.Height / 2 - ky * y2);
} x = x2;
y = y2;
}
int xx = 0, yy = 0, xx1 = 0, yy1 = 0, kk;
kk = (int)ky;
for (int n = -300; n < 600; n += kk)
{
xx1 = xx + 900;
yy1 = 0;
gr.DrawLine(MyPen2, xx, pictureBox1.Height / 2 - n + 6, xx1, pictureBox1.Height / 2 - n + 6);
}
for (int n = -500; n < 900; n += kk)
{
xx1 = 0;
yy1 = yy + 900;
gr.DrawLine(MyPen2, n + 18, 0, n + 18, pictureBox1.Height);
}
gr.DrawLine(MyPen, 300, pictureBox1.Height - 0, 300, pictureBox1.Height - 500);
gr.DrawLine(MyPen, 0, pictureBox1.Height / 2, 900, pictureBox1.Height / 2);
gr.DrawString("Y", new Font("Arial", 22), new SolidBrush(Color.Green), 300, 10);
gr.DrawString("X", new Font("Arial", 22), new SolidBrush(Color.Green), 650, 125);
for (int n = -1000; n < 1000; n += kk)
{
x = xmin++ - 28;
x2 = x++;
np = n;
gr.DrawString(" " + Math.Round(x2, 1).ToString(), new Font("Arial", 10), new SolidBrush(Color.Green), np, pictureBox1.Height / 2 + 5);
x = x2++;
}
for (int n = -1000; n < 1000; n += kk)
{
x = ymin++ - 19;
x2 = x++;
np = n;
gr.DrawString(" " + Math.Round(x2, 1).ToString(), new Font("Arial", 10), new SolidBrush(Color.Green), 292, pictureBox1.Height / 2 - np - 10);
x = x2++;
}
}
}
}
Описание интерфейса
Внизу слева находятся поля для ввода значений переменных. Внизу справа находятся кнопки для рисования функций по заданным коэффициентам. Вверху слева находится кнопка которая очистит поле рисования. По центру располагается само поле для рисования (Рисунок 1).
Рисунок 1 Интерфейс программы
Результат выполнения программы
Вводим значения коэффициентов А, В, С и строим одну из предложенных функций (Рисунок 2-9).
Рисунок 2
Рисунок 3
Рисунок 4
Рисунок 5
Рисунок 6
Рисунок 7
Рисунок 8
Рисунок 9
Вывод
В результате проделанной работы я написал программу в Microsoft Visual Studio 2010 на языке программирования С#, которая строит на экране графики по заданным коэффициентам.
Список источников.
magister-stylus [Электронный ресурс]: Простая программа для рисования графика функций URL: http://magister-stylus.narod.ru/CS_Func.html (дата обращения: 10.12.2012).
olocoder.ru [Электронный ресурс]: Рисование кистью в PictureBox MVS C++/C# URL: http://olocoder.ru/VS18.html (дата обращения: 10.12.2012).
