UÂżytkownik
Doszły mnie słuchy, że to miała jakaś grupa na zaliczeniu. Ktoś chciał, żebym zrobił i wrzucił to zrobiłem i wrzucam ;P
Tak na szybko co prawda, ale mam nadzieję, że błędów nie ma ;)
Mam nadzieję, że dobrze zrozumiałem polecenie ^^
/* lista w formie kolejki użytkownik podaje maksymalny rozmiar kolejki w elementach listy(klientach) jest jeden prywatny element mówiący ile ma zakupów(liczba int) oraz wskaźnik lub wskaźniki klasa tworząca liste zawiera prywatne elementy: int - max rozmiar kolejki int - aktualna liczba klientów w kolejce zawiera też 3 metody: 1. dodawanie do końca kolejki 2. usuwanie z początku kolejki 3. wyśliwtlanie liczby klinetów */ #include <iostream> #include <conio.h> using namespace std; class link { private: int zakupy; // ilosc zakupow danego klienta link* next; public: link(); link(int, link*); // konstruktory itp itd ~link(); friend class list; }; link :: link() { zakupy = 0; next = NULL; } link :: link(int new_zakupy, link* new_next = NULL) : zakupy(new_zakupy), next(new_next) { } link :: ~link() { next = NULL; } class list { private: int max; // maksymalna dozwolona ilosc klientow w kolejce int klienci; // aktualna ilosc klientow link *head; // wskaznik na pierwszy el. public: list(); ~list(); void set_max(int); // ustawienie maxa przez usera void add_last(int); // dodanie na koniec [jako parametr ilosc zakupow klienta] void remove_first(); // usuniecie void display(); // wyswietlenie }; list :: list() { head = NULL; klienci = 0; // gdy tworzymy kolejke nie ma klientow } list :: ~list() { link *temp; if (head) temp = head->next; // jesli jest pierwszy element, to zapamietujemy adres drugiego while (head) { delete head; // usuwamy pierwszy head = temp; // i na jego miejsce wstawiamy ten zapamietany temp = temp ->next; // i zapamietujemy nastepny } // i tak w kolko ;P } void list :: set_max(int m) { max = m; } void list :: add_last(int ilosc_zakupow) { if (klienci == max) // jesli kolejka jest pelna return; // wychodzimy, bo nie bedziemy stac przeciez tyle w kolejce :] ++klienci; // a jak nie wyjdziemy, to zwiekszamy licznik klientow w kolecje if (!head) // jesli nie ma nikogo w kolejce [takie rzeczy sie zdarzaja?:P] { head = new link(ilosc_zakupow); // dodajemy nowy element na poczatek return; // i wychodzimy } link *temp = head; // a jak mielismy pecha while (temp->next) temp = temp->next; // to idziemy od poczatku kolejki do konca, przesuwajac wskaznik temp temp->next = new link(ilosc_zakupow); // i tworzymy na koncu obiekt } void list :: remove_first() { if (!head) // jesli kolejka jest pusta return; // nic nie usuwamy i wychodzimy --klienci; // a jak ktos jest to zmniejszamy ilosc klientow i wywalamy jegomoscia link *temp = head->next; // zapamietujemy adres drugiego, ktory to zaraz stanie sie pierwszy delete head; // usuwamy pierwszego :] head = temp; // a na jego miejsce dajemy zapamietanego } void list :: display() { cout << klienci << endl; // wyswietlamy ilu jest klientow w kolejeczce if (!head) return; // jak nie ma nikogo to au revoir link *temp = head; while (temp) { cout << temp->zakupy << endl; // jak ktos jest to wyswietlamy jego zakupy :] temp = temp->next; // i przechodzimy na nastepnego } // az sprawdzimy wszystkich } int main() { int temp; list kolejka; // tworzymy kolejke cout << "Podaj maksymalna ilosc klientow: "; cin >> temp; kolejka.set_max(temp); // ustawiamy maksa w kolejce for(int i = 0; i < 5; i++) { cout << "podaj ilosc zakupow klienta: "; cin >> temp; kolejka.add_last(temp); // dodajemy paru interesantow } kolejka.display(); // wyswietlamy ich kolejka.remove_first(); kolejka.remove_first(); kolejka.remove_first(); // usuniecie wszystkich klientow :] kolejka.display(); kolejka.remove_first(); kolejka.remove_first(); getch(); return 0; // i po sprawie mam nadzieje ;] }
EDIT: destruktor nieraz nawala ;P quest za 50exp'a [itemów nie będzie :P] - naprawić :D
Ostatnio edytowany przez Mateusz Buczkowski (2008-05-26 16:52:05)
Offline
UÂżytkownik
maly zastrzezenie
void list :: add_last(int ilosc_zakupow)
{
if (klienci == max) // jesli kolejka jest pelna
.
.
.
.
.
}
powinno byc if(klienci>=max)
oba sposoby beda dzialac poprawnie ael cieply lubi sie czepiac warunkow
Offline
UÂżytkownik
Szczerze powiedziawszy się nie zagłębiałem, ale czy nie jest czasem tak, że on za każdym razem, kiedy zwiększa licznik klientów robi też to porównanie? W takim wypadku nie ma sensu zapisywać >=, bo i tak wysypie w tym konkretnym momencie.
Offline
UÂżytkownik
tró ;P
Offline