Skocz do zawartości


[Free Pascal] Zmienna plikowa w parametrze procedury


10 odpowiedzi w tym temacie

#1 Atlantis86

    Nowy na forum

  • Użytkownicy
  • 8 Postów:

Napisano nie, 03 gru 2006 - 16:25

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:

pascal

var plik : file of ciag;OR-zl)+jhjW
assign (plik, adres pliku);
reset (plik);

 


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?

#2 Toster

    Archon

  • Moderatorzy
  • 1885 Postów:
  • Gadu-Gadu:posiadam

Napisano nie, 03 gru 2006 - 16:38

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

#3 Atlantis86

    Nowy na forum

  • Użytkownicy
  • 8 Postów:

Napisano nie, 03 gru 2006 - 16:48

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


Cytat

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


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

Tak wyglądają derklaracje:

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ąĄąŹŹ

 


Co jest nie tak????

#4 Toster

    Archon

  • Moderatorzy
  • 1885 Postów:
  • Gadu-Gadu:posiadam

Napisano nie, 03 gru 2006 - 17:20

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

#5 Atlantis86

    Nowy na forum

  • Użytkownicy
  • 8 Postów:

Napisano nie, 03 gru 2006 - 17:25

Cytat

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


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

#6 KKKas

    Guru

  • Super użytkownicy
  • 780 Postów:
  • Gadu-Gadu:2541640

Napisano nie, 03 gru 2006 - 17:32

Zrób typ:
delphi

type TCiagFile = file of ciag;

 
i użyj tego typu jako typu argumentu funkcji oraz jako typu zmiennej plik.

#7 Toster

    Archon

  • Moderatorzy
  • 1885 Postów:
  • Gadu-Gadu:posiadam

Napisano nie, 03 gru 2006 - 17:33

jaka procedura czlowieku wez ksiazke.. 3 linijki kodu
delphi


assign(plik,'plik.txt');
Reset(plik);
read(plik, zmY[JN

 


#8 Atlantis86

    Nowy na forum

  • Użytkownicy
  • 8 Postów:

Napisano nie, 03 gru 2006 - 20:42

Cytat

i użyj tego typu jako typu argumentu funkcji oraz jako typu zmiennej plik.


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

#9 KaYou

    Pomocna dłoń

  • Super użytkownicy
  • 269 Postów:
  • Gadu-Gadu:1438618

Napisano nie, 03 gru 2006 - 21:06

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

#10 Wosiedem

    Pomocna dłoń

  • Super użytkownicy
  • 217 Postów:

Napisano nie, 03 gru 2006 - 21:08

Cytat

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

#11 Iskar

    ahaha

  • Super użytkownicy
  • 679 Postów:
  • Gadu-Gadu:5199034

Napisano pon, 04 gru 2006 - 15:22

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.