Работа с текстом

МИНИСТЕРСТВО ОБРАЗОВАНИЯ  И НАУКИ 

РОССИЙСКОЙ ФЕДЕРАЦИИ

 

Санкт-Петербургский Государственный Электротехнический университет «ЛЭТИ» им. В.И. Ульянова (Ленина)

 

 

 

 

 

Кафедра вычислительной техники

 

 

 

ПОЯСНИТЕЛЬНАЯ ЗАПИСКА 

К  КУРСОВОЙ РАБОТЕ

на тему:

«Работа с текстом»

по дисциплине «Программирование»

 

 

 

 

 

 

Выполнил: студент группы №1307

                    Ляховец Вадим Михайлович

 

Проверил: к.т.н., доцент кафедры ВТ

                   Сискович Тамара Ильинична

 

 

 

 

 

 

 

 

 

 

Санкт-Петербург

2012 г.

Содержание

 

  1. Цель работы ………………………………………………………………...……...……. 3
  2. Задание ……………………………………………………………………….………….. 3
  3. Уточнение задания ……………………………………………………………………… 3
  4. Контрольные примеры .………………………...………………………………………. 3
  5. Описание переменных ………………………………………………………………….. 4
  6. Описание алгоритма ……………………………………………………………………. 4
  7. Функции …………………………………………………………………………………. 6
    1. Функция vvod …………………………………………………………………..…… 6
    2. Функция vivod ……………………………………………………………………… 8
    3. Функция free1 ………………………………………………………………………. 9
    4. Функция menu ………………………………………………………..……..……… 9
    5. Функция help …………………………………………………………………..…… 9
    6. Функция zamena …………………….…………………………………………….. 10
    7. Функция vvod_slova……………………………………………………………….. 13
  8. Блок-схема главной функции ……………………………….………...……………… 14
  9. Иерархическая структура программы ………………………………………………..  17
  10. Текст программы ………………………………………………………………………  18
  11. Инструкция пользователю …………………………………………………….……… 25
  12. Набор тестов …………………………………………………………………...……… 25
  13. Результат выполнения программы …………………………………………………… 26
  14. Вывод ………………………………………………………………………………….. 26

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  1. Цель работы

 

Получить практические навыки работы с символьными строками. Научить выполнять основные операции с символьными строками.

 

  1. Задание

 

Разработать алгоритм и написать программу исходя из индивидуального задания

Индивидуальное задание:

Задан текст, содержащий произвольное количество строк, в которых отдельные  слова могут разделяться одним или несколькими пробелами и знаками пунктуации (перенос слов с одной строки на другую не используется). Сформировать новый текст, который является результатом следующего преобразования исходного текста: заменить слова, содержащие цифры, на другое слово.

 

  1. Уточнение задания

 

В программе  должно быть использовано простейшее меню. Выполнение программы должно быть многократным по желанию пользователя.  В программе должны быть использованы функции ввода, вывода текста и формирования нового текста. Все данные вводятся с клавиатуры. Для перехода к следующей  строке использовать  <<ENTER>>. Ввести можно только одно слово.

 

  1. Контрольные примеры

 

Контрольные примеры представлены в таблице 1.

 

Таблица 1. Контрольные примеры

 

 

Введённый текст

Введённое слово  для замены

Вывод изменённого  текста

Было 5 человек, у каждого  было по 5 друзей, у каждого из которых  было ещё по 5 друзей.

пять

Было пять человек, у каждого было по пять друзей, у каждого из которых было ещё по пять друзей.

За окном идёт снег.

зима

За окном идёт снег.

Конец света будет в 2012-ом году.

3012-ом

Конец света будет в 3012-ом году.

Пять, шесть, семь

восемь, сто один.

1

Пять, шесть, семь

восемь, сто один.

4то это?

Что

Что это?


 

 

 

 

 

 

 

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

 

Описание переменных представлено в таблице 2

 

Таблица 2. Описание переменных

 

Имя переменной

Тип переменной

Назначение переменной

text

char**

Указатель на адрес первого элемента

введённого текста

newtxt

char**

Указатель на адрес первого  элемента

сформированного текста

slovo

char*

Указатель на адрес первого  элемента

введённого слова

kolstrok

int

Количество строк в  тексте

f

int

Переменная для организации меню и цикла

z

int

Вспомогательная переменная для проверки выбора 1-го пункта меню

h

int

Вспомогательная переменная для проверки ввода слова

g

int

Вспомогательная переменная для проверки выбора 4-го пункта меню


 

  1. Описание алгоритма

 

Шаг 1. Вывод меню на экран.

 

Шаг 2. Выбор пользователем  пункта меню. Вначале пользователь должен выбрать только пункт 1 меню, иначе вывод сообщения об ошибке с просьбой выбрать пункт 1 меню, также пользователь может ввести слово для замены, посмотреть справку пользователя и выйти из программы

 

Шаг 3. Если пользователь ввёл:

«1», то вызывается функция free1, которая освобождает память, если был введён текст до этого, далее вызывается функция vvod, в которой производится вывод сообщения на экран для пользователя с просьбой ввести текст. После этого происходит ввод текста. После переход к шагу 1.

 

«2»,  то вызывается функция vivod, которая производит контрольный вывод текста на экран. После этого переход к шагу 1.

 

«3», то вызывается функция  free1, которая освобождает память, если до этого было введено слово, далее вызывается функция vvod_slova, которая выводит сообщение с просьбой ввести слово и происходит ввод пользователем слова для замены. После переход к шагу 1.

 

«4», то вызывается функция free1, которая освобождает память, если до этого был сформирован текст, далее вызывается функция zamena, которая производит формирование нового текста и вывод сообщения с подтверждением операции, После этого переход к шагу 1.

 

«5», то вызывается функция vivod, которая выводит сформированный текст,  если текст не сформирован, то выводится сообщение с указанием причины, почему текст не  сформирован (или потому что, пользователь не сформировал текст (т.е. не выбрал 4-ый пункт меню), или потому, что текст не может быть сформирован). После этого переход к шагу 1.

 

«6», то вызывается функция  help, которая выводит помощь пользователю, далее выводится сообщение «Для выхода в меню нажмите любую клавишу». После этого переход к шагу 1.

 

«7», то вызывается функция free1, которая освобождает память, далее выводится сообщение «Для выхода нажмите любую клавишу» и конец алгоритма.

 

другое значение, то выводится  сообщение «Ошибка, введите номер  операции». После этого переход  к шагу 1.

 

Блок-схема главной функции представлена на рисунке 5.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  1. Функции

 

    1. Функция ввода vvod

 

Прототип: char** vvod(int *stroki), переменные представлены в таблице 3

Функция vvod используется для ввода исходного текста пользователем. Результатом вызова функции является сохранение в памяти компьютера текста, ввёденного пользователем с клавиатуры.

Пример вызова: text = vvod(&kolstrok), переменные представлены в таблице 3

Описание переменных функции представлено в таблице 3.

Таблица 3. Описание переменных функции vvod

Формальные переменные

Имя переменной

Тип переменной

Назначение переменной

stroki

int*

Указатель на переменную количества строк текста

Локальные переменные

text

char**

Указатель на адрес первого  элемента

текста

s

char

Вводимая пользователем  строка

i

int

Счётчик по строкам

j

int

Счётчик по символам

w

int

Переменная для организации перехода на следующую строку

v

int

Переменная для организации выхода из набора текста




 

Блок-схема функции представлена на рисунке 1


 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 


 

 

 



 

 

 

 

 

 

 

 

 

 

 

 


 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Рисунок 1. Блок-схема функции vvod

    1. Функция вывода vivod

Прототип: void vivod (char ** massiv, int stroki), переменные представлены в таблице 4.

Функция vivod используется для вывода исходного и преобразованного текста. Результатом вызова функции является вывод на экран текста.

Пример вызова: vivod(text, kolstrok), переменные представлены в таблице 4

Описание переменных функции  представлено в таблице 4.

Формальные переменные

Имя переменной

Тип переменной

Назначение переменной

stroki

int*

Указатель на переменную количества строк текста

massiv

char**

Указатель на адрес первого  элемента

текста

Локальные переменные

i

int

Счётчик по строкам

j

int

Счётчик по символу





Таблица 4. Описание переменных функции vivod

Блок-схема функции представлена на рисунке 2

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Рисунок 2. Блок-схема функции vivod

    1. Функция освобождения динамической памяти free1

Прототип: char** free1(char** massiv, int kolstrok), переменные представлены в таблице 5

Функция free1 используется для освобождения динамической памяти после её выделения.

Результатом вызова функции является освобождение памяти компьютера, в которой хранились значения матриц.

Пример вызова: .free1(newtxt, kolstrok)

Описание переменных функции представлено в таблице 5.

Формальные переменные

Имя переменной

Тип переменной

Назначение переменной

stroki

int*

Указатель на переменную количества строк текста

massiv

char**

Указатель на адрес первого  элемента

текста

Локальные переменные

i

int

Счётчик строк





Таблица 5. Описание переменных функции free

 

 

 

    1. Функция вывода меню menu

Прототип: void menu().

Функция menu используется для вывода меню на экран компьютера.

Результатом вызова функции  является вывод на экран меню программы.

Пример вызова: menu().

 

 

    1. Функция вывода помощи пользователю menu

Прототип: void help().

Функция help используется для вывода помощи пользователю на экран компьютера.

Результатом вызова функции  является вывод на экран помощи пользователю программы.

Пример вызова: help().

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

    1. Функция формирования текста zamena

 

Прототип: char** zamena(char** text, char* slovo, int kolstrok), переменные представлены в таблице 4.

Функция zamena используется для формирования нового текста.

Результатом вызова функции  является формирование нового текста в памяти компьютера.

Пример вызова: newtxt = zamena(text, slovo, kolstrok), переменные представлены в таблице 6.

Описание переменных функции  представлено в таблице 6.

Формальные переменные

Имя переменной

Тип переменной

Назначение переменной

text

char**

Указатель на адрес первого  элемента

введённого текста

slovo

char*

Указатель на адрес первого  элемента

введённого слова

kolstrok

int

Количество строк в  тексте

Локальные переменные

newtxt

char**

Указатель на адрес первого  элемента

сформированного текста

t1

char*

Первоначальная строка

t2

char*

Новая строка

i

int

Переменная для организации цикла

j

int

Cчётчик по символу первоначальной строки

y

int

Флажок для замены

s

int

Длина копированного слова из первоначальной строки

e

int

Переменная для организации цикла

q

int

Cчётчик по символу новой строки





 

 

Таблица 6. Описание переменных функции zamena

 

 

Блок-схема функции представлена на рисунке 3

 


 

 

 

 

 

 

 

 

 

 

 

 

 


 



 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 


 

 



 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 


 

 

 

 

Рисунок 3. Блок-схема функции zamena

 

 

 

 

    1. Функция ввода vvod_slova

 

Прототип: char* vvod_slova(), переменные представлены в таблице 7

Функция vvod_slova используется для ввода слова для замены пользователем. Результатом вызова функции является сохранение в памяти компьютера слова для замены, ввёденного пользователем с клавиатуры.

Пример вызова: slovo = vvod_slova(), переменные представлены в таблице 7

Описание переменных функции  представлено в таблице 7.

Локальные переменные

slovo

char*

Указатель на адрес первого  элемента

двумерного массива

j

int

Счётчик по символам

w

int

Переменная для организации выхода из набора текста

key

char

Вводимый символ




 

Таблица 7. Описание переменных функции vvod_slova

 

Блок-схема функции представлена на рисунке 4


 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Рисунок 4. Блок-схема функции  vvod_slova

  1. Блок-схема главной функции

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 



 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Рисунок 5. Блок-схема главной функции

Сообщения, использованные в блок-схемах

 

Сообщение 1

Введите текст

Сообщение 2

Введите слово

Сообщение 3

+++++++++++++++++++++++Программа для  работы с текстом++++++++++++++++++++++

================Выполнил студент группы № 1307 Ляховец Вадим===============

Сообщение 4

Ошибка, введите первый пункт  меню

Сообщение 5

Контрольный вывод текста

Сообщение 6

Введённое вами слово -

Сообщение 7

Если вы хотите изменить данное слово, нажмите <1>, в противном  случае любую другую клавишу

Сообщение 8

Замена слов проведена  успешно

Сообщение 9

Ошибка, не было введено слово, выберите 3-ий пункт меню

Сообщение 10

Новый текст не был сформирован. Так как не был выбран 4-ый пункт меню

Сообщение 11

Новый текст:

Сообщение 12

Для выхода в меню нажмите  любую клавишу

Сообщение 13

Для выхода из программы  нажмите любую клавишу

Сообщение 14

Ошибка, введите номер  операции:

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  1. Иерархическая структура программы

 

Иерархическая структура  программы представлена на рисунке 6.

 

Функция ввода


текста


 

Функция ввода


слова


Функция изменения текста





 

 

Функция вывода


помощи пользователю

Главная функция



 

Функция вывода меню




 

 

 

Функция вывода


текста


Функция освобождения


памяти


 

 

 

Рисунок 6. Иерархическая структура программы

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

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

 

#include <stdio.h>

#include <conio.h>

#include "cstdlib"

#include <stdlib.h>

#include <string.h>

//Курсовая работа работа. Выполнил студент группы №1307 Ляховец Вадим

void menu();                                                    //функция меню

//……………………………………………………………………………………..

void help();                                                     //помошь пользователю

//……………………………………………………………………………………..

char** vvod(int* kolstrok);                             //ввод текста

//……………………………………………………………………………………..

void vivod(char** massiv, int stroki);             //вывод текста

//……………………………………………………………………………………..

char* vvod_slova();                                         //ввод слова для замены

//……………………………………………………………………………………..

char** free1(char**massiv, int koltrok);         //освобождение динамической памяти

//……………………………………………………………………………………..

char** zamena(char** text, char* slovo, int kolstrok);  //замена слов

//……………………………………………………………………………………..

int main()                                                         //главная функция

{    

      int kolstrok = 0;                     //количество строк

      int f, z = 0, h, g = 0;               //переменные для организации интерфейса

      char **text = NULL;             //указатель на введённый текст

      char **newtxt = NULL;        // указатель на сформированный текст

      char *slovo = NULL;             // указатель на введённое слово

      printf("+++++++++++++++++++++++++Программа для

                  работы с текстом+++++++++++++++++++++++++ \n"

                "==================Выполнил студент группы № 1307 Ляховец            

                  Вадим================== \n\n");

      do

            {

              menu();                      //вывод меню

              scanf("%d", &f);         //выбор пользователем пункта меню

              fflush(stdin);              //очистка буфера

              system("cls");

              switch(f)

                    {

                      case 1:

                            if (text!= NULL)

                                  free1(text, kolstrok);

                            z = 1;

                            g = 0;    

                            text = vvod(&kolstrok); 

                            break;

                      case 2:

                            if (z == 0)

                                  printf("\nОшибка, введите первый пункт меню\n");

                            else

                                  {

                                    printf("\nКонтрольный вывод текста\n");

                                    vivod(text, kolstrok);            //вывод текста               

                                  }

                            break;

                      case 3:

                            g = 0;    

                            if (slovo != NULL)

                                  {

                                    printf("Введённое вами слово - ");

                                    puts(slovo);

                                    printf("\nЕсли вы хотите изменить данное слово, нажмите <1>, в

                                                   противном случае любую другую клавишу\n");

                                    scanf("%d", &h);

                                    fflush(stdin);

                                  }      

                            if ((slovo == NULL)||(h == 1))

                                  {

                                    if(h == 1)

                                          {