.
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
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.

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...
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.

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?

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

teraz rozumiem

Nie myslales o tym by zostać wykładowcą

?
21 maj 21:40
Trivial: Nie.
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

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.
21 maj 21:46
asdf: no ale ja to nie Twój poziom
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.
21 maj 22:08
Trivial: Kluczem jest taka sama kolejność zapisywania i odczytywania.
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
21 maj 22:23
asdf: ja...ten program jest do dupy..zaraz go poprawie
21 maj 22:25
Trivial: dobra
asdf. Lecę. Walcz z tym sam.
21 maj 22:30
asdf: Spoko

dzieki

Juz prawie skończyłem

hej
21 maj 22:35
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
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
22 maj 15:07