porterneon Napisano Listopad 30, 2007 Zgłoszenie Share Napisano Listopad 30, 2007 Witam. Musze wczytac plik tekstowy do listy. Mam sobie strukture: struct Dane { char imie[50]; int wiek; Dane *nast; } *osoba; W pliku tekstowym sa dane pacjenta: nazwiako i wiek(format dowolny). Jak wczytac dane z pliku tekstowego do listy jednokierunkowej? Odnośnik do komentarza Udostępnij na innych stronach More sharing options...
Mentat Napisano Grudzień 2, 2007 Zgłoszenie Share Napisano Grudzień 2, 2007 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 ) 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 More sharing options...
porterneon Napisano Grudzień 4, 2007 Autor Zgłoszenie Share Napisano Grudzień 4, 2007 Ok ciag dalszy... Otwieram sobie plik tekstowy do zapisu: bool DoPliku(char * plk, Dane & p){ fstream PlikWyj; PlikWyj.open(plk); } Co i jak zrobic zeby wyczyscic caly plik przed zapisaniem? Odnośnik do komentarza Udostępnij na innych stronach More sharing options...
Mentat Napisano Grudzień 5, 2007 Zgłoszenie Share Napisano Grudzień 5, 2007 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 More sharing options...
porterneon Napisano Grudzień 5, 2007 Autor Zgłoszenie Share Napisano Grudzień 5, 2007 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. Odnośnik do komentarza Udostępnij na innych stronach More sharing options...
Mentat Napisano Grudzień 6, 2007 Zgłoszenie Share Napisano Grudzień 6, 2007 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 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 More sharing options...
porterneon Napisano Grudzień 6, 2007 Autor Zgłoszenie Share Napisano Grudzień 6, 2007 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 More sharing options...
Mentat Napisano Grudzień 6, 2007 Zgłoszenie Share Napisano Grudzień 6, 2007 Sprawdź czy inicjujesz wszystkie zmienne np. korzeń = null przy tworzeniu (nie pamiętam czy C++ to robi sam). Być może gdzieś to przeoczyłeś i program próbuje czytać z obszaru pamięci który nie jest dla niego dostępny. Odnośnik do komentarza Udostępnij na innych stronach More sharing options...
Rekomendowane odpowiedzi
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ę