Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » C/C++ - Помогите чайнику разобраться в азах С++

Ответить
Настройки темы
C/C++ - Помогите чайнику разобраться в азах С++

Новый участник


Сообщения: 33
Благодарности: 12

Профиль | Отправить 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
Благодарности: 12

Профиль | Отправить 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



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Аватара для Drongo

Будем жить, Маэстро...


Сообщения: 6694
Благодарности: 1393

Профиль | Сайт | Отправить PM | Цитировать


Цитата Lisiy_egik:
1) Создание счетчика с переменной "open" для "(" (изначально переменные = 0) »
Код: Выделить весь код
int open = 0;
Цитата Lisiy_egik:
Код: Выделить весь код
int main () (
int a , и б с ; 
char f;
»
Неполучится, лучше уже так сделать(хотя и не идеально), на скорую руку и не все пункты, но, думаю, база уже есть...
Код: Выделить весь код
#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;
}

-------
Правильная постановка вопроса свидетельствует о некотором знакомстве с делом.
3нание бывает двух видов. Мы сами знаем предмет — или же знаем, где найти о нём сведения.
[Quick Killer 3.0 Final [OSZone.net]] | [Quick Killer 3.0 Final [SafeZone.cc]] | [Парсер логов Gmer] | [Парсер логов AVZ]

http://tools.oszone.net/Drongo/Userbar/SafeZone_cc.gif


Последний раз редактировалось Drongo, 19-09-2009 в 18:17. Причина: Синтактическая ошибка...

Это сообщение посчитали полезным следующие участники:

Отправлено: 18:05, 19-09-2009 | #3

pva pva вне форума

Аватара для pva

Ветеран


Сообщения: 1180
Благодарности: 279

Профиль | Отправить 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;
}
Принцип работы: представим скобки в виде дерева: открыли скобку - перешли на дочерний уровень, закрыли скобку - ввернулись с дочернего уровня. Нас интересует баланс, то есть чтобы пройдя всё выражение ни разу не выйти за корень и в конце остаться в корне. Обозначим переменной balance глубину дочерней ветки (то есть количество незакрытых скобок).
При чтении с клавиатуры ввод построчно буфферизуется. Поэтому чтобы реально программа остановилась, надо после диеза (#) всё-таки нажать 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";
}
про итераторы много информации, я читал в хелпе от билдера (bcb4stl.hlp)

Последний раз редактировалось pva, 19-09-2009 в 21:55. Причина: небольшое описалово

Это сообщение посчитали полезным следующие участники:

Отправлено: 21:14, 19-09-2009 | #4


Аватара для Drongo

Будем жить, Маэстро...


Сообщения: 6694
Благодарности: 1393

Профиль | Сайт | Отправить PM | Цитировать


pva, Мастер узнаётся по перу.

-------
Правильная постановка вопроса свидетельствует о некотором знакомстве с делом.
3нание бывает двух видов. Мы сами знаем предмет — или же знаем, где найти о нём сведения.
[Quick Killer 3.0 Final [OSZone.net]] | [Quick Killer 3.0 Final [SafeZone.cc]] | [Парсер логов Gmer] | [Парсер логов AVZ]

http://tools.oszone.net/Drongo/Userbar/SafeZone_cc.gif


Отправлено: 22:55, 19-09-2009 | #5


Новый участник


Сообщения: 33
Благодарности: 12

Профиль | Отправить PM | Цитировать


так) огромное спасибо) завтра посмотрим что получиться)

Отправлено: 22:40, 20-09-2009 | #6


Аватара для Delirium

Ветеран


Сообщения: 5624
Благодарности: 936

Профиль | Отправить PM | Цитировать


Цитата Drongo:
pva, Мастер узнаётся по перу »
Препод в универе прорастет, если ему на первом курсе принесут задачу с таким решением и, особенно, с таким пояснением от pva. Супер

-------

Пройденные курсы:
[Microsoft №10174 Sharepoint], [SharePoint]
Мои проекты:[CheckAdmins], [NetSend7], [System Uptime], [Remote RAdmin LogViewer],[Netdom GDI], [Holidays - напоминалка о днях рождения]

А я офис-гуру :)


Отправлено: 01:13, 21-09-2009 | #7


Аватара для Drongo

Будем жить, Маэстро...


Сообщения: 6694
Благодарности: 1393

Профиль | Сайт | Отправить PM | Цитировать


Цитата Lisiy_egik:
только в вуз поступил, и начал учиться с 3й недели, сейчас пытаюсь нагнать программу »
Цитата Delirium:
Препод в универе прорастет, если ему на первом курсе принесут задачу с таким решением »
Это точно, догнал на третей неделе и перегнал на следующий день.

-------
Правильная постановка вопроса свидетельствует о некотором знакомстве с делом.
3нание бывает двух видов. Мы сами знаем предмет — или же знаем, где найти о нём сведения.
[Quick Killer 3.0 Final [OSZone.net]] | [Quick Killer 3.0 Final [SafeZone.cc]] | [Парсер логов Gmer] | [Парсер логов AVZ]

http://tools.oszone.net/Drongo/Userbar/SafeZone_cc.gif


Отправлено: 12:56, 01-10-2009 | #8



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » C/C++ - Помогите чайнику разобраться в азах С++

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Ошибка - помогите чайнику ... 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




 
Переход