ďťż

Ładny brzuch

Jo pomoże mi ktoś z procedurami w tym programiku , chodzi o to żeby procedury te miały zmienne globalne czyli nie miał zmiennych lokalnych zreszta wtajemniczeni beda pewnie wiedzieć o co chodzi mi , wkleiłem działający programik ale bez procedur żebyście wiedzieli co i jak :
Program kolejka24; uses crt; type kolejka=^elementkolejki; elementkolejki=record wartosc:integer; nastepny:kolejka; end; var x,y,z:kolejka; var d,k:integer; znak:char; procedure nakolejke; begin new(y); writeln('Podaj wartosc:'); readln(k); y^.wartosc:=k; y^.nastepny:=x; x:=y; end; procedure zkolejki; begin writeln('Z kolejki leci wartosc:'); writeln(x^.wartosc); y:=x; x:=x^.nastepny; dispose(y); end; begin clrscr; new(x); writeln('Podaj pierwsza wartosc:'); readln(d); x^.wartosc:=d; x^.nastepny:=nil; writeln('Co robimy dalej:?? nastos(n), zestosu(z), koniec(k'); repeat znak:=readkey; case znak of 'n': begin nakolejke; end; 'z' : begin if y <> nil then begin zkolejki; end; end; 'k' : break {wyjscie z pentli} else writeln('Podales zly argument'); end; writeln('wartosci:',x^.wartosc); writeln(x^.nastepny^.wartosc); until znak='k'; dispose(x); end.
dzieki ,pozdro gabi :rolleyes:
Użytkownik Bełdzio edytował ten post 16 czerwiec 2005, 22:01



chodzi o to żeby procedury te miały zmienne globalne czyli nie miał zmiennych lokalnych

Ja niezbyt rozumiem (może należę do tych niewtajemnoczonych), ale wydaje mi się, że chodzi o nieoperowanie wprost na zmiennych z sekcji var (ps. czemu zdeklarowaleś 2 sekcje var jedna pod druga?) ?. Można to zrobić dodając do procedury parametr przekazywany przez zmienną. Na przykład:

procedure nakolejke(var igrek, iks: kolejka); begin new(igrek); writeln('Podaj wartosc:'); readln(k); igrek^.wartosc:=k; igrek^.nastepny:=iks; iks:=igrek; end;

IMHO zmienna K powinna byc jednak lokalna w tej procedurze, gdyż nie jest nigdzie indziej wykorzystywana. Tak więc procedura NaKolejke według mnie powinna wyglądać tak:

procedure nakolejke(var igrek, iks: kolejka); var k: kolejka begin new(igrek); writeln('Podaj wartosc:'); readln(k); igrek^.wartosc:=k; igrek^.nastepny:=iks; iks:=igrek; end;

od tej pory po wywołaniu procedury w taki sposób:
nakolejke(y, x); po jej wykonaniu przekazane zmienne bedą miały odpowiednie wartości, tak jakby były one wywoływane bezpośrednio w procedurze.

Mam nadzieję, że to o to chodziło. Jeśli nie to opisz dokładnie probem.
Użytkownik programista1101 edytował ten post 18 czerwiec 2005, 13:54
oto mi własnie chodziło jak nie sprawie ci problemu (nie chce mi sie wertowac setek stron o pascalu) to powiedz mi jeszcze jaka jest różnica miedzy zmiennymi przekazywanymi przez wartosc a prze zmienna w procedurze????? pozdro

po pierwsze zmienne do procedury można przekazywać przez referencję albo przez wartość. jeżeli przekazujesz przez referencję to przekazujesz po prostu wskaźnik do pamięci gdzie jest zmienna zapisywana. jeżeli przez wartość to jest przekazywana przez podanie wartości, a co za tym idzie po wyjściu z procedury masz wartość zmiennej globalnej porzed wejściem w procedurę czyli się nie zmienia. jeżeli chcesz żeby zmienn globalne się zmieniały to musisz je przekazywać przez referencję do procedury.

natomiast zmienne lokalna zdeklarowane wewnątrz procedury działają tylko w jej obrębie. nie można z nich korzystać po za procedurą

pozdro

  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • zsf.htw.pl
  •