Pascal-Problem z kodem

0

Witam. Jestem poczatkujacym programista. Dotychczas opieralem sie glownie na jezykach klasy C, z pascalem mialem mialo do czynienia. Bardzo prosze o pomoc w rozwiazaniu problemu z nastepujacym kodem:

{$APPTYPE CONSOLE}

var
a,b:integer;
function f(var x,y:integer):integer;
begin
f:=x+2;
a:=x+2;
end;
function g(x:integer):integer;
begin
g:=a+1;
x:=a+3;
end;

begin
a:=1;
b:=3;
writeln(f(g(a),b):6);
writeln(a+f(g(a),a)/g(a):12:3);
writeln(a+f(a,b)/g(a):12:3);
end.

Bledy przy probie kompilacji:
Linie 19.15, 20.17 -error: can’t take the address of constant expression
Linia 24-fatal: there were 2 errors compiling module, stopping

0

pierwszy parametr funkcji f jest var x:integer;
nie możesz podstawić tam wynik funkcji g().

0

Ok, a mozesz troche konkretniej? jak juz mowilem slabo znam ten jezyk

0

Z kodu

function f(var x,y:integer):integer;

Usuń var i sprawdź.
var oznacza, że tam można przypisać wyłącznie zmienną. Funkcja nie jest zmienną, więc wywala błąd.

0

Dziekuje bardzo za pomoc, pomoglo, program sie kompiluje ale jest jeszcze jeden problem ktory mnie niepokoi a mianowicie wynik zamiast wyswietalac sie 3 razy robi to siedmiokrotnie w dodatku na domiar zlego podajac caly czas jedne i te same wyniki... w tym momencie jestem w kropce... prosilbym o dalsze instrukcje jesli ktos oczywiscie zauwazyl zrodlo/a tego bledu. Z gory bardzo dziekuje.

0
var
  A, B: Integer;

function F(Z, Y: Integer): Integer;
begin
  A := X + 2; 
  Result := A;
end;

function G(X: Integer): Integer;
begin
  Result := A + 1;
  X := A + 3;
end;
 
begin
  A := 1;
  B := 3;
  Writeln(F( G(A), B):6);
  Writeln(A + F( G(A), A ) / G(A):12:3);
  Writeln(A + F(A, B) / G(A):12:3);
end.
  1. Sformatowany kod łatwiej się czyta
  2. Nie wiem coś ty tam zrobił, ale NIE MA MOŻLIWOŚCI żeby było 7 linijek. Może masz zmniejszone okno i się zwijają?
  3. Błąd znalazłem i opiszę go niżej:
    Przykładowo masz sobie Zmienną, i funkcję która podaje wynik dwa razy większy.
var
  Zmienna : Integer;
function DwaRazyWiecej(I: Integer): Integer;
begin
  I := I * 2;
  Result := I;
end;

Funkcja przemnoży parametr i go zwróci. Ale nie pomnoży Ci zmiennej, którą podałeś jako parametr.
Tzn

Zmienna := 4;
Writeln(Zmienna);
Writeln(DwaRazyWiecej(Zmienna));
Writeln(Zmienna);

Powinieneś zobaczyć
4
8
4

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