Tajemniczy błąd ;O

0

Pisząc dziś program zacząłem na menu no i wyskakuje mi dziwny błąd: w 16:16 oraz 3 następne linijki niżej.
Tak jak by program nie widział tych procedur.

16 / 16 sownik3.pas Error: Illegal expression
17 / 16 sownik
3.pas Error: Illegal expression

uses crt;
var
pol,eng:array[1..255] of string;
x,m:byte;

procedure menu;

begin
clrscr;
writeln('############SLOWNIK#############');
writeln('#     Wybierz słownik:         #');
writeln('#     1. POL-ENG               #');
writeln('#     2. ENG-POL               #');
writeln('################################');
readln(m);
if m=1 then pol;
if m=2 then eng;
if m>2 then menu;
if m<1 then menu;

end;


procedure pol;
begin
clrscr;
writeln('########SLOWNIK POL-ENG#########');
writeln('#     Wybierz opcje:           #');
writeln('#     1. wyszukaj slowo        #');
writeln('#     2. dodaj nowe slowo      #');
writeln('#     3. edytuj slowo          #');
writeln('################################');
readln(m);
if m=1 then spol;
if m=2 then dpol;
if m=3 then epol;
if m<1 then pol;
if m>3 then pol;
end;

procedure eng;
begin
clrscr;
writeln('########SLOWNIK ENG-POL#########');
writeln('#     Wybierz opcje:           #');
writeln('#     1. wyszukaj slowo        #');
writeln('#     2. dodaj nowe slowo      #');
writeln('#     3. edytuj slowo          #');
writeln('################################');
readln(m);
if m=1 then seng;
if m=2 then deng;
if m=3 then eeng;
if m<1 then eng;
if m>3 then eng;
end;



begin
menu
end.
0

Pewnie dlatego, że próbujesz wywołać tablicę jakby była funkcją (masz funkcje o nazwie pol, eng oraz tablice (zmienne) o dokładnie tych samych nazwach).

0

tak jak pisze Patryk, a dokładniej masz konflikt oznaczeń, najpierw definiujesz tablicę o nazwie pol i end, potem używasz jak procedurę (tu zgłasza błąd, że używasz tablic w niezrozumiały sposób), a potem definiujesz pod tymi samymi nazwami procedury.

Dodatkowo masz ukryty błąd pod postacią rekurencji, jeśli m ma złą wartość to powinieneś użyć pętli a nie wywołać tę samą funkcję.

0

Jeszcze jedno, co przyciąga wzrok:

if m>2 then menu;
if m<1 then menu;
{...}
if m<1 then pol;
if m>3 then pol;
{...}
if m<1 then eng;
if m>3 then eng;

jak już koniecznie chcesz to oprzeć na rekurencji to naucz się łączyć warunki:

if (m < 1) or (m > 2) then menu;
{...}
if (m < 1) or (m > 3) then pol;
{...}
if (m < 1) or (m > 3) then eng;

lub operując na zbiorach:

if not (m in [1 .. 2]) then menu;
{...}
if not (m in [1 .. 3]) then pol;
{...}
if not (m in [1 .. 3]) then eng;

Poza tym fakt, rekurencja w tym wypadku jest zła (chyba, że takie dziwne zadanie na przećwiczenie) - lepiej po prostu wykorzystać nieskończoną pętlę i normalnie wykonywać procedury, które po zakończeniu działania wracają do nieskończonej pętli i dalej odbywa się oczekiwanie na wciśnięcie klawisza; Można też zrobić pętlę, w której warunkiem wyjścia jest konkretny znak w zmiennej, do której wczytuje się z klawiatury - do wyboru, do koloru;

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.