Текст клиентского кода (программы)




ЗАДАНИЕ 4

Вычисление определенного интеграла

 

Цель задания

1. Получение навыков в написании процедур, имеющих параметры-функции.

2. Знакомство с алгоритмами численных методов интегрирования.

 

Постановка задачи

Вычислить определенный интеграл с переменным верхним пределом от функций в диапазоне с шагом . Построить графики функций и определенных интегралов

в указанном диапазоне изменения .

 

Варианты задания

В каждом варианте n задания берутся функции

с номерами n; n+1; n+2 (h=0,01 во всех вариантах)

№ функции Функции
  -1,5 2,5
  -2 3,5
  -5  
  -6,5  
  0,2  
  -2 4,5
  -4 9,8
  0,6  
  -7  
  -1  
  -2  
  -8  
  -2 3,5
  -4  
  -1 1,8
  -5  
  -0,7 7,9
  -10 2,3

Содержание отчета

1. Постановка задачи для конкретного варианта.

2. Текст клиентского кода программы.

3. Результаты работы программы.

 

Методические указания

1. Вычисление определенного интеграла оформить процедурой с параметром-функцией, а вычисление значений подынтегральных функций – функциями, имеющими сигнатуру делегата.

2. Windows-форма (конструктор) создается по рис. 1. Управляющие кнопки: Вычисление (button1); Построение (button2); Выход (button3). Элементы на панели1: a= (label1); b= (label2); h= (label3); textBox1; textBox2; textBox3. Элементы на панели2 (сверху вниз): radioButton1; radioButton2; radioButton3 (выбор функции и значения устанавливаются при отладке).

3. Создание клиентского кода.

· Дополнить раздел using System: using System.Drawing.Drawing2D;

· Вставить в код описания:

// Описание делегата

public delegate Double y(Double x1);

Double a, b, h;

double[] X, Y, Iny;

int i, n;

Bitmap myBmp, myBmp2;

double Mx, My, My1, MaxY1, MaxY, MaxX;

· Щелкнуть дважды на кнопке “Вычисление” конструктора, на место курсора вставить в код соответствующий обработчик события.

 

Рис. 1.

· Щелкнуть дважды на кнопке “Построение” конструктора, на место курсора вставить блок построения графика функции и определенного интеграла от нее с переменным верхним пределом.

· Щелкнить дважды на кнопке “Выход” конструктора, вставить в код команду Close();.

· Вставить из примера остальную часть кода.

 

Пример оформления отчета

 

ЗАДАНИЕ 4

Вычисление определенного интеграла

Вариант 20

Выполнил студент гр. СТ-12

Смирнов В.Н.

Постановка задачи

Вычислить определенный интеграл с переменным верхним пределом от функций в диапазоне с шагом . Построить графики функций и определенных интегралов

в указанном диапазоне изменения .

 

Текст клиентского кода (программы)

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing.Drawing2D;

using System.Linq;

using System.Text;

using System.Windows.Forms;

using System.Drawing;

 

namespace Интегралы

{

public partial class Form1: Form

{

// Описание делегата

public delegate Double y(Double x1);

Double a, b, h;

double[] X, Y, Iny;

int i, n;

Bitmap myBmp, myBmp2;

double Mx, My, My1, MaxY1, MaxY, MaxX;

 

public Form1()

{

InitializeComponent();

}

 

private void button1_Click(object sender, EventArgs e)

{

dataGridView1.Rows.Clear();

a = Convert.ToDouble(textBox1.Text);

b = Convert.ToDouble(textBox2.Text);

h = Convert.ToDouble(textBox3.Text);

 

// Создание экземпляра делегата

y fx;

fx = null;

int s = 0;

if (this.radioButton1.Checked) s = 1;

if (this.radioButton2.Checked) s = 2;

if (this.radioButton3.Checked) s = 3;

switch (s)

{

// Использование делегата

case 1: fx = new y(f1); break;

case 2: fx = new y(f2); break;

case 3: fx = new y(f3); break;

default:

String Str = "Выберите функцию";

//Вывод сообщения

MessageBox.Show(Str, "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Warning);

return;

}

 

//Вызов процедуры вычисления интеграла

Integral(a, b, h, fx);

 

}

 

private void button2_Click(object sender, EventArgs e)

{

// Построение графика

int[] yint, y1int, xint;

if (X == null || Y == null || Iny == null) return;

MaxY = 0;

MaxX = 0;

MaxY1 = 0;

myBmp = new Bitmap(pictureBox1.Width, pictureBox1.Height);

Graphics gr1 = Graphics.FromImage(myBmp);

Pen P1 = new Pen(Color.Red, 2);

gr1.DrawRectangle(P1, 1, 1, pictureBox1.Width - 2, pictureBox1.Height - 2);

for (int i = 0; i < n + 1; i++)

{

if (System.Math.Abs(Y[i]) > MaxY)

{

MaxY = System.Math.Abs(Y[i]);

}

if (System.Math.Abs(X[i]) > MaxX)

{

MaxX = System.Math.Abs(X[i]);

}

if (System.Math.Abs(Iny[i]) > MaxY1)

{

MaxY1 = System.Math.Abs(Iny[i]);

}

}

My = (pictureBox1.Height) / 2.2 / MaxY;

My1 = (pictureBox1.Height) / 2.8 / MaxY1;

Mx = (pictureBox1.Width) / 2.2 / MaxX;

yint = new int[n + 1];

y1int = new int[n + 1];

xint = new int[n + 1];

for (int i = 0; i < n + 1; i++)

{

yint[i] = (pictureBox1.Height) / 2 - Convert.ToInt32(Y[i] * My);

y1int[i] = (pictureBox1.Height) / 2 - Convert.ToInt32(Iny[i] * My1);

xint[i] = pictureBox1.Width / 2 + Convert.ToInt32(X[i] * Mx);

}

Pen P2 = new Pen(Color.Green, 6);

for (int i = 0; i < n; i++)

{

gr1.DrawLine(P2, xint[i], yint[i], xint[i + 1], yint[i + 1]);

}

Pen P3 = new Pen(Color.Brown, 6);

for (int i = 0; i < n; i++)

{

gr1.DrawLine(P3, xint[i], y1int[i], xint[i + 1], y1int[i + 1]);

}

Pen P4 = new Pen(Color.Black, 3);

//Стиль линии с наконечниками

P4.SetLineCap(LineCap.Flat, LineCap.ArrowAnchor, DashCap.Flat);

//Кисть для шрифта на рисунке

Brush B2 = new SolidBrush(Color.Black);

System.Drawing.Font E = new Font("time new roman", 14);

// Вывод надписей на рисунке

gr1.DrawString("y интеграл от y", E, B2, pictureBox1.Width / 2 - 20, 0);

gr1.DrawString("x", E, B2, pictureBox1.Width - 20, pictureBox1.Height / 2);

gr1.DrawLine(P4, 10, (pictureBox1.Height) / 2, pictureBox1.Width - 10, (pictureBox1.Height) / 2);

gr1.DrawLine(P4, pictureBox1.Width / 2, (pictureBox1.Height) - 10, pictureBox1.Width / 2, 10);

pictureBox1.Image = myBmp;

legenda();

 

}

 

private void button3_Click(object sender, EventArgs e)

{

Close();

 

}

 

void legenda()

{

// Вывод легенды

myBmp2 = new Bitmap(pictureBox2.Width, pictureBox2.Height);

Graphics gr1 = Graphics.FromImage(myBmp2);

Pen P1 = new Pen(Color.Green, 6);

gr1.DrawLine(P1, pictureBox2.Width / 2, 20, pictureBox2.Width - 10, 20);

Pen P2 = new Pen(Color.Brown, 6);

gr1.DrawLine(P2, pictureBox2.Width / 2, 50, pictureBox2.Width - 10, 50);

Brush B2 = new SolidBrush(Color.Black);

System.Drawing.Font E = new Font("time new roman", 14);

gr1.DrawString("Функция y(x)", E, B2, 7, 7);

gr1.DrawString("Интеграл от y(x)", E, B2, 7, 37);

pictureBox2.Image = myBmp2;

}

 

// Процедура вычисления интеграла с переменным

// верхним пределом методом трапеций

void Integral(double a, double b, double h, y f)

{

n = Convert.ToInt32(Math.Abs((b - a) / h));

Y = new double[n + 1];

X = new double[n + 1];

Iny = new double[n + 1];

X[0] = a;

Y[0] = f(X[0]);

Iny[0] = 0;

for (i = 1; i < n + 1; i++)

{

dataGridView1.Rows.Add();

X[i] = a + i * h;

Y[i] = f(X[i]);

Iny[i] = Iny[i - 1] + (Y[i] + Y[i - 1]) / 2 * h;

}

 

for (i = 0; i < n + 1; i++)

{

// Заполнение таблицы

dataGridView1.Rows[i].Cells[0].Value = i;

dataGridView1.Rows[i].Cells[1].Value = X[i];

dataGridView1.Rows[i].Cells[2].Value = Y[i];

dataGridView1.Rows[i].Cells[3].Value = Iny[i];

}

}

 

// Функции, соответствующие делегату y(x)

double f1(Double x)

{

return Math.Sin(x) + 2 * x;

}

double f2(Double x)

{

return Math.Cos(2 * x) - x;

}

double f3(Double x)

{

return x * x - x * x * x;

}

}

}



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2021-03-25 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: