Другие языки программирования и технологии

паскаль... как открыть произвольный файл и посчитать сколько там данных слов?

Program txt;uses crt;varf: text;ime,clovo,s1: string;procedure o4istka;beginClrScr;end;beginrepeato4istka;writeln ('vvedite ime faila');readln (ime);assign(f,ime);append (f);writeln ('clovo');readln(clovo);s1:=''; вроде не ругается правильно что ли?while not eof(f) and (pos(clovo,s1)=0 вот эта строчка не понятно обьясните пожалуйста что тут происходит... и что должно быть дальше..
Сергей Журид
Сергей Журид
2 478
Доброго времени суток.

Сначала процитируе ваше.

Program txt;
uses crt;
var
f: text;ime,clovo,s1: string;

procedure o4istka; {она надо эта процедура, если в программе можно просто написвть ClrScr;?
begin
ClrScr;
end;

begin
repeat
o4istka;
writeln ('vvedite ime faila');
readln (ime);
assign(f,ime);
append (f); {вам надо ЧИТАТЬ из файла, так зачем открывать его на ДОБАВЛЕНИЕ? }
writeln ('clovo');
readln(clovo);
s1:=''; вроде не ругается правильно что ли?
while not eof(f) and (pos(clovo,s1)=0 вот эта строчка не понятно обьясните пожалуйста что тут происходит.. . и что должно быть дальше. .

Эта строчка предлагает выполнять программу пока не достигнут конец файла и пока clovo отсутствует в s1. Как только оно там появится, логическое выражение pos(clovo,s1)=0 станет ложью и цикл завершится.

Надо так.

begin
ClrScr;
Write ('vvedite ime faila : '); {использование Write без Ln оставит курср в этой же строке}
ReadLn (ime);
Assign(f, ime);
Reset (f);
Write ('clovo : ');
ReadLn(clovo);

N := 0; {счетчик количества слов}
While not Eof(f) do begin
ReadLn(f,s1); {считываем строку из файла}
while Pos(clovo,s1) > 0 do begin {слово есть в строке}
N := N + 1; {увеличиваем счетчик}
Delete(s1, Pos(clovo,s1), Length(clovo)); {и удаляем его из строки}
end;
end;
WriteLn('В файле ', N, ' слов');
ReadLn;
end.

Вот и все. Зациклить программу и вывод результатов в файл предлагаю сделать самостоятельно. Если нужно, то часть программы, подсчитывающая число вхождений слова в файл можно оформить в виде функции. Например, так

function CountWords(S: String; var F: Text): Integer;
var S1 : String;
begin
N := 0; {счетчик количества слов}
While not Eof(f) do begin
ReadLn(f,s1); {считываем строку из файла}
while Pos(S, S1) > 0 do begin {слово есть в строке}
N := N + 1; {увеличиваем счетчик}
Delete(S1, Pos(S, S1), Length(S)); {и удаляем его из строки}
end;
end;
CountWords := N;
end;

А обращаться к ней так

WriteLn('В файле ', CountWords(clovo, F), ' слов');

Остальное сами.

Удачи!
АА
Андрей Алексеев
59 612
Лучший ответ
while not eof(f) and (pos(clovo,s1)=0

Выполнять пока не "Конец файла" и "номер начиная с которого S1 первый раз входит в clovo, или на оборот,

У тебя в программе Семантика нарушена!!!!
Сергей Журид спасибо, а как посчитать количество данных слов?)
и кто такая семантика?)
Арман Исагулов procedure o4istka;
begin
ClrScr;
end; НЕЛЕПОСТЬ!!!!Зачем для функции писать подпрограмму????

s1:=''; вроде не ругается правильно что ли?
while not eof(f) and (pos(clovo,s1)=0 НЕТ СМЫСЛА!!!!

открыл файл, выбрал строку, посчитал сколько раз встречается, звял следующую... и так далее!
m:=0;
While not eof(f) do begin
read(f,s)
l:=false
While l=false do begin
if length(s)>length(clovo) then begin
if pos (clovo,s)>0 then begin m:=m+1; g:=copy(s,((length(s))-(pos(clovo,s))-(length(clovo))),1); s:=''; s:=g end;
else f:=true;
end;
end;
end;

как-то так! незнаю работает не, не проверял, Надеюсь с переменными разберёшься!
УДАЧИ!
Пока не конец файла и если s1 не найдено в clovo ...
че-то никакой связи с заданием в приведенной програмуле я не нахожу =)) бред полный. . дай задание полностью - все условия и спецификации. если еще надо, помогу с решением=))
Вадим Vadim
Вадим Vadim
248