matematykaszkolna.pl
. asdf: Trivial Jest jakiś schemat rysowania struktur Bo jak sobie rozrysuję tą baze to wydaje sie banalna, ale szukalem na internecie sposobu/metody przedstawiania graficznego − i nie znalazlem. Jedyne czego nie ogarnąłem to serializacji i deserializacji, a tak to prosty kod emotka
20 maj 21:51
asdf: i jeszcze tego rzutowania nie rozumiem: idPrzedmiot = ((Przedmiot)(przedmioty−>last−>data))−>id + 1; czemu nie moze byc tak? tu chodzi o priorytet wykonywania? idPrzedmiot = (Przedmiot)(przedmioty−>last−>data)−>id + 1; Jakbys mogl wytlumaczyc jak to dokladnie sie dzieje..
20 maj 22:00
Trivial: asdf, ja nie znam tych wszystkich priorytetów operatorów. Wiesz co ma wyższy priorytet: −> czy rzutowanie (x)? Ja nie wiem. emotka Lepiej jawnie nawiasować w takich sytuacjach. Do rozrysowania bazy SQL użyj np. MySQL Workbench
21 maj 20:55
asdf: a to o to po prostu chodzi, zeby zrzutować ten void, bo id już ma swój rzut − int, czyli nie można dać: (Przedmiot)(przedmioty−>last−>data−>id) + 1 tak? bo jakby to wyglądało, rzutować strukture na inta..
21 maj 21:00
Trivial: Tu chodzi o to, że wskaźnik na void nie ma pola id, więc to się nawet nie skompiluje.
21 maj 21:05
asdf: wskaznik na void nie ma id, ale na strukture wskazuje juz ma.
21 maj 21:06
Trivial: Tak, tylko taki wskaźnik nie wie na co wskazuje... emotka
21 maj 21:08
asdf: jeszcze to: int length(List lst) { Node nod = lst−>head; //ustawienie na poczatek listy int count = 0; //licznik while (nod != NULL) { count++; nod = nod−>next; } return count; } Tutaj liczy ile jest tych struktur void serializeList(List lst, int memberSize, FILE *file) { int len = length(lst); // sprawdzenie ilosci struktur w danej listy fwrite(&len, sizeof(int), 1, file); // zapisanie tego i zapisuje ilość tych struktur, a musi byc to w intach? i tego nie rozumiem: void deserializeList(List lst, int memberSize, FILE *file) { int len; fread(&len, sizeof(int), 1, file); while (len > 0) { void *data = malloc(memberSize); // zarezerwowanie pamieci na strukture fread(data, memberSize, 1, file); // wczytanie struktury add(lst, data); // dolaczenie do struktury len−−; // zmniejszenie wskaznika } } do len jest wciskane to & len czy jak?
21 maj 21:11
Trivial: Czy musi być to w intach? A jakie są jeszcze opcje? Do fwrite i fread podaje się adres miejsca, gdzie zapisać rezultat (albo skąd odczytać).
21 maj 21:18
asdf: ale to: int len fread(&len...) to trzeba znac nazwe gdzie zapisywalo sie ilosc tych struktur? a nie mozna dac: int costam fread(&costam...) to tez zadziala?
21 maj 21:22
Trivial: Nazwa jest dowolna.
21 maj 21:23
asdf: to skąd to program wie, ze to jest ilosc tych struktur?
21 maj 21:24
Trivial: Bo odczytujesz to jako pierwsze. emotka Skoro było zapisane jako pierwsze to musi być też pierwsze odczytane.
21 maj 21:26
asdf: a pozniej jak jeszcze raz zapisuje to w ktorym miejscu? emotka jezeli chodzi o struktury...to tez kolejnosc jest wazna?
21 maj 21:27
Trivial: Tak jest ważna. Po zapisie plik wygląda mniej więcej tak: 00 00 10 00 1A 2B 3C EE 3B 00 10 00 1C DA 1C 3E A2 CA 33 8A 2B 33 4C 3D CC CA 12 92 8C 2B 4D 1E ... Przy odczycie mówisz tyle: Odczytaj sizeof(int) bajtów (4 bajty) z pliku i zapisz do len. 00 00 10 00 1A 2B 3C EE 3B 00 10 00 1C DA 1C 3E A2 CA 33 8A 2B 33 4C 3D CC CA 12 92 8C 2B 4D 1E Potem w pętli alokujesz pamięć o rozmiarze memberSize. Przyjmijmy memberSize = 12. Po alokacji odczytujesz dane z pliku: Odczytaj memberSize bajtów (12) z pliku i zapisz do data. 00 00 10 00 1A 2B 3C EE 3B 00 10 00 1C DA 1C 3E A2 CA 33 8A 2B 33 4C 3D CC CA 12 92 8C 2B 4D 1E ... Znowu... 00 00 10 00 1A 2B 3C EE 3B 00 10 00 1C DA 1C 3E A2 CA 33 8A 2B 33 4C 3D CC CA 12 92 8C 2B 4D 1E ... I tak aż odczytasz wszystkie elementy.
21 maj 21:36
asdf: dzieki bardzo emotka teraz rozumiem emotka Nie myslales o tym by zostać wykładowcą ?
21 maj 21:40
Trivial: Nie. emotka
21 maj 21:40
asdf: jeszcze to: void *data = malloc(memberSize); // zarezerwowanie pamieci na strukture fread(data, memberSize, 1, file); // wczytanie struktury add(lst, data); // dolaczenie do struktury czemu add(lst, data), czemu data nie jest rzutowane?
21 maj 21:41
Trivial: A na co ma być rzutowane?
21 maj 21:42
asdf: pomylilem funkcje emotka spoko rozumiem
21 maj 21:43
asdf: przez tą pomoc mam sie liczyc z tym, zeby z egzaminu bez piątki nie wracać?
21 maj 21:44
Trivial: Ja z egzaminu miałem 3.5. emotka
21 maj 21:46
asdf: no ale ja to nie Twój poziom emotka
21 maj 21:46
asdf: jeszcze jedno, dlugość len jest znowu zapisywana na poczatek pliku, a reszta danych jest doczepiana na sam koniec?
21 maj 21:47
Trivial: Po kolei się te listy zapisują: <długość listy przedmiotów> <dane przedmiotów> <długość listy studentów> <dane studentów> <długość listy ocen> <dane ocen>
21 maj 21:52
asdf: no ok..to do dane przedmiotow na koniec są dolaczane te dane co chce zapisac? I jezeli chodzi o <dlugosc listy ...> to ten 4 bity sa nadpisywane czy cos sie z nimi dzieje?
21 maj 21:55
Trivial: W pliku masz jeden wielki ciąg bajtów po kolei tak jak napisałem. Nic nie jest nadpisywane, wszystko jest jedno po drugim. Przy odczytywaniu to Ty interpretujesz jakie te bajty mają znaczenie.
21 maj 22:02
asdf: Ok, to skad program wie, ze ma wczytać "tą długość", a nie tą inną?
21 maj 22:05
Trivial: Program w ogóle nie wie czy w tych danych jest jakaś długość. Te dane nie są rozdzielone. Jeżeli zmieniłbyś gdzieś rozmiar z sizeof(int) na np. 8 to wszystko by się rozsypało. emotka
21 maj 22:08
Trivial: Kluczem jest taka sama kolejność zapisywania i odczytywania. emotka
21 maj 22:09
asdf: ok..to taki przyklad: <długość listy przedmiotów> <dane przedmiotów> <długość listy studentów> <dane studentów> <długość listy ocen> <dane ocen> <długość listy przedmiotów> <dane przedmiotów> <długość listy studentów> <dane studentów> <długość listy ocen> <dane ocen> <długość listy przedmiotów> <dane przedmiotów> <długość listy studentów> <dane studentów> <długość listy ocen> <dane ocen> tak są dane zapisywane kolejno?
21 maj 22:11
Trivial: Nie. To jest zapisywane raz a nie 3 razy (czemu 3 razy?)
21 maj 22:12
Trivial: Najlepiej to stwórz sobie jakąś testową bazę danych, zapisz do pliku i podejrzyj ten plik hex edytorem.
21 maj 22:16
asdf: to wkoncu jak to jest zapisywane...? <długość listy przedmiotów> <dane przedmiotów> (po pierszym odczycie jest zapisywane na koniec tej kolejki?) itd? <dane przedmiotów> <długość listy studentów> <dane studentów> <długość listy ocen> <dane ocen>
21 maj 22:16
asdf: http://pastebin.com/zRm6qLYf coś mi wywala przy wczytywaniu, sprawdzisz co mam źle?
21 maj 22:23
asdf: ja...ten program jest do dupy..zaraz go poprawie emotka
21 maj 22:25
Trivial: dobra asdf. Lecę. Walcz z tym sam. emotka
21 maj 22:30
asdf: Spoko emotka dzieki emotka Juz prawie skończyłem emotka hej
21 maj 22:35
asdf: http://pastebin.com/PbVsUhmF no i działa emotka chaotycznie pisane, ale działa emotka bez uzywania Twojego kodu − z głowy, a jak nie − to wiki..
21 maj 22:49
asdf: nie o to chodzi, ze nei z Twojego kodu − ale na gotowcach mozna sie nauczyc, ale zrozumiec juz ciężej czasem emotka
21 maj 22:50
asdf: jeszcze jedno: fwrite(nod−>data, memberSize, 1, file); dlaczego nod−>next nie jest zapisywany? to wszystko jest szeregowo umieszczane i nie trzeba wskaźnika na nastepny element?
21 maj 23:36
Trivial: asdf, nod−>next nie można zapisać do pliku, ponieważ po wczytaniu nie miałby on żadnego znaczenia (to adres pamięci, który się na pewno zmieni).
22 maj 10:24
asdf: teraz już wszystko rozumiem, dzięki emotka
22 maj 15:07