Wątek przeniesiony 2015-04-11 19:14 z Kosz przez furious programming.

Wywołanie procedury z modułu

0

Witam.
Napisałem moduł, który zawiera procedurę obliczeń związanych z funkcją kwadratową oraz narysowaniem odpowiedniego wykresu. Nie umiem wywołać teraz tej procedury z modułu.
Dołączam załącznik z kodem źródłowym modułu.
Co powinienem zrobić ??

unit fkwadratowa_modul;

interface
uses crt,graph;
procedure calosc(a,b,c,x1,x2,x0,delta:Real; tryb,sterownik:smallint);



implementation

procedure calosc(a,b,c,x1,x2,x0,delta:Real; tryb,sterownik:smallint);



begin
      writeln;
writeln(' PROGRAM LICZACY MIEJSCA ZEROWE FUNKCJI KWADRATOWEJ I RYSUJACY JEJ WYKRES');
writeln;
writeln(' ax2+bx+c=0   <---musisz podac jego parametry a,b i c');
writeln;

writeln(' parametr a MUSI BYC ROZNY OD ZERA !!!!!!');
write(' a wynosi: ');
readln(a);
write(' b wynosi: ');
readln(b);
write(' c wynosi: ');
readln(c);

 delta:=b*b-4*a*c;



writeln;
writeln(' delta wynosi ',delta:100:2);
writeln;

if (delta>0) and(a>0)  then
begin
x1:=-b-sqrt(delta)/2*a;
x2:=-b+ sqrt(delta)/2*a;
writeln(' funkcja ma 2 miejsca zerowe');
writeln(' mianowicie: ');
writeln;
writeln('-> x1=',x1:10:2);
writeln('-> x2=',x2:10:2);
detectgraph(sterownik,tryb);
initgraph(sterownik,tryb,'');
setcolor(14);
line(100,200,400,200);
line(400,200,370,180);
line(400,200,370,220);
OutTextXY(410,200,'os X');
SetColor(Magenta);
OutTextXY(130,180,'x1/x2');
OutTextXY(270,180,'x1/x2');
setcolor(red);
ellipse(220,130,180,360,40,140);

setcolor(5);                       {kropka nr1}
Circle(185,200,4);
SetFillStyle(CloseDotFill,5);
FloodFill(185,200,5);

setcolor(5);                       {kropka nr2}
Circle(255,200,4);
SetFillStyle(CloseDotFill,5);
FloodFill(255,200,5);

readln;
end;

if (delta>0) and(a<0)  then
begin
x1:=-b-sqrt(delta)/2*a;
x2:=-b+ sqrt(delta)/2*a;
writeln(' funkcja ma 2 miejsca zerowe');
writeln(' mianowicie:');
writeln;
writeln('-> x1=',x1:10:2);
writeln('-> x2=',x2:10:2);
detectgraph(sterownik,tryb);
initgraph(sterownik,tryb,'');
setcolor(14);
line(100,200,400,200);
line(400,200,370,180);
line(400,200,370,220);
OutTextXY(410,204,'os X');
SetColor(Magenta);
OutTextXY(130,180,'x1/x2');
OutTextXY(270,180,'x1/x2');
setcolor(red);
ellipse(220,280,0,180,40,140);

setcolor(5);                       {kropka nr1}
Circle(187,200,4);
SetFillStyle(CloseDotFill,5);
FloodFill(187,200,5);

setcolor(5);                       {kropka nr2}
Circle(253,200,4);
SetFillStyle(CloseDotFill,5);
FloodFill(253,200,5);

readln;
end;


if (delta=0) and(a>0) then
begin
x0:=-b/2*a;
writeln(' funkcja ma 1 miejsce zerowe ');
writeln(' mianowicie: ');
writeln;
writeln('->  x0=',x0:10:2);
detectgraph(sterownik,tryb);
initgraph(sterownik,tryb,'');
setcolor(14);
line(100,200,400,200);
line(400,200,370,180);
line(400,200,370,220);
OutTextXY(410,200,'os X');
SetColor(Cyan);
OutTextXY(215,205,'x0');
setcolor(red);
ellipse(220,60,180,360,40,140);
setcolor(3);
Circle(220,200,4);
SetFillStyle(hatchFill,3);
FloodFill(220,200,3);
readln;
closegraph;
end;

if (delta=0) and(a<0) then
begin
x0:=-b/2*a;
writeln(' funkcja ma 1 miejsce zerowe ');
writeln(' mianowicie: ');
writeln;
writeln('->  x0=',x0:10:2);
detectgraph(sterownik,tryb);
initgraph(sterownik,tryb,'');
setcolor(14);
line(100,200,400,200);
line(400,200,370,180);
line(400,200,370,220);
OutTextXY(410,200,'os X');
SetColor(Cyan);
OutTextXY(215,205,'x0');
setcolor(red);
ellipse(220,340,0,180,40,140);
setcolor(3);
Circle(220,200,4);
SetFillStyle(hatchFill,3);
FloodFill(220,200,3);
readln;
closegraph;
end;

if (delta<0) and(a>0) then
begin
writeln(' funkcja nie ma miejsc zerowych');
detectgraph(sterownik,tryb);
initgraph(sterownik,tryb,'');
setcolor(14);
line(100,200,400,200);
line(400,200,370,180);
line(400,200,370,220);
OutTextXY(410,200,'os X');
SetColor(LightMagenta);
OutTextXY(215,205,'NO NI MA MIEJSC ZEROWCH :P');
setcolor(red);
ellipse(220,20,180,360,40,140);
readln;
closegraph;
end;


if (delta<0) and(a<0) then
begin
writeln(' funkcja nie ma miejsc zerowych');
detectgraph(sterownik,tryb);
initgraph(sterownik,tryb,'');
setcolor(14);
line(100,200,400,200);
line(400,200,370,180);
line(400,200,370,220);
OutTextXY(410,200,'os X');
SetColor(LightMagenta);
OutTextXY(215,205,'NO NI MA MIEJSC ZEROWCH :P');
setcolor(red);
ellipse(220,400,0,180,40,140);
readln;
closegraph;
end;
end;


end.

przeniesienie kodu z załącznika do posta - @furious programming

0

Przecież oprócz deklaracji i definicji procedury calosc, w tym module nie ma żadnego innego kodu... o.O
Jeżeli nie wiesz w jaki sposób wywołuje się procedury, to powinieneś wrócić do kursu z podstawami programowania;

Parametry a, b i c to składowe równania, więc można podać dowolne liczby; Argumenty x0, x1 i x2 w ogóle nie powinny istnieć - to powinny być lokalne zmienne procedury; Podobnie z parametrem delta;

Natomiast parametry tryb i sterownik służyć mają do wywołania trybu graficznego, więc wypadałoby się zapoznać z dopuszczalnymi ich wartościami dla procedur DetectGraph i InitGraph.

0

Proszę oto kod źródłowy to mojego programu.

program fkwadratowa_z_modulu; 
uses crt,fkwadratowa_modul; 
begin 
calosc; 
end. 
0

Teraz zobacz jak wygląda nagłówek Twojej procedury:

procedure calosc(a,b,c,x1,x2,x0,delta:Real; tryb,sterownik:smallint);

i jak ją wywołujesz:

calosc;

Nie widzisz różnicy? Dlaczego nie podajesz wartości dla wszystkich parametrów?

0

@furious programming Jeśli procedurę wywołam w ten sposób:

program fkwadratowa_z_modulu;
uses crt,fkwadratowa_modul;
begin
procedure calosc(a,b,c,x1,x2,x0,delta:Real; tryb,sterownik:smallint);
end.

To wywala mi dwa razy błąd

"Illegal expression"

i raz "Fatal: Syntax error, ; expected but identifier CALOSC found"

i nie wiem co one oznaczają .
0

Przecież Ty w ogóle nie masz pojęcia o tym, w jaki sposób używa się procedur... Nie będę Ci tłumaczył tego, co napisane jest w każdym kursie dotyczącym podstaw programowania - sam o tym poczytaj i wróć tutaj, jak już nauczysz się podstaw.

0
procedure calosc(a,b,c,x1,x2,x0,delta:Real; tryb,sterownik:smallint);

Przecież to jest deklaracja procedury, a nie jej wywołanie!
Co to Twoim zdaniem miałoby robić i jakie wartości miałyby mieć zmienne a, b, c (...) w tym momencie?

To jest wywołanie:
calosc(a, b, c, x1, x2, x0, delta, tryb, sterownik); - tyle że musisz albo zadeklarować te zmienne i przypisać im wartości, albo przekazać jakieś już stałe wartości, np.:
calosc(1, 2, 3, 4, 5, 6, 7, 8, 9); to rzecz jasna tylko przykład

Poczytaj o funkcjach i procedurach, zanim coś zaczniesz pisać na żywioł :P

0

@Patryk27 wyowałałem procedurę tak jak mówiłeś :

program fkwadratowa_z_modulu;
uses crt,fkwadratowa_modul;
begin
procedure calosc(a,b,c,x1,x2,x0,tryb,sterownik);

end.

Mógłbyś mi napisać jak powinienem wywołać tą procedurę,dalek coś nie działa. Bo jestem w to zielony jak szczypior na wiosnę :P

0

Niby w którym momencie tak napisałem?
Przeczytaj lepiej to co podesłał @furious programming - Rozdział 2

0

@Patryk27 Mógłbys mi tylko napisać program, który wywołuje tą procedurę z modułu. I ROZWIĄZAŁBYŚ MÓJ PROBLEM.

0

Wywołanie procedury oznacza zapisanie jej identyfikatora oraz pomiędzy nawiasami wartości dla parametrów, zgodnych z ich typami; Czyli przykładowo tak:

calosc(4, 5.6, 11, 14.7, -3.5, 3.01, -27.2, 43, -16);
0

Napisałem tą procedurę w programie i ją wywołałem w tym samym programie :

program procedura;
uses crt,graph;
procedure calosc(a,b,c:Real);{<-- tutaj deklaruje procedure}
var
x1,x2,x0,delta:Real;
tryb,sterownik:smallint;
begin
writeln;
writeln(' PROGRAM LICZACY MIEJSCA ZEROWE FUNKCJI KWADRATOWEJ I RYSUJACY JEJ WYKRES');
writeln;
writeln(' ax2+bx+c=0   <---musisz podac jego parametry a,b i c');
writeln;


write(' a wynosi: ');
readln(a);
write(' b wynosi: ');
readln(b);
write(' c wynosi: ');
readln(c);


delta:=(b*b)-(4*a*c);
writeln;
writeln(' delta wynosi ',delta:100:2);
writeln;

if (delta>0) and(a>0)  then
begin
x1:=-b-sqrt(delta)/2*a;
x2:=-b+ sqrt(delta)/2*a;
writeln(' funkcja ma 2 miejsca zerowe');
writeln(' mianowicie: ');
writeln;
writeln('-> x1=',x1:10:2);
writeln('-> x2=',x2:10:2);
detectgraph(sterownik,tryb);
initgraph(sterownik,tryb,'');
setcolor(14);
line(100,200,400,200);
line(400,200,370,180);
line(400,200,370,220);
OutTextXY(410,200,'os X');
SetColor(Magenta);
OutTextXY(165,180,'x1');
OutTextXY(270,180,'x2');
setcolor(red);
ellipse(220,130,180,360,40,140);

setcolor(5);                       {kropka nr1}
Circle(185,200,4);
SetFillStyle(CloseDotFill,5);
FloodFill(185,200,5);

setcolor(5);                       {kropka nr2}
Circle(255,200,4);
SetFillStyle(CloseDotFill,5);
FloodFill(255,200,5);

readln;
end;

if (delta>0) and(a<0)  then
begin
x1:=-b-sqrt(delta)/2*a;
x2:=-b+ sqrt(delta)/2*a;
writeln(' funkcja ma 2 miejsca zerowe');
writeln(' mianowicie:');
writeln;
writeln('-> x1=',x1:10:2);
writeln('-> x2=',x2:10:2);
detectgraph(sterownik,tryb);
initgraph(sterownik,tryb,'');
setcolor(14);
line(100,200,400,200);
line(400,200,370,180);
line(400,200,370,220);
OutTextXY(410,204,'os X');
SetColor(Magenta);
OutTextXY(165,180,'x1');
OutTextXY(270,180,'x2');
setcolor(red);
ellipse(220,280,0,180,40,140);

setcolor(5);                       {kropka nr1}
Circle(187,200,4);
SetFillStyle(CloseDotFill,5);
FloodFill(187,200,5);

setcolor(5);                       {kropka nr2}
Circle(253,200,4);
SetFillStyle(CloseDotFill,5);
FloodFill(253,200,5);

readln;
end;


if (delta=0) and(a>0) then
begin
x0:=-b/2*a;
writeln(' funkcja ma 1 miejsce zerowe ');
writeln(' mianowicie: ');
writeln;
writeln('->  x0=',x0:10:2);
detectgraph(sterownik,tryb);
initgraph(sterownik,tryb,'');
setcolor(14);
line(100,200,400,200);
line(400,200,370,180);
line(400,200,370,220);
OutTextXY(410,200,'os X');
SetColor(Cyan);
OutTextXY(215,205,'x0');
setcolor(red);
ellipse(220,60,180,360,40,140);
setcolor(3);
Circle(220,200,4);
SetFillStyle(hatchFill,3);
FloodFill(220,200,3);
readln;
closegraph;
end;

if (delta=0) and(a<0) then
begin
x0:=-b/2*a;
writeln(' funkcja ma 1 miejsce zerowe ');
writeln(' mianowicie: ');
writeln;
writeln('->  x0=',x0:10:2);
detectgraph(sterownik,tryb);
initgraph(sterownik,tryb,'');
setcolor(14);
line(100,200,400,200);
line(400,200,370,180);
line(400,200,370,220);
OutTextXY(410,200,'os X');
SetColor(Cyan);
OutTextXY(215,205,'x0');
setcolor(red);
ellipse(220,340,0,180,40,140);
setcolor(3);
Circle(220,200,4);
SetFillStyle(hatchFill,3);
FloodFill(220,200,3);
readln;
closegraph;
end;

if (delta<0) and(a>0) then
begin
writeln(' funkcja nie ma miejsc zerowych');
detectgraph(sterownik,tryb);
initgraph(sterownik,tryb,'');
setcolor(14);
line(100,200,400,200);
line(400,200,370,180);
line(400,200,370,220);
OutTextXY(410,200,'os X');
SetColor(Cyan);
OutTextXY(450,175,'NO NI MA MIEJSC ZEROWCH :P');
setcolor(red);
ellipse(220,20,180,360,40,140);
readln;
closegraph;
end;


if (delta<0) and(a<0) then
begin
writeln(' funkcja nie ma miejsc zerowych');
detectgraph(sterownik,tryb);
initgraph(sterownik,tryb,'');
setcolor(14);
line(100,200,400,200);
line(400,200,370,180);
line(400,200,370,220);
OutTextXY(410,200,'os X');
SetColor(Cyan);
OutTextXY(450,175,'NO NI MA MIEJSC ZEROWCH :P');
setcolor(red);
ellipse(220,400,0,180,40,140);
 readln;
 closegraph;
end;
end;                  {<---- tu ja kończe deklarować }

var                    {<---- tu zaczyna się program}
a1,b1,c1:Real;
begin

calosc(a1,b1,c1);{<-----tu wywołuje procedurę }
readln;
end.

Tylko jak ją chce wywołać z modułu to już nie działa.

0

Co to znaczy nie działa? Opisz dokładnie co się dzieje;

Poza tym nie inicjujesz zmiennych przed przekazaniem ich do procedury, więc nie wiadomo jakie wartości posiadają; Najpierw przypisz im coś, a dopiero później wywołaj procedurę z już zainicjowanymi wartościami.

0

Tylko o to chodzi ze w procedurze sam nadajesz wartosc parametrom a,b,c za pomoca readln a dalej wszytko liczy sie samo. W programie to działa bardzo dobrze :

program procedura;
uses crt,graph;
procedure calosc(a,b,c:Real);
var
x1,x2,x0,delta:Real;
tryb,sterownik:smallint;
begin
writeln;
writeln(' PROGRAM LICZACY MIEJSCA ZEROWE FUNKCJI KWADRATOWEJ I RYSUJACY JEJ WYKRES');
writeln;
writeln(' ax2+bx+c=0   <---musisz podac jego parametry a,b i c');
writeln;


write(' a wynosi: ');
readln(a);
write(' b wynosi: ');
readln(b);
write(' c wynosi: ');
readln(c);


delta:=(b*b)-(4*a*c);
writeln;
writeln(' delta wynosi ',delta:100:2);
writeln;

if (delta>0) and(a>0)  then
begin
x1:=-b-sqrt(delta)/2*a;
x2:=-b+ sqrt(delta)/2*a;
writeln(' funkcja ma 2 miejsca zerowe');
writeln(' mianowicie: ');
writeln;
writeln('-> x1=',x1:10:2);
writeln('-> x2=',x2:10:2);
detectgraph(sterownik,tryb);
initgraph(sterownik,tryb,'');
setcolor(14);
line(100,200,400,200);
line(400,200,370,180);
line(400,200,370,220);
OutTextXY(410,200,'os X');
SetColor(Magenta);
OutTextXY(165,180,'x1');
OutTextXY(270,180,'x2');
setcolor(red);
ellipse(220,130,180,360,40,140);

setcolor(5);                       {kropka nr1}
Circle(185,200,4);
SetFillStyle(CloseDotFill,5);
FloodFill(185,200,5);

setcolor(5);                       {kropka nr2}
Circle(255,200,4);
SetFillStyle(CloseDotFill,5);
FloodFill(255,200,5);

readln;
end;

if (delta>0) and(a<0)  then
begin
x1:=-b-sqrt(delta)/2*a;
x2:=-b+ sqrt(delta)/2*a;
writeln(' funkcja ma 2 miejsca zerowe');
writeln(' mianowicie:');
writeln;
writeln('-> x1=',x1:10:2);
writeln('-> x2=',x2:10:2);
detectgraph(sterownik,tryb);
initgraph(sterownik,tryb,'');
setcolor(14);
line(100,200,400,200);
line(400,200,370,180);
line(400,200,370,220);
OutTextXY(410,204,'os X');
SetColor(Magenta);
OutTextXY(165,180,'x1');
OutTextXY(270,180,'x2');
setcolor(red);
ellipse(220,280,0,180,40,140);

setcolor(5);                       {kropka nr1}
Circle(187,200,4);
SetFillStyle(CloseDotFill,5);
FloodFill(187,200,5);

setcolor(5);                       {kropka nr2}
Circle(253,200,4);
SetFillStyle(CloseDotFill,5);
FloodFill(253,200,5);

readln;
end;


if (delta=0) and(a>0) then
begin
x0:=-b/2*a;
writeln(' funkcja ma 1 miejsce zerowe ');
writeln(' mianowicie: ');
writeln;
writeln('->  x0=',x0:10:2);
detectgraph(sterownik,tryb);
initgraph(sterownik,tryb,'');
setcolor(14);
line(100,200,400,200);
line(400,200,370,180);
line(400,200,370,220);
OutTextXY(410,200,'os X');
SetColor(Cyan);
OutTextXY(215,205,'x0');
setcolor(red);
ellipse(220,60,180,360,40,140);
setcolor(3);
Circle(220,200,4);
SetFillStyle(hatchFill,3);
FloodFill(220,200,3);
readln;
closegraph;
end;

if (delta=0) and(a<0) then
begin
x0:=-b/2*a;
writeln(' funkcja ma 1 miejsce zerowe ');
writeln(' mianowicie: ');
writeln;
writeln('->  x0=',x0:10:2);
detectgraph(sterownik,tryb);
initgraph(sterownik,tryb,'');
setcolor(14);
line(100,200,400,200);
line(400,200,370,180);
line(400,200,370,220);
OutTextXY(410,200,'os X');
SetColor(Cyan);
OutTextXY(215,205,'x0');
setcolor(red);
ellipse(220,340,0,180,40,140);
setcolor(3);
Circle(220,200,4);
SetFillStyle(hatchFill,3);
FloodFill(220,200,3);
readln;
closegraph;
end;

if (delta<0) and(a>0) then
begin
writeln(' funkcja nie ma miejsc zerowych');
detectgraph(sterownik,tryb);
initgraph(sterownik,tryb,'');
setcolor(14);
line(100,200,400,200);
line(400,200,370,180);
line(400,200,370,220);
OutTextXY(410,200,'os X');
SetColor(Cyan);
OutTextXY(450,175,'NO NI MA MIEJSC ZEROWCH :P');
setcolor(red);
ellipse(220,20,180,360,40,140);
readln;
closegraph;
end;


if (delta<0) and(a<0) then
begin
writeln(' funkcja nie ma miejsc zerowych');
detectgraph(sterownik,tryb);
initgraph(sterownik,tryb,'');
setcolor(14);
line(100,200,400,200);
line(400,200,370,180);
line(400,200,370,220);
OutTextXY(410,200,'os X');
SetColor(Cyan);
OutTextXY(450,175,'NO NI MA MIEJSC ZEROWCH :P');
setcolor(red);
ellipse(220,400,0,180,40,140);
 readln;
 closegraph;
end;
end;

var
a1,b1,c1:Real;
begin

calosc(a1,b1,c1);
readln;
end.

tylko jak chce wywołać tą procedurę z modułu to już nie

0

Tu jest ten moduł:

unit fkwadratowa_modul;

interface
uses crt,graph;

procedure calosc(a,b,c:Real);
var
x1,x2,x0,delta:Real;
tryb,sterownik:smallint;

implementation

procedure calosc(a,b,c:Real);
var
x1,x2,x0,delta:Real;
tryb,sterownik:smallint;
begin
writeln;
writeln(' PROGRAM LICZACY MIEJSCA ZEROWE FUNKCJI KWADRATOWEJ I RYSUJACY JEJ WYKRES');
writeln;
writeln(' ax2+bx+c=0   <---musisz podac jego parametry a,b i c');
writeln;


write(' a wynosi: ');
readln(a);
write(' b wynosi: ');
readln(b);
write(' c wynosi: ');
readln(c);


delta:=(b*b)-(4*a*c);
writeln;
writeln(' delta wynosi ',delta:100:2);
writeln;

if (delta>0) and(a>0)  then
begin
x1:=-b-sqrt(delta)/2*a;
x2:=-b+ sqrt(delta)/2*a;
writeln(' funkcja ma 2 miejsca zerowe');
writeln(' mianowicie: ');
writeln;
writeln('-> x1=',x1:10:2);
writeln('-> x2=',x2:10:2);
detectgraph(sterownik,tryb);
initgraph(sterownik,tryb,'');
setcolor(14);
line(100,200,400,200);
line(400,200,370,180);
line(400,200,370,220);
OutTextXY(410,200,'os X');
SetColor(Magenta);
OutTextXY(165,180,'x1');
OutTextXY(270,180,'x2');
setcolor(red);
ellipse(220,130,180,360,40,140);

setcolor(5);                       {kropka nr1}
Circle(185,200,4);
SetFillStyle(CloseDotFill,5);
FloodFill(185,200,5);

setcolor(5);                       {kropka nr2}
Circle(255,200,4);
SetFillStyle(CloseDotFill,5);
FloodFill(255,200,5);

readln;
end;

if (delta>0) and(a<0)  then
begin
x1:=-b-sqrt(delta)/2*a;
x2:=-b+ sqrt(delta)/2*a;
writeln(' funkcja ma 2 miejsca zerowe');
writeln(' mianowicie:');
writeln;
writeln('-> x1=',x1:10:2);
writeln('-> x2=',x2:10:2);
detectgraph(sterownik,tryb);
initgraph(sterownik,tryb,'');
setcolor(14);
line(100,200,400,200);
line(400,200,370,180);
line(400,200,370,220);
OutTextXY(410,204,'os X');
SetColor(Magenta);
OutTextXY(165,180,'x1');
OutTextXY(270,180,'x2');
setcolor(red);
ellipse(220,280,0,180,40,140);

setcolor(5);                       {kropka nr1}
Circle(187,200,4);
SetFillStyle(CloseDotFill,5);
FloodFill(187,200,5);

setcolor(5);                       {kropka nr2}
Circle(253,200,4);
SetFillStyle(CloseDotFill,5);
FloodFill(253,200,5);

readln;
end;


if (delta=0) and(a>0) then
begin
x0:=-b/2*a;
writeln(' funkcja ma 1 miejsce zerowe ');
writeln(' mianowicie: ');
writeln;
writeln('->  x0=',x0:10:2);
detectgraph(sterownik,tryb);
initgraph(sterownik,tryb,'');
setcolor(14);
line(100,200,400,200);
line(400,200,370,180);
line(400,200,370,220);
OutTextXY(410,200,'os X');
SetColor(Cyan);
OutTextXY(215,205,'x0');
setcolor(red);
ellipse(220,60,180,360,40,140);
setcolor(3);
Circle(220,200,4);
SetFillStyle(hatchFill,3);
FloodFill(220,200,3);
readln;
closegraph;
end;

if (delta=0) and(a<0) then
begin
x0:=-b/2*a;
writeln(' funkcja ma 1 miejsce zerowe ');
writeln(' mianowicie: ');
writeln;
writeln('->  x0=',x0:10:2);
detectgraph(sterownik,tryb);
initgraph(sterownik,tryb,'');
setcolor(14);
line(100,200,400,200);
line(400,200,370,180);
line(400,200,370,220);
OutTextXY(410,200,'os X');
SetColor(Cyan);
OutTextXY(215,205,'x0');
setcolor(red);
ellipse(220,340,0,180,40,140);
setcolor(3);
Circle(220,200,4);
SetFillStyle(hatchFill,3);
FloodFill(220,200,3);
readln;
closegraph;
end;

if (delta<0) and(a>0) then
begin
writeln(' funkcja nie ma miejsc zerowych');
detectgraph(sterownik,tryb);
initgraph(sterownik,tryb,'');
setcolor(14);
line(100,200,400,200);
line(400,200,370,180);
line(400,200,370,220);
OutTextXY(410,200,'os X');
SetColor(Cyan);
OutTextXY(450,175,'NO NI MA MIEJSC ZEROWCH :P');
setcolor(red);
ellipse(220,20,180,360,40,140);
readln;
closegraph;
end;


if (delta<0) and(a<0) then
begin
writeln(' funkcja nie ma miejsc zerowych');
detectgraph(sterownik,tryb);
initgraph(sterownik,tryb,'');
setcolor(14);
line(100,200,400,200);
line(400,200,370,180);
line(400,200,370,220);
OutTextXY(410,200,'os X');
SetColor(Cyan);
OutTextXY(450,175,'NO NI MA MIEJSC ZEROWCH :P');
setcolor(red);
ellipse(220,400,0,180,40,140);
 readln;
 closegraph;
end;
end;


end.

A tak ją wywołuje z modułu :

program fkwadratowa_z_modulu;
uses crt,fkwadratowa_modul,graph;
var
a1,b1,c1:Real;
begin
calosc(a1,b1,c1);
readln;

end.

po skompilowaniu programu wywala mi takie błędy:

Warning: Variable A1 does not seem to be initialized
Warning: Variable B1 does not seem to be initialized
Warning: Variable C1 does not seem to be initialized
1

Komunikat ostrzeżenia "mówi" tutaj wszystko. Te zmiennej wydają się być niezainicjowane. Także przyjmują nieokreślone i niemal losowe wartości. I formatuj w końcu kod! W przyklejonym postcie w dziale Delphi/Pascal pisałem jak to robić. Szanuj czytelników Ile mam powtarzać? Mamy być tacy jak Ty i olewać? Ok, to wywalę ten wątek, a @furious programming poproszę żeby nie przywracał więcej. Konsekwentnie nie stosujesz się do zaleceń. Powinieneś najpierw poznać podstawy języka choćby w kompendium na stronie 4p. I dopiero po tym brać się za pisanie czegokolwiek samemu.

0

To w takim razie co oznaczają kominikaty: "multiple definition of 'main' " , "multiple definition of 'PASCALMAIN'" ?? . Może w ten sposób czegoś się dowiem.

1
confirm1409 napisał(a)

Tylko o to chodzi ze w procedurze sam nadajesz wartosc parametrom a,b,c za pomoca readln a dalej wszytko liczy sie samo.

No to po co w ogóle Ci te parametry? W ogóle nie powinno ich być, a w ich miejsce powinny być użyte zmienne lokalne;

po skompilowaniu programu wywala mi takie błędy:

Od kiedy to słowo warning oznacza błąd? Z tych ostrzeżeń wynika, że nie inicjujesz wartości dla tych zmiennych, o czym napisałem Ci w poprzednim swoim poście:

furious programming napisał(a)

Poza tym nie inicjujesz zmiennych przed przekazaniem ich do procedury, więc nie wiadomo jakie wartości posiadają; Najpierw przypisz im coś, a dopiero później wywołaj procedurę z już zainicjowanymi wartościami.

ale jak widać Ty wiesz lepiej;

To w takim razie co oznaczają kominikaty: "multiple definition of 'main' " , "multiple definition of 'PASCALMAIN'" ??

Oznacza to, że masz cholernie stary kompilator i czas pobrać najnowszą jego wersję; O tym dużo wcześniej napisał Ci @Azarien, ale nadal nie stosujesz się do wskazówek.

0

@furious programmingTo jak według cb powinna wyglądać deklaracja mejej procedury w module.

0

Bez parametrów, skoro wewnątrz procedury pobierasz dane z klawiatury (poprzez Readln):

procedure Calosc();

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