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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
frank_lampard
-8 / 2 / 0
Регистрация: 23.09.2012
Сообщений: 145
#1

Определить, является ли строка правильным скобочным выражением (Перевод кода из Паскаля в С++) - C++

07.12.2012, 20:38. Просмотров 739. Ответов 12
Метки нет (Все метки)

Помогите перевести код из Паскаля в С++. Сам код:
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
uses crt;
var
a1,a2,s1,s2,d1,d2,i: integer;
q: string;
begin
write('Введите скобочное выражение: ');
read(q);
for i:=1 to length(q) do begin
if q[i]='(' then inc(s1);
if q[i]=')' then inc(s2);
if q[i]='{' then inc(a1);
if q[i]='}' then inc(a2);
if q[i]='[' then inc(d1);
if q[i]=']' then inc(d2);
end;
if (s1=s2) and (a1=a2) and (d1=d2) then writeln('YES')
else write('NO');
end.
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.12.2012, 20:38
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Определить, является ли строка правильным скобочным выражением (Перевод кода из Паскаля в С++) (C++):

Является ли заданная строка правильным IP-адресом - C++
В сети интернет каждому компьютеру присваивается четырехбайтовый код, который принято записывать в виде четырех чисел, каждое из которых...

Как проверить, является ли строка правильным идентификатором? - C++
Нужно ввести строку с клавиатуры, как проверить, является ли она правильным идентификатором?

Программа, которая определяет, является ли заданная строка правильным IP-адресом - C++
Здравствуйте! Вот задание В сети интернет каждому компьютеру присваивается четырехбайтовый код, который принято записывать в виде...

Определить является ли лабиринт правильным. - C++
определить является ли лабиринт правильным.Правильный лабиринт - такой лабиринт, в котором из любого места в любое другое можно попасть...

Определить является ли лабиринт правильным - C++
карта представляет собой лабиринт 1=стена, 0=проход карта представляет собой лабиринт надо определить является ли лабиринт правильным ...

Перевод кода из паскаля в c++ - C++
Собственно надо перевести этот код из паскаля в c++, чтобы программа выдавала такие же данные и тот же результат. const n=30; ...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
sovaz1997
CEO SOVAZ Corp.
380 / 226 / 2
Регистрация: 17.12.2011
Сообщений: 819
Записей в блоге: 1
Завершенные тесты: 1
07.12.2012, 20:40 #2
Можешь дать само задание???
0
frank_lampard
-8 / 2 / 0
Регистрация: 23.09.2012
Сообщений: 145
07.12.2012, 20:42  [ТС] #3
sovaz1997, Дана строка символов. Определить, является ли она правильным скобочным выражением. Не знаю как сделать, знаю только что надо через "Польскую запись" и через стэк.
0
Leshak
259 / 235 / 40
Регистрация: 10.12.2011
Сообщений: 513
07.12.2012, 20:51 #4
frank_lampard, ваш код лиш частично правильный( да и по правде можно было так много даже и не писать ).
Вам надо просто проверить не перекрываются ли скобки. То есть

( A+ b ){1 .. 9 } - правильно
( A + { b ) 1 .. 9 } - не правильно.

А в целом первая часть у вас правильная. Если будет время могу доделать
0
frank_lampard
-8 / 2 / 0
Регистрация: 23.09.2012
Сообщений: 145
07.12.2012, 20:53  [ТС] #5
Leshak, если можете в С++ напишите пожалуйста.
0
sovaz1997
CEO SOVAZ Corp.
380 / 226 / 2
Регистрация: 17.12.2011
Сообщений: 819
Записей в блоге: 1
Завершенные тесты: 1
07.12.2012, 20:55 #6
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
#include <iostream>
#include <string>
 
using namespace std;
 
int main() {
    setlocale(0,"");
    int a = 0, s = 0, d = 0;
    string q;
    cout << "Введите скобочное выражение" << endl;
    cin >> q;
 
    for(int i = 0; i < q.size(); ++i) {
        if(q[i] == '(') {
            ++a;
        }
 
        if(q[i] == ')') {
            --a;
        }
 
        if(q[i] == '{') {
            ++s;
        }
 
        if(q[i] == '}') {
            --s;
        }
 
        if(q[i] == '[') {
            ++d;
        }
 
        if(q[i] == ']') {
            --d;
        }
    }
 
    if(a == 0 && s == 0 && d == 0) {
        cout << "Да";
    }
 
    else {
        cout << "Нет";
    }
}
Пока только перевел твой код. Надо проверить скобки на перекрывание)))
0
frank_lampard
-8 / 2 / 0
Регистрация: 23.09.2012
Сообщений: 145
07.12.2012, 21:03  [ТС] #7
sovaz1997, работает! Спасибо огромное!

Добавлено через 2 минуты
sovaz1997, хотел узнать: это и есть "Польская запись"? Читал про неё, мало что понятно.
0
sovaz1997
CEO SOVAZ Corp.
380 / 226 / 2
Регистрация: 17.12.2011
Сообщений: 819
Записей в блоге: 1
Завершенные тесты: 1
07.12.2012, 21:06 #8
Не знаю, что такое Польская запись(((

P.S. Попробуй это выражение: (3+{5)}
0
frank_lampard
-8 / 2 / 0
Регистрация: 23.09.2012
Сообщений: 145
07.12.2012, 21:09  [ТС] #9
sovaz1997, здесь пишет правильно, хотя должно быть не правильно.
0
sovaz1997
CEO SOVAZ Corp.
380 / 226 / 2
Регистрация: 17.12.2011
Сообщений: 819
Записей в блоге: 1
Завершенные тесты: 1
07.12.2012, 21:10 #10
Я о том и говорю(((
0
Venzo
125 / 123 / 4
Регистрация: 03.07.2011
Сообщений: 354
07.12.2012, 21:28 #11
польская запись - это когда сначала указываются операнды, а затем операция, например 3+4 в польской записи будет 3 4 +
Скобки можно через стек проверять.
Да и задача не раз уже была тут, можете попробовать по форуму поискать.
0
frank_lampard
-8 / 2 / 0
Регистрация: 23.09.2012
Сообщений: 145
07.12.2012, 21:31  [ТС] #12
ZoRT, а как скобки через стек проверяются? На форуме не нашел данную задачу.
0
Dani
1393 / 637 / 57
Регистрация: 11.08.2011
Сообщений: 2,282
Записей в блоге: 2
Завершенные тесты: 1
07.12.2012, 23:38 #13
frank_lampard, Алгоритм: Если встретилась скобка, и она открывающая, то заносите в стек. Если закрывающая, то смотрите какой тип скобки стоит на вершине стека: если текущей скобкой можно закрыть ту, которая на вершине стека, то удаляем ее из стека. Иначе ответ - неверно. Еще надо проверить случай, если пытаемся удалить из стека, а там пусто.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.12.2012, 23:38
Привет! Вот еще темы с ответами:

Перевод кода из паскаля в с++ - C++
Незнаю как перевести из паскаля в с++ ar x, y: real; begin readln(x, y); if ((x &lt; 0) and (y &lt; 0)) then begin ...

Перевод кода из Паскаля в C++ - C++
помогите пожалуйста перевести код в c++ integer procedure F2(ref(position) p,integer alpha,integer beta): begin integer m,t;...

Перевод кода из Паскаля в С++ - C++
Я в С++ не бум бум, написал прогу на паскале а нуно на Си++ помогите перевести Задача : Назовем допустимым преобразованием матрицы...

Перевод кода с паскаля на С++ - C++
Нужно перевести на С++ program dvumerniu; uses crt; const m=2; n=4; type mat=array of integer; var ...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
07.12.2012, 23:38
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru