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

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

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

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

07.12.2012, 20:38. Просмотров 733. Ответов 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.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.12.2012, 20:38     Определить, является ли строка правильным скобочным выражением (Перевод кода из Паскаля в С++)
Посмотрите здесь:
C++ Является ли заданная строка правильным IP-адресом
C++ Как проверить, является ли строка правильным идентификатором?
C++ Определить является ли лабиринт правильным
Определить является ли лабиринт правильным. C++
Перевод кода из Паскаля в С++ C++
Перевод кода с паскаля на С++ C++
C++ Перевод кода с Паскаля на C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
sovaz1997
CEO SOVAZ Corp.
380 / 226 / 2
Регистрация: 17.12.2011
Сообщений: 819
Записей в блоге: 1
Завершенные тесты: 1
07.12.2012, 20:40     Определить, является ли строка правильным скобочным выражением (Перевод кода из Паскаля в С++) #2
Можешь дать само задание???
frank_lampard
-8 / 2 / 0
Регистрация: 23.09.2012
Сообщений: 145
07.12.2012, 20:42  [ТС]     Определить, является ли строка правильным скобочным выражением (Перевод кода из Паскаля в С++) #3
sovaz1997, Дана строка символов. Определить, является ли она правильным скобочным выражением. Не знаю как сделать, знаю только что надо через "Польскую запись" и через стэк.
Leshak
259 / 235 / 40
Регистрация: 10.12.2011
Сообщений: 513
07.12.2012, 20:51     Определить, является ли строка правильным скобочным выражением (Перевод кода из Паскаля в С++) #4
frank_lampard, ваш код лиш частично правильный( да и по правде можно было так много даже и не писать ).
Вам надо просто проверить не перекрываются ли скобки. То есть

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

А в целом первая часть у вас правильная. Если будет время могу доделать
frank_lampard
-8 / 2 / 0
Регистрация: 23.09.2012
Сообщений: 145
07.12.2012, 20:53  [ТС]     Определить, является ли строка правильным скобочным выражением (Перевод кода из Паскаля в С++) #5
Leshak, если можете в С++ напишите пожалуйста.
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 << "Нет";
    }
}
Пока только перевел твой код. Надо проверить скобки на перекрывание)))
frank_lampard
-8 / 2 / 0
Регистрация: 23.09.2012
Сообщений: 145
07.12.2012, 21:03  [ТС]     Определить, является ли строка правильным скобочным выражением (Перевод кода из Паскаля в С++) #7
sovaz1997, работает! Спасибо огромное!

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

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

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

Или воспользуйтесь поиском по форуму:
Dani
1278 / 636 / 56
Регистрация: 11.08.2011
Сообщений: 2,278
Записей в блоге: 2
Завершенные тесты: 1
07.12.2012, 23:38     Определить, является ли строка правильным скобочным выражением (Перевод кода из Паскаля в С++) #13
frank_lampard, Алгоритм: Если встретилась скобка, и она открывающая, то заносите в стек. Если закрывающая, то смотрите какой тип скобки стоит на вершине стека: если текущей скобкой можно закрыть ту, которая на вершине стека, то удаляем ее из стека. Иначе ответ - неверно. Еще надо проверить случай, если пытаемся удалить из стека, а там пусто.
Yandex
Объявления
07.12.2012, 23:38     Определить, является ли строка правильным скобочным выражением (Перевод кода из Паскаля в С++)
Ответ Создать тему
Опции темы

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