![]() |
Модераторы: Poseidon |
![]() ![]() ![]() |
|
bigmaik |
|
|||
Новичок Профиль Группа: Участник Сообщений: 5 Регистрация: 31.1.2012 Репутация: нет Всего: нет |
Помогите создать программу которая будет проверять правильность написания арифметических выражений
|
|||
|
||||
volvo877 |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2073 Регистрация: 15.11.2004 Репутация: 34 Всего: 116 |
Своих наработок нет - значит, переезжаем...
|
|||
|
||||
volvo877 |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2073 Регистрация: 15.11.2004 Репутация: 34 Всего: 116 |
Для домашних заданий, курсовых, существует "Центр Помощи".
Тема перенесена! |
|||
|
||||
bigmaik |
|
|||
Новичок Профиль Группа: Участник Сообщений: 5 Регистрация: 31.1.2012 Репутация: нет Всего: нет |
Надеюсь это поможет решению)
|
|||
|
||||
Mirkes |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 586 Регистрация: 18.8.2011 Где: Красноярск Репутация: 4 Всего: 17 |
Вообще-то лень поощрять нельзя.
Это просто перевод того, что вы уже видели
Это сообщение отредактировал(а) Mirkes - 1.2.2012, 07:16 -------------------- Mirkes |
|||
|
||||
bigmaik |
|
|||
Новичок Профиль Группа: Участник Сообщений: 5 Регистрация: 31.1.2012 Репутация: нет Всего: нет |
что то не очень получается... программа компилируется и компилируется...(((
вот какая наработка у меня есть... но там не учитывается то что нельзя делить на 0. const digits : set of char=['0'..'9']; letters:set of char=['_','A'..'Z','a'..'z']; op : set of char=['+','-','*','/']; var s : string; i,k : word; state : 0..3; procedure error; begin writeln('Выражение некорректно'); halt end; procedure Identifier; {пропустить имя} begin while (i<length(s)) and (s[i+1] in (letters+digits)) do i:=i+1 end; procedure Number; {пропустить число} begin while (i<length(s)) and (s[i+1] in digits) do i:=i+1 end; begin {Main} readln(s); i:=0; k:=0; state:=0; while state<>3 do case state of 0:if i<length(s) then begin i:=i+1; if s[i]='(' then k:=k+1 else if not (s[i] in (letters+digits)) then error else begin if s[i] in letters then Identifier else if s[i] in digits then Number; state:=1 end end else state:=2; 1:if i<length(s) then begin i:=i+1; if s[i]=')' then begin k:=k-1; if k<0 then error end else if s[i] in op then state:=0 else error end else state:=2; 2:if (s[i] in(letters+digits+[')']))and(k=0) then begin writeln('Выражение корректно'); state:=3 end else error end {case} end. Это сообщение отредактировал(а) bigmaik - 1.2.2012, 07:46 |
|||
|
||||
Mirkes |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 586 Регистрация: 18.8.2011 Где: Красноярск Репутация: 4 Всего: 17 |
Во первых, приведеите код в порядок
Во вторых - используйте выделение кода В третьих выражение 1/0 является ПРАВИЛЬНЫМ арифметическим выражением. Другое дело, что результат вычисления - бесконечность. Какой средой пользуетесь? Я свой вариант отлаживал на PascalABC, поскольку вы заявили Паскаль, а не Delphi. -------------------- Mirkes |
|||
|
||||
bigmaik |
|
|||
Новичок Профиль Группа: Участник Сообщений: 5 Регистрация: 31.1.2012 Репутация: нет Всего: нет |
Дык я вот тоже PascalABC использую... буду разбираться.
|
|||
|
||||
Yuruslugi |
|
|||
Новичок Профиль Группа: Участник Сообщений: 1 Регистрация: 9.4.2012 Репутация: нет Всего: нет |
Спасибо, за программу....
|
|||
|
||||
![]() ![]() ![]() |
Правила форума "Центр помощи" | |
|
ВНИМАНИЕ! Прежде чем создавать темы, или писать сообщения в данный раздел, ознакомьтесь, пожалуйста, с Правилами форума и конкретно этого раздела.
Более подробно с правилами данного раздела Вы можете ознакомится в этой теме. Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Poseidon, Rodman |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Центр помощи | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |