17.05.2019, 09:46. Показов 645. Ответов 0
Всем привет, помогите пожалуйста найти ошибку. Где и что я мог пропустить? с С# и Windows Forms столкнулся впервые...
Компилятор ругается на
InputClass.cs:
26 строка:
Ошибка CS1061 "object" не содержит определения "LeftOrder", и не удалось найти доступный метод расширения "LeftOrder", принимающий тип "object" в качестве первого аргумента (возможно, пропущена директива using или ссылка на сборку).
46 строка:
Ошибка CS1061 "object" не содержит определения "RightOrder", и не удалось найти доступный метод расширения "RightOrder", принимающий тип "object" в качестве первого аргумента (возможно, пропущена директива using или ссылка на сборку).
OutputClass.cs:
50, 52, 53 строки:
Ошибка CS1061 "object" не содержит определения "zedGraph", и не удалось найти доступный метод расширения "zedGraph", принимающий тип "object" в качестве первого аргумента (возможно, пропущена директива using или ссылка на сборку).
65, 66, 66, 87, 88, 88 строки:
Ошибка CS1061 "object" не содержит определения "iterList", и не удалось найти доступный метод расширения "iterList", принимающий тип "object" в качестве первого аргумента (возможно, пропущена директива using или ссылка на сборку).
Задание:
Кликните здесь для просмотра всего текста
Написать программу по нахождению корня уравнения на заданном пользователем промежутке . Вывести график функции и точки приближения, количество итераций, значение корня. Корень уравнения находить с помощью метода Ньютона.
Код:
Program.cs
Кликните здесь для просмотра всего текста
| C# |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
| using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace MathApp
{
static class Program
{
public static object MainWindow
{
get; internal set;
}
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new MainWindow());
}
}
} |
|
MainWindow.cs
Кликните здесь для просмотра всего текста
| C# |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
| using System;
using System.Windows.Forms;
namespace MathApp
{
public partial class MainWindow : Form
{
public MainWindow()
{
InitializeComponent();
}
private void Button_Click(object sender, EventArgs e)
{
iterList.Items.Clear();
zedGraph.GraphPane.CurveList.Clear();
ProcessClass.processDataAndDraw();
}
private void OnWindowLoad(object sender, EventArgs e)
{
zedGraph.GraphPane.XAxis.Title.Text = "Ось X";
zedGraph.GraphPane.YAxis.Title.Text = "Ось Y";
zedGraph.GraphPane.Title.Text = "График функции f(x) = 2x^3-11x^2-7x + 41";
}
}
} |
|
ProcessClass.cs
Кликните здесь для просмотра всего текста
| C# |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
| /*
==========
Модуль обработки данных ProcessClass.cs;
В данном модуле описаны методы для обработки информации в программе
==========
*/
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace MathApp
{
static class ProcessClass
{
/*
Функция funcDouble вычисляет значение заданной функции f(x) = 2x^3-11x^2-7x+41 и возвращает это значение;
Параметры функции:
XCoor_Double - координата по оси X.
*/
public static double funcDouble(double XCoor_Double)
{
return (2 * XCoor_Double * XCoor_Double * XCoor_Double - 11 * XCoor_Double * XCoor_Double - 7 * XCoor_Double + 41);
}
/*
Функция funcDiffDouble вычисляет значение производной функции f(x) = 2x^3-11x^2-7x+41 и возвращает это значение;
Используется функция f'(x) = 6x^2-22x-7 как производная для f(x) = 2x^3-11x^2-7x+41.
Параметры функции:
XCoor_Double - координата по оси X.
*/
public static double funcDiffDouble(double XCoor_Double)
{
return (6 * XCoor_Double * XCoor_Double - 22 * XCoor_Double - 7);
}
/*
Процедура processDataAndDraw выполняет вычисление корня функции методом Ньютона
*/
public static void processDataAndDraw()
{
/* Объявляем переменные:
- Eps_Double - точность которую нужно достигнуть при вычислении;
- XPrev_Double - координата по оси Х на предыдущей итерации
метода;
- XCurrent_Double - координата по оси Х на текущей итерации
метода.
*/
const double Eps_Double = 0.01;
// Берем середину отрезка
double XPrev_Double, XCurrent_Double = (InputClass.getRightOrder() - InputClass.GetLeftOrder()) / 2.0;
int IterationCount_Int = 0;
// Выполняем поиск корня методом Ньютона в цикле пока не достигнем точности Eps_Double
do
{
XPrev_Double = XCurrent_Double;
XCurrent_Double = XPrev_Double - funcDouble(XPrev_Double) / funcDiffDouble(XPrev_Double);
OutputClass.AddIterationToList(IterationCount_Int, XCurrent_Double);
// Подсчитываем количество совершенных итераций
IterationCount_Int++;
}
while (Math.Abs(XCurrent_Double - XPrev_Double) > Eps_Double);
// Выводим найденный корень и количество итераций
OutputClass.AddLogMessage("==============================");
OutputClass.AddLogMessage("Корень функции: " + XCurrent_Double);
OutputClass.AddLogMessage("Количество итераций: " + IterationCount_Int);
OutputClass.AddLogMessage("==============================");
// Рисуем график функции на заданном отрезке
OutputClass.DrawGraph(InputClass.GetLeftOrder(), InputClass.getRightOrder());
}
}
} |
|
InputClass.cs
Кликните здесь для просмотра всего текста
| C# |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
| /*
==========
Модуль ввода данных InputClass.cs;
В данном модуле описаны методы для ввода данных от пользователя
==========
*/
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace MathApp
{
static class InputClass
{
//Функция getLeftOrder берет число которое ввел пользователь в первой текстовой строке и возвращает его;
public static double GetLeftOrder()
{
// Пробуем считать из текстового поля строку как переменную типа Double
double LeftOrder_Double;
try
{
LeftOrder_Double = Convert.ToDouble(Program.MainWindow.LeftOrder.Text);
}
// В случае неудачи выдаем сообщение пользователю на экран и принимаем значение левой границы по умолчанию равное -5
catch
{
OutputClass.ShowMessage("Неверно введена левая граница");
LeftOrder_Double = -5.0;
}
return LeftOrder_Double;
}
//Функция getRightOrder берет число которое ввел пользователь во второй текстовой строке и возвращает его;
public static double getRightOrder()
{
// Пробуем считать из текстового поля строку как переменную типа Double
double RightOrder_Double;
try
{
RightOrder_Double = System.Convert.ToDouble(Program.MainWindow.RightOrder.Text);
}
// В случае неудачи выдаем сообщение пользователю на экран и принимаем значение правой границы по умолчанию равное 5
catch
{
OutputClass.ShowMessage("Неверно введена правая граница");
RightOrder_Double = 5.0;
}
return RightOrder_Double;
}
}
} |
|
OutputClass.cs
Кликните здесь для просмотра всего текста
| C# |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
| /*
==========
Модуль вывода данных OutputClass.cs;
В данном модуле описаны методы для вывода данных программы на экран
==========
Подключение стандартных библиотек языка C#:
System - глобальный модуль, в котором содержатся описания всех объектов языка;
System.Windows.Forms - модуль для работы с окнами;
System.Drawing - модуль поддержки графики и рисования;
*/
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Drawing;
/*
Подключение нестандартной библиотеки ZedGraph - для рисования графика.
ZedGraph это библиотека классов пользовательского интерфейса для C# для
рисования 2D линий, графов, гистрограмм и.т.д.
Распространяется свободно по лицензии GNU GPL.
*/
using ZedGraph;
namespace MathApp
{
static class OutputClass
{
/*
Процедура drawGraph осуществляет рисование графика функции f(x) = 2x^3-11x^2-7x+41 на заданном промежутке.
Параметры процедуры:
- XCoorBegin_Double - левая координата по оси Х, с которой начинать рисовать график функции;
- XCoorEnd_Double - правая координата по оси Х, до которой рисовать график функции;
В процедуре используется библиотека ZedGraph, а именно:
- Процедура AddCurve(string label, PointPairList list, Color color, SymbolType symbolType) - добавляет кривую на полотно;
- Процедура AxisChange() - обновляет данные полотна ZedGraph в буффере рисования;
- Процедура Invalidate() - применяет буффер рисования на экран;
*/
public static void DrawGraph(double XCoorBegin_Double, double XCoorEnd_Double)
{
// Создаем массив pointList_PointPairList для хранения точек графика функции;
// Затем в цикле от левой до правой границы с шагом в 0,01 по оси Х заполним массив значениями функции f(x).
PointPairList pointList_PointPairList = new PointPairList();
for (double x = XCoorBegin_Double; x <= XCoorEnd_Double; x += 0.01)
pointList_PointPairList.Add(x, ProcessClass.funcDouble(x));
// Добавляем кривую с пустым названием, с заданными точками зеленым цветом в буффер полотна.
Program.MainWindow.zedGraph.GraphPane.AddCurve("", pointList_PointPairList, Color.Green, SymbolType.None);
// Обновим буффер и применим изменения на экран
Program.MainWindow.zedGraph.AxisChange();
Program.MainWindow.zedGraph.Invalidate();
}
/*
Процедура addIterationToList добавляет в список в окне очередное значение итерации.
Параметры процедуры:
IterationValueX_Double - значение по оси Х на итерации;
IterationIndex_Int - порядковый номер итерации.
*/
public static void AddIterationToList(int IterationIndex_Int, double IterationValueX_Double)
{
// Добавляем итерацию в список и сдвинем ползунок вниз (в случае переполнения списка)
Program.MainWindow.iterList.Items.Add((IterationIndex_Int + 1) + ")"+IterationValueX_Double);
Program.MainWindow.iterList.TopIndex = Program.MainWindow.iterList.Items.Count - 1;
}
/*
Процедура showMessage выводит сообщение на экран. Вызывается
стандартная процедура модуля System.Windows.Forms.MessageBox.Show,
создающая диалоговое окно
Параметры: Message_String - строка сообщения.
*/
public static void ShowMessage(string Message_String)
{
MessageBox.Show(Message_String);
}
/*
Процедура addLogMessage выполняет добавление сообщения в лог.
Параметры: Message_String - строка сообщение.
*/
public static void AddLogMessage(string Message_String)
{
// Добавляем сообщение в список и сдвинем ползунок вниз (в случае переполнения списка)
Program.MainWindow.iterList.Items.Add(Message_String);
Program.MainWindow.iterList.TopIndex = Program.MainWindow.iterList.Items.Count - 1;
}
}
} |
|