Министерство образования и науки РФ
ФАГОУ ВПО «УрФУ им. первого Президента России Б.Н. Ельцина»
Кафедра информационных технологий и автоматизации проектирования
КУРСОВАЯ РАБОТА
по дисциплине «Программирование»
Тема: «Обработка текстовой информации»
Выполнил
Студент:
Группа: М-120702
Принял:
Работа защищена с оценкой
Подпись: Дата:
Екатеринбург
2013
Оглавление
1. Введение
2. Отчет о решении задачи
a. Постановка задачи
b. Исходные данные и исходные выражения принятого варианта
c. Обозначение переменных
d. Алгоритм решения задачи
e. Текст программы
f. Результат работы программы
3. Заключение
Введение
Цель данной работы научиться применять возможности языка программирования «CИ» для работы с текстовыми документами. В работе используются функции для работы с текстовыми документами для решения конкретной задачи. Данная работа подразделяется на несколько подзадач: чтение текста из файла, обработка текста, вывод текста на экран.
Отчет о решении задачи
19 вариант
Постановка задачи:
С помощью текстового редактора создать файл, содержащий текст, длина которого не превышает 700 символов (длина строки текста не должна превышать 70 символов). Имя файла должно иметь расширение txt.
Написать программу, которая:
• выводит текст на экран дисплея;
• по нажатию произвольной клавиши поочерёдно выделяет в тексте заданное слово (заданное слово вводить с клавиатуры);
• выводит текст на экран дисплея еще раз, заменяя в заданном слове строчные буквы прописными.
Исходные выражения и исходные данные принятого варианта:
Текст, содержащийся в файле text:
National flags are not mere symbols of a country. Their colors and designs convey past history and future goals. It is a interesting to point out that the United States did not even gave a standardized flag until 1912. Called the Stars and Stripes and Old Glory the flag is one of the most complicated in the world. No other flag need 64 pieces of fabric to make.
Обозначение переменных:
Главная программа
f_in имя потока, используемого для связи между каналом и соответствующим файлом
s символьный массив, предназначенный для записи в него текста из файла
name символьный массив, содержащий имя открываемого файла
i переменная целого типа, используется в качестве счетчика в циклах
a переменная целого типа, хранит номер первой буквы слова
b переменная целого типа, хранит номер последней буквы слова
lstr переменная целого типа, хранит номер последнего символа массива s
from переменная целого типа, хранит номер символа, с которого начинается поиск следующего слова
m переменная целого типа, хранит наибольшее количество подряд идущих согласных букв в слове
max переменная целого типа, хранит наибольшее количество подряд идущих согласных букв в тексте
Подпрограмма поиска слова (poisk)
Формальные параметры Переменные
t символьный массив i переменная целого типа, используется в качестве счетчика в циклах
from переменная целого типа, хранит номер символа, с которого начинается поиск lstr переменная целого типа, хранит номер последнего символа массива t
a переменная целого типа, предназначенная для хранения номера первой буквы слова
b переменная целого типа, предназначенная для хранения номера последней буквы слова
Подпрограмма нахождения наибольшего количества
подряд идущих согласных букв (sogl)
Формальные параметры Переменные
t символьный массив i переменная целого типа, используется в качестве счетчика в циклах
m переменная целого типа, хранит набольшее количество подряд идущих согласных букв n переменная целого типа, используется в качестве счетчика согласных букв
a переменная целого типа, предназначенная для хранения номера первой буквы слова
b переменная целого типа, предназначенная для хранения номера последней буквы слова
Алгоритм решения задачи:
Главная программа
А. Начать выполнение:
1. Очистить экран
2. Ввести имя name открываемого файла
3. Прочитать текст из файла и записать его в массив s
a. Присвоить f_in значение fopen(name, "rb")
b. Перевести курсор в конец файла
c. Посчитать количество lstr элементов массива
d. Динамически выделить память под (lstr+1) элементов
e. Перевести курсор в начало файла
f. Присвоить i значение 0
g. Пока i строго меньше lstr выполнять
• Читать каждый символ текста и записывать его в массив s
• Увеличить i на единицу
h. Записать в ячейку lstr массива s значение ‘ ’
4. Вывести исходный текст на экран
5. Присвоить a значение 0
6. Присвоить b значение lstr
7. С помощью процедуры sogl найти максимальное количество подряд идущих согласных букв в тексте
8. Обнулить переменные from, a, b, m
9. Вывести сообщение «Нажмите любую клавишу…»
10. Дожидаться нажатия произвольной клавиши
11. Пока a не равно -3 выполнять
a. С помощью процедуры poisk найти начало и конец слова (a, b)
b. С помощью процедуры sogl найти максимальное количество подряд идущих согласных букв в слове
c. Если m равно max, max больше нуля и а не равно -3, то
• Очистить экран
• Вывести текст до искомого слова
• Изменить цвет текста
• Вывести искомое слово
• Вернуть исходный текстовой режим
• Вывести оставшийся текст
• Дожидаться нажатия произвольной клавиши
• Увеличить i на единицу
d. Если номер следующего за b символа выходит за пределы p или равен p, то прервать выполнение цикла
e. Присвоить from значение (b+1)
12. Если (max<1), то вывести сообщение «Нет согласных букв»
13. Иначе вывести сообщение «Максимальное количество подряд идущих согласных букв равно:» и значение max
14. Дожидаться нажатия произвольной клавиши
15. Разорвать связь между потоком и файлом
16. Очистить память
B. Закончить выполнение.
Подпрограмма поиска слова (poisk)
А. Начать выполнение:
1. Найти номер последнего элемента массива t
2. Проверить, не выходит ли значение from за допустимые пределы (0<=from<=lstr), если это условие не выполняется, возвращать a равным -1 или -2
3. Иначе
a. Присвоить a значение -3
b. Присвоить i значение from
c. Пока i меньше (lstr+1) выполнять
• Если символ, содержащийся в i-том элементе массива t, является буквой
o Присвоить a значение i
o Если i равно lstr
Присвоить b значение a и вернуть в главную программу
o Прервать цикл
• Увеличить i на единицу
d. Если a равно -3, то вернуть это значение в главную программу
e. Присвоить i значение (a+1)
f. Пока i меньше (lstr+1) выполнять
• Если символ, содержащийся в i-том элементе массива t, является буквой, апострофом или тире
o Присвоить b значение i
• Иначе
o Присвоить b значение i-1
o Прервать цикл
• Увеличить i на единицу
4. Вернуть значения a и b в главную программу
B. Закончить выполнение.
Подпрограмма нахождения наибольшего количества
подряд идущих согласных букв (sogl)
А. Начать выполнение:
1. Обнулить значения переменных n и m
2. Присвоить i значение a
3. Пока i меньше (b+1) выполнять
a. Если символ, содержащийся в i-том элементе массива t согласной является буквой, то увеличить n на 1
b. Иначе
• Если n больше m, то m присвоить значение n
• Обнулить n
c. Если n больше m, то m присвоить значение n
4. Вернуть значения m в главную программу
B. Закончить выполнение.
Текст программы:
#include <stdio.h>
#include <conio.h>
#include <ctype.h>
#include <alloc.h>
#include <string.h>
void poisk(char *t, int from, int *a, int *b);
void sogl(char *t, int *m, int *a, int *b);
void main(void)
{
FILE *f_in;
char *s, *name;
int i,a,b,lstr,from,m,max;
clrscr();
name=(char*)malloc(90*sizeof(char));
do
{
printf("BBEDuTE UM9I FAuJIa:
");
scanf("%s",name);
f_in=fopen(name,"rb");
if (f_in==NULL)
printf("HEBO3MO}I{HO OTKPbITb FAuJI C uMEHEM %s",name);
clrscr();
}
while (f_in==NULL);
fseek(f_in,0,SEEK_END);
lstr=ftell(f_in);
s=(char*)malloc((lstr+1)*sizeof(char));
fseek(f_in,0,SEEK_SET);
for(i=0;i<lstr;i++)
fscanf(f_in, "%c", &s[i]);
*(s+lstr)= ;
printf("%s", s);
a=0;
b=lstr;
max=0;
sogl(s,&max,&a,&b);
from=0;
a=0;
b=0;
m=0;
printf("
Ha}I{MuTe JIIO6yIO KJIaBuIIIy...");
getch();
while(a!=-3)
{
poisk(s,from,&a,&b);
sogl(s,&m,&a,&b);
if ((m==max)&&(max>0)&&(a!=-3))
{
clrscr();
for(i=0;i<a;i++)
printf("%c", *(s+i));
textcolor(RED);
for(i=a;i<(b+1);i++)
cprintf("%c", *(s+i));
textmode(LASTMODE);
for(i=(b+1);i<(lstr+1);i++)
printf("%c", *(s+i));
printf("
Ha}I{MuTe JIIO6yIO KJIaBuIIIy...");
getch();
}
if((b+1)>=lstr)
break;
from=b+1;
}
if (max<1)
printf("
HeT CorJIacHbIx 6yKB");
else
printf("
MaKcuMaJIbHoE KoJIu4ecTBo CorJIacHbIx 6yKB: %d", max);
getch();
fclose(f_in);
free(s);
}
void poisk(char *t, int from, int *a, int *b)
{
int i,lstr;
lstr=strlen(t)-1;
if(from<0)
{
*a=-1;
return;
}
else
if(from>lstr)
{
*a=-2;
return;
}
else
{
*a=-3;
for(i=from;i<(lstr+1);i++)
if(isalpha(*(t+i))!=0)
{
*a=i;
if(i==lstr)
{
*b=*a;
return;
}
break;
}
if(*a==-3)
return;
for(i=*a;i<(lstr+1);i++)
if(isalpha(*(t+i))!=0||*(t+i)==-||*(t+i)==)
*b=i;
else
{
*b=i-1;
break;
}
}
return;
}
void sogl (char *t, int *m, int *a, int *b)
{
int i, n;
n=0;
*m=0;
for (i=*a; i<*b+1; i++)
{
if (isalpha(*(t+i))!=0&&*(t+i)!=a&&*(t+i)!=e&&*(t+i)!=o&&*(t+i)!=u&&*(t+i)!=i&&*(t+i)!=y&&*(t+i)!=A&&*(t+i)!=E&&*(t+i)!=O&&*(t+i)!=U&&*(t+i)!=I&&*(t+i)!=Y)
n++;
else
{
if (n>*m)
*m=n;
n=0;
}
}
if (n>*m)
*m=n;
return;
}
Результат работы программы:
Заключение
Выполнив курсовую работу, я расширил и углубил свои знания и навыки в программировании на языке «СИ» и получил возможность применить эти знания на практике (решение задачи на обработку текстовой информации).
Обработка текстовой информации возможности языка программирования «CИ»
Курсовая работа по предмету «Программирование»