Консультация № 160040
09.02.2009, 20:42
0.00 руб.
0 5 2
Доброго времени суток! Помогите решить задачу, тема файлы.
Дана непустая последовательность слов, содержащих от 1 до 8 букв; между соседними словами -- запятая, за последним словом -- точка. Напечатать все слова, отличные от последнего слова.

Обсуждение

Неизвестный
09.02.2009, 23:05
общий
это ответ
Здравствуйте, Korniychug Petro Dmytrovich!
Все вроде просто - в первом цикле вводиться весь текст, разбивается на слова, их количество n. Потом в цикле перебираются все слова и сравниваются с последним, если не совпали, то выводятся в столбик.

Приложение:
var
s:string;
a:array[1..100] of string;
i,n:integer;
begin
Read(s); //читаем сразу всю посл-ть
n:=1;
For i:=1 to length(s) do begin
if s[i]='.' then break;
if s[i]=',' then begin n:=n+1; continue; end;
a[n]:=a[n]+s[i];
end;
For i:=1 to n do
if a[i]<>a[n] then WriteLn(a[i]);
end;
Неизвестный
09.02.2009, 23:46
общий
А помогите еще мне считать с файла и записать в новый файл, плз
давно
Старший Модератор
31795
6196
10.02.2009, 17:46
общий
это ответ
Здравствуйте, Korniychug Petro Dmytrovich!

Программа в приложении.
Строка Seek(e,FileSize(e)-10); отвечает за перемещение указателя в файле на позицию десять символов(запятая, слово максимум 8 символов и точка) до конца файла(такой вариант работает при условии, что исходный файл записан правильно и после точки нет других символов). Без этой строки можно обойтись, но это получается двойной просмотр файла, который увеличивает время работы программы(такой вариант будет работать только до первой точки в файле).
Удачи!


Приложение:
var
a,b:string;
c:char;
d:longint;
e:file of char;{TEXT}
f:text;
begin
assign(e,'inp.txt');
reset(e);
assign(f,'out.txt');
rewrite(f);
Seek(e,FileSize(e)-10);
a:='';
{поиск последнего слова}
repeat
read(e,c);
if c=',' then a:=''{сбрасываем текущее слово, т.к. оно не последнее}
else if c<>'.'then a:=a+c;
until eof(e)or(c ='.');
{начинаем просмотр и запись}
reset(e);
b:='';
repeat
read(e,c);
if c=',' then
begin{проверяем совпадение и сбрасывает текущее слово}
if b<>a then write(f,b,c);
b:='';
end
else if c<>'.'then b:=b+c;
until eof(e)or(c ='.');
write(f,a,'.');
close(e):
close(f);
end.
Об авторе:
Мне безразлично, что Вы думаете о обо мне, но я рад за Вас - Вы начали думать.

Неизвестный
19.02.2009, 20:50
общий
ни одна с программ корректно не роботает(((
давно
Старший Модератор
31795
6196
19.02.2009, 21:13
общий
У Вас какой компилятор, только не говорите pascalABS
Об авторе:
Мне безразлично, что Вы думаете о обо мне, но я рад за Вас - Вы начали думать.

Форма ответа