Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / Помогите студенту !!! / 16 сообщений из 16, страница 1 из 1
26.04.2004, 13:09
    #32496663
Aliga
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите студенту !!!
Программа скорей всего не сложная для вас!
Прогрмма должна быть в консольном режиме С++ Builder 5 она должна искать Скобки {} В *.cpp файле или в *.txt файле и выводить сколько их там есть одна скобка считаеться за открытую из закрытую 1X{} это и есть одна :) если кто может помогите очень нужно !
...
Рейтинг: 0 / 0
26.04.2004, 14:19
    #32496881
JibSkeart
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите студенту !!!
20$


i_i
(';')
(V),(V),,
JS
...
Рейтинг: 0 / 0
26.04.2004, 14:30
    #32496945
funikovyuri
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите студенту !!!
#include <fstream>
#include <iostream>
#include <algorithm>


// здесь будем хранить кол-во скобок
int bracket_count = 0;

// функция, вызываемая для каждого символа в анализируемом потоке
void my_find(istream_chariter::char_type aSymbol)
{
if (aSymbol=='{' or aSymbol=='}')
bracket_count++;

}

void main(void)
{
ifstream cpp_file;
cpp_file.open("test.cpp");

for_each(istream_iterator<char>(cpp_file),istream_iterator<char>(),my_find);

cout << bracket_count << endl;
}
...
Рейтинг: 0 / 0
26.04.2004, 14:41
    #32496995
JibSkeart
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите студенту !!!
Ну вот 20$ лишил


i_i
(';')
(V),(V),,
JS
...
Рейтинг: 0 / 0
27.04.2004, 10:48
    #32498059
Aliga
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите студенту !!!
funikovyuri Спасибо !это то что мне надо !
2 JibSkeart нету совести у тебя у бедного студента 20$ просить, как не стыдно ! Студенты с голоду пухнут а ты !
...
Рейтинг: 0 / 0
27.04.2004, 10:51
    #32498071
JibSkeart
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите студенту !!!
Да ладно я пошутил :))

А вообщето студенты интерестно для чего учатся ?


i_i
(';')
(V),(V),,
JS
...
Рейтинг: 0 / 0
27.04.2004, 11:01
    #32498106
Антон Петров
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите студенту !!!
Дык для корочки же! Чо в натуре как маленький?
...
Рейтинг: 0 / 0
27.04.2004, 11:03
    #32498112
JibSkeart
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите студенту !!!
Блин а я дурак , учился учился ,не выдержал и с третьего курса ушел работать

i_i
(';')
(V),(V),,
JS
...
Рейтинг: 0 / 0
27.04.2004, 11:21
    #32498178
Анатолий Широков
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите студенту !!!
Стараниями funikovyuri этого студента отчислят раньше, так как скобочек программа насчитает в два раза больше, чем требовалось по задаче:

авторесть одна скобка считаеться за открытую из закрытую 1X{} это и есть одна :)
...
Рейтинг: 0 / 0
27.04.2004, 13:38
    #32498587
Анатолий Широков
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите студенту !!!
Не отдадим товарища в запас:

Код: plaintext
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.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
#include <iostream>				// std::cout, std::cerr
#include <fstream>				// std::ifstream
#include <iomanip>				// std::endl
#include <iterator>				// std::istream_iterator
#include <numeric>				// std::accumulate

//
//	счетчик пар вида {}
//
struct pair_counter
{
	//	число открывающих скобок '{'
	int ob_count;
	//	число закрывающих скобок '}'
	int cb_count;

	//	сбрасываем счетчики в ноль
	pair_counter(int ob =  0 , int cb =  0 ) : ob_count(ob), cb_count(cb)
	{
	}

	//	оператор требуемый accumulate
	pair_counter operator+(char ch) const
	{
		return pair_counter(ob_count + (ch == '{'), cb_count + (ch == '}'));
	}

	//	количество пар
	int result() const 
	{
		//	принимаем во внимание тот факт, что входной файл может 
		//	и не содержать полность закрытых блоков: }{} или {{}
		//	поэтому возвращаем только число полностью закрытых блоков
		return (ob_count > cb_count ? cb_count : ob_count);
	}
}; // struct pair_counter..

//
//	основное тело
//
int main(int argc, char *argv[])
{
	//	если входной файл не задан, 
	if( argc <  2  )
	{
		//	вывести правила запуска программы и выйти
		std::cerr <<  "Bracket counter"  << std::endl;
		std::cerr <<  "Usage: "  << argv[ 0 ] <<  " <input file>"  << std::endl;
		return  1 ;
	}
	
	//	открываем входной файл
	std::ifstream f(argv[ 1 ]);

	//	если файл не удалось открыть,
	if( !f )
	{
		//	вывести сообщение и выйти
		std::cerr <<  "error: "  << argv[ 1 ] <<  "is not opened"  << std::endl;
		return  1 ;
	}

	//	подчитываем количество скобок
	std::cout << std::accumulate(std::istream_iterator<char>(f), (std::istream_iterator<char>()), pair_counter()).result() << std::endl;

	//	выходим с нормальный признаком завершения
	return  0 ;
}
...
Рейтинг: 0 / 0
27.04.2004, 14:52
    #32498809
funikovyuri
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите студенту !!!
Анатолий Широков

Да, действительно - упростил я себе задачу - но самую чуть-чуть...

К стати, Анатолий, вы сейчас чем занимаетесь - неужели на С++ пишите? Мне вот, к сожалению, на нем реально сейчас писать не приходится - сюда пишу, чтобы все напрочь не забыть!


PPS>
использование accumulate+struct+operator+ оставляю на вашей совести - но студента жалко ;) Так что без лишнего флейма - вот доделанная версия моего - как я считаю - более простого и читабельного варианта - степень эффективности которого ничем не уступает варианту с функтором+accumulate

Код: plaintext
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.
#include <fstream> 
#include <iostream> 
#include <algorithm> 


// здесь будем хранить кол-во скобок 
int open_bracket_count =  0 ; 
int close_bracket_count =  0 ; 

// функция, вызываемая для каждого символа в анализируемом потоке 
void my_find(istream_chariter::char_type aSymbol) 
{ 
  
if (aSymbol=='{')
      open_bracket_count++; 

if (aSymbol=='}')
      close_bracket_count++; 
} 

void main(void) 
{ 
ifstream cpp_file; 
cpp_file.open( "test.cpp" ); 

for_each(istream_iterator<char>(cpp_file),istream_iterator<char>(),my_find); 

cout << min(open_bracket_count,close_bracket_count) << endl; 
}
...
Рейтинг: 0 / 0
27.04.2004, 14:59
    #32498840
АлексейК
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите студенту !!!
авторСтуденты с голоду пухнут а ты !

знаю я от чего пухнут студенты ))) , но не скажу ...
...
Рейтинг: 0 / 0
27.04.2004, 15:30
    #32498945
Анатолий Широков
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите студенту !!!
авторК стати, Анатолий, вы сейчас чем занимаетесь - неужели на С++ пишите?

Да, кроссплатформенный девелопер, вроде как:). А Вы молодец, что не забрасываете этот язык.

авториспользование accumulate+struct+operator+ оставляю на вашей совести - но студента жалко

Я расчитываю на то, что студент все знает, но не может написать из-за отсутствия времени, в противном случае его и Ваш код не спасет.

Теперь, что касается Вашего модифицированного кода. Если принять во внимание, что компилятор может выполнить оптимизацию по возвращаемому значению в операторе operator+, то мой вариант будет сравним по эффективности с вашим. А вот по масштабируемости Ваш код проигрывает: что, если необходимо подсчитать количество пар ни для одного файла, а для нескольких - это означает, что перед каждым использованием функтора необходимо будет не забыть сбросить глобальные переменные - то есть, возложить на клиента помнить о двух глобальный счетчиках - грех это:).
...
Рейтинг: 0 / 0
27.04.2004, 15:47
    #32498997
funikovyuri
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите студенту !!!
Анатолий Широков

Зд о рова - у меня есть план - к зиме перебраться или в Москву или в Питер (при этом в Питер хочется больше - так что если и работу найду интересную - даже сомневаться не буду) Так что может как-нибудь даже увидимся, кто его знает...

возложить на клиента помнить о двух глобальный счетчиках - грех это:).

Само собой - когда писал все думал добавить функтор или нет - выбрал что попроще
...
Рейтинг: 0 / 0
28.04.2004, 07:23
    #32499640
Aliga
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите студенту !!!
ВСЕМ БОЛЬШОЕ СПАСИБО !
...
Рейтинг: 0 / 0
28.04.2004, 11:56
    #32500228
CEMb
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите студенту !!!
авториспользование accumulate+struct+operator+ оставляю на вашей совести - но студента жалко ;)

И не зря, обычно преподаватели потом, глядя в решение задачи, любят спросить: "А это что у вас тут?...".

"Приключения Электроника" смотрели? :) Как один решил задачу с применением интегралов, а второй даже не знал, как они правильно называются...

авторучился учился ,не выдержал и с третьего курса ушел работать
Я тоже с третьего курса работать :) Но с учиться не ушёл :)

авторНу вот 20$ лишил
А зря. Выложил бы 20 баксов, в следующий раз бы сам всё написал ;)
(... ну чё поделать... тиранические методы воспитания....)
...
Рейтинг: 0 / 0
Форумы / C++ [игнор отключен] [закрыт для гостей] / Помогите студенту !!! / 16 сообщений из 16, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]