Помощь - Поиск - Пользователи - Календарь
Полная версия: задание с файлом
Форум «Всё о Паскале» > 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

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

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