Skocz do zawartości

C++ - Plik Txt I Lista


porterneon

Rekomendowane odpowiedzi

Hmmm... C to ja się uczyłem na uczelni i to kilka lat temu ale może Cię chociaż naprowadzę, bo gotowego programu Ci raczej nie napiszę (no chyba zmienisz z C++ na PHP :P)

Na początek zapytam się jeszcze czy musisz to robić na liście jednokierunkowej? Bo najoptymalniejsze to nie będzie...

Po pierwsze musisz czytać z pliku dane pacjenta (każdego po kolei). Nie napisałeś jaki format ma plik, a to nie jest bez znaczenia.

Po drugie musisz mieć zmienną typu wskaźnik która będzie korzeniem listy.

Algorytm jest prosty: dopóki plik niepusty czytaj dane pacjenta z pliku, utwórz kolejny element listy i ustaw dane pacjenta, ustaw wskaźnik nast na to co pokazuje zmienna "korzeń", przypisz zmiennej korzeń wskaźnik do nowego elementu i wróć do początku.

To tak w skrócie.

 

Odnośnik do komentarza
Udostępnij na innych stronach

google + fstream = http://www.cplusplus.com/reference/iostream/fstream/

klikam opis metody open ( http://www.cplusplus.com/reference/iostrea...tream/open.html )

jako drugi parametr można podać tryb

konkretnie interesuje nas zapis czyli output i obcięcie pliku czyli truncate

patrząc na podany tam przykład wnioskuję że powinieneś uzyć

    PlikWyj.open(plk, fstream::out | fstream::trunc);

 

Odnośnik do komentarza
Udostępnij na innych stronach

Ciag dalszy ...

Jak dopisac cos na poczatek tej listy?

Kombinuje ale nic mi z tego nie wychodzi. Mam zrobione dodawanie na koniec ale na poczatek cos nie chce dzialac.

Jak powinien wygladac algorytm dopisania na poczatek listy?

Pomozcie.

 

Zastanawiałem się pisząc tamtego posta czy dodawać na koniec czy na początek i wybrałem metodę prostszą do opisania.

OK. Masz Zmienną "korzeń". Na początku jest ona null bo brak jest elementów.

I teraz są takie możliwości dodawania elementów.

 

1) Przepięcie listy do nowego elementu (nowy_element.nast = korzeń) i ustawienie korzenia na nowy element (korzeń = ^nowy_element). Efektem ubocznym jest to że masz listę od końca - korzeń wskazuje na ostatni element z pliku a ten wskazuje na poprzedni itd..

 

2) Przypisanie w nowym elemencie końca listy (nowy_element.nast = null), wyszukanie ostatniego elementu listy (takiego ktory ma nast == null) i przypisanie w tym ostatnim ze następny jest ten nowy (ostatni_element.nast = ^nowy_element). Korzeń wskazuje tutaj na pierwszy element z pliku, który wskazuje następny itd.. Trzeba jednak albo przeszukać całą listę po kolei albo ewentualnie zrobić nową zmienną wskazującą na ostatni element.

 

Algorytm szukania ostatniego elementu trudny nie jest trzeba tylko pamiętać że korzeń jest tylko wskaźnikiem a nie elementem listy wiec nie ma rekordu nast.

Więc jeśli lista jest pusta (korzeń == null) przypisujemy tylko korzeń = ^nowy_element i nie szukamy dalej

 

Algorytm:

a) ostatni_element = korzen

B) dopóki ostatni_element.nast != null wykonaj ostatni_element = ostatni_element.nast

 

3) Możesz oczywiście zrobić np. wstawienie od razu z sortowaniem i wstawiać elementy w środku listy.

 

Pozdrawiam

Odnośnik do komentarza
Udostępnij na innych stronach

Dzieki za podpowiedz.

Udalo sie.

Mam teraz inny klopot.

W tej chwili mam pod reka tylko Dev-C++ do kompilacji kodu.

Program sie kompiluje bez bledow. Za pierwszym razem uruchomil sie i dzialal bez bledow.

Zakonczylem program. Przy ponownyj probie uruchomiwnia programu dostaje blad krytyczny: pamiec nie moze byc czytana.

W Dev-c++ jest "odpluskwiacz" i pod nim program dziala normalnie.

Co moze byc przyczyna takiego zachowania?

 

PS: Ciekawe czy jak zapuszcze to w domu nal inuksie tez beda sie dzialy takie cuda.

Odnośnik do komentarza
Udostępnij na innych stronach

Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto

Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.

Zarejestruj nowe konto

Załóż nowe konto. To bardzo proste!

Zarejestruj się

Zaloguj się

Posiadasz już konto? Zaloguj się poniżej.

Zaloguj się
×
×
  • Dodaj nową pozycję...