Дано n строк. вывести для каждой строки good, если она - правильное скобочное выражение и bad, если нет.
284
420
Ответы на вопрос:
Посмотрел решение на с++. ну что же, я недаром зову его "полуассемблер" - нечего ему в общеобразовательных школах писать долго, много и непонятно для непосвященных. а сколько при этом можно ошибок сделать - просто жуть. вот для сравнения решение на паскале. я тоже использовал стек, чтобы проще было // pascalabc.net 3.2, сборка 1370 от 24.12.2016 // внимание! если программа не работает, обновите версию! function isgood(s: string): boolean; begin var st: =new stack< char> ; foreach var c in s do case c of '(': st.push(c); ')': if st.count> 0 then st.pop else begin result: =false; exit end; end; result: =st.count=0 end; begin var n: =readlninteger('n='); var s: =readarrstring(n); s.select(x-> isgood((x-> x? 'good': 'bad').println(newline) end. контрольный пример (скобки "разбавлены" числами, чтобы было ясно, что программа не только скобки умеет читать, но и проверять их расстановку в произвольной строке) n= 4 12(3)456(7)8 123((67)8) 12)34(5 (1(234)567 good good bad bad
Для проверки, закрыты ли все скобки, можно было бы просто их посчитать, но мы будем проверять правильность вложенности. для этого нам пригодится std: : stack (да, и решаем на с++). #include < iostream> #include < stack> #include < string> using namespace std; typedef unsigned short int usi; bool hascorrectbracing(string); int main() { setlocale(0, ""); // кириллица usi n; cout < < "n = "; cin > > n; string row; for(size_t i = 1; i < = n; i++) { cout < < "строка " < < i < < ": "; cin > > row; if ( hascorrectbracing(row) ) { cout < < "good\n"; } else { cout < "bad\n"; } } return 0; } bool hascorrectbracing(string r) { stack < char> st; for(string: : size_type c = 0; c < r.size(); c++) { if (r[c] == '(') { st.push('('); continue; } else { if (r[c] == '[') { st.push('['); continue; } else { if (r[c] == '{') { st.push('{'); continue; } } } // end 1st if if ( ( (st.top() == '(') & & (r[c] == ')') ) || ( (st.top() == '[') & & (r[c] == ']') ) || ( (st.top() == '{') & & (r[c] == '}') ) ) { st.pop(); } //end 2nd if } // end for if ( st.empty() ) { return true; } else { return false; } } // end fun
Отв: 2с/с не какой из них 8c/c a, b, c, g, j 10c/c a, b, c, d, g, h, i, j 16c/c все с/c - это система счисление
Реши свою проблему, спроси otvet5GPT
-
Быстро
Мгновенный ответ на твой вопрос -
Точно
Бот обладает знаниями во всех сферах -
Бесплатно
Задай вопрос и получи ответ бесплатно
Популярно: Информатика
-
voytyukk13.01.2022 23:11
-
mashkax28марічка26.12.2021 18:37
-
weee200422.12.2022 12:19
-
Hemmgirl20.05.2021 13:17
-
ulashn19.02.2022 20:37
-
104829822.03.2023 18:11
-
kate83123.05.2023 13:31
-
милка57811.04.2020 10:40
-
nickname01125.09.2020 00:35
-
катююсик20.12.2020 13:38
Есть вопросы?
-
Как otvet5GPT работает?
otvet5GPT использует большую языковую модель вместе с базой данных GPT для обеспечения высококачественных образовательных результатов. otvet5GPT действует как доступный академический ресурс вне класса. -
Сколько это стоит?
Проект находиться на стадии тестирования и все услуги бесплатны. -
Могу ли я использовать otvet5GPT в школе?
Конечно! Нейросеть может помочь вам делать конспекты лекций, придумывать идеи в классе и многое другое! -
В чем отличия от ChatGPT?
otvet5GPT черпает академические источники из собственной базы данных и предназначен специально для студентов. otvet5GPT также адаптируется к вашему стилю письма, предоставляя ряд образовательных инструментов, предназначенных для улучшения обучения.