Помощь - Поиск - Пользователи - Календарь
Полная версия: Переводчик.
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
Костян
Привет всем! Для начала хочу поздравить всех защитников Отечества с днем защитника Отечества. Понимаю что грузить Вас в предпраздничный день просто хамство. Но прошу простить меня и выслушать smile.gif Есть такой вопросик: имеются 2 текстовых файла. Один с словами на английском языке(каждое слово на новой строчке)
другой такой же только на русском. Прога должна загружать оба файла, пользователь вводит слово на англ. языке и если такое есть в первом файле то выводит слово из второго которое распологается по счету на той же строке как и в первом файле! Помогите кто может.
P.S. Я не прошу никого писать прогу за меня(хотя не буду отказыватся), просто обьясните как это можно реализовать
volvo
Просто напросто одновременно с чтением из первого файла - читай информацию и из второго... Если прочитанное слово из первого файла совпадает с введенным - печатается слово, прочитанное из второго...

Хотя это - извращение... Что, если у тебя есть 2000 слов в файле, и пользователь введет 3 слова, расположенных в 1984, 1983, и 1997 строках соответственно, ты будешь 3 раза перелопачивать весь файл? Даже два файла...
Костян
Цитата(volvo @ 22.02.2006 23:48) *

Просто напросто одновременно с чтением из первого файла - читай информацию и из второго... Если прочитанное слово из первого файла совпадает с введенным - печатается слово, прочитанное из второго...

Хотя это - извращение... Что, если у тебя есть 2000 слов в файле, и пользователь введет 3 слова, расположенных в 1984, 1983, и 1997 строках соответственно, ты будешь 3 раза перелопачивать весь файл? Даже два файла...

Пытался делать но ничаво не вышло, может поможешь? Вот код:
Код
program perevodhik;
uses crt;
var f, f1: text;
s : array[1..3] of string;
s1: array[1..3] of string;
i: integer;
slovo: string;
label main;
begin
clrscr;
assign(f,'f.txt'); reset(f);
assign(f1,'f1.txt'); reset(f1);
readln(slovo);
main:
  begin
  for i:=1 to 3 do
     begin
while not eof(f) do begin
readln(f,s[i]);
end;
while not eof(f1) do begin
readln(f1,s1[i]);
     end;  end; end;

if slovo=s[i] then
begin
   writeln(s1[i]);
   readkey;
end
else main;

end;

end.
volvo
Ну, а если что-то типа:
type
  translate = record
    ang: string[20]; { немного ограничим размер, все равно слов большего размера не бывает }
    rus: string[20];
  end;
var
  dict: array[1 .. 3] of translate;
begin
  { открыть "русский" файл f_rus }
  { открыть "английский" файл f_ang }

  i := 0;
  while not eof(f_ang) do begin
    inc(i);
    with dict[i] do begin
      readln(f_ang, ang);
      readln(f_rus, rus);
    end;
  end;

  readln(slovo);
  for i:=1 to 3 do
    if slovo = dict[i].ang then begin
      writeln(dict[i].ang); break; { все, из цикла можно выходить }
    end;

end.
Набирал прямо здесь - могут быть накладки... Не забывай закрывать файлы, кстати...
Костян
Все исправил, ток все равно не работает, помогите кто может...Нажмите для просмотра прикрепленного файла, Нажмите для просмотра прикрепленного файла,
Код

program perevodhik;
type
  translate=record
    ang: string[20];
    rus: string[20];
  end;
var
  dict: array[1..3] of translate;
  i: integer;
  f_rus : text;
  f_ang : text;
  rus, ang: string;
  slovo: string;
begin
  assign(f_ang,'f.txt'); reset(f_ang);
  assign(f_rus,'f1.txt'); reset(f_rus);
  i:=0;
  while not eof(f_ang) do begin
     inc(i);
     with dict[i] do begin
      readln(f_ang,ang);
      readln(f_rus,rus);
     end;
  end;
  readln(slovo);
  for i:=1 to 3 do
    if slovo=dict[i].ang then begin
       writeln(dict[i].rus);
       readln;
       break;
    end;
  end.
volvo
Так и не будет работать... Ты или поменяй чтение из файла на Real (вместо ReadLn, но этот вариант может НЕ сработать), или (что лучше всего) каждое слово в обоих файлах расположи на отдельной строке и оставь ReadLn (этот вариант должен работать)...

Кстати, не забудь, последней строкой в файле должна быть ПУСТАЯ строка, т.е. за последним словом обязательно нажми Enter, иначе оно читаться не будет...
Костян
Цитата(volvo @ 23.02.2006 13:08) *

Так и не будет работать... Ты или поменяй чтение из файла на Real (вместо ReadLn, но этот вариант может НЕ сработать), или (что лучше всего) каждое слово в обоих файлах расположи на отдельной строке и оставь ReadLn (этот вариант должен работать)...

Кстати, не забудь, последней строкой в файле должна быть ПУСТАЯ строка, т.е. за последним словом обязательно нажми Enter, иначе оно читаться не будет...

ВСЕ РАВНО ничего не пашет, не подпрапвишь код:
Код
program perevodhik;
type
  translate=record
    ang: string[20];
    rus: string[20];
  end;
var
  dict: array[1..3] of translate;
  i: integer;
  f_rus : text;
  f_ang : text;
  rus, ang: string;
  slovo: string;
begin
  assign(f_ang,'f.txt'); reset(f_ang);
  assign(f_rus,'f1.txt'); reset(f_rus);
  i:=0;
  while not eof(f_ang) do begin
     inc(i);
     with dict[i] do begin
      readln(f_ang,ang);
      readln(f_rus,rus);
     end;
  end;
  readln(slovo);
  for i:=1 to 3 do
    if slovo=dict[i].ang then begin
       writeln(dict[i].rus);
       readln;
       break;
    end;
  end.
volvo
Да не буду я КОД править!!! Не трогай код уже... Я сказал, ЧТО тебе надо править.
Костян
Цитата(volvo @ 23.02.2006 13:50) *

Да не буду я КОД править!!! Не трогай код уже... Я сказал, ЧТО тебе надо править.

Ну вот поправил:Нажмите для просмотра прикрепленного файла, Нажмите для просмотра прикрепленного файла, ток все равно ничаво не работает, обьясни что неправильно делаю. Вроде все слова с новой строки, да и после последнего слова свободная строка. Ток вот все равно ничаво не получается. Умоляю помоги, уже крыша едет lol.gif
Костян
Люди помогите, уже голова от этой проги болит, все вроде бы правильно. В чем проблема ни как не доходит, помогите поглядите текстовые файлы и саму прогу, буду очень изнателен !mol1.gif
Бродяжник
Похоже, что проблема все-таки в исходных файлах. Я добавил пару отладочных печатей - то, что я всегда делаю, когда чего-то не понимаю. И кое-что обнаружил...
Костян
Цитата(Бродяжник @ 24.02.2006 10:21) *

Похоже, что проблема все-таки в исходных файлах. Я добавил пару отладочных печатей - то, что я всегда делаю, когда чего-то не понимаю. И кое-что обнаружил...

Большое спасибо, только ты не мог бы обьяснить эти изменения, а то я штот ничего не понял blink.gif
volvo
Попробуй распакуй вот этот архив: Нажмите для просмотра прикрепленного файла

запусти программу вообще без изменений, файлы TXT тоже не меняй, и введи слово
hello
именно так, БЕЗ заглавных букв... Скажешь, что получилось...
Бродяжник
"Для тех, кто в танке".
Я просто добавил в программу вывод на экран всего того, что вводится.
Вначале сразу же при вводе строк из файлов вывел их на экран.
Потом после ввода слова с клавиатуры вывел его на экран.
При этом каждую строку обрамил восклицательными знаками, чтобы четко видеть все ее символы, включая возможные пробелы. Потом в цикле, где выполняется просмотр массива строк на совпадение со словом, введенным с клавиатуры, на экран выводятся сравниваемые строки и пишется, равны они, или нет. Все, что осталось сделать, это запустить эту программу, и посмотреть, что она выводит. Если ввести с клавиатуры слово, которое на самом деле есть в словаре, программа его найдет. Она работает.
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.