|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » C/C++ - Помогите чайнику разобраться в азах С++ |
|
C/C++ - Помогите чайнику разобраться в азах С++
|
Новый участник Сообщения: 33 |
Профиль | Отправить PM | Цитировать -только в вуз поступил, и начал учиться с 3й недели, сейчас пытаюсь нагнать программу. в частности и по программированию. Вопрос вот в чем: была как практическая задана задача: "пользователь вводит последовательность символов, содержащую, среди прочих символов, круглые открывающие и закрывающие скобки. Признаком завершения признаком завершения последовательности является символ #. Определить. имеется ли в заданной последовательности баланс открывающихся и закрывающихся скобок. Скобки считаются сбалансированными, если для каждой открывающей скобки есть соответствующая закрывающая скобка, причем в предпоследовательности между этими скобками так же соблюден баланс. Последовательность. не содержащая ни одной скобки. считается так же сбалансированной."
Так как с языком С++ сталкиваюсь впервые)) хотелось бы узнать основные функции и команды вместе с их описанием для Си. то бишь может кто подскажет источник информации. в котором будет описано все "как дураку". Для приведенной задачи у меня получился примерно такой алгоритм: 1) Создание счетчика с переменной "open" для "(" (изначально переменные = 0) 2) Создание счетчкиа с переменной "close" для ")" 3) Закрузка файла, содержащеко текст, допустим 123.txt 4) Далее сравнение сиволов файла с "(" и ")" 5) Если первая скобка в последовательности символов до символа "#" ")" - выдвать сообщение, что "баланса нет" 6) Если последняя скобка, в последовательности символов до символа "#" "(" аналогичное сообщение об отстутствии баланса и конец программы ( так как ""123 ) 2323(ыв) (0"" несмотря на одинаковое кол-во открывающихся/закр. скобок баланса тут нет ) 7) Если 5й и 6й пункт не нашли бисбаланса скобок, то начать сравнение символов начиная с первого и заканчивая символом"#". при этом при обнаружении "(" совершать "open+1" аналогично и для ")" только с close) 8) Как только сравниваемый сивол примит значение "#", сделать сравнение переменных open и close. 9) Если значения переменных равны друг другу. то выдать сообщение об "наличии баланса скобок" 10) Если переменные больше. аналогично и меньше друг друга. то выдать сообщение об "отсутствии баланса" Среда работы - Microsoft Visual Studio 2008 Буду очень благодарен. если окажете помощь в реализации этой задачи, и ссылками на литературу. в которой как дураку расписано что, как и где нужно напсать. чтоб все написанное заработало. Заранее благодарен) |
|
Отправлено: 17:08, 19-09-2009 |
Новый участник Сообщения: 33
|
Профиль | Отправить PM | Цитировать Вот такую вещь мне подсказал мой дядя. только вот и в ней я мало чего понимаю, в силу того. что пока еще не знаю действия "команд" и способа построения программ
# include <iostream> # include <cctype> # include <cmath> # include <csteng> using name space sta, int main () ( int a , и б с ; char f; bool begin, eno ; count << ""Введите строку сиволов для анализа : "" ; cin >> f ; //далее проверка на присутствие "")"" в начале строки и ""("" в конце строки, пока не найдется символ ""#"" DO ( |
Отправлено: 17:20, 19-09-2009 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Будем жить, Маэстро... Сообщения: 6694
|
Профиль | Сайт | Отправить PM | Цитировать Цитата Lisiy_egik:
Цитата Lisiy_egik:
#include <iostream> #include <cctype> #include <cmath> using namespace std; int main () { int element = 0; int sizeString = 256; char string[sizeString]; // массив ввода cout<<" Введите строку: "; cin.getline(string, sizeString, '\n'); // функция ввода while(string[element] != '\0'){ // Пока не конец строки производить проверку, символ за символом if(string[element] == '('){ // Если найдена открывающая скобка. open++; // Увеличить счётчик 'open' } else if(string[element] == ')'){ // Если найдена закрывающая скобка. close++; // Увеличить счётчик 'close' } element++; // переход к следующему символу. } if(open == close){ // Если оба счётчика равны, значит есть открывающая и закрывающая скобка // Если переменные больше. аналогично и меньше друг друга. то выдать сообщение об "наличии баланса скобок" } else if(open != close){ // Если значения переменных не равны друг другу. то выдать сообщение об "отсутствии баланса" } cin>>element; } |
||
------- Последний раз редактировалось Drongo, 19-09-2009 в 18:17. Причина: Синтактическая ошибка... Отправлено: 18:05, 19-09-2009 | #3 |
Ветеран Сообщения: 1180
|
Профиль | Отправить PM | Цитировать #include <iostream> using namespace std; int main() { int balance = 0; char ch; while(balance>=0 && (cin >> ch) && ch!='#') { switch(ch) { case '(' : ++balance; break; case ')' : --balance; break; } } if (balance==0) cout << "всё зашибись!\n"; else cout << "следи на руками ;)\n"; return balance==0; } При чтении с клавиатуры ввод построчно буфферизуется. Поэтому чтобы реально программа остановилась, надо после диеза (#) всё-таки нажать enter. Для демонстрации того, для чего нужен с++: template<typename ForwardIterator> bool is_balanced(ForwardIterator first, ForwardIterator last) { int balance = 0; for(; balance>=0 && first!=last && *first!='#'; ++first) { switch(*first) { case '(' : ++balance; break; case ')' : --balance; break; } } return balance==0; } int main() { // можно так: (из строки в памяти, как делали все) string data1; getline(cin, data1, char()); cout << is_balanced(data1.begin(), data1.end()) << "\n"; // а можно и так: (сразу из потока) cout << is_balanced(streambuf_iterator<char>(cin), streambuf_iterator<char>()) << "\n"; } |
Последний раз редактировалось pva, 19-09-2009 в 21:55. Причина: небольшое описалово Отправлено: 21:14, 19-09-2009 | #4 |
Будем жить, Маэстро... Сообщения: 6694
|
Профиль | Сайт | Отправить PM | Цитировать pva, Мастер узнаётся по перу.
|
|
------- Отправлено: 22:55, 19-09-2009 | #5 |
Новый участник Сообщения: 33
|
Профиль | Отправить PM | Цитировать так) огромное спасибо) завтра посмотрим что получиться)
|
Отправлено: 22:40, 20-09-2009 | #6 |
Ветеран Сообщения: 5624
|
Профиль | Отправить PM | Цитировать Цитата Drongo:
|
|
------- Отправлено: 01:13, 21-09-2009 | #7 |
Будем жить, Маэстро... Сообщения: 6694
|
Профиль | Сайт | Отправить PM | Цитировать |
------- Отправлено: 12:56, 01-10-2009 | #8 |
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
Ошибка - помогите чайнику ... | Ilyas123 | Тест-форум | 5 | 02-12-2009 12:37 | |
Kerio - Помогите чайнику... | AHaPXuCT13 | Сетевые технологии | 4 | 26-01-2008 13:19 | |
Помогите чайнику..... | Antoshka_flash | Общий по Linux | 8 | 04-01-2006 23:53 | |
Помогите чайнику!!!:( | Axperik | Вебмастеру | 5 | 26-10-2005 07:03 | |
Помогите чайнику | Guest | Общий по FreeBSD | 9 | 23-09-2004 07:21 |
|