Помощь - Поиск - Пользователи - Календарь
Полная версия: Файлы
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
Talya
Очень нужна ваша помощь! как можно решить данную задачу? Заранее огромное спасибо!
В текстовом файле подсчитать количество строк, которые начинаются и оканчиваются одной и той же буквой.
мисс_граффити
идешь по файлу, построчно считываешь...
если первая и последняя буква одинаковые - прибавляешь 1 к переменной-счетчику.
в чем сложность?
Tan
Вот о чём тебе говорит мисс_граффити :
uses crt;
Const filename = 'MyFile.txt';
var f : TEXT;
S : string;
sum,a : integer;
begin
assign (f,filename); {связываем виртуальный и физический файлы}
reset (f);
sum:=0;
while not eof(f) do {пока не конец файла читаем строки}
begin
readln (f,s);
a:=Length(s);
if S[1] = S[a] then inc (sum); {cравниваем 1й символ строки и последний если да, в копилку}
end;
Close (f);
writeln (sum); {содержание копилки на экран}
readkey;
end.
мисс_граффити
 a:=Length(s);
if S[1] = S[a]

а зачем нам дополнительная переменная а?
if S[1] = S[length(s)]
Tan
да, я сам заметил, когда уже запостил, но не изменил, так как не смертельно smile.gif
sintanial
Эмм вот тоже задали это же. Я её сделал сначало с типом стринг однако потом я понял что так не верно на самом деле так как стринг имеет всего 255 символов, а если строка будет больше в файле ? то она вся не поместится в переменную. Вот поэтому задаю вопрос как быть ? У меня вот такая идея: создать две переменные типа чар и в одну записывать начало строки в другую конец строки. Однако у меня появилась трудность на практике. Помогите плиз
1) начало строки записать труда не составляет, а вот как одновременно, во вторую записать конец строки?. Потому что я когда в цикле записываю в первую переменную литеру, то одновременно записывается литера и во вторую. А как сделать так что бы в первую записалась первая литера этой строки а во вторую конец это строки, я не могу понять =) ?
2) когда я во вторую переменную записываю конец строки то записывается одна из цифр вот этих записей #13#10 - я так понял что это означает перейти на другую строку, однако как сделать так что бы это не записывалось ? в мою переменную. (я так думаю может функцией seekeoln однако как тогда быть с пунктом 1 =)
3) Слушайте а как в текстовом файле сразу перейти на конец строки?
samec
надо завести три переменных типа char (ch1, ch2 и ch3 например). Сначала считываешь в первую переменную (ch1) самый первый символ строки. Приравниваешь значение второй переменной, значению первой (ch2:=ch1) Потом начинается цикл. В нём читаешь следующий символ в третью переменную (в ch3). Проверяешь, не равен ли считанный символ #13 (ch3<>#13 ???), если условие выполнено (тоесть ch3<>#13) то приравниваешь значение второй переменной, значению третьей (сh2:=ch3) и переходишь к следующей итерации цикла. Если же условие не выполнено (тоесть ch3=#13), то выходим из цикла и получаем следующее: первый символ строки - в первой переменной (ch1), последний символ строки во второй переменной (ch2). Сравниваем их, при равенстве увеличиваем счётчик и переходим к следующей строке. Затем всё повторяется от и до smile.gif
Client
А можно со строкой и переменной типа char обойтись
samec
вот что то подобное должно получиться:

uses crt;
Const filename = 'MyFile.txt';
var f : TEXT;
ch1,ch2,ch3:char;
sum: integer;
begin
assign (f,filename); {связываем виртуальный и физический файлы}
reset (f);
sum:=0;
while not eof(f) do {пока не конец файла читаем его посимвольно}
begin
read(f,ch1);
ch2:=ch1;
repeat
read(f,ch3);
if(ch3<>#13)and(ch3<>#26) then ch2:=ch3; {#26 - символ конца файла}
until(ch3=#13)or(ch3=#26);
if ch1 = ch2 then inc (sum); {cравниваем 1й символ строки и последний если да, в копилку}
read(f,ch3); {считываем символ #10}
end;
Close (f);
writeln (sum); {содержание копилки на экран}
readkey;
end.end.
sintanial
А я сделал попроще =)
var x:real; s1,s2:char; f:text; 
begin
assign(f,'te.txt');
reset(f);
while not eof(f) do
begin
read(f,s1);
while seekeoln(f) do
read(f,s2);
readln(f);
if s1=s2 then
x:=x+1;
end;
close(f);
writeln(x);
end.

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