Обработка текста
Работа с символьными строками, их основные функции. Разработка алгоритма, характеристика и описание переменных и функций. Иерархическая структура вызова функций. Текст программы, инструкция пользователя. Проверка программы с помощью набора тестов.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | курсовая работа |
Язык | русский |
Дата добавления | 19.11.2017 |
Размер файла | 2,3 M |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
25
Размещено на http://www.allbest.ru/
Министерство науки и образования РФ
Федеральное государственное автономное образовательное
учреждение высшего профессионального образования
"Санкт-Петербургский государственный электротехнический
университет "ЛЭТИ" им.В.И. Ульянова (Ленина)"
(СПбГЭТУ "ЛЭТИ")
Факультет компьютерных технологий и информатики
Кафедра вычислительной техники
Курсовая работа
на тему: “Обработка текста”
по дисциплине “Программирование”
Выполнил: Кановский И.В.
Группа 4306
Принял: к. т. н., доцент Сискович Т.И.
Санкт-Петербург 2014 г.
Оглавление
- 1. Цель
- 2. Краткое описание алгоритма
- 3. Описание функций
- Описание функции print
- Описание функции poryadok
- Описание функции punct
- Описание функции fre
- Описание функции mallok
- Описание функции Help
- 4. Иерархическая структура вызова функций
- 5. Текст программы
- 6. Набор тестов
- Результаты решения задачи
- Вывод
1. Цель
Получить практические навыки работы с символьными строками. Научиться выполнять основные функции с ними.
1. Задание
Разработать алгоритм и написать программу исходя из индивидуального задания.
Индивидуальное задание:
Задан текст, содержащий произвольное количество строк, в которых отдельные слова могут разделяться одним или несколькими пробелами и знаками пунктуации (перенос слов с одной строки на другую не используется). Сформировать новый текст, который является результатом следующего преобразования исходного текста: в четных строках расположить слова в порядке убывания по численности в них гласных букв.
2. Уточнение задания
В программе должно быть использовано простейшее меню. Выполнение программы должно быть многократным по желанию пользователя. В программе должны быть функции ввода текста, вывода текста, формирования нового текста и вывода его на экран. Все данные вводятся с клавиатуры. Для перехода к следующей строке использовать клавишу "Enter". Ввод заканчивается после ввода символа ”@”.
Пункты меню:
1: Ввод текста
2: Вывод исходного текста
3: Обработка текста
4: Вывод результата обработки
5: Выход
3. Контрольные примеры
Контрольные примеры представлены в Таблице 1.
Таблица 1. Контрольные примеры
№ примера |
Исходные данные |
Результат |
|
1 |
Poka, mama Ja poshol v shkoly |
Poka, mama Shkoly poshol ja v |
|
2 |
- |
Вы не ввели текст. |
|
3 |
I am child I am student! '' I am=teacher I+ //. am director |
I am child student am I I am=teacher Director am I |
|
4 |
Privet vsem Utro dobroe |
Privet vsem dobroe Utro |
4. Описание главной функции
Назначение: начальная точка выполнения алгоритма.
Описание переменных функции
Описание переменных представлено в Таблице 2.
Таблица 2. Описание переменных главной функции
Имя переменной |
Тип |
Назначение |
|
b |
сhar* |
Считывающая строка |
|
сс |
int |
Переключатель |
|
vd |
int |
Флажок ввода |
|
obr |
int |
Флажок обработки |
|
m |
int |
Кол-во строк в тексте |
|
t |
char** |
Указатель на первый элемент первой строки входного текста |
|
r |
char** |
Указатель на первый элемент первой строки выходного текста |
2. Краткое описание алгоритма
Начало программы.
Шаг №1. Вывод меню.
Шаг №2. Выбор пользователем пункта меню.
Шаг №3. Переход к пункту, выбранным пользователем.
1: Ввод текста. Переход к шагу 2
2: Вывод исходного текста. Переход к шагу 2
3: Обработка текста. Переход к шагу 2
4: Вывод результата обработки. Переход к шагу 2
5: Выход. Переход к шагу 4.
Шаг №4. Конец программы.
Блок-схема главной функции
Блок-схема главной функции представлена на рисунке 1:
3. Описание функций
Описание функции reallok
Назначение: Функция используется для ввода текста.
Прототип: char** reallok (char**, int, int*);, где int* - указатель на адрес количества строк исходного текста; char** - тип возвращаемого значения, int - число символов в строке. Пример вызова: t=reallok (t,n,&m);, где t указатель на адрес первого элемента первой строки исходного текста, &m - адрес кол-ва строк исходного текста, n - число символов в строке.
Вызывающая функция: main.
Описание переменных.
Описание переменных функции type_text представлены в Таблице 3.
Таблица 3. Описание переменных функции type_text
Имя переменной |
Тип |
Назначение |
|
Локальные переменные |
|||
t |
char** |
Указатель на адрес первого элемента первой строки входного текста |
|
b |
char |
Массив символов, размер которого 81 |
|
i,j |
int |
Счётчики |
|
Формальные переменные |
|||
m |
int* |
Указатель на кол-во строк исходного текста |
Блок-схема reallok
Блок-схема функции reallok представлена на рисунке 2.
Рис.2. Блок-схема функции reallok
Описание функции print
Назначение: Функция используется для вывода текста.
Прототип: void print (char**, int, int);, где char** - указатель на первый элемент первой строки текста, первый int - кол-во строк текста, второй int - кол-во символов в строке.
Пример вызова: print (t,n,m);, где t - указатель на адрес первого элемента первой строки текста, m - кол-во строк текста, n - кол-во символов в строке.
Вызывающая функция: main.
Описание переменных
Описание переменных функции print представлены в Таблице 4.
Таблица 4. Описание переменных функции print
Имя переменной |
Тип |
Назначение |
|
Локальные переменные |
|||
i |
int |
Счётчик |
|
Формальные переменные |
|||
t |
char** |
Указатель на первый элемент первой строки входного текста |
|
n |
int |
Кол-во символов в строке |
|
m |
int |
Кол-во строк текста |
Блок-схема print
Блок-схема функции print представлена на рисунке 3.
Рис.3. Блок-схема функции print
Описание функции poryadok
Назначение: Функция используется для обработки текста.
Прототип: char** poryadok (char**, char**, int, int);, где первый char** - указатель на адрес первого элемента первой строки исходного текста, второй **char - указатель на адрес первого элемента первой строки конечного текста, первый int - кол-во строк исходного текста, второй int - кол-во строк сформированного текста; char** - тип возвращаемого значения.
Пример вызова r=poryadok (t,r,n,m);, где r - указатель на адрес первого элемента первой строки нового текста t - указатель на адрес первого элемента первой строки исходного текста, m - кол-во строк исходного текста, n - кол-во символов в строке.
Вызывающая функция: main
Вызываемая функция: punct.
Описание переменных
Описание переменных функции poryadok представлены в Таблице 5.
Таблица 5. Описание переменных функции poryadok
Имя переменной |
Тип |
Назначение |
|
Локальные переменные |
|||
Newtext |
char** |
Указатель на адрес первого элемента первой строки сформированного текста |
|
i,j,e,k,s,q |
int |
Счётчики |
|
l |
int |
Хранитель кол-ва слов в строке |
|
x,y,z |
int |
Переменные, используемые при сортировке слов в строках |
|
a, c, d |
int |
Массивы, содержащие число гласных букв в слове, координаты начал и координаты концов слов |
|
Формальные переменные |
|||
t |
char** |
Указатель на адрес первого элемента первой строки входного текста |
|
r |
char** |
Указатель на адрес первого элемента первой строки выходного текста |
|
m |
int |
Кол-во строк текста |
|
n |
int |
кол-во символов в строке |
Блок-схема poryadok
Блок-схема функции poryadok представлена на рисунке 4.
Рис.4. Блок-схема функции poryadok
Описание функции punct
Назначение: Функция используется для проверки символа на разделитель.
Прототип: int punct (char);, где char - проверяемый символ; int - тип возвращаемого значения.
Пример вызова: punct (t [i] [j]), где t [i] [j] - j-ый символ в слове.
Вызывающая функция: poryadok.
Описание переменных
Описание переменных функции представлены в Таблице 7.
Таблица 7. Описание переменных функции punct
Имя переменной |
Тип |
Назначение |
|
Локальные переменные |
|||
isSymb |
int |
Флаг, отвечающий за проверку, является ли символ разделителем |
|
i |
int |
Счётчик |
|
Формальные переменные |
|||
symb |
char |
Проверяемый символ |
Блок-схема punct
Блок-схема функции punct представлена на рисунке 6.
Рис.6. Блок-схема функции punct
Описание функции fre
Назначение: Функция используется для освобождения памяти, выделенной ранее памяти под тексты.
Прототип: char** fre (char**, int);, где сhar** - указатель на адрес первого элемента первой строки текста, int - кол-во строк текста; char** - тип возвращаемого значения.
Пример вызова: t=fre (t, m);, где t - указатель на адрес первого элемента первой строки текста, m - кол-во строк текста.
Вызывающая функция: main.
Блок схема функции не представлена из-за очевидности выполнения алгоритма.
Описание переменных
Описание переменных функции fr представлены в Таблице 8.
Таблица 8. Описание переменных функции fr
Имя переменной |
Тип |
Назначение |
|
Локальные переменные |
|||
i |
int |
Счётчик |
|
Формальные переменные |
|||
t |
char** |
Указатель на адрес первого элемента первой строки входного текста |
|
m |
int |
Кол-во строк текста |
Описание функции mallok
Назначение: Функция используется для выделения памяти, для выходного текста.
Прототип: char** mallok (int, int);, где первый int - число символов в строке, второй int - кол-во строк текста; char** - тип возвращаемого значения.
Пример вызова: r=mallok (m,n);, где m - кол-во строк текста, n - кол-во cимволов в строке.
Вызывающая функция: main.
Блок схема функции не представлена из-за очевидности выполнения алгоритма.
Описание переменных
Описание переменных функции mallok представлены в Таблице 8.
Таблица 8. Описание переменных функции mallok
Имя переменной |
Тип |
Назначение |
|
Локальные переменные |
|||
i |
int |
Счётчик |
|
y |
Char** |
Указатель на адрес первого элемента первой строки входного текста |
|
Формальные переменные |
|||
n |
int |
Число символов в строке |
|
m |
int |
Кол-во строк текста |
Описание функции Help
Назначение: Функция используется для вывода справки.
Прототип: void Help ();, где void - тип не возвращаемого значения.
Пример вызова: Help ();
Вызывающая функция: main.
Блок схема функции не представлена из-за очевидности выполнения алгоритма.
4. Иерархическая структура вызова функций
Иерархическая структура вызова функций представлена на рисунке 7.
Рис.7. Иерархическая структура вызова функций
5. Текст программы
#include <stdio. h>
#include <conio. h>
#include <locale. h>
#include <stdlib. h>
#include <string>
void Help ();
char** poryadok (char**, char**, int, int);
char** fre (char**, int);
void print (char**, int, int);
char** reallok (char**, int, int*);
char** mallok (int, int);
char** probel (char**, int, int);
int punct (char);
int main ()
{
setlocale (LC_ALL, "RUS");
const int n=81;
int m, cc, vd=0, obr=0;
char b [n], **t, **r;
do
{
puts ("Меню: ");
puts ("1) Вызвать справку");
puts ("1) Ввести текст");
puts ("2) Показать введенный текст");
puts ("3) Обработать текст");
puts ("4) Показать обработанный текст");
puts ("5) Выход");
printf ("Введите номер пункта: ");
scanf ("%d", &cc);
switch (cc)
{
Case 0:
Help ();
Break;
case 1:
obr=0;
t=reallok (t,n,&m);
r=mallok (m,n);
r=probel (r,n,m);
vd=1;
break;
case 2:
if (vd==1)
{
puts ("Введены строки: ");
print (t,n,m);
}
else
printf ("Сначала нужно ввести текст, выбрав пункт 1) \n");
break;
case 3:
if (vd==1)
{
r=poryadok (t,r,n,m);
printf ("Текст обработан. \n");
}
else
printf ("Сначала нужно ввести текст, выбрав пункт 1) \n");
obr=1;
break;
case 4:
if (vd==1)
if (obr==1)
print (r,n,m);
else
printf ("Сначала нужно обработать текст, выбрав пункт 3) \n");
else
printf ("Сначала нужно ввести текст, выбрав пункт 1) \n");
break;
case 5:
printf ("Пока!");
break;
default:
printf ("Такого пункта не существует. Введите пункт меню ещё раз\n");
}
}
while (cc! =5);
if (vd==1)
{
t=fre (t,m);
r=fre (r,m);
}
}
char** reallok (char** t, int n, int *m)
{
int i, j;
char b [n];
b [0] =' ';
t= (char**) malloc (sizeof (char*));
for (i=0; b [0]! ='@'; i++)
{
gets (b);
if (b [0]! ='@')
{
puts ("Введи строку");
t= (char**) realloc (t, (i+1) *sizeof (char*));
* (t+i) = (char*) malloc (n*sizeof (char));
for (j=0; j<n-1; j++)
t [i] [j] =' ';
strcpy (t [i],b);
}
}
*m=i-1;
return (t);
}
char** poryadok (char** t, char** r, int n, int m)
{
int i, j, a [n], c [n], d [n], l, k, s, x,y, z, q, e;
char b [n];
for (i=0,l=0,q=0,j=0; i<m; i=i+2)
{
l=0; q=0; j=0;
for (e=0; e<n; e++)
{
a [e] =0;
c [e] =0;
d [e] =0;
}
while (punct (t [i] [j]) ==1)
j++;
c [0] =j;
for (; (j<n-1) && (t [i] [j-1]! ='\0'); j++)
{
if (t [i] [j] =='a'||
t [i] [j] =='e'||
t [i] [j] =='i'||
t [i] [j] =='o'||
t [i] [j] =='u'||
t [i] [j] =='y')
a [l] ++;
if (punct (t [i] [j]) ==1)
{
if (punct (t [i] [j-1]) ==0)
d [l] =j-1;
if ( (punct (t [i] [j+1]) ==0) && (j+1! =n-1) && (t [i] [j+1]! ='\0'))
{
l++;
c [l] =j+1;
}
}
if ( (punct (t [i] [j-1]) ==0) && (t [i] [j] =='\0'))
d [l] =j-1;
}
for (k=0; k<l; k++)
for (s=1; s<=l-k; s++)
{
if (a [k] <=a [k+s])
{
x=a [k];
a [k] =a [k+s];
a [k+s] =x;
y=c [k];
c [k] =c [k+s];
c [k+s] =y;
z=d [k];
d [k] =d [k+s];
d [k+s] =z;
}
}
for (k=0; k<=l; k++)
{
for (s=c [k]; s<=d [k]; s++,q++)
r [i] [q] =t [i] [s];
r [i] [q] =' ';
q++;
}
}
for (i=1; i<m; i=i+2)
for (j=0; j<n-1; j++)
r [i] [j] =t [i] [j];
return (r);
}
int punct (char symb)
{
char punSymbls [30] = ",.! @#$%^&* () _-+= [] \"№:? /|\; '<>";
int i = 0;
int isSymb = 0;
while ( (punSymbls [i]) && (isSymb == 0))
{
if (symb == punSymbls [i])
isSymb = 1;
i++;
}
return isSymb;
}
char** mallok (int n, int m)
{
int i,j;
char **y;
y= (char**) malloc (n*sizeof (char));
for (i=0; i<n; i++)
* (y+i) = (char*) malloc (m*sizeof (char));
return (y);
}
char** probel (char** r, int n, int m)
{
int i,j;
for (i=0; i<m; i++)
for (j=0; j<n-1; j++)
r [i] [j] =' ';
return (r);
}
char** fre (char** t, int m)
{
if (t! =NULL)
{
for (int i = 0; i<m; i++)
free (* (t+i));
free (t);
}
return NULL;
}
void print (char **r, int n, int m)
{
int i,j;
printf ("\n");
for (i=1; i<m; i++)
{
printf ("\n");
for (j=0; j<n-1; j++)
printf ("%c",r [i] [j]);
}
printf ("\n");
}
void Help ()
{
system ("cls");
puts ("\n\n Данная программа предназначена для формирования нового текста, который");
puts (" является результатом следующего преобразования исходного текста: ");
puts ("в четных строках расположить слова в порядке убывания по численности в них гласных букв. ");
puts ("\n Ввод текста пользователем заканчивается после ввода символа “@”,");
system ("pause");
}
6. Инструкция пользователю
Для того чтобы ввести текст необходимо выбрать 1-ый пункт меню.
Текст может содержать произвольное количество строк.
Для перехода на следующую строку необходимо нажать клавишу "Enter".
Для прекращения ввода текста необходимо ввести символ “@”.
Если необходимы пустые строки в тексте, то необходимо использовать один раз клавишу "Enter" и один раз клавишу "Пробел" на каждой пустой строке.
Для вывода исходного текста на экран необходимо выбрать 2-ой пункт меню.
Для того чтобы обработать исходный текст, необходимо выбрать 3-ий пункт меню.
Для вывода нового текста на экран необходимо выбрать 4-ый пункт меню.
Для выхода необходимо выбрать 5-ой пункт меню
7. Набор тестов
Проверка программы выполняется с помощью тестов. Тестирование - проверка определённой части программы, сравнение результатов выданных программой для специально выбранных исходных данных, с ожидаемыми результатами.
Тест 1. Проверка правильности работы всей программы.
Вводим контрольные примеры из таблицы 1, и получаем результаты, совпадающие с ожидаемыми значениями из таблицы.
Тест 2. Проверка правильности работы функции вывода.
Пытаемся вывести исходный текст на экран, выбрав пункт 3, не введя текст, получаем сообщение "Сначала необходимо ввести текст".
Тест 3. Попытаемся вывести сформированный текст, введя исходный, но, предварительно не выбрав 3-ий пункт обработки, получаем сообщение "Вы ввели текст, но не обработали его".
Тест 4. Проверка правильности работы функции формирования нового текста.
Пытаемся сформировать текст, не введя исходный, и получаем сообщение
"Сначала необходимо ввести текст".
Результаты решения задачи:
При выполнении программы были получены результаты, совпадающие со значениями, приведенными в Таблице 1. Также были проведены тесты из 9 п. Набор тестов. Ошибок не обнаружено.
алгоритм программа символьная строка
Вывод
При выполнении курсовой работы были получены практические навыки работы с символьными строками, указателями, функциями, динамической памятью на языке программирования "С/C++".
Размещено на Allbest.ru
...Подобные документы
Анализ особенностей работы и основных операций с символьными строками, указателями, функциями, динамически выделяемой памятью. Ввод текста в пустые строки. Вывод введённого текста на экран. Замена первых слов строк. Проверка правильности работы программы.
курсовая работа [1,9 M], добавлен 17.07.2014Символьные типы данных, работа со строками, составление блок-схемы алгоритма и программы для работы с массивами. Организация программы с использованием процедур и функций. Процедуры и функции, использующиеся при обработке файлов; компонентные файлы.
контрольная работа [52,9 K], добавлен 03.10.2010Разработка программы обработки числовых последовательностей с кодом на языке Pascal. Функции ввода пользователем с клавиатуры последовательности целых чисел. Алгоритмы разработанных процедур и функций. Инструкция пользователя, листинг программы.
курсовая работа [677,7 K], добавлен 13.07.2010Изучение определения, описания и вызова функций, указателей и ссылок на них. Написание функции умножения произвольного столбца двумерного массива на const. Умножение 2 столбцов массива на константы. Составление блок-схемы алгоритма и текста программы.
лабораторная работа [182,3 K], добавлен 09.01.2012Описание функций, использующихся в программах. Основы 32-битного программирования на языке Assembler для ОС WINDOWS. Использование функции invoke, которая позволяет намного сократить текст программы и делает приложения похожими на программы для "ЯВы".
курсовая работа [252,6 K], добавлен 20.02.2015Создание приложения, исполняющего трансляцию программы из языка Паскаль в язык Си: разработка алгоритма реализации задачи, описание необходимых констант, переменных, функций и операторов, представление листинга программы и распечатка результатов.
курсовая работа [305,9 K], добавлен 03.07.2011Техническое задание и блок-схема алгоритма программы построения графиков функций. Инструкция по инсталляции и описание работы программного продукта GRAPHIC. Инструкция оператору и ограничения данной версии программы. Программный код приложения.
курсовая работа [391,2 K], добавлен 05.12.2009Описание использованного набора макросредств. Список использованных констант и структур. Основы вызова API-функций. Основы программирования на 32-битном ассемблере. Формирование объектного кода, содержащего текст исходной программы в машинном виде.
курсовая работа [150,4 K], добавлен 18.05.2014Разработка программы игры в крестики-нолики. Примеры игровой ситуации на игровом поле. Описание входных и выходных данных, переменных и функций программы. Реализация алгоритма работы программы на языке C++. Текст программы и примеры ее выполнения.
курсовая работа [352,8 K], добавлен 14.04.2011Разработка программы проверки знаний для тестирования студентов по программированию с кодом на языке Delphi. Проектирование визуального интерфейса и словесный алгоритм работы программы. Алгоритмы разработанных процедур и функций, инструкция пользователя.
курсовая работа [506,5 K], добавлен 21.02.2011Разработка алгоритма и программы, обеспечивающей вычисление максимального значения функции на заданном отрезке, первой производной заданной функции. Методика расчёта, алгоритм решения задачи, описание программы. Результаты расчётов и графики функций.
курсовая работа [576,6 K], добавлен 17.05.2011Разработка программы на языке Turbo Pascal, обеспечивающей работу пользователя в диалоговом режиме с возможностью выбора функций с помощью одноуровневого меню вертикального типа. Блок-схема и листинг программы, описание руководства пользователя.
курсовая работа [1,5 M], добавлен 17.03.2014Осуществление работы разрабатываемой программы на основе алгоритма, использующего Z-буфер. Аналитическое описание программной реализации. Алгоритмы основных функций программы. Содержание руководства пользователя. Файлы программы, пункты главного меню.
курсовая работа [1,7 M], добавлен 15.04.2015Основные аналитические соотношения. Блок схемы и алгоритм решения задачи. Проверка работоспособности алгоритма вручную. Таблица идентификации переменных. Формы входной и выходной печати. Разработка и отладка программы. Инструкция для работы с программой.
курсовая работа [69,8 K], добавлен 13.02.2012Описание информационной структуры, используемой для организации списка. Контрольные примеры обработки и сортировки. Краткое описание алгоритма. Локальные переменные функции. Иерархическая структура программы, а также код программы на языке С/С++.
курсовая работа [91,4 K], добавлен 16.07.2013Разработка алгоритма решения задачи численного интегрирования методом трапеции. Словесное описание и блок-схема разработанного алгоритма программы. Описание интерфейса, главного окна и основных форм программы. Проверка работоспособности программы.
курсовая работа [1,4 M], добавлен 16.03.2012Анализ и описание алгоритма. Основные характеристики выбранного компьютера, программных сред (операционная система и среда программирования). Описание компонентов и интерфейса программы, а также модулей, процедур и функций. Вызов и загрузка программы.
курсовая работа [1,3 M], добавлен 26.04.2015Практическое использование алгоритмов для нахождения минимального пути в лабиринте. Разработка программы на языке С++ и в среде Visual C++. Основные способы поиска пути: метод волны и приоритетов. Описание разработанных функций и инструкция пользователя.
дипломная работа [54,3 K], добавлен 16.03.2012Создание приложения для шифрования–дешифрования текста тремя алгоритмами (алгоритм "Цезаря","Модифицированного Цезаря", "Скитала"). Исходный текст компонента. Инструкция пользователя, возможность просмотра примерного алгоритма. Исходный текст программы.
курсовая работа [2,8 M], добавлен 27.02.2015Заголовки процедур и функций, их основные параметры. Работа с массивами и строками в среде разработки Borland Delphi. Основное назначение процедурных типов, правила их объявления. Механизм передачи процедур в качестве фактических параметров вызова.
курсовая работа [27,9 K], добавлен 18.05.2011