Автор работы: Пользователь скрыл имя, 22 Марта 2012 в 19:09, курсовая работа
Разработать алгоритм и написать программу исходя из индивидуального задания
Индивидуальное задание:
Задан текст, содержащий произвольное количество строк, в которых отдельные слова могут разделяться одним или несколькими пробелами и знаками пунктуации (перенос слов с одной строки на другую не используется). Сформировать новый текст, который является результатом следующего преобразования исходного текста: заменить слова, содержащие цифры, на другое слово.
Цель работы ………………………………………………………………...……...……. 3
Задание ……………………………………………………………………….………….. 3
Уточнение задания ……………………………………………………………………… 3
Контрольные примеры .………………………...………………………………………. 3
Описание переменных ………………………………………………………………….. 4
Описание алгоритма ……………………………………………………………………. 4
Функции …………………………………………………………………………………. 6
Функция vvod …………………………………………………………………..…… 6
Функция vivod ……………………………………………………………………… 8
Функция free1 ………………………………………………………………………. 9
Функция menu ………………………………………………………..……..……… 9
Функция help …………………………………………………………………..…… 9
Функция zamena …………………….…………………………………………….. 10
Функция vvod_slova……………………………………………………………….. 13
Блок-схема главной функции ……………………………….………...……………… 14
Иерархическая структура программы ……………………………………………….. 17
Текст программы ……………………………………………………………………… 18
Инструкция пользователю …………………………………………………….……… 25
Набор тестов …………………………………………………………………...……… 25
Результат выполнения программы …………………………………………………… 26
Вывод ………………………………………………………………………………….. 26
break;
case 4:
if (z == 0)
else
printf("\nЗамена слов проведена успешно\n");
break;
case 5:
if (z == 0)
else
{
printf("\n Новый текст: \n\n\n");
vivod(newtxt, kolstrok);
break;
case 6:
help();
printf("\nДля выхода в меню нажмите любую клавишу\n");
getch();
break;
case 7:
if (text!= NULL)
if (newtxt != NULL)
if (slovo != NULL)
printf("\nДля выхода из программы нажмите любую клавишу\n");
getch();
break;
default:
printf("\nОшибка, введите номер операции: \n");
}
}
while(f != 7);
}
//............................
void menu()
{
printf("\n********************
*************\n\n"
"1.Ввод текста;\n"
"2.Контрольный вывод текста;\
"3.Ввод слова для замены;\n"
"4.Замена слов, содержащих числа на введённое слово;\n"
"5.Вывод изменённого текста;\
"6.Помощь пользователю;\n"
"7.Выход из программы;\n"
"\n\n\n\n\n\nВведите номер операции\n");
}
//..........................
void help()
{
printf("\n********************
пользователю******************
"\n1. Для того, чтобы ввести текст, необходимо выбрать 1-ый пункт меню\n"
"\n2. Текст может содержать
"\n3. Для перехода на следующую строку используется клавиша ENTER\n"
"\n4. Для прекращения ввода текста необходимо нажать два раза клавишу
ENTER\n"
"\n5. Если необходимы пустые строки в тексте, то необходимо использовать
один раз ENTER и один раз ПРОБЕЛ на каждой строке\n"
"\n6. Для вывода введённого текста на экран используется 2-ой пункт
меню\n"
"\n7. Для того, чтобы ввести слово, на которое будут заменяться слова,
Содержащие цифры, необходимо выбрать 3-ий пункт меню , ввод слова
прекращается после нажатия клавиши ПРОБЕЛ \n"
"\n8. Для замены слов, содержащие цифры, на введённое слово, необходимо
использовать 4-ый пункт меню\n"
"\n9. Для вывода нового текста необходимо использовать 5-ый пункт
меню\n"
"\n10. Для вызова справки необходимо использовать 6-ой пункт меню\n"
"\n11. Для выхода необходимо использовать 7-ой пункт меню\n\n"
"\nРазработчик: студент группы №1307 Ляховец Вадим");
}
//.....................Ввод текста........................
char** vvod(int* stroki)
{
char** text = NULL; //Массив указатель(текст)
int i, j; //счётчик по строкам и счётчик по символам
int w, v = 0; //переменные для организации перехода на следующую строку
char s[81]; //вводимая строка
printf("\nВведите текст\n");
for(i = 0; v != 1; i ++)
{
w = 0;
for(j = 0; w != 1; j ++)
{
s[j] = getchar(); //ввод символа
if(s[j] == '\n') //переход на следующую строку
{
w = 1;
s[j] = '\0';
}
if(s[0] == '\0') //конец набора текста
v = 1;
if(j == 79) //переход на следующую строку
{
w = 1;
s[80] = '\0';
}
}
text = (char **) realloc(text,(i+1)*sizeof(
text[i] = (char *) malloc((strlen(s)+1)*sizeof(
strcpy(text[i], s); //копирование введённой строки в массив указателей
for(j = 0; j < strlen(s); j ++) //обнуление строки
s[j] = 0;
}
*stroki = i; //количество строк
return text;
}
//...........................
void vivod(char** massiv, int stroki)
{
int i, j;
for(i = 0; i < stroki; i ++)
{
for(j = 0; j < strlen(*(massiv+i)); j ++)
printf("%c", *(*(massiv+i)+j)); //вывод посимвольно
if(*(*(massiv+i)+80) != '\0'||*(*(massiv+i)+1) == '\0')
printf("\n");
}
}
//.........................
char* vvod_slova()
{
char* slovo = NULL; //указатель навводимое слово
int j = 0; //счётчик символов
int w = 0; //переменная для организации выхода из набора слова
char key; //вводимый символ
printf("\nВведите слово\n");
for(j = 0; w != 1; j ++)
{
slovo =(char*)realloc(slovo, (j+1)*sizeof(char));
key = getchar(); //ввод символа
*(slovo+j) = key; //копирование символа в строку
if(*(slovo+j) == ' ') //конец ввода слова
{
w = 1;
*(slovo+j) = '\0';
}
}
return slovo;
}
//.................
char** free1(char** massiv, int stroki)
{
int i; //счётчик по строкам
for (i = 0; i < stroki; i ++)
free (massiv[i]); //освобождение памяти
free (massiv);
massiv = NULL; //обнуление массива
return NULL;
}
//.....................Замена слов, содержащих
числа.........................
char** zamena(char** text, char* slovo, int kolstrok)
{
int i;
int j;
int y;
int s;
int e;
int q;
char** newtxt = NULL; //указатель новый текст
char* t1 = NULL; //указатель на первоначальную строку
char* t2 = NULL; //указатель на новую строку
for(i = 0; i < kolstrok; i ++) //пока не конец текста
{
q = 0;
for(j = 0; j < strlen(*(text+i)); j ++) //копирование строки в строку t1
{
t1 =(char*)realloc(t1, (j+1)*sizeof(char));
*(t1+j) = *(*(text+i)+j);
}
t1 =(char*)realloc(t1, (j+1)*sizeof(char)); //выделение памяти под признак