Текстовые файлы

  • Автор темы prosport91
  • Дата начала
P

prosport91

#1
Помогите доработать программу. Нужно чтоб проверяла ниличие всех символов в тексте, и почему то она считает каждый пробел за слово.Задача была такая посчитать количество слов и цифр в тексте. Заранее спасибо.
Вот код.
Код:
program f;
const mn=['0'..'9'];
var f3:text;
i,j,ch,sl:integer;
name:string;
s:char;
wrd:string;

procedure chten(var f3:text);
Var i:integer;
s:string;
begin
assign(f3,'c:\temp\name.txt');
reset (f3);
While not eof(f3) do
begin
readln(f3,s);
writeln('Получен следующий текст: ');
writeln(s);
end;
readln(f3);
close(f3);
end;
begin
chten(f3);
reset(f3);
s:=' ';
sl:=0;
ch:=0;
While not eof(f3) do
begin
readln(f3,wrd);
i:=1;
While i<=length(wrd) do
begin
if (wrd[i]=' ')or(wrd'.') then sl:=sl+1;
i:=i+1;
end;
end;
close(f3);
reset(f3);
While not eof(f3) do
begin
While not eoln(f3) do
begin
read(f3,s);
if (s in mn) then ch:=ch+1;
i:=i+1;
end;
readln(f3);
end;
close(f3);
writeln('Количество слов в тексте: ',sl);
writeln('Количество цифр в тексте: ',ch);
readln;
end.
 
I

isqoff

#5
// сделано в PascalABC
Код:
uses crt;
var f:Text;
SumNum,slov,i:integer;
ST,s:string;
{#################################### ФУНКЦИЯ ПРОВЕРКИ (СЛОВО ИЛИ НЕТ) #############################}
function Words(s:string):boolean;
const
st = ('abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ!":;?.,');
var i,j,sum:integer;
begin
sum:=0;
for i:=1 to Length(s)do
for j:=1 to Length(st) do
if s[i] = st[j]then sum:=sum+1;

IF sum = Length(s) THEN Words:=true ELSE Words:=false;
end;
{############################## ОСНОВНАЯ ПРОГРАММА ################################################}
BEGIN
S:='';
st:='';
SumNum:=0;
slov:=0;
{----------------------------------- ОКРЫВАЕМ ФАЙЛ --------------------------------------------------}
Assign(f,'C:\Primer.txt');		 //ЗДЕСЬ НУЖНО ВВЕСТИ ИМЯ СВОЕГО ФАЙЛА

Reset(f);
{-------------------------------------- РАБОТАЕМ С ФАЙЛОМ --------------------------------------------}
while not EOF(f)do
Begin
readln(f,st);
{-------------------------------------- УДОЛЯЕМ ЛИШНИЕ ПРОБЕЛЫ (ОСТАВЛЯЕМ ТОЛЬКО ОДИН) ---------------}
repeat
if pos(#32+#32,st)<>0
then Delete(st,pos(#32+#32,st),1);
until pos(#32+#32,st)=0;
{-------------------------------------- СЧИТАЕМ ЦИФРЫ ------------------------------------------------}
for i:=1 to Length(st)do
if (st[i]>=#48)and(st[i]<=#57)
then SumNum:=SumNum+1;
{-------------------------------------- СЧИТАЕМ СЛОВА ------------------------------------------------}
for i:=1 to Length(st)do
if (st[i]<>#32)and(i <> length(st))
then s:=s+st[i]
else begin
if words(s)=true then slov:=slov+1;
s:='';
end;

End;
Close(f);
{------------------------------------ ЗАКРЫВАЕМ ФАЙЛ ---------------------------------------------------}

writeln('ЦИФР В ФАЙЛЕ :',SumNum);  //ПОДВЕДЁМ ИТОГ :)))

writeln('СЛОВ В ФАЙЛЕ :',Slov);

END.
{################################################  КОНЕЦ  ########################################################}
//что бы проверяла и русские буквы в константу добавь (кириллицу)