Помощь - Поиск - Пользователи - Календарь
Полная версия: задание с файлом
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
Катюша
Дан файл, содержащий русский текст. Найти в тексте 4 самых длинных
слова, оканчивающихся заданной буквой. Записать найденные слова в текстовый файл. Все найденные слова должны быть разными!


просьба помочь написать программу smile.gif
volvo
"Помочь написать" и "написать от начала до конца" - немного разные вещи... Ты бы говорила конкретно, что именно не получается, готовиться к экзамену должна ты, а не мы...

Вот так я бы делал первую программу:
uses crt;
const
  delimiters = [' ', '.', ',']; { это - разделители между словами }
  letter = 's'; { та самая буква, которая должна быть последней }

const
  amount = 4; { столько слов, оканчивающихся буквой lettter надо найти }
type
  str_array = array[1 .. amount] of string;
const
  long_words: str_array =
    ('', '', '', '');
  min_len: integer = 0;

{
  это дополнительная проц-ра для сортировки массива
  (пузырек, взято из FAQ...)
}
procedure sort_array(var ar: str_array; n: integer);
var
  i, j: integer;
  T: string;
begin
  For i := 1 To n Do
    For j := n DownTo i+1 Do
      If length(ar[Pred(j)]) > length(ar[j]) Then Begin
        T := ar[Pred(j)]; ar[Pred(j)] := ar[j]; ar[j] := T
      End
end;

{
  процедура проверяет, нужно ли включать слово S в массив,
  и если нужно - слово запоминается, при этом самое короткое
  из ранее запомненных слов "выталкивается" из массива...
}
procedure check_word(s: string);
var
  i: integer;
begin
  if (length(s) > min_len) and (s[length(s)] = letter) then begin
    sort_array(long_words, amount);

    for i := 1 to amount do
      if long_words[i] = s then exit;
    long_words[1] := s;

    sort_array(long_words, amount);
  end;
end;

var
  f: text;
  s, next_word: string;
  i: byte;

begin
  assign(f, 'katusha_1.txt'); { файл, с которым я прогонял программу }
  reset(f);

  while not eof(f) do begin
    readln(f, s);

    i := 1;
    while i <= length(s) do begin
      while (s[i] in delimiters) and (i <= length(s)) do inc(i);
      next_word := '';

      while not (s[i] in delimiters) and (i <= length(s)) do begin
        next_word := next_word + s[i]; inc(i)
      end;

      { в этом месте в next_word хранится очередное найденное слово }
      check_word(next_word);
    end;
  end;

  close(f);

  { здесь замени вывод на экран выводом в файл }
  for i := 1 to amount do
    if long_words[i] <> '' then writeln(long_words[i]);
end.

(проверь, я не компилировал ее в TurboPascal, только в FPC)... И для русских символов тоже. Ну нет у меня кириллицы...
Катюша
пыталась скачать файл - не вышло..

текст скопировала. буду разбирацца :D

что такое пузырек тоже буду разбираться

распаковку текста заметила.. но торгознула.. тож разбирусь
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.