Program Słownik - problem z tłumaczeniem słów

0

Witam, napisałem słownik angielsko-polski, który się odpala , lecz są w nim poniższe błędy ( nie wiem jak je naprawic ) i prosiłbym o pomoc:

  • Niby wszystko działa dobrze, program tłumaczy słowo, które jest zawarte w pliku, ale po wciśnięciu klawisza ENTER wyskakuje komunikat, że słowa nie ma w słowniku i żeby powrócić do MENU muszę parę razy kliknąć enter.
  • Po dodaniu słowa do słownika, program go już nie odczytuje z pliku i nie mogę go przetłumaczyć. Wyskakuje komunikat, że słowa nie ma w słowniku.
    Nie mam pojęcia co jest nie tak. Proszę o przeanalizowanie poniższego kodu (chodzi tu głównie o procedury zawarte w case, bo prawdopodobnie tu jest błąd):
program angpol;
uses crt;
var F,F1  :Text;
wybor :integer;
slowo,o,o1,x,x1 : string;
 
 
procedure Cursoroff;assembler;
asm
   mov ah,01h
   mov ch,10h
   mov cl,00h
   int 10h
end;
procedure Cursoron;assembler;
asm
   mov ah,01h
   mov ch,06h
   mov cl,07h
   int 10h
end;
 
 
procedure piszmenu(ktory: byte);
begin
  textbackground(black);
  textcolor(white);
  gotoxy(1,1); write('ÚÄÄÄÄÄÄÄÄÄÄÄÄÄ MENU ÄÄÄÄÄÄÄÄÄÄÄÄż');
  gotoxy(1,2); write('ł                               ł'); {1}
  gotoxy(1,3); write('ł                               ł'); {2}
  gotoxy(1,4); write('ł                               ł'); {3}
  gotoxy(1,5); write('ł                               ł'); {4}
  gotoxy(1,6); write('ł                               ł'); {5}
  gotoxy(1,7); write('ŔÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄŮ');
  gotoxy(2,2);
  if ktory=1 then begin
                    textbackground(white);
                    textcolor(black);
                    write('Slownik Polsko-Angielski    ');
                    textbackground(black);
                    textcolor(white);
                  end
             else begin
                    write('Slownik Polsko-Angielski    ');
                  end;
  gotoxy(2,3);
  if ktory=2 then begin
                    textbackground(white);
                    textcolor(black);
                    write('Slownik Angielsko-Polski    ');
                    textbackground(black);
                    textcolor(white);
                  end
             else begin
                    write('Slownik Angielsko-Polski    ');
                  end;
  gotoxy(2,4);
  if ktory=3 then begin
                    textbackground(white);
                    textcolor(black);
                    write('Dodaj tlumaczenie           ');
                    textbackground(black);
                    textcolor(white);
                  end
             else begin
                    write('Dodaj tlumaczenie           ');
                  end;
  gotoxy(2,5);
  if ktory=4 then begin
                    textbackground(white);
                    textcolor(black);
                    write('Koniec                      ');
                    textbackground(black);
                    textcolor(white);
                  end
             else begin
                    write('Koniec                      ');
                  end;
 
end;
 
 
 
Function menu: byte;
var i : integer;
    z : char;
begin
  i:=1;
  repeat
    piszmenu(i);
    z:=readkey;
    if ord(z)=0 then begin
                       z:=readkey;
                       case ord(z) of
                       72: if i-1<1 then i:=4
                                    else i:=i-1; {swg}
                       80: if i+1>4 then i:=1
                                    else i:=i+1; {swd}
                       71: i:=1; {home}
                       79: i:=4; {end}
                       end;
                     end;
  until ord(z)=13;
  menu:=i;
end;
 
 
 
procedure slopolang;
var slowo,o,o1: string;
begin
while not eof(f) do
begin
gotoxy(1,13);
write('Wpisz slowo: ');
readln(slowo);
readln(f,o);
readln(f1,o1);
if slowo = o then writeln(o,' - ',o1)
             else writeln('Brak slowa! Dodaj je najpierw do slownika!');
 
 
end;
end;
 
procedure sloangpol;
var slowo,o,o1: string;
begin
while not eof(f) do
begin
gotoxy(1,13);
write('Wpisz slowo: ');
readln(slowo);
readln(f,o);
readln(f1,o1);
if slowo = o1 then writeln(o1,' - ',o)
              else writeln('Brak slowa! Dodaj je najpierw do slownika!');
 
end;
end;
 
 
 
procedure addslo;
var x,x1: string;
begin
gotoxy(1,13);
Write('Podaj polski odpowiednik: ');
readln(x);
write('Podaj angielski odpowiednik: ');
readln(x1);
append(F);
append(F1);
writeln;
writeln(F,x);
writeln;
writeln(F1,x1);
reset(f);
end;
 
 
 
begin
assign(F, 'POL.txt');
assign(F1,'ANG.txt');
 
reset (F);
reset(F1);
 
repeat
 
window(1,1,79,24);
      clrscr;
      cursoroff;
      wybor:=menu;
      cursoron;
      gotoxy(1,23);
 
case wybor of
1:begin
slopolang;
end;
2:begin
sloangpol;
end;
3:begin
addslo;
end;
 
end;
until wybor=4;
 
 
close(f);
close(f1);
end.
0

Jak wpisywanie słowa dajesz w pętli to się nie dziw to raz. A dwa dopóki nie sformatujesz kodu jak trzeba to nie mam zamiaru go analizować.

0

Sformatuj kod i pozbądź się zbędnych jego części (uprość pocedurę piszmenu i zastosuj instrukcję wyboru case .. of w zamian za te drabinki ifów), aby samego siebie nie powtarzać (zasada DRY) a jest duża szansa, że sam znajdziesz błąd.

0

gdzie tu jest opcja edytuj? Dobrze sformatowane?

program angpol;
uses crt;

var F,F1  :Text;
    wybor :integer;
    slowo,o,o1,x,x1 : string;


procedure Cursoroff;assembler;
asm
   mov ah,01h
   mov ch,10h
   mov cl,00h
   int 10h
end;
procedure Cursoron;assembler;
asm
   mov ah,01h
   mov ch,06h
   mov cl,07h
   int 10h
end;


PROCEDURE piszmenu(ktory: byte);
begin
  textbackground(black);
  textcolor(white);
  gotoxy(1,1); write('ÚÄÄÄÄÄÄÄÄÄÄÄÄÄ MENU ÄÄÄÄÄÄÄÄÄÄÄÄż');
  gotoxy(1,2); write('ł                               ł'); {1}
  gotoxy(1,3); write('ł                               ł'); {2}
  gotoxy(1,4); write('ł                               ł'); {3}
  gotoxy(1,5); write('ł                               ł'); {4}
  gotoxy(1,6); write('ł                               ł'); {5}
  gotoxy(1,7); write('ŔÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄŮ');
  gotoxy(2,2);
  if ktory=1 then begin
                    textbackground(white);
                    textcolor(black);
                    write('Slownik Polsko-Angielski    ');
                    textbackground(black);
                    textcolor(white);
                  end
             else begin
                    write('Slownik Polsko-Angielski    ');
                  end;
  gotoxy(2,3);
  if ktory=2 then begin
                    textbackground(white);
                    textcolor(black);
                    write('Slownik Angielsko-Polski    ');
                    textbackground(black);
                    textcolor(white);
                  end
             else begin
                    write('Slownik Angielsko-Polski    ');
                  end;
  gotoxy(2,4);
  if ktory=3 then begin
                    textbackground(white);
                    textcolor(black);
                    write('Dodaj tlumaczenie           ');
                    textbackground(black);
                    textcolor(white);
                  end
             else begin
                    write('Dodaj tlumaczenie           ');
                  end;
  gotoxy(2,5);
  if ktory=4 then begin
                    textbackground(white);
                    textcolor(black);
                    write('Koniec                      ');
                    textbackground(black);
                    textcolor(white);
                  end
             else begin
                    write('Koniec                      ');
                  end;

end;



FUNCTION menu: byte;
var i : integer;
    z : char;
begin
  i:=1;
  repeat
    piszmenu(i);
    z:=readkey;
    if ord(z)=0 then begin
                       z:=readkey;
                       case ord(z) of
                       72: if i-1<1 then i:=4
                                    else i:=i-1; {swg}
                       80: if i+1>4 then i:=1
                                    else i:=i+1; {swd}
                       71: i:=1; {home}
                       79: i:=4; {end}
                       end;
                     end;
  until ord(z)=13;
  menu:=i;
end;



PROCEDURE slopolang;

var slowo,o,o1: string;

  begin
    while not eof(f) do
    begin
      gotoxy(1,13);
      write('Wpisz slowo: ');
      readln(slowo);
      readln(f,o);
      readln(f1,o1);
      if slowo = o then writeln(o,' - ',o1)
                   else writeln('Brak slowa! Dodaj je najpierw do slownika!');


    end;
  end;


PROCEDURE sloangpol;

var slowo,o,o1: string;

  begin
    while not eof(f) do
    begin
      gotoxy(1,13);
      write('Wpisz slowo: ');
      readln(slowo);
      readln(f,o);
      readln(f1,o1);
      if slowo = o1 then writeln(o1,' - ',o)
                    else writeln('Brak slowa! Dodaj je najpierw do slownika!');

    end;
  end;



PROCEDURE addslo;

var x,x1: string;

  begin
   gotoxy(1,13);
     Write('Podaj polski odpowiednik: ');
     readln(x);
     write('Podaj angielski odpowiednik: ');
     readln(x1);
     append(F);
     append(F1);
     writeln;
     writeln(F,x);
     writeln;
     writeln(F1,x1);
     reset(f);
  end;



  begin
    assign(F, 'POL.txt');
    assign(F1,'ANG.txt');

    reset (F);
    reset(F1);

    repeat
      window(1,1,79,24);
      clrscr;
      cursoroff;
      wybor:=menu;
      cursoron;
      gotoxy(1,23);

      case wybor of
      1:begin
          slopolang;
        end;
      2:begin
          sloangpol;
        end;
      3:begin
          addslo;
        end;

      end;
    until wybor=4;


    close(f);
    close(f1);
  end.
0

@olesio, w tym formatowaniu jest porządek, owszem mocno pokręcony ale po kilku sekundach da się strawić.

Na początku procedur:
slopolang;
sloangpol;
brakuje poleceń:
reset (F); reset(F1);
lub:
rewind(F); rewind(F1);
- patrz komentarze.

Chodzi o to że przed odczytem musisz ustawić deskryptor pliku na początek.

Oczywiście procedury:
slopolang;
sloangpol;
I działają poprawnie tylko jeżeli pierwsze słowo w pliku jest takie jak podane, brakuje pętli.

0

@_13th_Dragon, jeżeli mógłbyś powiedziec jakiej pętli brakuje i gdzie to byłbym wdzięczny ;)

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