Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
GRIGOREV.DOC
Скачиваний:
4
Добавлен:
01.07.2025
Размер:
608.26 Кб
Скачать

Задача 5. Слова

В файле INPUT.TXT записан некоторый русский текст. Переписать все слова текста, содержащие наиболее часто встречающуюся в тексте букву, в файл OUTPUT.TXT и найти самое длинное из них.

{ Решение задачи 5 на языке PASCAL }

FUNCTION RusUpCase(c:Char):Char;

BEGIN

IF c IN ['а'..'п'] THEN RusUpCase:=Chr(Ord(c)-Ord('а')+Ord('А'))

ELSE

IF c IN ['р'..'я'] THEN RusUpCase:=Chr(Ord(c)-Ord('р')+Ord('Р'))

ELSE RusUpCase:=c;

END;

VAR f1,f2 : Text;

c,m : Char;

s,ss : String;

Flag : Boolean;

L : Array['А'..'Я'] Of LongInt;

CONST Letters=['а'..'п','р'..'я','А'..'Я'];

BEGIN Assign(f1,'input.txt');

{$I-}

Reset(f1);

IF IOResult<>0 THEN BEGIN

WriteLn('Файл input.txt не найден'); Halt; END;

{$I+}

Assign(f2,'output.txt'); Rewrite(f2); FillChar(L,SizeOf(L),0);

WHILE NOT EOF(f1) DO BEGIN

Read(f1,c);

IF c IN Letters THEN Inc(L[RusUpCase(c)]);

END;

m:='А'; FOR c:='Б' TO 'Я' DO IF L[c]>L[m] THEN m:=c;

WriteLn('наиболее часто встречается в тексте буква "',m,'"');

Reset(f1);

WHILE NOT EOF(f1) DO BEGIN

Read(f1,c);

IF c IN Letters THEN BEGIN

s:=''; Flag:=FALSE;

WHILE c IN Letters DO BEGIN

IF RusUpCase(c)=m THEN Flag:=TRUE;

s:=s+c; Read(f1,c);

END;

IF Flag THEN WriteLn(f2,s);

END;

END;

Close(f2);

Writeln('слова текста, содержащие букву "',m,'", записаны в файл

output.txt');

Reset(f2); ss:='';

WHILE NOT EOF(f2) DO BEGIN

ReadLn(f2,s);

IF Length(s)>Length(ss) THEN ss:=s;

END;

Writeln('самое длинное из таких слов :"',ss,'"');

END.

/* Решение задачи 5 на языке C */

#include<stdio.h>

#include<stdlib.h>

#include<string.h>

char *LowRussian="абвгдежзийклмнопрстуфхцчшщъыьэюя";

char *UpRussian ="АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ";

int RusUpCase(char c){char*p;

if(p=strchr(LowRussian,c))return *(UpRussian+(p-LowRussian)); return c;}

int Letter(char c){return strchr(LowRussian,c)||strchr(UpRussian,c);}

void main(void) {

FILE*f1,*f2; char c,m,flag,i;

long L[]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};

char*s=malloc(81),*ss=malloc(81);

if((f1=fopen("input.txt","r"))==NULL){

printf("\nФайл input.txt не найден\n"); exit(7);}

f2=fopen("output.txt","w+");

do{c=fgetc(f1);if(Letter(c))L[RusUpCase(c)-'А']++;}while(c!=EOF);

m=0;for(c=1;c<=31;c++)if(L[c]>L[m])m=c; m+='А';

printf("\nнаиболее часто встречается в тексте буква %c",m);

fseek(f1,0,SEEK_SET);

while(!feof(f1)){c=fgetc(f1);

if(Letter(c)){i=-1;flag=0;

while(Letter(c)){if(RusUpCase(c)==m)flag=1;s[++i]=c;c=fgetc(f1);}

s[++i]='\0';if(flag)fprintf(f2,"%s\n",s);}}

printf("\nслова текста, содержащие букву \"%c\", записаны в файл

output.txt",m);

fseek(f2,0,SEEK_SET); strcpy(ss,"");

do{i=fscanf(f2,"%s",s);if(strlen(s)>strlen(ss))strcpy(ss,s);}while(i!=EOF);

printf("\nсамое длинное из таких слов :\"%s\"",ss);

fclose(f1); fclose(f2);}

C Решение задачи 5 на языке FORTRAN

BLOCK DATA

CHARACTER*32 Low,Up

COMMON/Russian/Low,Up

DATA Low,Up/'абвгдежзийклмнопрстуфхцчшщъыьэюя',

* 'АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ'/

END

INTEGER FUNCTION Number(c)

COMMON/Russian/Low,Up

CHARACTER c,Low*32,Up*32

i=INDEX(Low,c)

IF(i)2,2,1

1 Number=i

RETURN

2 Number=INDEX(Up,c)

END

LOGICAL FUNCTION Letter(c)

COMMON/Russian/Low,Up

CHARACTER c,Low*32,Up*32

Letter=INDEX(Low,c).GT.0.OR.INDEX(Up,c).GT.0

END

INTEGER FUNCTION Length(s)

CHARACTER*(*) s

L=LEN(s)

DO WHILE(L.GT.0.AND.(s(L:L).EQ.' '.OR.s(L:L).EQ.CHAR(0)))

L=L-1

ENDDO

Length=L

END

LOGICAL Flag,Letter

INTEGER*4 L(32)/32*0/

CHARACTER*79 s/' '/,ss,Low*32,Up*32

COMMON/Russian/Low,Up

OPEN(1,FILE='input.txt',MODE='READ',STATUS='OLD',ERR=101)

GOTO 102

101 STOP'файл input.txt не найден'

102 OPEN(2,FILE='output.txt',MODE='READWRITE',STATUS='UNKNOWN')

103 READ(1,FMT='(A)',END=105)s

DO 104 i=1,Length(s)

IF(Letter(s(i:i))) THEN

ip=Number(s(i:i))

L(ip)=L(ip)+1

ENDIF

104 CONTINUE

GOTO 103

105 m=1

DO 106 i=2,32

IF(L(i).GT.L(m))m=i

106 CONTINUE

PRINT*,'наиболее часто встречается в тексте буква "',Up(m:m),'"'

REWIND 1

107 READ(1,FMT='(A)',END=108)s

i=1

DO WHILE(i.LE.Length(s))

IF(Letter(s(i:i))) THEN

Flag=.FALSE.

j=0

ss=' '

DO WHILE(i.LE.Length(s).AND.Letter(s(i:i)))

IF(Number(s(i:i)).EQ.m)Flag=.TRUE.

j=j+1

ss(j:j)=s(i:i)

i=i+1

ENDDO

IF(Flag)WRITE(2,FMT='(79A1)')(ss(j:j),j=1,Length(ss))

ELSE

i=i+1

ENDIF

ENDDO

GOTO 107

108 PRINT*,'слова текста, содержащие букву "',Up(m:m),'", записаны в ф

*айл output.txt'

REWIND 2

ss=' '

109 READ(2,FMT='(A)',END=110)s

IF(Length(s).GT.Length(ss))ss=s

GOTO 109

110 PRINT*,'самое длинное из таких слов :"',(ss(i:i),i=1,Length(ss)),

*'"'

CLOSE(1)

CLOSE(2)

END

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]