Funkcje i Procedury nie wykorzystywanie zmiennych globalnych.

0

Jak zrobic abym procedura czy funkcja zadzialala bez dodawania ich zmiennych (lokalnych) do globalnych?


Program Odlegsc_miedzy_dwoma_punktami_na_plaszczyznie;
Uses WinCrt;
var 
dane,x1,x2,y1,y2,wynik,odleglosc,koniec :real;

procedure CoRobisz;
Begin
Writeln ('Podaj wartosc [x1,x2,y1,y2] aby obliczyc odleglosc punktow');
END;

procedure WczytajDane (var x1,x2,y1,y2 :real);
BeginReadln(x1,x2,y1,y2);
END;

function Oblicz (Odleglosc,wynik,x1,x2,y1,y2 :real):Real;
begin
Wynik:=(SQR(x1-x2)+ sqr(y1-y2));
Wynik:=Odleglosc
END;
BeginCoRobisz;
WczytajDane(x1,x2,y1,y2);koniec :=Oblicz(odleglosc,wynik,x1,x2,y1,y2);
Writeln('');
Writeln('Odleglosc od punktow= ',koniec:8);

END.
0

Czekaj, w tej chwili nie rozumiem, co robisz.
Przecież ten kod można spokojnie zapisać tak:

Program Odlegsc_miedzy_dwoma_punktami_na_plaszczyznie;
Uses WinCrt;
var 
dane,x1,x2,y1,y2,wynik,odleglosc: real;
 
procedure CoRobisz;
Begin
 Writeln ('Podaj wartosc [x1,x2,y1,y2] aby obliczyc odleglosc punktow');
END;
 
procedure WczytajDane;
Begin
 ReadLn(x1);
 ReadLn(x2);
 ReadLn(y1);
 ReadLn(y2);
END;
 
procedure Oblicz;
begin
 Odleglosc := (SQR(x1-x2)+ sqr(y1-y2));
END;

Begin
 CoRobisz; 
 WczytajDane;
 Oblicz; 
 WriteLn;
 WriteLn('Odleglosc od punktow= ',odleglosc:8);
END.
0

Tak ale tym sposobem wykorzystujesz zmienne globalne a nie lokalne.

0

Aby zrobić to na zmiennych lokalnych potrzebowałbyś po prostu wszystko walnąć w jedną procedurę/funkcję.
Z tym masz problem?

0

Szczerze TAK t moze moj 2/3 program na funkcjach.

Mógł byś pokazać? Bo nie moge w googlach znależć tego a w podręczniku nie jest to wyjaśnione

0

No, to jeżeli przerobić by całość na jedną procedurę, to może to być np.tak:

Program abc;

procedure Prog;
var x1,x2,y1,y2,odleglosc: real;
Begin
 WriteLn('Podaj wartosc [x1,x2,y1,y2] aby obliczyc odleglosc punktow');
 ReadLn(x1);
 ReadLn(x2);
 ReadLn(y1);
 ReadLn(y2);

 Odleglosc := (SQR(x1-x2)+ sqr(y1-y2));

 WriteLn('Odleglosc od punktow= ',odleglosc:8);
End;

Begin
 Prog;
END.
0

Ale w sumie nauczyciel robil to na kilku funkcjach i procedurach i zadnej zmiennej uzywanej w nich nie bylo w globalnch.To by nie zdawalo regulaminu jak by tak wszystko razem.

0

No, to jeżeli ma być:
1.Bez zmiennych globalnych
2.Używając kilku funkcji
To może być tak:

Program abc;
 
Function Wczytaj: Real;
Begin
 ReadLn(Result);
End;

Function Oblicz(X1, X2, Y1, Y2: Real);
Begin
 Result := (SQR(X1-X2)+SQR(Y1-Y2));
End;

Procedure Prog;
Var X1, X2, Y1, Y2, Odleglosc: Real;
Begin
 WriteLn('Podaj wartosc [x1,x2,y1,y2] aby obliczyc odleglosc punktow');
 X1 := Wczytaj;
 X2 := Wczytaj;
 Y1 := Wczytaj;
 Y2 := Wczytaj;
 
 Odleglosc := Oblicz(X1, X2, Y1, Y2);
 
 WriteLn('Odleglosc od punktow= ',odleglosc:8);
End;
 
Begin
 Prog;
END.
0

Tym sposobem kazda zmienna mialas by ta sama wartosc. No i zmienna nie moze byc = przyjac jako wartosc funkcje/procedure

0

Ok, czyli tak:

Program abc;
 
Procedure Wczytaj(var Result: Real);
Begin
 ReadLn(Result);
End;
 
Procedure Oblicz(var X1, X2, Y1, Y2, Result: Real);
Begin
 Result := (SQR(X1-X2)+SQR(Y1-Y2));
End;
 
Procedure Prog;
Var X1, X2, Y1, Y2, Odleglosc: Real;
Begin
 WriteLn('Podaj wartosc [x1,x2,y1,y2] aby obliczyc odleglosc punktow');
 Wczytaj(X1);
 Wczytaj(X2);
 Wczytaj(Y1);
 Wczytaj(Y2);
 
 Oblicz(X1, X2, Y1, Y2, Odleglosc);
 
 WriteLn('Odleglosc od punktow= ',odleglosc:8);
End;
 
Begin
 Prog;
END.

?
BTW: czemu każda zmienna miałaby niby mieć tę samą wartość?

0

Zaraz oblukam.

Bo z tego wynika ze kazda ma przypisana wartosc Wczytaj:

X1 := Wczytaj;
X2 := Wczytaj;
Y1 := Wczytaj;
Y2 := Wczytaj;

0

A Wczytaj jest funkcją, która zmienia swój wynik zależnie od tego, co wpisał użytkownik.

0

No metoda dobra. Tylko wywala mi jaki blad (nie kompilacji). Tylko ja chce sie dowiedziec wlasnie jak wywolywac te funkcje i procedury bo jak nie wpisze zmiennych ktore w nich wykorzystuje do globalnych to mi nie dziala.

Mozesz mi wyjasnic o co biega z tymi zmiennymi w nawiasie? Nie na tym przykladzie tylko ogolem po co je sie tam wpisuje a nie tylko sama nazwe procedury aby sie realizowala.

Oblicz( ??????????????????);

0

Tutaj masz szczegółowy opis procedur i funkcji: Procedury i funkcje
;)

0

Okej dzieki, poczytam moze mnie oswieci :D

1 użytkowników online, w tym zalogowanych: 0, gości: 1