Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Отчет по курсовой..docx
Скачиваний:
7
Добавлен:
09.02.2015
Размер:
1.15 Mб
Скачать

Описание переменных

Описание переменных функции 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

5.4 Описание функции 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

5.5 Описание функции 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

Кол-во строк текста

5.6 Описание функции 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

Кол-во строк текста

    1. Описание функции Help

Назначение: Функция используется для вывода справки.

Прототип: void Help();, где void – тип не возвращаемого значения.

Пример вызова: Help();

Вызывающая функция: main.

Блок схема функции не представлена из-за очевидности выполнения алгоритма.

  1. Иерархическая структура вызова функций

Иерархическая структура вызова функций представлена на рисунке 7.

Рис. 7. Иерархическая структура вызова функций

  1. Текст программы

#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");

}