Программирование на языке высокого уровня
446.91K
Категория: ПрограммированиеПрограммирование

Методы класса как подпрограммы. Решение нелинейных уравнений

1. Программирование на языке высокого уровня

Богатов Р.Н.
Программирование
на языке высокого уровня
Лекция 7.
Методы класса как подпрограммы.
Решение нелинейных уравнений
Кафедра АСОИУ ОмГТУ, 2012

2.

Подпрограмма. Процедура. Функция. Метод
// пример вызова процедуры на языке Assebmler
mov
ax, 0
Машинный язык:
mov
dx, 123
Подпрограмма
принимает
call
my_proc и возвращает значения через
глобальные переменные, регистры или стэк.
// пример вызова процедур и функций на языке Pascal
writeln;
y := sin(x);
Pascal:
Процедура = //
подпрограмма
пример вызова функций на языке Си
getch();
Функция = подпрограмма,
возвращающая значение
c = getch();
y = sin(x);
C:
// пример вызова методов на языке C#
textBox1.Hide();
Функция может
возвращать или не возвращать значение
x = r.NextDouble();
(процедур нет)
y = Math.Sin(x);
C#, Java и другие:
Данные и код инкапсулированы в классы. Инкапсулированные
подпрограммы называются методами.

3.

Подпрограмма. Процедура. Функция. Метод
public partial class Form1 : Form
{
int N;
int[] a;
// пример вызова процедуры на языке Assebmler
mov
ax, 0
private
void
button1_Click(object
sender, EventArgs e)
public
partial
class Form1 : Form
Машинный
язык:
mov
dx, 123
{
{
Подпрограмма
принимает
значения
через
call
my_proc и возвращает
N = (int)numericUpDown1.Value;
private void
button1_Click(object
sender, EventArgs
e)
a = {new int[N];
глобальные
переменные, регистры
или стэк.
private
void button1_Click(object
sender, EventArgs
e)
int N = (int)numericUpDown1.Value;
// пример вызова процедур и функций на языке Pascal
{
massiv_sluchaino(0,
100);
Massiv
a = new
Massiv(N);
writeln;
...
massiv_v_textbox();
Massiv
b;
label1.Texty =:=
"Максимум
sin(x);= " + massiv_max();
massiv_sort();
label2.Text = "Сумма без крайних эл-в = " + massiv_part_sum(1, N-2);
massiv_v_textbox();
a.sluchaino(0, 100);
}
// пример вызова функций на языке Си
massiv_perevorot();
a.vyvod(textBox1.Text);
massiv_v_textbox();
getch();
a.sort();
int massiv_max()
}
a.vyvod(textBox1.Text);
c = getch();
{
b
=
a;
y = sin(x);
int max = int.MinValue;
void massiv_v_textbox()
a.perevorot();
for (int i = 0; i < N; i++)
{
...(a[i] > max) max = a[i];
if
// iпример
вызова= методов
на языке C#
for (intlabel1.Text
i = 0;
< =N;"Максимум
i++)
" + a.maximum();
return max;
textBox1.Hide();
textBox1.Text
+== String.Format("a[{0}]
= {1}\r\n",
i + 1, a[i]);
label2.Text
"Сумма без крайних эл-в
= " + a.part_sum(1,
N-2);
}
textBox1.Text
x+=="\r\n";
r.NextDouble();
}
}
} massiv_part_sum(int
y = Math.Sin(x);
int
i, int j)
Pascal:
Процедура = подпрограмма
Функция = подпрограмма, возвращающая значение
C:
Функция может возвращать или не возвращать значение
(процедур нет)
{
void massiv_sluchaino(int min, int max)
int sum = 0;
{
for (int k = i; k <= j; k++)
...
sum += a[k];
}
return sum;
}
C#, Java и другие:
Данные и код инкапсулированы в классы. Инкапсулированные
подпрограммы называются методами.

4.

Решение нелинейного уравнения
public
partial class Form1 : Form
void metod_del_popolam()
{{
double
x1, x2, =eps;
textBox1.Text
"";
int
N; a = x1, b = x2, c = 0, fc = 0;
double
double fa = y(a);
private
void
button1_Click(object sender, EventArgs e)
double fb
= y(b);
{// проверка на наличие корней (fa*fb>=0)
x1 = Convert.ToDouble(textBox4.Text); // начало отрезка изоляции
Convert.ToDouble(textBox5.Text); // конец отрезка изоляции
int x2
i == 1;
// точность
for eps
(; i= <Convert.ToDouble(textBox6.Text);
N; i++)
N
=
Convert.ToInt32(textBox7.Text);
//
предельное число итераций
{
}
}}
c = (a + b) / 2;
metod_del_popolam();
fc = y(c);
//metod_iteraziy();
// ...вывод протокола итерации (если нужно)
//metod_Newtona();
if (b - c < eps) break;
if (fa * fc < 0)
{
double y(double
x) = fc;
b =вывод
c; fb
//
протокола итерации
{
}
textBox1.Text
+=
return
- xString.Format(
* x * x;
else Math.Cos(x)
"a = {0:0.###}\t c = {1:0.###}\t b = {2:0.###}\t f(c) = {3:0.###}\r\n",
}
{
a, c, b, fc);
a = c; fa = fc;
void }metod_del_popolam()
{}
// вывод результата
...
textBox1.Text = String.Format(
}// вывод
или= возврат
результата
"x
{0}\r\ny(x)
= {1}\r\ndx = {2}\r\nИтераций = {3}\r\n\r\n",
c, fc, b-c, i) + textBox1.Text;

5.

Решение нелинейного уравнения
double y_x(double x)
{
return Math.Pow(Math.Cos(x), 1/3.0);
}
void
metod_iteraziy()
double
dy(double x)
{{
textBox2.Text
= "";
return - Math.Sin(x)
- 3 * x * x;
} double x = (x1+x2)/2, prev_x = x;
int i = 1;
formetod_Newtona()
(;
i < N; i++)
void
void
metod_hord()
{ {{
x = y_x(prev_x);
textBox3.Text
= ="";
textBox8.Text
"";
//
...вывод
протокола
итерации(если
нужно)
double
x
=
(x1+x2)/2,
prev_x
= x;
double a = x1, b = x2,
c = 0;
ifi (Math.Abs(prev_x
- x) < eps)
int
int
i= =1;1;
break;
for
for(;(;i i< <N;N;i++)
i++)
{ {prev_x = x;
}
x c= =prev_x
- y(prev_x)
a - y(a)
* (a - b)/ /dy(prev_x);
(y(a) - y(b));
// ...вывод
или
возврат
результата
////...вывод
протокола
итерации(если
...вывод протокола итерации(еслинужно)
нужно)
}
ifif(Math.Abs(prev_x
x)
<
eps)
(Math.Abs(c - a) < eps)
break;
break;
prev_x
b = a;= x;
}
a = c;
//} ...вывод или возврат результата
}
// ...вывод или возврат результата
}

6.

Решение нелинейного уравнения

7.

Домашнее задание
Реализовать генератор псевдо-случайных чисел в виде нескольких
методов, аналогичных Random.Next и Random.NextDouble.
English     Русский Правила