Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 28.03.2012, 11:59   #1
beygul
Форумчанин
 
Аватар для beygul
 
Регистрация: 15.09.2008
Сообщений: 335
По умолчанию Из текстового файла,содержащего русские и латинские слова создать 2 новых файла: 1-й-русские,2-й - латинские (паскаль для девушки)

Привет всем! Помогите пожалуйста решить задачу на паскале!

Дан текстовый файл. Содержащий русские и латын. Слова. Создать 2 новых файла и записать в них русские и лат. Слова.

То есть в первом созданном файле должны быть русские слова, во втором созданном файле латинские слова. Рассортировать надо. Подскажите что сделать? Ни разу не сталкивался с такими...


_________
Убедительнейшая просьба - давать название темы так,
чтобы название адекватно отражало суть решаемой задачи/проблемы.
эту тему я исправил.
Но в будущем неукоснительно соблюдайте это правило!

Модератор.

Последний раз редактировалось Serge_Bliznykov; 28.03.2012 в 12:55.
beygul вне форума Ответить с цитированием
Старый 28.03.2012, 12:37   #2
beygul
Форумчанин
 
Аватар для beygul
 
Регистрация: 15.09.2008
Сообщений: 335
По умолчанию

Цитата:
var c: char;
s: string;
i: Integer;

begin
assign(input, 'input.txt'); reset(input);
assign(output, 'output.txt'); rewrite(output);
i:=0;
While c<>' ' Do
Begin
read(c);
S:=S+c;
if (ord(c)>=65) and (ord(c)<=122) then i:=1;
End;
if i=1 then
write(s);
end.
Начал решать вот так. что делать дальше?
beygul вне форума Ответить с цитированием
Старый 28.03.2012, 12:37   #3
DiemonStar
Старожил
 
Регистрация: 08.02.2012
Сообщений: 2,173
По умолчанию

Сразу вопрос на засыпку: а что делать, если в слове и русские и английские, пардон, латинские буквы?)

Цитата:
что делать дальше?
сделать как-минимум второй файл для вывода - в условии у вас это оговорено. Да и вообще, описать файловые переменные будет явно нелишним.

есть два варианта решения задачи:
1. посимвольно разделять - латиницу в один файл, кириллицу - в другой, а все остальные символы - в последний, куда записывалось. но тут возникают проблемы со смешанными словами - в одном из файлов после такого слова не будет разрыва (пробел или другой знак препинания) между словами.
2. считывать строки и парсить их на отдельные слова, которые по мере принадлежности определять в нужный файл. Из минусов - это немножко более заморочно)
Правильно поставленная задача - три четверти решения.

Последний раз редактировалось DiemonStar; 28.03.2012 в 12:44.
DiemonStar вне форума Ответить с цитированием
Старый 28.03.2012, 13:35   #4
Niro
Форумчанин
 
Аватар для Niro
 
Регистрация: 23.09.2010
Сообщений: 682
По умолчанию

примерно так
Код:
while not eof (f) do
  begin
    readln (f, s);
    s2:= '';
    i:=1;
    while s [i] in ['a'..'z', 'A'..'Z', 'а'..'я', 'А'..'Я'] do
      begin 
        s2:= s2+ s [i];
        inc (i);
      end;

    if s2 [1] in ['a'..'z', 'A'..'Z'] 
      then writeln (eng_file, s2) 
        else writeln (rus_file, s2);
  end;
единственное что, так это слова должны быть точно либо русскими либо английскими.
Проще всего признать свою ошибку.
Гораздо труднее еЁ осознать и исправить.

Последний раз редактировалось Niro; 28.03.2012 в 13:38.
Niro вне форума Ответить с цитированием
Старый 28.03.2012, 14:16   #5
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Niro, оригинальное решение.
вот только прогнал ваше решение мысленно ("отладка в уме" )
и возникло подозрение, что у Вас запишется только ПЕРВОЕ слово из строки...


если я прав, то нужно ещё добавить внешний по отношению к while ... if then else цикл, пока i<Length(s)
Serge_Bliznykov вне форума Ответить с цитированием
Старый 28.03.2012, 14:26   #6
DiemonStar
Старожил
 
Регистрация: 08.02.2012
Сообщений: 2,173
По умолчанию

нда, в данном алгоритме использовав название автомобиля "chevrolet-niva" можно будет позабыть о русских корнях данного внедорожника)
Код:
var ch : char; input_file, output_file_eng, output_file_rus : text;
     toRus : boolean;

....

toRus := False;
while not eof(input_file) do
  begin
     Read(input_file, ch);
     case ch of
     'A'..'Z', 'a'..'z':begin
                           write(output_file_eng, ch);
                           toRus := false;
                        end;
     'А'..'Я', 'а'..'я':begin
                           write(output_file_rus, ch);
                           toRus := true;
                        end;
     ' ', #13, #10:begin
                           write(output_file_eng, ch);
                           write(output_file_rus, ch);
                        end;
     else
       if toRus then
          write(output_file_rus, ch)
        else
          write(output_file_eng, ch);
     end; {case} 
  end; {while}
честно, не помню, как в Паскале это работает #10 и т.п., но в Дельфи ошибок нет)
Правильно поставленная задача - три четверти решения.

Последний раз редактировалось DiemonStar; 28.03.2012 в 15:05.
DiemonStar вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Выделить из текста латинские слова. Паскаль vibe Помощь студентам 2 29.03.2011 19:48
Создать конкорданс для текстового файла Archik Общие вопросы C/C++ 0 19.05.2010 12:12
Файлы. Удалить слова, содержащие латинские символы. ddeman666 Помощь студентам 3 20.04.2010 09:06
Выделить русские слова скобками(паскаль) gred Помощь студентам 8 09.05.2008 19:25
Из файла не читаются русские буквы. snaem Общие вопросы .NET 3 31.03.2008 23:05