С Новым годом! Форум программистов, компьютерный форум, киберфорум
Visual Basic
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.60/15: Рейтинг темы: голосов - 15, средняя оценка - 4.60
0 / 0 / 0
Регистрация: 20.06.2010
Сообщений: 8

Програмка для реализации нечеткой логики

20.06.2010, 18:40. Показов 3115. Ответов 16
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
здравствуйте! не сочтите за нахальство, но горит последний раздел магистерской. у меня тема об использовании нечеткой логики для программирования промышленных контролеров (ADAM-4000). каркас проги есть, рабочая. но не получается представлять данные графически. я хочу, чтоб выводилась хоть какая-то функция в реальном времени (идет регулирование температуры)
как могли понять, что программист из меня никудышний, так что буду рада любым советам

Добавлено через 4 часа 20 минут
худо-бедно прогу написала. теперь остался совсем махонький вопрос - как отображать шкалу на PictureBox О_о
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
20.06.2010, 18:40
Ответы с готовыми решениями:

Библиотека для нечеткой логики
Подскажите библиотеку python для работы с нечёткой логикой.

Программа по теории нечеткой логики
Ребят, у кого нибудь есть что то ПОХОЖЕЕ на эту программку?Буду очень благодарен!

Управления зарядкой батареи с нечеткой логики
class Napryagenie { int TRICKLE_CHARGE; //charge=заряд 0 int FAST_CHARGE; // 1 public int ChargeMode; int...

16
10 / 10 / 0
Регистрация: 22.02.2010
Сообщений: 53
20.06.2010, 19:55
Выложите свои наработки, или распишите поподробней, что именно вам нужно и на каком языке.
Посмотрим - поможем))
Александр shuv_aa@mail.ru ICQ 373-628-456.
1
0 / 0 / 0
Регистрация: 20.06.2010
Сообщений: 8
20.06.2010, 19:56  [ТС]
Александр_ФФ, спасибо! уже слепила из того, что было осталось именно сама шкала. знаю, что можно такое сделать, но как не знаю
0
10 / 10 / 0
Регистрация: 22.02.2010
Сообщений: 53
20.06.2010, 20:04
Рискну предположить (так как кода и ЯП я не видел), что речь про сетку на графике и подписи осей.
Сетка рисуется набором вертикальных и горизонтальных линий (в циклах) с нужным вам шагом.
Подписи координат - надо знать, что за язык, чтобы помочь вам. Для многих подойдёт функция:
function TextOut(DC: HDC; X, Y: Integer; Str: PChar; Count: Integer): Bool;
Вывод строки str в место x,y на рисунке.
0
0 / 0 / 0
Регистрация: 20.06.2010
Сообщений: 8
20.06.2010, 20:06  [ТС]
пишу на Visual Basic сетки не надо, просто подписи осей
0
10 / 10 / 0
Регистрация: 22.02.2010
Сообщений: 53
20.06.2010, 20:11
Наконец-то))
Написать буковку "x" в месте с координатами 300,200 можно так:
Visual Basic
1
2
3
Picture1.currentX = 300
Picture1.currentY = 200
Picture1.print "х"
Добавлено через 1 минуту
Конечно, для PictereBox параметр ScaleMode - в пикселях
0
0 / 0 / 0
Регистрация: 20.06.2010
Сообщений: 8
20.06.2010, 20:12  [ТС]
такое пробовала) а чтоб цыфирки по осях были проставлены?
0
10 / 10 / 0
Регистрация: 22.02.2010
Сообщений: 53
20.06.2010, 20:22
Visual Basic
1
2
3
4
5
6
7
Picture1.AutoRedraw = True
Picture1.ScaleMode = 3
For i = 0 To 500 Step 50
  Picture1.CurrentX = i
  Picture1.CurrentY = 200
  Picture1.Print i * 0.1
Next i
0
 Аватар для Abu
1161 / 288 / 23
Регистрация: 28.09.2008
Сообщений: 553
20.06.2010, 20:33
Ну если нужен график, то можно выводить по значениям с помощью таких операторов как
Picture1.Line(x1,y1)-(x2,y2) - линия
Picture1.PSet(x,y) если не ошибаюсь в параметрах - точка
Picture1.Print "текст" - текст
Только нужно помнить, что в Picture ось Y идёт сверху вниз, а не снизу вверх. Т.е. максимальное значение будет внизу, а не вверху.
Вот корявый пример
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
Private Sub Form_Load()
Picture1.Width = 3675
Picture1.Height = 2835
End Sub
 
Private Sub Command1_Click()
Const n As Integer = 300
Dim arr(10) As Integer
Dim p As Integer
p = n
Randomize
For i = 1 To 10
    arr(i) = Int(Rnd * 1000) + 100
    Picture1.Line (p, arr(i - 1))-(p + n, arr(i))
    Picture1.PSet (p, arr(i - 1))
    Picture1.Circle (p, arr(i - 1)), 20, vbRed
    Picture1.Print arr(i - 1)
    p = p + n
Next i
Picture1.PSet (p, arr(i - 1))
Picture1.Circle (p, arr(i - 1)), 20, vbRed
Picture1.Print arr(i - 1)
End Sub
Добавлено через 1 минуту
Блин, не успела...
1
10 / 10 / 0
Регистрация: 22.02.2010
Сообщений: 53
20.06.2010, 20:37
Цитата Сообщение от Abu Посмотреть сообщение
Блин, не успела...
Ничего страшного)))

Но так текст выводится на том месте, где был нарисован последний элемент
Visual Basic
1
2
    Picture1.Circle (p, arr(i - 1)), 20, vbRed
    Picture1.Print arr(i - 1)
а это не всегда удобно. Если требуется просто вывести надпись в любом месте- то через Current
0
0 / 0 / 0
Регистрация: 20.06.2010
Сообщений: 8
20.06.2010, 20:39  [ТС]
Александр_ФФ, спасибки за помощь. но по этому коду получается, что оси подписаны, а самого графика уже не видно) ой, чувствую спасать опять будет старый добрый пейнт

Добавлено через 1 минуту

вот так выглядит мой графффффик
0
10 / 10 / 0
Регистрация: 22.02.2010
Сообщений: 53
20.06.2010, 20:49
Значит у вас scalemode не пиксель было...
Выложите код весь, там понятней будет
если стесняетесь, можете на почту shuv_aa@mail.ru
1
0 / 0 / 0
Регистрация: 20.06.2010
Сообщений: 8
20.06.2010, 20:51  [ТС]
да чего стесняться - незнания разве только
Visual Basic
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
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
Private Sub Command1_Click()
Dim Instring As String
MSComm1.CommPort = 1
MSComm1.Settings = "9600,N,8,1"
MSComm1.InputLen = 0
MSComm1.PortOpen = True
 
 
End Sub
 
Private Sub Command2_Click()
MSComm1.Output = "#021301" & Chr$(13)
Do
  Tzad = Text2.Text
  Tzad = strtoint(Tzad)
  DoEvents
  MSComm1.Output = "#01" & Chr$(13)
  Buffer$ = Buffer$ & MSComm1.Input
  t = (Buffer$ + 0.25) / 0.0569
  Text1.Text = t
Loop Until InStr(Buffer$, vbCr)
 
End Sub
 
Private Sub Command3_Click()
MSComm1.PortOpen = False
 
End Sub
 
Private Sub Command4_Click()
 
Open "data.dat" For Append As #1
Do
  Tzad = Text2.Text
  Tzad = strtoint(Tzad)
  DoEvents
  MSComm1.Output = "#01" & Chr$(13)
  Buffer$ = Buffer$ & MSComm1.Input
  t = (Buffer$ + 0.25) / 0.0569
  Text1.Text = t
  
  If t >= 13 And t <= 20 Then
   Begin
    terma = "õîëîäíà1"
    Text3.Text = terma
    MSComm1.Output = "#021301" & Chr$(13)
   End
   
  If t > 20 And t <= 33 Then
   Begin
    terma = "õîëîäíà2"
    Text3.Text = terma
    MSComm1.Output = "#021302" & Chr$(13)
   End
   
  If t > 33 And t <= 46 Then
   Begin
    terma = "òåïëà1"
    Text3.Text = terma
    MSComm1.Output = "#021303" & Chr$(13)
   End
  
  If t > 46 And t <= 59 Then
   Begin
     terma = "òåïëà2"
     Text3.Text = terma
     MSComm1.Output = "#021304" & Chr$(13)
   End
   
 
  If t > 59 And t <= 73 Then
   Begin
     terma = "ãàðÿ÷à1"
     Text3.Text = terma
     MSComm1.Output = "#021305" & Chr$(13)
   End
  
  If t > 73 And t <= 79 Then
  Begin
     terma = "ãàðÿ÷à2"
     Text3.Text = terma
     MSComm1.Output = "#021306" & Chr$(13)
   End
t1 = Time
Print #1, t; " "; t1 '
Loop Until InStr(Buffer$, vbCr)
Close #1
End Sub
 
Private Sub Command5_Click()
MSComm1.Output = "#021300" & Chr$(13)
End Sub
 
End Sub
 
Private Sub Command6_Click()
X = t
Dim sigma As Single, c As Single, i As Single
sigma = 6: c = 0
Picture1.Scale (-1, 1)-(10, -0.1)
Picture1.Line (0, 0)-(20, 0)
Picture1.Line (0, 2)-(0, 0)
Picture1.CurrentX = 10
Picture1.CurrentY = 10
'Picture1.AutoRedraw = True
'Picture1.ScaleMode = 2
'For i = 0 To 500 Step 50
 ' Picture1.CurrentX = i
  'Picture1.CurrentY = 200
  'Picture1.Print i * 0.1
'Next i
 
'Picture1.Print ""
For X = 0 To 100 Step 0.01
   Picture1.PSet (X, Exp(-(X - c) ^ 2 / sigma ^ 2)), vbRed
Next
End Sub
0
10 / 10 / 0
Регистрация: 22.02.2010
Сообщений: 53
20.06.2010, 21:10
t = (Buffer$ + 0.25) / 0.0569
Вот так нехорошо делать. складывать строку с числом. сделайте так - надёжнее будет :
t = (val(Buffer$) + 0.25) / 0.0569

Visual Basic
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
Dim sigma As Single, c As Single, i As Single, xc As Integer, yc As Integer
sigma = 6: c = 0
xc = 30
yc = 300
 
Form1.ScaleMode = 3
Picture1.ScaleMode = 3
Picture1.Height = 350
Picture1.Width = 350
Picture1.AutoRedraw = True
Picture1.Line (xc, yc)-(xc + 300, yc)
Picture1.Line (xc, yc)-(xc, 0)
 
For X = 0 To 100 Step 0.01
   Picture1.PSet (X * 20 + xc, yc - 200 * Exp(-(X - c) ^ 2 / sigma ^ 2)), vbRed
Next
 
For i = 0 To 200 Step 20
  Picture1.CurrentX = 5
  Picture1.CurrentY = yc - i - 10
  Picture1.Print i / 200
Next
  Picture1.CurrentX = 5
  Picture1.CurrentY = yc - 230
  Picture1.Print "y"
 
For i = 0 To 300 Step 50
  Picture1.CurrentX = i + xc
  Picture1.CurrentY = yc
  Picture1.Print i / 20
Next
  Picture1.CurrentX = xc + 300
  Picture1.CurrentY = yc + 20
  Picture1.Print "x"
 
 
End Sub
1
0 / 0 / 0
Регистрация: 20.06.2010
Сообщений: 8
20.06.2010, 21:14  [ТС]
Александр_ФФ, Вы просто не представляете какой Вы волшебник! спасиииииииибо!
0
10 / 10 / 0
Регистрация: 22.02.2010
Сообщений: 53
20.06.2010, 21:16
Рад, что помог, если что - обращайтесь
0
0 / 0 / 0
Регистрация: 20.06.2010
Сообщений: 8
20.06.2010, 21:21  [ТС]
Цитата Сообщение от Александр_ФФ Посмотреть сообщение
Рад, что помог, если что - обращайтесь
ооой, надеюсь после защиты диплома не придется такую ахинею писать
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
20.06.2010, 21:21
Помогаю со студенческими работами здесь

Работающий исходник приложения используещего Servlet для реализации бизнес логики
Помогите! (Для не очень жадных) Нужен реально работающий (либо однозначно передающий суть дела) исходник (описание, документация)...

Как написать back propagation для нечеткой нейронной сети?
Приветсвую,начал писать нечеткую нейронную сеть для прогнозирования футбольных матчей. Сделал forward propogation,но когда дошел до...

Определить сетку разбиения для нечеткой модели на основе алгоритма кластеризации Густавсона-Кесселя
Помогите пожалуйста с заданием: Нужно определить сетку разбиения для нечеткой модели на основе алгоритма кластеризации Густавсона-Кесселя

Програмка для расчета градусов
на самом деле это кусок программки, остальное есть, нужна программка которая будет считать значения углов косинуса и синуса, скажем от 0 до...

Програмка для скачивания картинок с демотивации
Нужно написать програмку которая периодически, каждую минуту заходила на demotivatio.me и скачивала первую картинку, если она новая, а то...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
Новые блоги и статьи
Изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru