Учебно-методическое пособие Нижний Новгоpод




Скачать 378.76 Kb.
страница 1/4
Дата 30.08.2016
Размер 378.76 Kb.
  1   2   3   4

ФЕДЕРАЛЬНОЕ АГЕНСТВО ПО ОБРАЗОВАНИЮ




Государственное образовательное учреждение высшего

профессионального образования

Нижегоpодский госудаpственный унивеpситет им. Н. И. Лобачевского”

О. Г. Савихин

Сборник заданий по программированию на языке С++

в среде разработки Visual Studio .NET

(массивы строк, структуры, классы)

Учебно-методическое пособие

Нижний Новгоpод

2007
УДК 519.682


Савихин О. Г. Сборник заданий по программированию на языке С++ в среде разработки Visual Studio .NET (массивы строк, структуры, классы).: Учебное пособие. - Нижний Новгород: Издательство Нижегородского госуниверситета, 2007. - с.

Рецензент:


Методическое пособие предназначено для студентов механико-математического факультета и других факультетов ННГУ и призвано оказать помощь в практическом использовании персональных компьютеров в учебном процессе.


Нижегоpодский госудаpственный унивеpситет

им. Н. И. Лобачевского, 2007

оглавление


Сборник заданий по программированию на языке С++ 1

в среде разработки Visual Studio .NET 1

(массивы строк, структуры, классы) 1

оглавление 3

Массивы указателей на строки 4

Задание 1. Текстовый редактор 4

Структуры 6

Задание 2 Реализация текстового редактора с использованием структур данных 6

Задание 3. Информационная система 9

Классы. 17

Задание 4. Объектно-ориентированная реализация текстового редактора 17

Задание 5. Объектно-ориентированная реализация информационной системы 19

Приложение 1 26

Приложение 2 28

литература 42

Сборник заданий по программированию на языке С++ 43

в среде разработки Visual Studio .NET 43

(массивы строк, структуры, классы) 43


Массивы указателей на строки

Задание 1. Текстовый редактор

Задание 1.1 Динамическая память. Модульное программирование


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

Строки хранятся в виде массива указателей на char. Память под строки выделяется динамически. Для ввода текущей строки можно использовать вспомогательный буфер. Задается максимальный размер массива указателей на строки и указатель на первое свободное место в массиве.

#define MAX 100

typedef char* T;

T m[MAX];

T* cur=m;

Набор операций включает добавление новой строки, удаление, замену, поиск, сортировка, разбиение строки на слова, соединение слов в одну строку, освобождение памяти под все строки . Набор операций может быть реализован при помощи функций, декларации которых приводятся ниже.
При правильном модульном построении программы отсутствует необходимость в декларациях в заголовочных файлах переменных раскрывающих детали реализации. Все необходимое для работы с данными содержится в функциях, представляющих интерфейс модуля. Декларации функций помещаются в заголовочный файл. В этом случае при замене реализации функций, находящихся в файле с расширением .срр, код остальной части программы останется неизменным. Данные, описывающие способ хранения строк, определяются в файле реализации с ключевым словом static. В результате они становятся недоступны в других файлах программы. В начале файла реализации следует с помощью директивы #include подключить заголовочный файл. Это позволяет исключить возможные ошибки, поскольку компилятор получает возможность находить несоответствие в декларации и определении одних и тех же функций.

Таким образом, файлы представляющие модуль должны выглядеть следующим образом:

Заголовочный Tabl.h, содержащий декларации функции для работы со строками

char* tochar(System::String* s);

#define MAX 100

typedef char* T;

T*begin();//возвращает указатель на начало массива

T*end() ; //возвращает указатель на первое свободное место в массиве cur

T* insert(const T& item);

Добавление: Проверяет наличие свободного места в таблице, добавляет элемент в таблицу на первое свободное место, затем сдвигает указатель на первое свободное место (cur) на следующую позицию.

T* erase(T* pos);



Удаление: удаляет элемент ,на который указывает pos из таблицы. Для этого предварительно проверяет принадлежность pos заполненной части таблицы, затем освобождает память, выделенную под элемент, затем уменьшает текущее количество записей в массиве на единицу и сдвигает элементы с позицией, большей чем pos, на одну позицию влево.

void clear();



Очистка: Предоставляет всю выделенную память для повторного использования

int remove(const T& item);



Удаление: удаляет все элементы, совпадающие с заданным. Возвращает количество удаленных элементов

T* find(const T& item);



Поиск: Возвращает указатель на первый элемент, совпадающий с заданным.

int replace(const T&Old,const T&New);



Замена:

Заменяет все вхождения элемента Old на элемент New . Возвращает количество замен

void sort();

Сортировка
Файл реализации Tabl.cpp

#include "stdafx.h"



#include "Tabl.h”

T m[MAX];

T* cur=m;

char* tochar(System::String* s)

{int i;

char* p=new char[s->Length+1];



if (p==0) return 0;

for (i=0;iLength;i++)

p[i]=s->get_Chars(i);

p[i]='\0';

return p;

}
T* insert(const T& item)

{if(cur-m

*cur++=item;

return cur;

}
// далее определения функций, декларации которых приведены в заголовочном фале Tabl.h



Задание 1.2 Разработка приложения WindowsForms


Отладку и тестирование реализаций функций можно проводить в консольном варианте приложения. Для этого создается проект на основе шаблона WIN32 Console Project . Окончательный вариант разрабатывается как приложение WindowsForms. Интерфейс программы имеет следующий вид:

Исполнение каждой операции начинается после нажатия соответствующей командной кнопки на форме. Ввод данных для формирования строк производится с помощью текстовых полей textBox. Для конвертирования типа данных String* в тип данных char*можно использовать функцию char* tochar(String* s) (функция не обрабатывает русские буквы). Код занесения данных из текстового поля textBox1 в таблицу будет выглядит следующим образом:

private: System::Void but2_Click(System::Object * sender, System::EventArgs * e)

{

if(textBox1->Text->Length!=0)



insert(tochar(textBox1->Text));

listoutput();

}

Просмотр всех строк производится с помощью списка listBox. Для этого можно написать следующую функцию



void listoutput()

{listBox1->Items->Clear();

T* i;

for(i=begin();i



{ String* s=new String(*i);

listBox1->Items->Add(s);

}

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




  1   2   3   4


База данных защищена авторским правом ©infoeto.ru 2022
обратиться к администрации
Как написать курсовую работу | Как написать хороший реферат
    Главная страница