Lista jednokierunkowa - szukanie osoby z listy i usuwanie poszczególnych elementów.

2015-01-15 16:21
0

Mam taki kod uzupełniony podczas wykonywania zadania domowego: zostały mi 2 funkcje do uzupełnienia:

ZAD 5: Przeanalizuj funkcję: "SzukajOsobe()"
Następnie uzupełnij funkcję: PERSON FindByName(char first, char *last), która będzie zwracała pozycję na liście osoby o przekazanym imieniu i nazwisku. Jeżeli osoba nie istnieje , to funkcja ma zwrócić wartość zero (NULL).

ZAD 6: Przeanalizuj funkcję: "UsunOsobe()". Następnie uzupełnij funkcję: void Delete(PERSON *element), tak aby kasowała wskazany element listy. Należy rozważyć dwa przypadki, jeżeli jest usuwany pierwszy element listy i dowolny inny.

Header.h: http://wklej.org/id/1596508/
Source.cpp: http://wklej.org/id/1596507/

Jak mają wyglądać te funkcje? Zwracała pozycję na liście osoby, czyli mam skombinować licznik i zaczynając od początku zliczać? Jak usuwać wskazane elementy i pierwszy?

Jak uzupełnić te szukanie osoby, bo obecnie nie działa, nie wiem dlaczego biorę na początku pierwszą osobę, porównuje, zaś biorę kolejne jeśli nie są sobie równe przechodzę do następnych, jeśli w liście jej nie ma powinno zwracać NULL, a program crashuje.

@EDIT

Kod wygląda tak, ale nie działa, bo zawsze jest zwracany 1 element:

PERSON *FindByName(char *first, char* last)
{
    //uzupelnic - zadanie 5
    int licznik = 1;
    GetFirst();

    while (strcmp(current->FirstName,first) == 1 && strcmp(current->LastName, last) == 1 && current->Next!=NULL);
    {
        GetNext();
        licznik++;
    }

    if (current->Next == NULL) return NULL;
    else  return current;

}

Wiem, że często mi pomagacie, ale moglibyście mi pomóc tak szybciej, bo mam jutro kolokwium i będę walczył o przepis z egzaminu i chcę już zająć się tylko liczeniem. A zadanie muszę wysłać wykładowcy dziś.

edytowany 1x, ostatnio: SPOJowiecaa, 2015-01-15 16:22

Pozostało 580 znaków

2015-01-15 16:49
0

Skąd pochodzi ten bubel co masz w załączniku?


Wykonuję programy na zamówienie, pisać na Priv.
Asm/C/C++/Pascal/Delphi/Java/C#/PHP/JS oraz inne języki.

Pozostało 580 znaków

2015-01-15 16:53
0
_13th_Dragon napisał(a):

Skąd pochodzi ten bubel co masz w załączniku?

A dokładniej:P? Chodzi Ci o cały kod czy tą funkcję?

Teraz wygląda tak:

PERSON *FindByName(char *first, char* last)
{
    //uzupelnic - zadanie 5
    int licznik = 1;
    GetFirst();

    while (current->Next != NULL && (strcmp(current->FirstName, first) != 0 || strcmp(current->LastName, last) != 0)) ;
    {
        GetNext();
        licznik++;

        if (strcmp(current->FirstName, first) == 0 || strcmp(current->LastName, last) == 0) return current;
        else return NULL;
    } 

}

I nadal nie wiedzieć czemu nie działa.

Pozostało 580 znaków

2015-01-15 16:56
0

Chodzi mi o całość dołączona jako załączniki:

Header.h: http://wklej.org/id/1596508/
Source.cpp: http://wklej.org/id/1596507/
to kompletne badziewie poczynając od projektu.


Wykonuję programy na zamówienie, pisać na Priv.
Asm/C/C++/Pascal/Delphi/Java/C#/PHP/JS oraz inne języki.
to kod wykładowcy, nie wnikam czy to badziewie czy nie, ale razem z nim pisaliśmy go na ćwikach, dopiero co skończył magisterkę, proszę zajmijmy się tymi zadaniami, bo chce je skończyć i uczyć się do kolosa z matmy:P - SPOJowiecaa 2015-01-15 16:59
- to wy to pisaliście czy on? - _13th_Dragon 2015-01-15 17:02
on, napisałem już tą funkcję do szukania osoby, pomóż mi z usuwaniem:P - SPOJowiecaa 2015-01-15 17:03
- dostaliście to w postaci elektronicznej czy sami przepisywaliście nie wiedząc co się dzieje? - _13th_Dragon 2015-01-15 17:06
Był na moodlu do uzupełnienia. - SPOJowiecaa 2015-01-15 17:07
Połowa jest uzupełniona niepoprawnie projekt też zresztą absolutnie badziewny. Kolejna próba nauczania dobrych rzeczy na złym przykładzie skończy się tym że jedynie co wyniesiecie z tego że można takie złe rzeczy robić. - _13th_Dragon 2015-01-15 17:10

Pozostało 580 znaków

2015-01-15 17:06
0

Ten Twój kod:

while (strcmp(current->FirstName,first) == 1 && strcmp(current->LastName, last) == 1 && current->Next!=NULL);
{
     GetNext();
     licznik++;
}

jest równoważny:

while (strcmp(current->FirstName,first) == 1 && strcmp(current->LastName, last) == 1 && current->Next!=NULL)
{}

GetNext();
licznik++;

z powodu średnika na końcu linijki z while.

Pozostało 580 znaków

2015-01-15 17:09
0
twonek napisał(a):

Ten Twój kod:
z powodu średnika na końcu linijki z while.

Wiem, a teraz jak zrobić usuwanie, chciałem się przesuwać od początku listy dopóki wskaźnik next nie będzie pokazywał na element i wtedy podmienić Next na element->next jak to praktycznie zrobić, mam tak narazie.

void Delete(PERSON *element)
{
    GetFirst();

    while (current->Next != element)
    {
        GetNext();
    }

}

Tak to powinno wyglądać: ????

void Delete(PERSON *element)
{
    GetFirst();

    while (current->Next != element)
    {
        GetNext();
    }

    current->Next = element->Next;
    delete element;
}

PS: Chyba działa, bo jak usunąłem i próbowałem wyszukać to nie znalazło, tylko nie wiem czy dobrze przypisuje te wskaźniki:D?

edytowany 2x, ostatnio: SPOJowiecaa, 2015-01-15 17:14

Pozostało 580 znaków

Liczba odpowiedzi na stronę

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