Niespodziewany błąd w Pascalu

Bash, C, C++, Java, PHP, Ruby, GTK, Qt i wiele innych - wszystko tutaj.
Awatar użytkownika
wytrzeszcz
Sędziwy Jeż
Sędziwy Jeż
Posty: 47
Rejestracja: 27 mar 2008, 21:13
Płeć: Mężczyzna
Wersja Ubuntu: inny OS
Środowisko graficzne: GNOME
Kontakt:

Niespodziewany błąd w Pascalu

Post autor: wytrzeszcz »

Już raz ten temat poruszałem i został on usunięty z powodu strasznej ortografi mam nadzieje że ten temat niezostanie uznany za spam albo coś w tym rodzaju.
Ale do rzeczy : poniżej są listingi mojej biblioteki i programu .
Program :

Kod: Zaznacz cały

program LegoPT; 
uses crt,lego;
begin
        ramka;
      menuproc;

end. 
Biblioteka:

Kod: Zaznacz cały

{program LegoPT; }
unit lego;
INTERFACE
uses crt;
Procedure textcol(c1,c2:byte);
procedure ramka;
Procedure stan;
Procedure menuproc;
IMPLEMENTATION
var
exit,nrfunkcji:byte;

Procedure textcol (c1,c2:byte);
begin
     textcolor(c1);
     textbackground(c2);
end;

procedure ramka;
var
li:byte;

begin
      textcol (10,2);
      ClrScr ;
      gotoxy (13,1);
      write ('LegoPT 1.0v');
      GotoXY (31,3);
      write ('Stan');
      GotoXY (10,3);
      write ('Użądzenie');
      textcol(0,2);
     li:=0;
     repeat
      GotoXY (8+li,2);
       write (chr(196));
       GotoXY (8+li,12);
       write (chr(196));
       li:=li+1;
      until li=28;
      li:=0;
      repeat
            gotoxy (8,2+li);
            write (chr(179));
            gotoxy (30,2+li);
            write (chr(179));
            gotoxy (36,2+li);
            write (chr(179));
            li:=li+1;
      until li=11;
     GotoXY (8,2);
     write (chr(218));
     GotoXY (36,2);
     write (chr(191));
     GotoXY (8,12);
     write (chr(192));
     GotoXY (36,12);
     write (chr(217));
     GotoXY (30,2);
     write (chr(194));
     GotoXY (30,12);
     write (chr(193));

end;


Procedure stan;
var
   stany:array [1..6]of byte;
   li:byte;
   ch,c:char;
begin
     textcol (10,2);
     li:=0;

    ch:=readkey;
    if (ch='q') and (stany[nrfunkcji]=0) then stany[nrfunkcji]:=1;
    if (ch='q') and (stany[nrfunkcji]=1) then stany[nrfunkcji]:=0;
    if ch=chr(0) then  menuproc;
    repeat
          li:=li+1;
          GotoXY (32,4+li);
          if stany[*]=0 then TextColor(12);
          if stany[*]=1 then TextColor(10);
          write(chr(15));
    until li=6;
    menuproc;
end;


Procedure menuproc;
Var
 c1,c2:char;
 y,menu:byte;
 tablica:array[1..8]of string;
 
 stany:array [1..6]of byte;
   li:byte;
   ch,c:char;
Begin
    menu:=1;
     repeat
     menu:=nrfunkcji;
     y:=0;
     tablica[1]:='1.ulica';
     tablica[2]:='2.warsztat światło';
     tablica[3]:='3.warsztat podnośnik';
     tablica[4]:='4.winda dom';
     tablica[5]:='5.dom światło';
     tablica[6]:='6.kiosk światło';
     tablica[7]:='7.pomoc';
     tablica[8]:='8.wyjśćie';
     GotoXY (10,3+menu);
     textcol(0,7);
     write (tablica[menu]);
     nrfunkcji:=menu;
     repeat
           textcol(10,2);
           y:=y+1;
           gotoxy (10,3+y);
           write (tablica[y]);
     until y=8;
     GotoXY (10,3+menu);
     textcol(0,7);
     write (tablica[menu]);
     nrfunkcji:=menu;
           c1:=ReadKey;
           c2:=' ';
           if c1=chr(0) then c2:=ReadKey;
           if c2='H' then
           begin
                if menu=1 then menu:=9;
                if menu<>1 then dec(menu) ;
           end;
           if c2='P' then
           begin
                if menu=8 then menu:=0;
                if menu<>8 then menu:=menu+1;

           end;

     GotoXY (10,3+menu);
     textcol(0,7);
     write (tablica[menu]);
     nrfunkcji:=menu;
     stan;
until 2=1;
End;

Begin
end.
Cały bajer polega na tym że, zamiast napisów 'użądznie','stan' mam jakieś karzaczki, menu działa opornie i do strzałek trzeba dodawać 'q' aby wogule się dało wybierać pozycje . Wcześniej wspomniane 'q' niedziała jak powinno a zmienna stany[1-3] nie wiadomo dlaczego ma wartość 1 a stany[4-6] ma wartość 0 . Używam fpc na WIN XP (jestem na wakacjach) ,ale sam program będzie miał pracować na ubuntu 8.04.
jak czegoś nie rozumiecie pisać postaram się wytłumaczyć

Ruri - popraw orty i literówki, jak tak samo piszesz kod, to nie dziwne, że nie działa.

masz troche racji !
Awatar użytkownika
DNADesigNed
Sędziwy Jeż
Sędziwy Jeż
Posty: 84
Rejestracja: 30 sie 2007, 17:01
Płeć: Mężczyzna
Wersja Ubuntu: 12.04
Środowisko graficzne: LXDE
Architektura: x86
Kontakt:

Odp: Niespodziewany błąd w Pascalu

Post autor: DNADesigNed »

Duude, ależ masz w tym kodzie rekurencji. Stan wywołuje menuproc, menuproc wywołuje stan, nic dziwnego, że w całym tym bałaganie coś nie działa tak, jak powinno.

Na początek proponuję Ci coś takiego:
1. Utworzenie procedury, która będzie wyświetlać menu.
2. Utworzenie funkcji, która będzie zczytywać akcje wykonane przez użytkownika (i wywoła odpowiednią procedurę/funkcję z funkcjonalnością).

Nigdy nie należy mieszać w kodzie funkcjonalności wejścia/wyjścia z funkcjonalnością logiki aplikacji. Poza tym pamiętaj, żeby nigdy nie robić wywołań w stylu procedura A woła procedurę B, która znowu woła A. Generalnie skończy się to tak ( -> tym oznaczę wywołanie):

Kod: Zaznacz cały

A->B->A->B->A->B->A->B->A->B->A->B->A->B->A->B->stack overflow error...
Podobnie będzie jak procedura/funkcja wywołuje sama siebie bez jakiegoś tzw. warunku końca (czegoś, co skończy te zagnieżdżone wywołania). Postaraj się unikać rekurencji, bo to ostateczność (i źródło wszelkiego zła). ;)
Pozdrawiam
Piotr "MoroS" Mrożek - http://dnadesign.pl/
Awatar użytkownika
wytrzeszcz
Sędziwy Jeż
Sędziwy Jeż
Posty: 47
Rejestracja: 27 mar 2008, 21:13
Płeć: Mężczyzna
Wersja Ubuntu: inny OS
Środowisko graficzne: GNOME
Kontakt:

Odp: Niespodziewany błąd w Pascalu

Post autor: wytrzeszcz »

Dzięki za pomoc i pokazanie kierunku duży + dla ciebie
Awatar użytkownika
DNADesigNed
Sędziwy Jeż
Sędziwy Jeż
Posty: 84
Rejestracja: 30 sie 2007, 17:01
Płeć: Mężczyzna
Wersja Ubuntu: 12.04
Środowisko graficzne: LXDE
Architektura: x86
Kontakt:

Odp: Niespodziewany błąd w Pascalu

Post autor: DNADesigNed »

Nie ma sprawy. W razie jakichś dalszych problemów daj mi znać.
Pozdrawiam
Piotr "MoroS" Mrożek - http://dnadesign.pl/
ODPOWIEDZ

Wróć do „Programowanie”

Kto jest online

Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 3 gości