- •Содержание
- •Глава 1. Описание языка c ......................................................................... 5
- •Глава 2. Описание языка fortran ....................................................... 38
- •Глава 3. Решение задач на языках c и fortran ................................ 70
- •Глава 1. Описание языка c
- •1.1. Структура c-программы
- •1.2. Скалярные типы данных и константы, строковые константы
- •1.3. Описание скалярных переменных. Директива #define
- •1.4. Операции. Выражения
- •1.5. Стандартные математические функции
- •1.6. Ввод-вывод
- •Int printf ( строка формата [ , список вывода ] )
- •Int scanf ( строка формата , список ввода )
- •1.7. Метки, оператор goto, условные конструкции, оператор break, функция exit
- •If ( логическое выражение ) оператор/блок [ else оператор/блок ]
- •1.8. Циклические конструкции
- •1.9. Указатели, адресная арифметика
- •1.10. Массивы
- •1.11. Функции
- •1.12. Классы памяти. Общие правила описания. Оператор typedef
- •1.13. Строковые переменные, ввод-вывод строк, стандартные функции обработки строк. Функции проверки символов
- •Int sprintf(char* s,char* формат [ , список вывода ] )
- •1.14. Макроопределения
- •1.15. Внешние файлы
- •Int fclose(file* указатель на файл )
- •Int feof(file* файл )
- •1.16. Структуры, объединения, битовые поля
- •1.17. Динамическое распределение памяти
- •1.18. Графика
- •Глава 2. Описание языка fortran
- •2.1. Структура fortran-программы
- •2.2. Типы данных. Константы
- •2.3. Описание переменных, правила умолчания, операторы
- •Implicit тип ( буквы ) , ...
- •2.4. Оператор присваивания. Операции
- •2.5. Стандартные математические функции
- •2.6. Ввод-вывод
- •2.7. Оператор соntinue. Операторы перехода. Условные операторы
- •If (логическое выражение)оператор
- •If (арифметическое выражение)метка1,метка2,метка3
- •2.8. Операторы цикла
- •2.9. Функции loc, locfar, locnear
- •2.10. Массивы
- •2.11. Подпрограммы subroutine, function и interface
- •Intrinsic список имен
- •2.12. Общие области, подпрограмма block data. Оператор equivalence
- •2.13. Символьные переменные
- •2.14. Операторные функции
- •2.15. Внешние файлы
- •2.16. Структуры
- •2.17. Динамические массивы
- •2.18. Графика
- •Глава 3. Решение задач на языках c и fortran
- •Задача 1. Вывод натурального числа
- •Задача 2. Сумма ряда
- •Задача 3. Медленная сортировка
- •Задача 4. Быстрая сортировка
- •Задача 5. Слова
- •Задача 6. График
- •Задача 7. Кубическое уравнение
- •Задача 8. Собственное число
- •Комментарии к задачам
Задача 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
