Skocz do zawartości

Zarchiwizowany

Ten temat jest archiwizowany i nie można dodawać nowych odpowiedzi.

Atlantis86

[Free Pascal] Zmienna plikowa w parametrze procedury

Polecane posty

Pewnie pytanie wyda się banalne dla profesjonalistów, ale za nic nie mogę dojść do przyczyny...

Cel jest następujący: napisać program porównujący kilka algorytmów sortowania. Mam je w poszczególnych procedurach - działających i przetestowanych. Na wejściu przyjmują dwie wartości - jedna to "ciag" (typ array[0..k], gdzie k to ilość elementów) druga to właśnie ilość elementów.

Dane do posortowania mają pochodzić z pliku.
No więc definiuję zmienną plik:

[code=Pascal] var plik : file of ciag;OR-zl)+jhjW
assign (plik, adres pliku);
reset (plik); [/code]

No i tutaj zaczyna się problem... Bo gdy próbuję wywołać którąś ze wspomnianych procedur ze zmienną "plik" jako pierwszym argumentem, wyskakuje mi błąd podczas kompilacji:

Error: Call by var parameters have to match exactly: G

Kompilowane nie pod FPC. Ktoś wie co jest grane?

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
jesli to delphi to powinno byc AssignFile a nie Assign
poza tym jesli zapis to rewrite a nie reset.
a po trzecie probujesz zrobic pewnie odczyt/zapis na zmiennej ktora nie jest tego samego typu co wpisales w file of

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
CYTAT(Toster @ nie, 03 gru 2006 - 17:38) <{POST_SNAPBACK}>jesli to delphi to powinno byc AssignFile a nie Assign

To Free Pascal, ale zależy mi na tym, żeby kompilowało się wstecznie na Turbo Pascalu 7.0 - wiadomo na czym osoba, do której to trafi będzie chciała to sprawdzić? ;P


CYTATpozatym jesli zapis to rewrite a nie reset.

Odczyt gotowego pliku, tylko odczyt...


[quote] a po trzecie probojesz zrobic pewnie odczyt/zapis na zmiennej ktora nie jest tego samego typu co wpisales w file of [/quote]

Może, ale ja nie mogę się dopatrzeć błędu...

Tak wyglądają derklaracje:

[code=Pascal]
const
k = 25631;

type
ciag = array[0..k] of integer;

vaZZ[HXYYZH[OR(%uŹzŚ3$iŁŚy*ZąĆqG&6VGW&R'V&ĆW6'Bf\"6sFVvW\"OQZĆŚŁĄzŹqQąĄąŹŹ [/code]

Co jest nie tak????

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
rety przeciek sam sobie na pytanie odpowiadasz
w twoim przykladzie masz bublesort ktore jako pierweszy parametr przyjmuje zmienna typu ciag. a w procedurze bublesort podajesz zmienna typu file of ciag. Dlatego ci nie dziala

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
[quote] rety przeciek sam sobie na pytanie odpowiadasz
w twoim przykladzie masz bublesort ktore jako pierweszy parametr przyjmuje zmienna typu ciag. a w procedurze bublesort podajesz zmienna typu file of ciag. Dlatego ci nie dziala [/quote]

Żeby tylko to było takie proste... Próbowałem w definicji procedury zmienić "ciag" na "file of ciag" - problem faktycznie został wyeliminowany, jednak na jego miejsce pojawił się nowy...
A mianowicie wtedy bład pojawia się wewnątrz tej procedury, na pierwszym zapisie z użyciem "a[i]" wywala komunikat "Illegal qualifier". Wiem, że pewnie rozwiązanie jest banalne, ale ja na to wpaść nie mogę? wink.gif

A może jakaś prosta procedura, która będzie potrafiła przepisać całą zawartośc takiego pliku do zmiennej typu ciag? W pliku i tak nic nie ma być zapisywane, chodzi jedynie o odczyt tych danych i puszczenie ich na procedury.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
Zrób typ:
[code=Delphi] type TCiagFile = file of ciag; [/code] i użyj tego typu jako typu argumentu funkcji oraz jako typu zmiennej plik.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
jaka procedura czlowieku wez ksiazke.. 3 linijki kodu
[code=Delphi]
assign(plik,'plik.txt');
Reset(plik);
read(plik, zmY[JN [/code]

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
[quote] i użyj tego typu jako typu argumentu funkcji oraz jako typu zmiennej plik. [/quote]

Niestety - wtedy wywala problem, gdy natknie się na "a[i]" - odwołanie do danego miejsca w tej tabeli wewnątrz procedury - wywala "Illegal Qualifier"...
Najlepiej byłoby dać chyba jakąś procedurę, która przepisze zawartość pliku do zwykłej, zmiennej typu ciag...

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
ja proponuje cos prosciejszego . nie baw sie z plikami tylko zosataw read, readln i zrob tak:
napisz program jakby mial czytac dane z klawy skompiluj;
start -
> uruchom : nazwa_programu.exe < wejsce.txt

tyle
mysle ze pomoglem

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
[quote] Niestety - wtedy wywala problem, gdy natknie się na "a[i]" - odwołanie do danego miejsca w tej tabeli wewnątrz procedury - wywala "Illegal Qualifier"...
Najlepiej byłoby dać chyba jakąś procedurę, która przepisze zawartość pliku do zwykłej, zmiennej typu ciag... [/quote]Napisz sobie procedurę, która wczyta/zapisze z pliku strukturę "ciag"...

Przeczytaj:
http://www.komputery-internet.net/turbo/pliki_nietekst.php
ORAZ TO: http://turbopascal.helion.pl/r-18.htm

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
Dodaj [Pascal] przed nazwę tematu i zmień sam temat na bardziej opisowy i w ogóle to przydałyby Ci się znajomości podstaw programowania, bo widze że Twoja wiedza leży.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

×