|
Квадратное уравнение с разбором | ☑ | ||
---|---|---|---|---|
0
Sachaaaa
25.12.13
✎
18:26
|
Здравствуйте! Погомите! Напишите пожалуйста программный код уравнения! Нужно разобрать кв уравнение, которое пользователь вводит в поле, например 3х^2+3х+1=0. Нужно разобрать что 3 относится к a, b=3 и с=1. а дельше решить как квадратное уравнение. на форму выводится только х1 и х2. Помогите пожалуйста! в 1С надо написать!
|
|||
113
Sachaaaa
25.12.13
✎
19:56
|
х^2
|
|||
114
Sachaaaa
25.12.13
✎
19:56
|
именно
|
|||
115
zva
25.12.13
✎
19:57
|
a*1^x*x^2 +b*ln(e^x)+c*x^0
|
|||
116
Sachaaaa
25.12.13
✎
19:57
|
(88)так нужно сделать
|
|||
117
Feunoir
25.12.13
✎
19:57
|
(105) Абстрактную произвольную запись ты решить не сможешь. Это придётся полную лексику описывать. Понятно, что это задача не того уровня.
|
|||
118
Sachaaaa
25.12.13
✎
19:58
|
просто уравнение 3х62+2х+1=0 а не такие сложные которые некоторые пишут
|
|||
119
Sachaaaa
25.12.13
✎
19:59
|
3х^2+2х+1=0 вот из такого надо получить a b c
|
|||
120
rphosts
25.12.13
✎
20:01
|
Стр1 = Лев(Стр)
|
|||
121
Sachaaaa
25.12.13
✎
20:01
|
ну что же все замолчали?
|
|||
122
rphosts
25.12.13
✎
20:01
|
фальшстарт
|
|||
123
Salimbek
25.12.13
✎
20:02
|
Если работа со строками, то пожалуйста:
РазбитаяСтрока = СтрЗаменить(ВходнаяСтрока,"х^2",Символ.ПС); РазбитаяСтрока = СтрЗаменить(ВходнаяСтрока,"х",Символ.ПС); РазбитаяСтрока = СтрЗаменить(ВходнаяСтрока,"=",Символ.ПС); А = СтрПолучитьСтроку(РазбитаяСтрока,1); Б = СтрПолучитьСтроку(РазбитаяСтрока,2); С = СтрПолучитьСтроку(РазбитаяСтрока,3); Ноль = СтрПолучитьСтроку(РазбитаяСтрока,4); |
|||
124
Salimbek
25.12.13
✎
20:03
|
(123) Во второй и третьей строках замени "ВходнаяСтрока" на "РазбитаяСтрока"
|
|||
125
Sachaaaa
25.12.13
✎
20:04
|
а потом просто как кв уравнение считать?
|
|||
126
Sachaaaa
25.12.13
✎
20:04
|
а что такое ПС еще?
|
|||
127
rphosts
25.12.13
✎
20:05
|
тогда не х^2 и х а *х^2 и *х
|
|||
128
rphosts
25.12.13
✎
20:05
|
(126) символ перевод строки, см СП
|
|||
129
Salimbek
25.12.13
✎
20:06
|
(126) В книжке по 1С написано
(127) Я на это опирался: 3х^2+2х+1=0 в (119) |
|||
130
Feunoir
25.12.13
✎
20:06
|
(118) (119) ну если совсем жёстно закладываться на такой формат, то примерно так:
Предположим, что строку ты получила в переменную СтрУравенение. Будем разбирать.
Ну а дальше считай |
|||
131
mrDSide
25.12.13
✎
20:06
|
А почему не просто: ВвестиЗначение(а,"Введите ..."); кордескр=б*б-4*а*ц; икс1=(б+2*sqrt(кордескр))/2;икс2=(б-2*sqrt(кордескр))/2
Хотя за првильность формул икс1 и икс2 не ручаюсь =) |
|||
132
Salimbek
25.12.13
✎
20:07
|
(125) Нет. не просто, в результате ты получишь строки, их надо проверить, чтобы они были Числом, и если все параметры - это числа, то преобразуешь их к Числу. А потом уже считаешь
|
|||
133
rphosts
25.12.13
✎
20:07
|
(131) потому что задача в простейшем парсинге строки
|
|||
134
Feunoir
25.12.13
✎
20:07
|
+(130) в последней строке
C = Лев(СтрУравнение, Поз-1); |
|||
135
Sachaaaa
25.12.13
✎
20:09
|
спасибо большое ребятаа! щас разбираться буду и смотреть что не понятно будет спрошу!!!!! спасибо большое очень помогли!!!!
|
|||
136
mrDSide
25.12.13
✎
20:09
|
А если хотите парсить текст и решать что-то сложнее - возьмите какую-нибудь внешнюю компоненту (а еще лучше установить на машине интерпретатор phyton и в него передавать текст для решения).
|
|||
137
Salimbek
25.12.13
✎
20:10
|
(135) Фотку новую только не забудь ;-)
(136) А мне больше работа со строками в Ruby нравится |
|||
138
Fragster
гуру
25.12.13
✎
20:12
|
Надо контролировать Х - русская или английская. + большая-маленькая
Уравнение = "3x^2+2x+1=0"; А=0; Б=0; В=0; Знак = 1; Числа = "0123456789"; Состояние = "А"; Для Сч = 1 По СтрДлина(Уравнение) Цикл ТекСимв = Сред(Уравнение, Сч, 1); Если Найти(Числа,ТекСимв) <> 0 Тогда Если Состояние = "А" Тогда А = А * 10 + Знак*Число(ТекСимв); ИначеЕсли Состояние = "Б" Тогда Б = Б * 10 + Знак*Число(ТекСимв); ИначеЕсли Состояние = "В" Тогда В = В * 10 + Знак*Число(ТекСимв); ИначеЕсли Состояние = "Квадрат" Тогда Состояние = "Б"; КонецЕсли; Иначе Если Состояние = "Квадрат" Тогда Состояние = "Б" КонецЕсли; Если ТекСимв = "-" Тогда Знак = -1; ИначеЕсли ТекСимв = "+" Тогда Знак = 1; ИначеЕсли ТекСимв = "^" Тогда Состояние = "Квадрат"; ИначеЕсли ТекСимв = "=" Тогда Состояние = "Конец"; ИначеЕсли ТекСимв = "x" И Состояние="Б" Тогда Состояние = "В"; КонецЕсли; КонецЕсли; КонецЦикла; |
|||
139
Fragster
гуру
25.12.13
✎
20:13
|
в (138), конечно, заляпуха, но зачет получить можно
|
|||
140
Sachaaaa
25.12.13
✎
20:13
|
а что такое Сч?
|
|||
141
Fragster
гуру
25.12.13
✎
20:13
|
(140) открой конспект на главе про циклы
|
|||
142
Fragster
гуру
25.12.13
✎
20:14
|
Ну, или замени на Счетчик
|
|||
143
Sachaaaa
25.12.13
✎
20:14
|
хорошо
|
|||
144
Fragster
гуру
25.12.13
✎
20:17
|
(143) жду фотку с сигной ;)
|
|||
145
Sachaaaa
25.12.13
✎
20:18
|
спасибо большое мальчики! очень благодарна вам!
|
|||
146
Sachaaaa
25.12.13
✎
20:18
|
с чем?
|
|||
147
Fragster
гуру
25.12.13
✎
20:19
|
(146) -> (48)
|
|||
148
Fragster
гуру
25.12.13
✎
20:19
|
что-то (130) мне нравится больше...
|
|||
149
mrDSide
25.12.13
✎
20:20
|
(137) охотно верю, но речь скорее о модуле "math" для phyton'а.
А вообще: 1) заменить в строке Символ(160) на ""; 2) заменить "-" на "+-"; 3) разложить в массив подстрок по разделителю "+"; 4) в новый массив структуры с й=Найти("*х`"), лев(все до й) в показатель, а прав(все после й) в степень; 5) перебрать массив, суммируя по условию эл[й]["показатель"]=сколько надо; 6) (131) |
|||
150
Sachaaaa
25.12.13
✎
20:32
|
Мальчики, ошибку выдает! когда решение идет переменная не определена пишет а и с
|
|||
151
Feunoir
25.12.13
✎
20:34
|
(150) Внимательно перечитай сообщения и уточнения к ним и проверь русский-английский в именах переменных.
Ты по какому варианту делаешь? |
|||
152
Sachaaaa
25.12.13
✎
20:36
|
все рус - англ было
|
|||
153
Fragster
гуру
25.12.13
✎
20:40
|
(150) ну так коэффициенты в (130) и (138) по другому, наверное, называются
|
|||
154
Sachaaaa
25.12.13
✎
20:42
|
все нормально сохранилось без ошибок, а вот нажимаю F5 ввожу уравнение нажимаю на кнопку решение и нечего не происходит, почему?
|
|||
155
Sachaaaa
25.12.13
✎
20:45
|
почему??
|
|||
156
Feunoir
25.12.13
✎
20:48
|
(155) Есть кнопка F9 - установка точки останова. Ставишь её на первой строке процедуры в которой разбираешь уравнение и по шагам (F10) проходишь процедуру, проверяя значения переменных.
А как ты результат выводишь? Как определила, что ничего не происходит. |
|||
157
Sachaaaa
25.12.13
✎
20:53
|
через кнопку. У меня форма создана кнопка Решить, и процедура нажатие на эту кнопку вот запускаю F5 пишу уравнение нажимаю на кнопку и молчок
|
|||
158
Feunoir
25.12.13
✎
20:58
|
"Через кнопку" ты результат вывести не можешь. Через кнопку ты запускаешь решение. Так вот проверяй, что ты действительно решение запускаешь, то есть к кнопке привязано соответствующее действие.
И смотри, каким образом у тебя сообщается результат. А то может ты считать считаешь, а результат сообщить пользователю забываешь. Судя по твоему коду из (9) и (23), так и происходит. |
|||
159
Sachaaaa
25.12.13
✎
21:00
|
а как тогда посчитать?
|
|||
160
Sachaaaa
25.12.13
✎
21:02
|
и результат вывести
|
|||
161
Feunoir
25.12.13
✎
21:02
|
Как ты сообщаешь пользователю, что нет решений?
|
|||
162
Grobik
25.12.13
✎
21:11
|
В карточке нет E-mail:, Город, страна:, День рождения:
Вдруг далеко живешь или старая? |
|||
163
Sachaaaa
25.12.13
✎
21:14
|
ахахахахах обязательно заполнять?
|
|||
164
Sachaaaa
25.12.13
✎
21:15
|
так то не как не сообщаю( блин
|
|||
165
Grobik
25.12.13
✎
21:16
|
18:26 -> 21:15
Я бы над этим подумал. |
|||
166
Feunoir
25.12.13
✎
21:18
|
(164) ой да ладно. А это что?
Если D<0 Тогда Сообщить ("Решений нет"); ... Вот где у тебя такое сообщение результатов расчета в других случаях. Ты по шагам процедуру проходила? |
|||
167
Grobik
25.12.13
✎
21:19
|
+ не знаю каким броузером Вы пользуетесь. Но большинство подсвечивает ошибки. В правилах форума помню была фраза пользоваться русским.
|
|||
168
Grobik
25.12.13
✎
21:22
|
||||
169
User_Agronom
25.12.13
✎
21:25
|
(0) я что-то пропустил? Дегустировать борщ кто первый?
|
|||
170
Sachaaaa
25.12.13
✎
21:31
|
в одном только!
получается везде сообщить добавить ну где иксы? |
|||
171
Grobik
25.12.13
✎
21:32
|
(169) А кто сказал что автор украинка? Иначе я согласен дегустировать борщ только за 3000 рублей за чайную ложку.
|
|||
172
Sachaaaa
25.12.13
✎
21:47
|
русская я
|
|||
173
dj_serega
25.12.13
✎
22:31
|
(170) перечитай (156).
К нему же: Можешь воспользоваться "Табло". В запущеной отладке в конфигураторе: Подменю "Отладка" -> "Табло" (третье снизу или ctrl+alt+w). В выражения добавь свои переменные. |
|||
174
Wobland
26.12.13
✎
04:19
|
ох, ничо вы тут нафлудили
|
|||
175
rphosts
26.12.13
✎
07:57
|
(174) спать нужно было меньше
|
|||
176
Wobland
26.12.13
✎
09:11
|
(175) спать нужно было больше. не выспался
|
|||
177
dj_serega
26.12.13
✎
12:42
|
(174) Флудили то флудили. А вот помогли или нет непонятно.
|
|||
178
User_Agronom
26.12.13
✎
12:48
|
(177) ТС варит борщ. Другого способа нет.
|
|||
179
Птица
26.12.13
✎
13:03
|
а в чем смысл такой задачи?
не, я понимаю еще когда идет распознавание какого-то текста и из него нужно вытащить квадратное уравнение, но когда вход зависит от программы, нафига усложнять жизнь, вводя квадратное уравнение строкой, когда его можно задавать тремя коэффициентами? или программист считает, пользователю доставит особое удовольствие выписывать все эти икс и икс квадрат? конечно понятно, что задача учебная, но хоть какая-то привязка к реальности должна быть? культура мышления должна быть? |
|||
180
User_Agronom
26.12.13
✎
13:04
|
(179) Это студентка. Смысл: проверить навык работы со строками.
|
|||
181
Птица
26.12.13
✎
13:08
|
(180) читать я умею. но задача все равно идиотская.
навык работы со строками можно проверять и на более адекватных задачах, благо, это вещь часто востребованна в работе и подобрать задачу не проблема. |
|||
182
Wobland
26.12.13
✎
13:09
|
а это не её ли личная интерпретация задачи?
|
|||
183
User_Agronom
26.12.13
✎
13:10
|
(181) (182) Скорее всего такая. Смысл нужно спрашивать у преподавателя, но его мы спросить не можем. Поэтому только предположения.
|
|||
184
Птица
26.12.13
✎
13:11
|
+(181) не знаю, это как если бы интернов тренировали удалять аппендикс через горло(или другое отверстие), чтобы заодно проверить навыки манипулирования через разные отверстия.
а потом выпускали бы к пациентам, решать реальные задачи. |
|||
185
Wobland
26.12.13
✎
13:12
|
всё правильно! аппендикс надо удалять через другое отверстие, там ближе
|
|||
186
User_Agronom
26.12.13
✎
13:14
|
(184) Несколько странное сравнение.
Задача разбиения строки с анализом результата - нормальная задача. И это часто приходится делать практически. |
|||
187
Wobland
26.12.13
✎
13:36
|
(186) практически я иногда задумываюсь, как бы не работать со строками. просто на автопилоте. строки - они такие строки
|
|||
188
Asirius
26.12.13
✎
14:02
|
Решение
ункция ЭтоЦифра(Симв) Цифры ="1234567890."; Возврат Найти(Цифры,Симв)>0; КонецФункции Функция ПолучитьНачальноеЧислоИзСтроки(Знач СтрокаНачинающаясяСЧисла,ОстатокСтроки,ПолученноеЧисло) Для К = 1 По СТРДлина(СтрокаНачинающаясяСЧисла) Цикл Симв = Сред(СтрокаНачинающаясяСЧисла,К,1); Если Не ЭтоЦифра(Симв) Тогда Прервать; КонецЕслИ; КонецЦикла; Попытки ПолученноеЧисло= Число(Лев(СтрокаНачинающаясяСЧисла,к-1)); Исключение Сообщить("Некорректный коэффициент "+Лев(СтрокаНачинающаясяСЧисла,к-1)); КонецПопытки ОстатокСтроки = Сред(СтрокаНачинающаясяСЧисла,К); КонецФункции Процедура ОтброситьПервыеНеЦифры(Знач ПроизвольнаяСтрока,ОстатокСтроки,Знак,ОтбрасываемаяСтрока) Знак = 1; Для К = 1 По СТРДлина(ПроизвольнаяСтрока) Цикл Симв = Сред(ПроизвольнаяСтрока,К,1); Если Симв = "+" Тогда Знак = 1; КонецЕсли; Если Симв = "-" Тогда Знак = -1; КонецЕсли; Если ЭтоЦифра(Симв) Тогда Прервать; КонецЕслИ; КонецЦикла; ОстатокСтроки = Сред(ПроизвольнаяСтрока,К); ОтбрасываемаяСтрока = Лев(ПроизвольнаяСтрока,К-1); КонецПроцедуры Процедура РазобратьКвадратноеУравнение(КорректнаяСтрока,a,b,c) Перем ОтбрасываемаяСтрока,ОстатокСтроки,Знак1,Знак2,Знак3; ОтброситьПервыеНеЦифры(КорректнаяСтрока, ОстатокСтроки,Знак1,ОтбрасываемаяСтрока); Если ОтбрасываемаяСтрока<>"-" и ОтбрасываемаяСтрока<>"+" Тогда Сообщить("Некорректное начало уравнения"); КонецЕсли; ПолучитьНачальноеЧислоИзСтроки(ОстатокСтроки,ОстатокСтроки,a); ОтброситьПервыеНеЦифры(ОстатокСтроки, ОстатокСтроки,Знак2,ОтбрасываемаяСтрока); Если ОтбрасываемаяСтрока<>"XX+" и ОтбрасываемаяСтрока<>"XX-" Тогда Сообщить("Некорректный X^2 (не вначеле уравнения или отсутствует)"); КонецЕсли; ПолучитьНачальноеЧислоИзСтроки(ОстатокСтроки,ОстатокСтроки,b); ОтброситьПервыеНеЦифры(ОстатокСтроки, ОстатокСтроки,Знак3,ОтбрасываемаяСтрока); Если ОтбрасываемаяСтрока<>"X+" и ОтбрасываемаяСтрока<>"X+" Тогда Сообщить("Некорректный X (не в середине уравнения или отсутствует)"); КонецЕсли; ПолучитьНачальноеЧислоИзСтроки(ОстатокСтроки,ОстатокСтроки,c); Если ОстатокСтроки<>"=0" Тогда Сообщить("некорректрое окончание уравнения, должно быть =0"); КонецЕслИ; a = a*знак1; b = b*знак2; c = c*знак3; КонецПроцедуры Функция ОткрорректироватьСтроку(Стр) Корректировка = ВРЕГ(СТРЗаменить(СТР,",",".")); Корректировка = "+"+Корректировка ; Корректировка = СТРЗаменить(Корректировка,"+-","-"); Корректировка = СТРЗаменить(Корректировка,"++","+"); Корректировка = СТРЗаменить(Корректировка,"+X","+1X"); Корректировка = СТРЗаменить(Корректировка,"-X","-1X"); Корректировка = СТРЗаменить(Корректировка,"*X","X"); Корректировка = СТРЗаменить(Корректировка,"X^2","XX"); Возврат Корректировка; КонецФункции Процедура ОсновныеДействияФормыОсновныеДействияФормыВыполнить(Кнопка) //На форме реквизиты: ПолеВводаУравнения,a,b,c РазобратьКвадратноеУравнение(ОткрорректироватьСтроку(ПолеВводаУравнения),a,b,c) КонецПроцедуры |
|||
189
Wobland
26.12.13
✎
14:06
|
(188) что будет при входе ""?
|
|||
190
Asirius
26.12.13
✎
14:09
|
(189)
Например, понимает: 2*X*X+x-1=0 -X^2+10*x+2=0 6X^2+4x+2=0 |
|||
191
Wobland
26.12.13
✎
14:10
|
(190) коли затеял проверки, делай нормально и до конца
|
|||
192
Asirius
26.12.13
✎
14:11
|
(191) а там все до конца. Не учтена только перестановка X и X*X
|
|||
193
Wobland
26.12.13
✎
14:12
|
(192) что будет при ""? и при "2х=0"?
|
|||
194
Asirius
26.12.13
✎
14:13
|
(193) Скажет, что не найден X^2
|
|||
195
Wobland
26.12.13
✎
14:14
|
(194) и героически пойдёт вычислять дальше?
|
|||
196
Asirius
26.12.13
✎
14:15
|
(195) героически найдет дальше все ошибки
|
|||
197
Wobland
26.12.13
✎
14:15
|
можно я не буду это запускать? чему будут равны А, Б и В при уравнении ""?
|
|||
198
Asirius
26.12.13
✎
14:17
|
При пустой стороке выдается сообщение:
Некорректный X^2 (не вначеле уравнения или отсутствует) Некорректный коэффициент Некорректный X (не в середине уравнения или отсутствует) Некорректный коэффициент некорректрое окончание уравнения, должно быть =0 a,b,c = 0 |
|||
199
Wobland
26.12.13
✎
14:19
|
ну тогда буду спать спокойно ;)
|
|||
200
Feunoir
26.12.13
✎
14:21
|
(200)
|
|||
201
zva
26.12.13
✎
14:24
|
(188) 1/3X^2 тоже поймет?
|
|||
202
catena
26.12.13
✎
14:30
|
А может преподаватель сидит на мисте? И потихоньку устраивает себе развлечение... Что-то много студентов последнее время поперло, явно в каком-то учебном заведении пиарят.
|
|||
203
Wobland
26.12.13
✎
14:32
|
а миста его вычислит и заявится всем составом требовать принятия зачёта. ещё и придираться будем
|
|||
204
Asirius
26.12.13
✎
15:02
|
(201) не, на такое выдаст ошибку.
Поймет 0.33*X^2+x+2=0 Доработать несложно: для дробей можно сделать препарсинг - искать все выражения вида число/число и менять на значения. |
|||
205
Asirius
26.12.13
✎
15:05
|
Задача вполне из практики. Я на парсинге строк из назначений платежа для автоматической разноски банка собаку съел.
|
|||
206
Sachaaaa
27.12.13
✎
15:30
|
Привет всем! ак его вычислять не надо, я могу номер телефона скинуть..ахаха
|
|||
207
narayanan
27.12.13
✎
15:33
|
Sachaaaa, это Андрей, отправь письмо блRть!
|
|||
208
Sachaaaa
27.12.13
✎
15:36
|
дак отправила же
|
|||
209
narayanan
27.12.13
✎
15:37
|
[email protected] сюда
|
|||
210
Sachaaaa
27.12.13
✎
15:40
|
дошло?
|
|||
211
narayanan
27.12.13
✎
15:42
|
(210) ага
|
|||
212
Sachaaaa
27.12.13
✎
19:50
|
narayanan, зайди на почту
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |