Drzewo- katalog- blad przy przenszeniu pozycji

profesorq
Użytkownik
Użytkownik
Posty: 384
Rejestracja: 12 lut 2007, o 19:40
Płeć: Mężczyzna
Lokalizacja: wawa
Podziękował: 77 razy
Pomógł: 1 raz

Drzewo- katalog- blad przy przenszeniu pozycji

Post autor: profesorq »

mam bład w funkcji jak w dziale jest kilka pozycji a wycinam
jedna to gdy później wklejam ja w inny dział to wkleja te wszystkie
pozycje zamiast jednej. Moglby ktos znalezc błąd?
Wyjasnienie bledu:
w katalogu głównym mam
1. DVD Shrek
2. CD Shrek 2
3. DVD Shrek 3
i przenosze pozycje 1 do podzialu to zamiast przeniesc jedna przenosci wsyzstkie 3


Oto funkcje odpowiedzialne za wycinanie i przenoszenie

Kod: Zaznacz cały

void WytnijPozycje(wPOZYCJA wycinana){
	if (TEMPP != NULL) {
		printf("Wyciales juz pozycje !!!
");
		return;
	}
	printf("Wycinam pozycje %s
", wycinana->tytul);
	wPOZYCJA kolejny, kolejna, poprzedni, poprzednia;
	kolejny = wycinana->nast;
	poprzedni = wycinana->poprz;
	kolejna = wycinana->nasta;
	poprzednia = wycinana->poprza;
	if (biezacy->pozycja == wycinana)
		biezacy->pozycja = kolejny;
	if (lista_a.pozycja == wycinana)
		lista_a.pozycja = kolejna;
	if (poprzedni != NULL)
		poprzedni->nast = kolejny;
	if (kolejny != NULL) 
		kolejny->poprz = poprzedni;
	if (poprzednia != NULL) 
		poprzednia->nasta = kolejna;
	if (kolejna != NULL) 
		kolejna->poprza = poprzednia;
	TEMPP = wycinana;
}
Ostatnio zmieniony 9 sty 2008, o 10:42 przez profesorq, łącznie zmieniany 2 razy.
smiechowiec
Użytkownik
Użytkownik
Posty: 374
Rejestracja: 21 cze 2007, o 11:28
Płeć: Mężczyzna
Lokalizacja: Łostowice
Pomógł: 146 razy

Drzewo- katalog- blad przy przenszeniu pozycji

Post autor: smiechowiec »

Dodaj na końcu funkcji WytnijKsiazke

Kod: Zaznacz cały

   TEMPP = wycinana;
    TEMPP->nast = NULL;
    TEMPP->poprz = NULL;
    TEMPP->dol = NULL;
    TEMPP->gora = NULL;
profesorq
Użytkownik
Użytkownik
Posty: 384
Rejestracja: 12 lut 2007, o 19:40
Płeć: Mężczyzna
Lokalizacja: wawa
Podziękował: 77 razy
Pomógł: 1 raz

Drzewo- katalog- blad przy przenszeniu pozycji

Post autor: profesorq »

ok dzięki, teraz faktycznie przenosi tylko jedną pozycję
a co może powodować to, że wyszukiwanie wycinanych i przenoszonych pozycji nie działa?
tak jakby one nie istniały
Ostatnio zmieniony 2 sty 2008, o 22:08 przez profesorq, łącznie zmieniany 1 raz.
smiechowiec
Użytkownik
Użytkownik
Posty: 374
Rejestracja: 21 cze 2007, o 11:28
Płeć: Mężczyzna
Lokalizacja: Łostowice
Pomógł: 146 razy

Drzewo- katalog- blad przy przenszeniu pozycji

Post autor: smiechowiec »

Przy przenoszeniu danych najlepiej wogóle nie ruszać jej pozycji na liście alfabetycznej, zarówno w czasie wycinania jak i wklejania bo rozumiem, że przenoszenie nie ma wpływu na pozycję alfabetyczną, a wyszukiwanie korzysta z listy alfabetycznej.
Prawdopodobnie jest jakiś subtelny błąd literowy, który trudno zauważyć np zamiast nast jest nasta.
profesorq
Użytkownik
Użytkownik
Posty: 384
Rejestracja: 12 lut 2007, o 19:40
Płeć: Mężczyzna
Lokalizacja: wawa
Podziękował: 77 razy
Pomógł: 1 raz

Drzewo- katalog- blad przy przenszeniu pozycji

Post autor: profesorq »

a jeszcze ważną rzecz odkryłem
wyszukiwanie nie działa wtedy i tylko wtedy gdy przenoszę pozycje do pustego działu.
Jak przenosze drugą pozycje do tego samego dzialu to ta druga jest a pierwszej nie ma.
(To samo jak jest jedna książka w katalogu głównym i ja wycinam i wklejam w to samo miejsce to wyszukiwarka wyświetla ze nie ma książek w katalogu)
Czyli wynika na to ze przenoszenie do pustego działu przenosi w czarną dziure

Wg mnie wynika na to ze
przenoszone pozycje do pustego działu trafiają o "jedno miejsce" za wcześnie
smiechowiec
Użytkownik
Użytkownik
Posty: 374
Rejestracja: 21 cze 2007, o 11:28
Płeć: Mężczyzna
Lokalizacja: Łostowice
Pomógł: 146 razy

Drzewo- katalog- blad przy przenszeniu pozycji

Post autor: smiechowiec »

Wydaje mi się, że w tym fragmencie kodu brak jest dodania do listy alfabetycznej.

Kod: Zaznacz cały

void PrzeniesPozycje(){
    if (TEMPP == NULL){
        printf("Nie wyciales zadnej pozycji !!!
");
        return;
    }
    if (!SprawdzNumer(TEMPP->numer)){
        printf("W katalogu istnieje plyta o takim samym nr
");
        printf("Zmien jej nr i dopiero wtedy przenies ta plyte
");
        return;
    }
    printf("Przenosze pozycje:
");
    DrukujPozycje(TEMPP);
    printf("do dzialu %s
", biezacy->nazwa);
    TEMPP->rodzic = biezacy;
    wPOZYCJA dodawany = TEMPP;
    if (biezacy->pozycja == NULL) {
            biezacy->pozycja = dodawany;
            /* Bez tej linii brak dodania do listy alfabetycznej */
            /* Co skutkuje brakiem w przeszukiwaniu */
            DodajAlfabet(dodawany); //  <-  bark tej linii !!!!!!
            /* Koniec dodawanego fragmentu */
            return;
    } 
profesorq
Użytkownik
Użytkownik
Posty: 384
Rejestracja: 12 lut 2007, o 19:40
Płeć: Mężczyzna
Lokalizacja: wawa
Podziękował: 77 razy
Pomógł: 1 raz

Drzewo- katalog- blad przy przenszeniu pozycji

Post autor: profesorq »

smiechowiec=cudotwórca
miałeś racje teraz wyszukiwanie działa ok
Ostatnio zmieniony 9 sty 2008, o 10:42 przez profesorq, łącznie zmieniany 2 razy.
esberitox
Użytkownik
Użytkownik
Posty: 49
Rejestracja: 14 gru 2006, o 15:35
Płeć: Mężczyzna
Lokalizacja: wawa
Podziękował: 8 razy

Drzewo- katalog- blad przy przenszeniu pozycji

Post autor: esberitox »

glowny problem chyba polega na dobrym przypisaniu wskaznikow
bo jak chcesz zamienic dzial, to musisz uzyc funkcji UsunGalaz a pozniej z TEMPA i przypisac do biezacego dzialu (tylko musi sie tez zawartosc dzialu z TEMPA dobrze przeniesc
a w drugim przypadku oproznic tempa i tyle chyba i wrocic
profesorq
Użytkownik
Użytkownik
Posty: 384
Rejestracja: 12 lut 2007, o 19:40
Płeć: Mężczyzna
Lokalizacja: wawa
Podziękował: 77 razy
Pomógł: 1 raz

Drzewo- katalog- blad przy przenszeniu pozycji

Post autor: profesorq »

prosilbym zeby tylko wpisalo ze sie nei da przenies i przywrocilo wycinany dzial na swoje miejsce, albo inne sensowne rozwiazanie
ODPOWIEDZ