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

Program Słownik - problem z tłumaczeniem słów
J1
  • Rejestracja:około 12 lat
  • Ostatnio:prawie 12 lat
  • Postów:5
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):
Kopiuj
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.
edytowany 1x, ostatnio: flowCRANE
flowCRANE
Pamiętaj o nadawaniu wątkom sensownych tytułów;
babubabu
  • Rejestracja:około 13 lat
  • Ostatnio:3 miesiące
  • Lokalizacja:Łódź
  • Postów:648
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ć.

edytowany 3x, ostatnio: babubabu
flowCRANE
Ah, spóźniłem 3 minuty ;)
flowCRANE
Moderator Delphi/Pascal
  • Rejestracja:ponad 13 lat
  • Ostatnio:około 4 godziny
  • Lokalizacja:Tuchów
  • Postów:12171
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.


Pracuję nad własną, arcade'ową, docelowo komercyjną grą z gatunku action/adventure w stylu retro (pixel art), programując silnik i powłokę gry od zupełnych podstaw, przy użyciu Free Pascala i SDL3. Więcej informacji znajdziesz na moim mikroblogu.
J1
  • Rejestracja:około 12 lat
  • Ostatnio:prawie 12 lat
  • Postów:5
0

gdzie tu jest opcja edytuj? Dobrze sformatowane?

Kopiuj
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.
babubabu
Nie. Ciągle z d**y. ale lepiej niż było
olesio
@johny1221: Nie umiesz formatować sam, to użyj choćby tego: http://olesio.eu/jcf - a poza tym miałeś uprościć konstrukcje, stosując case. A nie wszdędzie gdzie się dało, do tego się zastosowałeś. Póki kod będzie nadal niedbale sformatowany, jak powyżej, to nikt go tutaj nie przeanalizuje. Chyba, że jest masochistą :/
_13th_Dragon
  • Rejestracja:ponad 19 lat
  • Ostatnio:około 13 godzin
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.


Wykonuję programy na zamówienie, pisać na Priv.
Asm/C/C++/Pascal/Delphi/Java/C#/PHP/JS oraz inne języki.
edytowany 1x, ostatnio: _13th_Dragon
Patryk27
rewind? Nie kojarzę takiej procedury, a dokumentacja również niewiele wskazuje...
_13th_Dragon
Widziałem w jednej jakieś dziwnej odmianie, strasznie mi się spodobało, ale okazało się że tylko tam działa. Dla tego podałem jako lub. Teraz nawet śladu tego nie mogę znaleźć.
J1
  • Rejestracja:około 12 lat
  • Ostatnio:prawie 12 lat
  • Postów:5
0

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

Zobacz pozostały 1 komentarz
J1
a ile oczekujesz ? ;> :D
flowCRANE
@_13th_Dragon - ciekawe, ile wyniesie StrToCash('dzięki dzięki dzięki!')
_13th_Dragon
@furious programming, po pierwsze - WdziecznoscToCash(bylbym); po drugie - to pytanie do @johny1221. ;P
flowCRANE
W tym wypadku wdzięczność zostanie przelana do posta, więc ostatecznie mogłoby zostać Str; Już się nie mieszam... :>
J1
to pomożesz ? ;dd

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.