Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 25.04.2013, 15:38   #1
dim78
 
Регистрация: 21.12.2012
Сообщений: 6
По умолчанию Задача на c++

Будьте добры помочь написать программу.
По результатам опроса прошлого года известен список 10 политических деятелей в порядке убывания их популярности. Проведен новый опрос. Каждый из N журналистов (N - заданное число) назвал три различные фамилии из этого списка. Требуется получить новый список в порядке убывания популярности политических деятелей и показать место, которое занимал каждый деятель в предыдущем опросе. Предусмотреть проверку: каждый их опрошенных журналистов называл разные фамилии и только из имеющихся в старом списке.
dim78 вне форума Ответить с цитированием
Старый 25.04.2013, 15:52   #2
Abstraction
Старожил
 
Аватар для Abstraction
 
Регистрация: 25.10.2011
Сообщений: 3,178
По умолчанию

Сделать массив из 10 фамилий. Сделать массив из 10 пар целых чисел. Первые компоненты пары заполнить числами от 0 до 9, вторые - нулями. В ходе опроса журналистов находить фамилию, и по соответствующему индексу во втором массиве увеличивать второй компонент пары на 1. Отсортировать второй массив по убыванию второго компонента. Вывести фамилии и места на основании первого компонента.
Abstraction вне форума Ответить с цитированием
Старый 25.04.2013, 15:59   #3
dim78
 
Регистрация: 21.12.2012
Сообщений: 6
По умолчанию

А не могли бы вы написать как это будет выглядеть в программном коде?
dim78 вне форума Ответить с цитированием
Старый 25.04.2013, 16:05   #4
Abstraction
Старожил
 
Аватар для Abstraction
 
Регистрация: 25.10.2011
Сообщений: 3,178
По умолчанию

Цитата:
А не могли бы вы написать как это будет выглядеть в программном коде?
А Вы не могли бы написать, что у Вас сделано? А то, в моём представлении, словосочетания "помочь написать программу" и "написать программу" имеют определённые семантические различия.
И почему вообще задача сменила язык?
Abstraction вне форума Ответить с цитированием
Старый 25.04.2013, 16:10   #5
dim78
 
Регистрация: 21.12.2012
Сообщений: 6
По умолчанию

На паскале у меня ее не получается написать, я совсем недавно начал изучать c++ и поэтому решил через него попытаться сделать... Но результат нулевой
dim78 вне форума Ответить с цитированием
Старый 25.04.2013, 16:14   #6
_Bers
Старожил
 
Регистрация: 16.12.2011
Сообщений: 2,329
По умолчанию

http://programmersforum.ru/showthread.php?t=34061
_Bers вне форума Ответить с цитированием
Старый 25.04.2013, 16:27   #7
Abstraction
Старожил
 
Аватар для Abstraction
 
Регистрация: 25.10.2011
Сообщений: 3,178
По умолчанию

Цитата:
я совсем недавно начал изучать c++ и поэтому решил через него попытаться сделать...
ОК.
1) Написать программу, которая выводит Hello, world! и завершается.
2) Написать программу, которая просит пользователя ввести строку, читает её в переменную типа std::string, затем выводит её и завершается.
3) Написать программу, в которой создаётся массив из 10 элементов типа std::string, после чего в цикле у пользователя запрашивается i-ый элемент и вводится. После этого программа выводит весь список и завершается.
4) Написать программу, в которой создаётся массив из 10 элементов типа std::string и второй массив, из 10 элементов типа int[2]. Первый массив, аналогично пункту 3, запрашивается у пользователя; у второго массива в цикле первый компонент устанавливается в индекс элемента (от 0 до 9), второй в 0.
5) То же, что и в 4, но затем N раз у пользователя запрашиваются три фамилии. Они поочерёдно находятся в первом массиве и во втором массиве у соответствующего элемента второй компонент увеличивается на 1.
6) То же самое, но затем второй массив сортируется по убыванию второго компонента.
7) То же самое, но затем в цикле (по второму массиву) выводятся фамилии, соответствующие первому компоненту.

Приведите код последнего из пунктов, который у Вас получилось выполнить и первого пункта, который у Вас не получилось выполнить (Вашу попытку решения).
Abstraction вне форума Ответить с цитированием
Старый 25.04.2013, 16:57   #8
Rififi
Старожил
 
Регистрация: 19.08.2009
Сообщений: 2,120
По умолчанию

dim78

Вот, сдаёшь и получаешь зачёт автоматом :D

Код:
#include <iostream>
#include <locale>
#include <set>

#include <boost/multi_index_container.hpp>
#include <boost/multi_index/member.hpp>
#include <boost/multi_index/hashed_index.hpp>
#include <boost/multi_index/ordered_index.hpp>
namespace mi = boost::multi_index;

namespace {

	struct Person
	{
		Person(const std::string& fam, unsigned prev) : familiya(fam), previous(prev), current(0)
		{ }

		std::string familiya;
		unsigned previous;
		unsigned current;
	};

	struct Current {};

	typedef mi::multi_index_container<
		Person,
		mi::indexed_by<
			mi::hashed_unique<BOOST_MULTI_INDEX_MEMBER(Person, std::string, familiya) >,
			mi::ordered_non_unique<BOOST_MULTI_INDEX_MEMBER(Person, unsigned, previous), std::greater<unsigned> >,
			mi::ordered_non_unique<mi::tag<Current>, BOOST_MULTI_INDEX_MEMBER(Person, unsigned, current), std::greater<unsigned> >
		> > Politics;

	struct IncrementCurrent
	{ template <typename T> void operator()(T& x) const { ++x.current; } };

	void update_index(Politics& pols, size_t how_many)
	{
		std::set<std::string> s;
		for (size_t i=0; i<how_many;)
		{
			std::string fam;
			std::getline(std::cin, fam);

			auto found = pols.find(fam);
			if (found == pols.cend())
			{
				std::cout << "Нет такой фамилии, насяльника!" << std::endl;
				continue;
			}

			if (s.find(fam) != s.cend())
			{
				std::cout << "Нужна новая фамилия, насяльника!" << std::endl;
				continue;
			}

			pols.modify(found, IncrementCurrent());
			s.insert(fam);
			i++;
		}
	}

	const size_t Resps = 10;

	int main()
	{
		std::locale::global(std::locale(""));

		Politics pols;
		pols.insert(Person("Putin", 10));
		pols.insert(Person("Medved", 9));
		pols.insert(Person("Zhirik", 11));
		// добавить самостоятельно

		for (size_t i=0; i<Resps; i++)
			update_index(pols, 3);

		const auto& current(pols.get<Current>());
		for (auto it = current.cbegin(); it != current.cend(); ++it)
			std::cout << it->familiya << ", Prev: " << it->previous << ", Now: " << it->current << std::endl;

		return 0;
	}
}
Rififi вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
задача на зачёт. проблема Задача на нобелевскую премию! Sabotage5 Паскаль, Turbo Pascal, PascalABC.NET 2 18.03.2013 15:18
Задача по подсчёту статистики использования букв. Другая задача - по длинной арифметике Pascal ABC kimberly Паскаль, Turbo Pascal, PascalABC.NET 3 24.12.2012 17:03
задача на структуру(struct)/задача на работу с файлом SevenArth Помощь студентам 0 26.04.2012 19:06
Задача на оптимальный расчет маршрута (задача в презентации) в табличном процессоре Excel Toofed Помощь студентам 0 30.11.2011 01:12
Задача минимизации дисбаланса на линии сборки (задача минимакса) LenZab Microsoft Office Excel 13 13.03.2011 22:51