Предыдущий пост -
Следующий пост -

Задача на ассоциативный массив.

Рубрика: C++, Дата: 6 April, 2013, Автор:
Tags:

Напишите программу, которая читает пары (key, value), а затем вычисляет суммы значений value, соответствующих уникальным значением key.

Сформируйте требования к значениям value и key.

Ну что ж задание нам вроде более менее ясно приступим к написанию списка так сказать.

Получился ассоциативный массив целочисленный, как ассоциативный так и не токо. Сам код файл main.cpp:

//programma kotora9 podcchituvaet cymmy ynikal6nux znachenii po klyuchy
#include <iostream>
using std::cout;
using std::endl;
#include <cstdlib>
using std::exit;
#include <string>
using std::string;

template<typename K,typename V>
struct znach
{
	K key;
	V value;
	znach* prev;
	znach* next;
	
	znach(K k, V v)
	:key(k),value(v),prev(0),next(0){}
};

template<typename K,typename V>
struct programm
{
	znach<K,V>* data;
	V sum;
	K mass[200];
public:
	programm():data(0),sum(0){};
	
	void add(K k, V v)
	{
		if(data==0)
		{
			cout <<"cpicok pyct"<<endl;
			data=new znach<K,V>(k,v);
		}
		else
		{
			cout <<"ect6 elementu"<<endl;
			addHelper(data,k,v);
		}
	}
	void addHelper(znach<K,V>* ptr, K& k, V& v)
	{
		if(ptr->next==0)
		{
			ptr->next=new znach<K,V>(k,v);
			cout <<"mu dobavili vtoroi"<<endl;
		}
		else
			addHelper(ptr->next,k,v);
	}
	
	void print()
	{
		if(data==0)
		{
			cout <<"cpicok pyct"<<endl;
		}
		else
			printHelper(data);
	}
	void printHelper(znach<K,V>* ptr)
	{		
		if(ptr!=0)
			cout <<ptr->key<<' '<<ptr->value<<endl;
		if(ptr->next!=0)
			printHelper(ptr->next);
	}
	
	void printSum()
	{
		if(data==0)
		{
			cout <<"cpicok pyct"<<endl;
		}
		else
		{
			int i=0;
			printSumHelper(data,i);
			/*for(int j=0;j<i;j++)
				cout <<mass[j]<<' ';
			cout <<endl;*/
			printSumHelper2(data,i);
			cout <<"sum= "<<sum<<endl;
		}
	}
	void printSumHelper(znach<K,V>* ptr,int& i)
	{
		if(ptr!=0)
		{
			mass[i++]=ptr->key;
		}
		if(ptr->next!=0)
			printSumHelper(ptr->next,i);
	}
	void printSumHelper2(znach<K,V>* ptr,int& i)
	{
		//cout <<"i= "<<i<<" ptr->next= "<<ptr->next<<endl;
		if(ptr!=0)
		{
			int flag=0;
			for(int j=0;j<i;j++)
				if(mass[j]==ptr->key)
					flag++;
			
			if(flag==1)
			{
				sum+=ptr->value;
			}
		}
		if(ptr->next!=0)
			printSumHelper2(ptr->next,i);
	}
};

int main()
{
	programm<string,int> p;
	
	p.add("hel",3);
	p.add("hel3",4);
	p.add("hel3",4);
	/*p.add(0,1);
	/*p.add(1,2);
	p.add(1,3);
	p.add(2,4);*/
	
	p.print();
	p.printSum();
	
	return 0;
}

Не знаю, что сказать по работе кода. Код ничем не примечательный. Ну да ладно. 🙂

[youtube]http://www.youtube.com/watch?v=pExUpsAqxSw[/youtube]

rss