Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

Работа со строками на С++ проверка на согласованность скобок. - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Прямоугольники http://www.cyberforum.ru/cpp-beginners/thread85561.html
Четырехугольник ABCD задан координатами своих вершин на плоскости: A(Xa,Ya),B(Xb,Yb),C(Xc,Yc) , D(Xd,Yd).Проверить являетса ли он выпуклым. Замечания: Есть несколько способов проверки выпуклости:...
C++ Вот такая интересная штука на C написать программу нахождения совершенных чисел в диапазоне от 1 до 1000000 (миллион). Как, пока мне не понятно, если кто знает подскажите. http://www.cyberforum.ru/cpp-beginners/thread85559.html
C++ Как подобрать ActiveX элемент.
Добрый день. Помогите выбрать элемент управления, который, который будет схож с этим: http://www.cyberforum.ru/attachment.php?attachmentid=18527&stc=1&d=1263414169 в общем нужна таблица с простым,...
поправить C++
есть задача только надо сделать с указателями на функцию. #include <iostream.h> #include <math.h> #include <stdlib.h> double sum(int X, int y); double kol(int T, int u); void main()...
C++ Умножить матрицу на себя транспонированую http://www.cyberforum.ru/cpp-beginners/thread85530.html
Буду краток: необходимо Умножить матрицу на себя транспонированую!!!(без хранения транспонированной) Как в вышмате это сделать я понимаю, а вот на С как это выглядит, не пойму!!! Кто чем может_)))
C++ РАБОТА С ВИРТУАЛЬНЫМИ ФУНКЦИЯМИ Доброго времени суток, форумчани! Помогите мне, пожалуйста, с задачей, у меня просто нет этой темы, а сдать нужно обязательно :( Напишите, пожалуйста, хотя бы классы в общих чертах, как... подробнее

Показать сообщение отдельно
insideone
Модератор
Автор FAQ
3642 / 921 / 49
Регистрация: 10.01.2010
Сообщений: 2,472
14.01.2010, 01:01
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
for (int i = 0; i < кол_во_символов_в_строке; i++)
switch (текущий_символ)
{
case ' ': break; // пробелы пропускаем
case '(':
   {
       счетчик_открытых++;
       if ( ожидаем_откр_скобку == false )
       {
           /* ВЫВОД: ошибка. На i-ом символе открыта неверная скобка */
           return;
       }
       ожидаем_значение = true;
       ожидаем_закр_скобку = false;
       ожидаем_откр_скобку = false;
       ожидаем_операцию = false;
   }
   break;
case '*': case '/': /* и другие арифм. операции */
   {
       if ( ожидаем_операцию == false )
       {
            /* ВЫВОД: ошибка. На i-ом символе использована некорректная операция */
            return;
       }
       ожидаем_значение = true;
       ожидаем_закр_скобку = false;
       ожидаем_откр_скобку = true;
       ожидаем_операцию = false;
   }
   break;
case ')':
   {
       счетчик_закрытых++;
       if ( ожидаем_закр_скобку == false )
       {
            /* ВЫВОД: ошибка. На i-ом символе использована некорректная закрывающая скобка */
            return;
       }
       ожидаем_значение = false;
       ожидаем_закр_скобку = false;
       ожидаем_откр_скобку = false;
       ожидаем_операцию = true;
   }
   break;
   default: // все остальное считаем цифрами или переменными
   {
       if ( ожидаем_значение == false )
       {
            /* ВЫВОД: ошибка. На i-ом символе два значения подряд без разделяющего знака */
            return;
       }
       ожидаем_значение = false; // после цифры сразу цифра без операции?
       ожидаем_закр_скобку = true;
       ожидаем_откр_скобку = false; // а какую операцию мы со скобкой будем делать?
       ожидаем_операцию = true;
   }
}
 
if (  счетчик_открытых != счетчик_закрытых )
{
   /* ВЫВОД: ошибка. Не все скобки были закрыты */
   return;
}
/* ВЫВОД: Ошибок нет. Выражение верно. */
Надеюсь я верно понял задание. В любом случае этот алгоритм придется доделать, так что обратите внимание на то что допустим 'aa' это две переменные идущие подряд и будет ошибка. Этого можно избежать - попробуйте сами это будет несложно.
Если же вводить выражение типизированного вида вроде: (a + (b*3) - 2)^(2-1) должно все отработать.
1
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru