IPB
ЛогинПароль:

> Правила раздела!

1. Заголовок или название темы должно быть информативным !
2. Все тексты фрагментов программ должны помещаться в теги [code] ... [/code] или [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ" и используйте ПОИСК !
4. НЕ используйте форум для личного общения!
5. Самое главное - это раздел теоретический, т.е. никаких задач и программ (за исключением небольших фрагментов) - для этого есть отдельный раздел!

 
 Ответить  Открыть новую тему 
> подсчитать количество строк в файле, содержащий заданный символ более одного раза
сообщение
Сообщение #1





Группа: Пользователи
Сообщений: 5
Пол: Мужской

Репутация: -  0  +


нужно подсчитать количество строк в файле, содержащий заданный символ более одного раза
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Новичок
*

Группа: Пользователи
Сообщений: 38
Пол: Мужской

Репутация: -  0  +


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

В чем трудности?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3





Группа: Пользователи
Сообщений: 5
Пол: Мужской

Репутация: -  0  +


проблема в том что то там неправильно пишу и у меня программа зацикливается ...
не можешь написать программу?

Сообщение отредактировано: kill94 -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Новичок
*

Группа: Пользователи
Сообщений: 38
Пол: Мужской

Репутация: -  0  +


Вслепую сказать ничего не могу. Выкладывайте-с код
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5





Группа: Пользователи
Сообщений: 5
Пол: Мужской

Репутация: -  0  +


ну типа таак

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.



Сообщение отредактировано: kill94 -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6


Новичок
*

Группа: Пользователи
Сообщений: 38
Пол: Мужской

Репутация: -  0  +


Во-первых, мой компилятор сразу же заругался, т.к. Вы не открываете файл f1 на чтение
Чтобы открыть файл на чтение нужно использовать процедуру Reset(f1); После чтения не забудьте обязательно ее закрыть.

Во-вторых, зачем считывать файл посимвольно blink.gif ????? Читайте сразу строку!

Считав строку, ищите в ней нужный символ. Затем, если такой символ нашелся, то заменяем его на другой (проще всего заменить его на chr(256-ord(sim)) Тогда вы гарантированно получите другой символ ). Наконец, смотрим, есть ли в строке этот символ еще раз. И только тогда увеличиваем число строк q

Про файл вывода:

Лучше всего открыть f2 процедурой reset(f2); Он создает и открывает НОВЫЙ файл.
Кстати вместо
Цитата
while not eof(f2) do
begin
read(f2,c); write©;
end;
лучше написать просто writeln(q);

Ну как-то так smile.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #7





Группа: Пользователи
Сообщений: 5
Пол: Мужской

Репутация: -  0  +


можно подробней что сдесь писать?
 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;
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #8


Новичок
*

Группа: Пользователи
Сообщений: 38
Пол: Мужской

Репутация: -  0  +


Код

var
    s:string;
    i :integer;
...

while not eof(f1) do
begin
    readln(f1,s);//Читай сразу [b]строку[/b]
    i:=pos(sim, s); //В строке ищем символ
    if i>0 then //И если он есть
    begin
          s[i]:=chr(256-ord(sim)); //Заменим символ на кракозябру
          if pos(sim, s)> 0 then  //И если он встретился во второй раз
            inc(q); //увеличим число строк
    end;
end;



ЗЫ Код не проверял. Писано на коленке wink.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 16.04.2024 14:47
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name