Forum grupy T2 I Roku EiT

  • Nie jesteś zalogowany.
  • Polecamy: Moda

#1 2008-05-26 18:24:40

Mateusz Buczkowski

UÂżytkownik

1965860
Zarejestrowany: 2007-10-04
Posty: 23
Punktów :   

Podobno zaliczenie

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 ^^

Kod:

/* 
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 18:52:05)

Offline

 

#2 2008-05-26 22:06:06

Bartek Duszyński

UÂżytkownik

status 5582907
4666043
Zarejestrowany: 2008-01-26
Posty: 38
Punktów :   

Re: Podobno zaliczenie

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

 

#3 2008-05-26 22:09:11

Blood_Shaman

UÂżytkownik

1311777
Zarejestrowany: 2007-10-08
Posty: 41
Punktów :   

Re: Podobno zaliczenie

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

 

#4 2008-05-26 22:49:19

Mateusz Buczkowski

UÂżytkownik

1965860
Zarejestrowany: 2007-10-04
Posty: 23
Punktów :   

Re: Podobno zaliczenie

tró ;P

Offline

 

Stopka forum

RSS
Powered by PunBB 1.2.23
© Copyright 2002–2008 PunBB
Polityka cookies - Wersja Lo-Fi


Darmowe Forum | Ciekawe Fora | Darmowe Fora
GotLink.pl