Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Listy

Ostatnio zmodyfikowano 2017-11-27 20:26
Autor Wiadomość
pysiek.1996
Temat założony przez niniejszego użytkownika
Listy
» 2017-11-27 09:52:02
Witam serdecznie. Mam napisany kod usuwania z listy jednak wywala on kombilator.
C/C++
void ListaZatrudnionych::Usun( const Pracownik & wzorzec )
{
    Pracownik * temp = new Pracownik, * pierwszy = new Pracownik;
    * temp = wzorzec;
    pierwszy = m_pPierwszy;
    if( pierwszy == NULL )
         cout << "PROBLEM, PUSTO TU";
    else {
       
        while( pierwszy != temp )
        {
            pierwszy = pierwszy->m_nast pny;
        }
        pierwszy = pierwszy->m_nast pny;
    }
}

Mam tez napisaną funkcję dodawania do listy na koniec. Wie ktoś jak to zmienić żeby dodawało alfabetycznie ?

C/C++
void ListaZatrudnionych::DodajNaKoniec( const Pracownik & p )
{
    Pracownik * nowy = new Pracownik;
    * nowy = p;
    if( m_pPierwszy == NULL )
    {
        m_pPierwszy = nowy;
    }
    else
    {
        Pracownik * temp = m_pPierwszy;
        while( temp->m_nast pny != NULL )
        {
            temp = temp->m_nast pny;
        }
        temp->m_nast pny = nowy;
        nowy->m_nast pny = NULL;
       
    }
}
P-167226
Anim
» 2017-11-27 10:25:39
Strasznie dziwnie opisany problem ;p

W pierwszym przypadku podaj komunikat kompilatora (może po prostu błąd wynika z faktu, że używasz polskich znaków ?).

W drugim musisz po prostu po dodaniu pracownika sortować dane. Skoro to są listy, to sortowanie list nie jest trudne do implementacji. Lub zaimplementuj dodawanie danych w konkretne miejsce. Miałoby to polegać na tym, że przesuwasz się wskaźnikiem do momentu napotkania miejsca wstawienia nowego elementu, i przeszczepiasz wskaźniki. Powiedzmy, że masz listę A, B, C, D, F. Chcesz wstawić E. Lecisz od początku i porównujesz najpierw z A, potem, z B, z C, z D , potem z F <- F jest dalej niż powinno być wstawione E, więc doczepiasz wskaźnik z E do F, i przeczepiasz wskaźnik z D do E. Mam nadzieję, że  w miarę zrozumiale to opisałem. Jak nie to polecam stronę eduinf.waw.pl :)

Swoją drogą może lepiej skorzystać z gotowej biblioteki STL <list> :)
P-167227
pysiek.1996
Temat założony przez niniejszego użytkownika
» 2017-11-27 11:12:35
Problemem nie są na pewno polskie litery. Skopiowałem nie tą wersję kodu, która zawiera polskie znaki ;)
P-167229
mateczek
» 2017-11-27 11:38:39
usuwanie: dojeżdżasz pętlą do żądanej osoby i kasujesz.

Nazwy zmiennych nie mogą mieć polskich znaków i spacji!!!! Ogólnie kod jest bezsensu  Polskie znaki
C/C++
void ListaZatrudnionych::Usun( const Pracownik & wzorzec )
{
    Pracownik * temp = new Pracownik, * pierwszy = new Pracownik; //bez sensu operatora new nie powinno byc
    * temp = wzorzec; // po co ??
    pierwszy = m_pPierwszy;
    if( pierwszy == NULL ) //t o jescze może mieć sens
         cout << "PROBLEM, PUSTO TU";
    else {
       
        while( pierwszy != temp )
        {
            pierwszy = pierwszy->m_nast pny; // próba dojechania do celu gdyby nie krzaki w nazwach może by się powidoła
        }
        pierwszy = pierwszy->m_nast pny; // dojechałeś i co ?? dalej jedziesz ?? a usuwania brak.
    }
}

Skopiowałem nie tą wersję kodu, która zawiera polskie znak
 No to wstaw posta na forum jasnowidzów skoro testujesz czytanie w myślach na odległość.
P-167231
pysiek.1996
Temat założony przez niniejszego użytkownika
» 2017-11-27 13:01:45
C/C++
void ListaPracownikow::Usun( const Pracownik & wzorzec )
{
    Pracownik * temp = new Pracownik, * pierwszy = new Pracownik;
    * temp = wzorzec;
    pierwszy = m_pPoczatek;
    if( pierwszy == NULL )
         cout << "PROBLEM, PUSTO TU";
    else {
       
        while( pierwszy != temp )
        {
            pierwszy = pierwszy->m_nNastepny;
        }
        pierwszy = pierwszy->m_nNastepny;
    }
}

C/C++
void ListaPracownikow::DodajNaKoniec( const Pracownik & p )
{
    Pracownik * nowy = new Pracownik;
    * nowy = p;
    if( m_pPoczatek == NULL )
    {
        m_pPoczatek = nowy;
    }
    else
    {
        Pracownik * temp = m_pPoczatek;
        while( temp->m_nNastepny != NULL )
        {
            temp = temp->m_nNastepny;
        }
        temp->m_nNastepny = nowy;
        nowy->m_nNastepny = NULL;
       
    }
}
P-167233
mateczek
» 2017-11-27 20:26:28
//zostaje Ci rozpatrzeć przypadki gdy kasujesz bazę, lub ostatni element listy, lub elementu "wzorzec" nie ma na liście
C/C++
void ListaPracownikow::Usun( const Pracownik & wzorzec )
{
    Pracownik * temp = m_pPoczatek;
    while( temp->m_nNastepny != wzorzec )
    {
        temp = temp->m_nNastepny;
    }
    Pracownik * doSkasowania = temp->m_nNastepny;
    temp->m_nNastepny = doSkasowania->m_nNastepny;
    delete doSkasowania; // usówanie obiektu z listy
}
P-167278
« 1 »
  Strona 1 z 1