Usuwanie elementu ze struktury

0

Siemka. Mam pewien problem. Mam strukturę:

struct Klient
{
	string imie;
	int czas, wynik;
}; 

w main tworzę tablice struktur :

Klient *per = new Klient[ile]; 

I wypełniam w pętli for moją strukturę. I wszystko gra jak do tej pory. I tu pojawia się mój problem. Załóżmy że mam 4 klientów :
[WG mojej struktury wprowadzam dane : IMIE >> CZAS >> WYNIK] czyli :
Karol >> 10 >> 50 // dane w per[0]
Ola >> 10 >> 20 // dane w per[1]
Karol >> 15 >> 70 // dane w per[2]
Małgorzata >> 15 >> 30 dane w per[3]

Chcę zsumować powtarzających się klientów tak że wynik wyjdzie następujący:
Karol >> 25 >> 120 // jak widać karol został zsumowany (czas i wynik) i teraz jest to per[0]
Ola >> 10 >> 20 // per[1]
Małgorzata >> 15 >> 30 // per[2] jak widać Małgorzata zajęła miejsce per[2] a wcześniej miała per[3]
Aktualnie per[3] nie istnieje ...

No i nie wiem jak to zrobić.. Jakieś pomysły ?

0

Musisz użyć listy lub innej struktury danych niż tablica. Tablica ma stałą liczbę elementów i średnio nadaje się do tego typu zadania.

0

jak taka lista będzie wyglądać ?
Tzn jak zrobić listę w której jest np 4 elementy już wypełnione ?

Bo raczej : lista.push_back(tutaj moja struktura); nie zadziała .

0
#include <iostream>
#include <string>
using namespace std;

struct Klient
{
	string imie;
	int czas, wynik;
	Klient *next;
	Klient();
	void print_list();
};

Klient::Klient()
{
	cout << "Podaj w kolejnosci: imie >> czas >> wynik: \n";
	cin >> imie >> czas >> wynik;
	next = NULL;
};
void Klient::print_list()
{
	cout << imie << " " << czas << " " << wynik << " ";
};

void Dodaj(Klient *klient)
{
	Klient *nowy = new Klient;
	while(klient != NULL && (klient->imie).compare(nowy->imie) == -1)
		klient = klient->next;
	if(klient != NULL && (klient->imie).compare(nowy->imie) == 0)
	{
		klient->czas += nowy->czas;
		klient->wynik += nowy->wynik;
		delete nowy;
	}
	else if(klient != NULL && (klient->imie).compare(nowy->imie) == 1)
	{
		nowy->next = klient;
		klient = nowy;
	}
	else
	{
		nowy->next = klient->next;
	}
	delete nowy;
}

void wypisz_klient(Klient *klient)
{
	while(klient != NULL)
	{
		klient->print_list();
		klient = klient->next;
	}
}


int main()
{
	Klient *kl = 0;

	Dodaj(kl);

	wypisz_klient(kl);

	cin.sync();
	cin.get();
	return 0;
} 

ale nie działa ? Nigdy jeszcze nie robiłem żadnych list a na internecie jest g**no do poczytania.

0
lubiezimne napisał(a)

na internecie jest g**no do poczytania.

Po czymś takim to nie mamy o czym rozmawiać, na samym 4programmers.net są arty na ten temat i kilkadziesiąt wątków na forum. Odpuść sobie programowanie, listy to najszerzej omawiana struktura danych w internecie, przy braku umiejętności wyszukiwania i selekcjonowania informacji pozostaje jedynie łopata (sądząc po nicku to już takową posiadasz).

0

Ale co ty właściwie chcesz osiagnąć? Czy te dane muszą najpierw być w postaci rozłącznej a dopiero potem można je "sumować"? Bo jeśli nie, to wystarczy ci zwykła mapa. Napisz jaki problem jest do rozwiazania. Zwykle tak jest że samo poprawne rozwiązanie jest trywialne i znacznie łatwiejsze niż poprawianie jakiegoś dziwnego kodu...

1 użytkowników online, w tym zalogowanych: 0, gości: 1