Lista
Mariusz:
http://wklej.org/id/2958759/
Co musielibyśmy zmienić w tej liście gdybyśmy chcieli dołożyć tablicę znakową
Jak przepisać ten kod na Pascala
18 lis 12:24
jc: Kod w Pascalu znajdziesz w wielu książkach.
Po co Ci listy? Chcesz się nauczyć, jak implementować struktury wskaźnikowe,
to pisz sam lub patrz jak inni napisali. Chcesz korzystać, sięgnij po gotowe rozwiązania.
18 lis 12:46
Mariusz:
"Kod w Pascalu..."
Oj nie wiem czy znajdę
"Patrz jak inni napisali ..." problem w tym że nie chcą pisać
Większość funkcji znalazłem w sieci a resztę napisałem sam
"Chcesz korzystać..." to gdzie te gotowe rozwiązania
Nie znalazłem całej listy w sieci , szukałem funkcja po funkcji
Na co mi się może przydać lista liczb całkowitych
18 lis 13:09
jc:
Wirth, Algorytmy+ struktury danych=programy, rozdział 4
Paluszyński, Kurs informatyki ..., rozdział 14
18 lis 13:14
18 lis 13:37
Mariusz:
Przypomniałbyś trochę o wskaźnikach w Pascalu
Może udałoby się mi przełożyć to listę z C na Pascala
W tej liście co mam chciałbym dołożyć tablicę znakową która byłaby polem kluczowym
Po listach można by przejść do drzew czy grafów
18 lis 13:49
jc: Pascala używałem dawno i krótko. Wskaźników w Pascalu nie użyłem nigdy.
Nie znam się na takich rzeczach.
18 lis 14:39
Dziadek Mróz:
Nie używam Pascala bo składnia jest inna niż w innych (większości) językach
18 lis 16:28
Mariusz:
Dziadek obserwuję tą modę na C
ale na przykład łańcuchy czy jak kto woli tablice znakowe są kiepsko rozwiązane w C
Funkcje takie jak scanf dobrze współpracują z liczbami ze znakami trochę gorzej
a do tablic znakowych w ogóle się nie nadają
W C++ stosunkowo niedawno to trochę poprawili pisząc klasę do obsługi łańcuchów
W pliku nagłówkowym można by zdefinować makro
i używać tablicy znakowej o stałym rozmiarze ale
operacje na łańcuchach są lepiej pomyślane w Pascalu niż w C
18 lis 19:42
Dziadek Mróz:
A gdzie tam, jeżeli umiejętnie się posłużysz kodem to napisy są spoko. Tylko C zmusza Cię do
kontroli pamięci
18 lis 20:57
Dziadek Mróz:
Ewentualnie napisz swoją bibliotekę definiującą łańcuch znakowy i wciśnij ją do gcc/include/ a
następnie tylko #include <myString.h>
18 lis 21:18
jc: Mariusz, teraz w większości języków programowania nawet bardzo proste funkcje
wyrzucone są poza język.
W C koniec łańcucha znakowego oznaczony jest specjalnym znakiem (po prostu zerem),
w Pascalu wraz łańcuchem przechowywana jest jego długość.
Dla mnie składnia C jest czytelniejsza, a jeszcze czytelniejsza jest składnia pythona.
Wiele języków przejęło składnie C: java, javascript, ...
Pascal przejął składnie z algola. Wirth stworzył Pascala w celach dydaktycznych.,
więc i tak dobrze, że był używany szerzej (w Delphi napisano Skype).
C powstał przy okazji pisania systemu operacyjnego unix na pdp−11.
Był stworzony przez praktyków.
18 lis 22:33
Mariusz:
Tak tylko łańcuchów nie porównasz operatorami to samo z kopiowaniem,
scanf nie czyta poprawnie łańcuchów (nie czyta spacji)
Ja chciałem właśnie łańcuch dodać do tej listy jako pole kluczowe
18 lis 22:46
jc: W C funkcja gets() wczytuje całą linię.
W Pythonie możesz napisać warunek "kot"=="pies".
18 lis 23:00
Mariusz:
Dziadek skoro łańcuchy są dobrze rozwiązane w C to jak wczytujesz dane np z pliku
gdzie nie znasz długości linii
19 lis 13:00
Dziadek Mróz:
Owszem, C nie zapewnia takiego rozwiązania, ale możesz użyć struktury Twojej listy
jednokierunkowej i wstawiać znak za znakiem aż do końca linii a na końcu przenieść to do
zmiennej char *. Bo tak działa klasa std::string w C++.
#define SZ 1024
char linia[SZ];
FILE *plik = fopen("plik.txt", "r");
while (fgets(linia, sizeof(linia), plik))
{
printf("%s %d\n", linia, strlen(linia));
}
19 lis 15:31
Dziadek Mróz:
Albo idziesz naokoło, ale stracisz trochę pamięci:
main:
char *temp[1024] // 2048, ...
...
while (fgets(temp, sizeof(temp), plik))
{
char *str = (char *)malloc(strlen(temp) * sizeof(char));
...
}
19 lis 16:26
Mariusz:
No i właśnie dlatego przydałoby się aby typem danych był void*
bo raz potrzebujemy listy znakowej a później listy z łańcuchem i liczbą całkowitą
jako licznik linii (jeśli chcemy wykorzystać listę do pracy z danymi zawartymi w pliku)
19 lis 23:36
Mariusz:
W C++ jest to trochę lepiej rozwiązane ale dla starszych środowisk i tak trzeba by było
własną klasę łańcucha napisać
W C++ są szablony więc nie trzeba kombinować z void*
W sieci nie widziałem dobrej listy , wszyscy na pokazach piszą dla liczb całkowitych
poza tym kod trzeba było zbierać funkcja po funkcji
20 lis 16:36
jc: Mariusz, w bibliotece stl masz klasę list.
20 lis 21:12