Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 23.03.2009, 21:03   #1
playboy
 
Регистрация: 20.11.2008
Сообщений: 5
Радость Паскаль. Файлы

Дан текстовый файл. Найти количество абзацев в тексте, если каждый абзац начинается с красной строки (5 пробелов). Пустые строки между абзацами не учитывать.
Код:
uses crt;
var
   f: text;
   k:boolean;
   i, n, m: byte;
   s: string;
BEGIN
     clrscr;
     assign (f, '#17in.txt');
     reset (f);
           k:=false;
           n:=0;
             while not eof (f) do
                   begin
                        inc (m);
                        readln (f, s);
                        if (s[1] = ' ')and(s[2] = ' ')and(s[3] = ' ')and(s[4] = ' ')and(s[5] = ' ')and(length(s)>5) then
                        k:=true else k:=false;
                   end;
             if k=true then
             n:=n+1;
             writeln (n);
             writeln ('KOJI cTpoK = ',m);
                        readln;
     close (f);
END.
чет не пойму как грамотно счётчик организовать. подскажите пожалуйста (= СПАСИБО

Последний раз редактировалось Stilet; 24.03.2009 в 09:02.
playboy вне форума Ответить с цитированием
Старый 24.03.2009, 00:57   #2
alex_fcsm
Участник клуба
 
Аватар для alex_fcsm
 
Регистрация: 10.11.2008
Сообщений: 1,502
По умолчанию

Код:
uses crt;
var
f: text;
n, m: byte;
s: string;
BEGIN
clrscr;
assign (f, 'c:\1.txt');
reset (f);
n:=0;
while not eof (f) do
begin
inc (m);
readln (f, s);
if (s[1] = ' ')and(s[2] = ' ')and(s[3] = ' ')and(s[4] = ' ')and(s[5] = ' ')and(length(s)>5) then
inc(n);
end;
close (f);
writeln (n);
writeln ('KOJI cTpoK = ',m);
readln;
END.
У Вас все верно практически. Если нашли абзац сразу меняйте счетчик на 1(inc(n) - равносильно n:=n+1). Ну и некоторые переменыые удалил т.к. не нужны они
Нормальное состояние техники - нерабочее, все остальное частный случай.
alex_fcsm вне форума Ответить с цитированием
Старый 24.03.2009, 04:11   #3
DENCREAT
Пользователь
 
Регистрация: 20.03.2009
Сообщений: 32
По умолчанию

Цитата:
Сообщение от alex_fcsm Посмотреть сообщение
Код:
uses crt;
var
f: text;
n, m: byte;
s: string;
BEGIN
clrscr;
assign (f, 'c:\1.txt');
reset (f);
n:=0;
while not eof (f) do
begin
inc (m);
readln (f, s);
if (s[1] = ' ')and(s[2] = ' ')and(s[3] = ' ')and(s[4] = ' ')and(s[5] = ' ')and(length(s)>5) then
inc(n);
end;
close (f);
writeln (n);
writeln ('KOJI cTpoK = ',m);
readln;
END.
У Вас все верно практически. Если нашли абзац сразу меняйте счетчик на 1(inc(n) - равносильно n:=n+1). Ну и некоторые переменыые удалил т.к. не нужны они
неверно будет считать программа, т.к. переменная m лишь объявлена целым типом и никакого начального значения не присвоено, т.е. функция inc(m) неизвестно какое число будет наращивать.
DENCREAT вне форума Ответить с цитированием
Старый 24.03.2009, 07:07   #4
playboy
 
Регистрация: 20.11.2008
Сообщений: 5
По умолчанию

alex_fcsm спасибо большое
playboy вне форума Ответить с цитированием
Старый 24.03.2009, 08:12   #5
XuTpbIu
Злобстер
Форумчанин
 
Аватар для XuTpbIu
 
Регистрация: 19.03.2009
Сообщений: 134
По умолчанию

DENCREAT
Переменная m здесь вообще по-моему лишняя. Нас не просят найти кол-во строк.
От знаний ещё никто не умирал, но рисковать не стоит.
XuTpbIu вне форума Ответить с цитированием
Старый 24.03.2009, 08:22   #6
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

А я бы исходя из условия так написал:
Код:
var
f: text;
n: byte;
s: string;
BEGIN
clrscr;
assign (f, 'c:\1.txt');
reset (f);
n:=0;
while not eof (f) do begin
 readln (f, s);
 if pos('     ',s)<>0 then inc(n);
end;
close (f);
writeln (n);
readln;
END.
Так оптимальнее.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 24.03.2009, 08:25   #7
XuTpbIu
Злобстер
Форумчанин
 
Аватар для XuTpbIu
 
Регистрация: 19.03.2009
Сообщений: 134
По умолчанию

Stilet
а если у меня в середине строки 5 пробелов будет? твой код не прокатит
Вот мой вариант) Чуток изменю вариант Stilet
Код:
var
f: text;
n: byte;
s: string;
BEGIN
clrscr;
assign (f, 'c:\1.txt');
reset (f);
n:=0;
while not eof (f) do begin
  readln (f, s);
  if copy(s, 1, 5)<>'     ' then 
    inc(n);
end;
close (f);
writeln (n);
readln;
END.
От знаний ещё никто не умирал, но рисковать не стоит.
XuTpbIu вне форума Ответить с цитированием
Старый 24.03.2009, 09:04   #8
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
XuTpbIu
Не буду спорить.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 24.03.2009, 13:20   #9
Tkirill
Форумчанин
 
Аватар для Tkirill
 
Регистрация: 22.12.2008
Сообщений: 104
По умолчанию

if pos(' ',s)=1 then inc(n);
@(o_0)@
Tkirill вне форума Ответить с цитированием
Старый 24.03.2009, 13:42   #10
XuTpbIu
Злобстер
Форумчанин
 
Аватар для XuTpbIu
 
Регистрация: 19.03.2009
Сообщений: 134
По умолчанию

А это что такое?? Тут же у нас надо учесть что абзац с 5 прбелов начинается не с 1
От знаний ещё никто не умирал, но рисковать не стоит.
XuTpbIu вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Файлы!Паскаль ТРОЯН=) Помощь студентам 1 23.03.2009 10:08
Задача на файлы (Паскаль) Pihan Помощь студентам 6 17.03.2009 13:15
Паскаль, файлы, задачка LikFiR Помощь студентам 1 06.03.2009 23:46
Паскаль!Прога на файлы! vlad1991 Помощь студентам 20 28.02.2009 22:00