нужно подсчитать количество строк в файле, содержащий заданный символ более одного раза
Считываешь строку, ищешь там твой символ. На его место ставишь кракозябру, затем ищешь второй раз. Если нашел, то инкременируешь некоторую целую переменную, которая хранит число строк. Повторить процедуру до окончания файла
В чем трудности?
проблема в том что то там неправильно пишу и у меня программа зацикливается ...
не можешь написать программу?
Вслепую сказать ничего не могу. Выкладывайте-с код
ну типа таак
program ololo;
uses crt;
var f1,f2:text;
Name1,Name2,str:string;
i,q,j:integer;
c,sim,p:char;
begin
clrscr;
q:=0;
j:=0;
writeln ('Ведите символ'); readln(sim);
Writeln ('Входной файл');
readln (Name1);
Assign (f1, Name1);
writeln('Выходной файл');
readln(Name2);
assign(f2, Name2);
p:=' ';
{$I-}
reset(f1); rewrite(f2);
if IOResult<>0 then
begin
Write ('Файл <', Name1, '>не найден'); c:=readkey;
end;
{$I+}
Writeln;
Writeln ('<<<<Входной файл>>>>');
while not eof(f1) do begin
while not eoln(f1) do begin
read(f1,c); Write©;
if c=sim then j:=j+1;
end;
readln(f1);
if (c=sim) and (j=2) then
begin j:=j+1; q:=q+1
end;
end;
write(f2,q);
writeln;
writeln;
writeln ('<<<<Выходной файл>>>>');
reset(f2);
while not eof(f2) do
begin
read(f2,c); write©;
end;
c:=readkey;
Close(f1);
Close(f2);
end.
Во-первых, мой компилятор сразу же заругался, т.к. Вы не открываете файл f1 на чтение
Чтобы открыть файл на чтение нужно использовать процедуру Reset(f1); После чтения не забудьте обязательно ее закрыть.
Во-вторых, зачем считывать файл посимвольно ????? Читайте сразу строку!
Считав строку, ищите в ней нужный символ. Затем, если такой символ нашелся, то заменяем его на другой (проще всего заменить его на chr(256-ord(sim)) Тогда вы гарантированно получите другой символ ). Наконец, смотрим, есть ли в строке этот символ еще раз. И только тогда увеличиваем число строк q
Про файл вывода:
Лучше всего открыть f2 процедурой reset(f2); Он создает и открывает НОВЫЙ файл.
Кстати вместо
можно подробней что сдесь писать?
while not eof(f1) do begin
while not eoln(f1) do begin
read(f1,c); Write©;
if c=sim then j:=j+1;
end;
readln(f1);
if (c=sim) and (j=2) then
begin j:=j+1; q:=q+1
end;