Классы и модульная организация. Разработка алгоритмов программы. Алгоритм главной функции int main() и класса

Страницы работы

Фрагмент текста работы

этого им могут потребоваться описания интерфейсов взаимодействия (в Си – заголовочные файлы);

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

2. Разработка алгоритмов программы

2.1 Алгоритм главной функции int  main()

Начало,using std::cout;,using std::cin;,using std::endl;,Конец,1, return 0 

,Инициализируем объект one числами введенными с клавиатуры,ArrayInt one(5), two(5);,"Intialization one object",initArray(one);,"object one: ",lookArray(one, " ");,1,"Intialization array_2 object",initArray(two);,"object two: ",lookArray(three, " ");,ArrayInt three = one.addInPairs(two);,"Addition one object and two object: ",lookArray(two, " ");,ArrayInt four = one.subInPairs(two);,2,2,"Subtraction one object and two object: ",lookArray(four, " ");,ArrayInt five = one.mull(10);,"one * 10: ",lookArray(five, " ");,ArrayInt six = one.dev(10);,"one / 10: ",lookArray(six, " ");,Выводим объект one на экран,Инициализируем объект two числами введенными с клавиатуры,Выводим объект two на экранс клавиатуры,Поэлементное сложение объектов one и two,Выводим результат поэлементного сложения (объект three) на экран,Поэлементное вычитание объектов one и two,Выводим результат поэлементного вычитания (объект four) на экран
Рисунок 1-главная функция int main()
 


2.2 Алгоритм класса

Начало,private:,public:,str = "

, return bad_index;

,Arrayint(const ..),std::size_t i = 0; i < size_; i++,array_[i] = arr.array_[i];,ArrayInt& operator = (const ArrayInt& arr),3,3,This = &arr,return *this;,delete [] array_;,size_ = arr.size_;,array_ = new int [size_];,std::size_t i = 0; i <  size_; i++,array_[i] = arr.array_[i];,return *this;,delete [] array_;,~ArrayInt() { delete [] array_; }  ,4,4,const int& operator [] (std::size_t index) const  ,index < 0 || index >= size_,return array_[index];,throw BadIndexException(index);,int& operator [] (std::size_t index),return const_cast<int&>(static_cast<const ArrayInt&>(*this)[index]);,ArrayInt addInPairs(const ArrayInt& arr)  const,5
5,size_ != arr.size_,return ArrayInt();,ArrayInt tmp(size_);,std::size_t i = 0; i < size_; i++,tmp.array_[i] = array_[i] + arr.array_[i];,return tmp;,ArrayInt subInPairs(const ArrayInt& arr)  const const const,6
6,size_ != arr.size_,return ArrayInt();,ArrayInt tmp(size_);,std::size_t i = 0; i < size_; i++,tmp.array_[i] = array_[i] - arr.array_[i];,return tmp;,ArrayInt mull(int digit) const const,ArrayInt tmp(size_),std::size_t i = 0; i < size_; i++,7,7,tmp.array_[i] = array_[i] * digit;,return tmp;,ArrayInt mull(int digit) const const,ArrayInt tmp(size_);,std::size_t i = 0; i < size_; i++,tmp.array_[i] = array_[i] / digit;,return tmp;,std::size_t size(void) { return size_; }  ,private:,8,8,std::size_t size_;,int*        array_;,Конец
Рисунок 2-класс
 


3  Листинг программы

// kursovaya.cpp -- 1 вариант

/* * Задание произвольных целых границ индексов при создании объекта * обращение к отдельному элемнту массива с контролем выхода за его пределы * выполнение операций поэлементного сложения и вычитания массивов * выполнение операций умножения и деления всех элементов массива на скаляр * вывод на экран элемента массива по заданному индексу и всего массива * написать программу, демонстрирующую все разработанные элементы класса */

#include <iostream>

#include <stdexcept>

class ArrayInt

{

public:

class BadIndexException: public std::logic_error  // внутренний класс для

// генерирования исключения выхода за пределы массива

{

private:

int bad_index;

public:

explicit BadIndexException(int index,

const std::string& str = "Error: Index of out range.\n"):

logic_error(str), bad_index(index) {}

int bindex (void) const { return bad_index; }

virtual ~BadIndexException (void) throw () {}

};

ArrayInt(void): size_(0), array_(0) {} // конструктор по умолчанию

explicit ArrayInt(std::size_t size): size_(size),

array_(new int [size_]) {}   // конструктор с параметрами

ArrayInt(const ArrayInt& arr): size_(arr.size_),  // конструтор копирования

array_(new int [size_])

{

for (std::size_t i = 0; i < size_; i++)

array_[i] = arr.array_[i];

}

ArrayInt& operator = (const ArrayInt& arr) // оператор присваивания

{

if (this == &arr)

return *this;

delete [] array_;

size_ = arr.size_;

array_ = new int [size_];

for (std::size_t i = 0; i <  size_; i++)

array_[i] = arr.array_[i];

return *this;

}

~ArrayInt() { delete [] array_; }                            // деструктор

const int& operator [] (std::size_t index) const             // неконстантный оператор доступа по индексу

{

if (index < 0 || index >= size_)

throw BadIndexException(index);

return array_[index];

}

int& operator [] (std::size_t index)                         // неконстантный оператор доступа по индексу

{

return const_cast<int&>(static_cast<const ArrayInt&>(*this)[index]);

}

ArrayInt addInPairs(const ArrayInt& arr)  const  // поэлементное сложение двух

// объектов ArrayInt

{

if (size_ != arr.size_)

return ArrayInt();

ArrayInt tmp(size_);

for (std::size_t i = 0; i < size_; i++)

tmp.array_[i] = array_[i] + arr.array_[i];

return tmp;

}

ArrayInt subInPairs(const ArrayInt& arr)  const  // поэлементное вычитание

// двух объектов ArrayInt

{

if (size_ != arr.size_)

return ArrayInt();

ArrayInt tmp(size_);

for (std::size_t i = 0; i < size_; i++)

tmp.array_[i] = array_[i] - arr.array_[i];

return tmp;

}

ArrayInt mull(int digit) const  // умножение объекта ArrayInt на число    

{

ArrayInt tmp(size_);

for (std::size_t i = 0; i < size_; i++)

tmp.array_[i] = array_[i] * digit;

return tmp;

}

ArrayInt dev(int digit)  const  // деление объекта ArrayInt на число

{

ArrayInt tmp(size_);

for (std::size_t i = 0; i < size_; i++)

tmp.array_[i] = array_[i] / digit;

return tmp;

}

std::size_t size(void) { return size_; }  // возвращает размер массива

private:

std::size_t size_; // размер массива

int*        array_;  // указатель на int

};

void initArray(ArrayInt& arr);  // процедура инициализации массива строк

void lookArray(ArrayInt& arr, const char* delim); // процедура вывода массива

// строк на экран

int main(void)

{

using std::cout;

using std::cin;

using std::endl;

{

ArrayInt one(5), two(5);

// Инициализируем объект one числами введенными с клавиатуры

cout << endl << "Intialization one object"<< endl;

initArray(one);

// Инициализируем объект one числами введенными с клавиатуры

cout << endl << "object one: ";

lookArray(one, " ");

// Инициализируем объект two числами введенными с клавиатуры

cout << endl << endl <<"Intialization array_2 object";

initArray(two);

// Выводим объект two на экран

cout << endl << "object two: ";

lookArray(two, " ");

// Поэлементное сложение объектов one и two

ArrayInt three = one.addInPairs(two);

// Выводим результат поэлементного сложения (объект three) на экран

cout << endl << endl << "Addition one object and two object: ";

lookArray(three, " ");

// Поэлементное вычитание объектов one и two

ArrayInt four = one.subInPairs(two);

// Выводим результат поэлементного вычитания (объект four) на экран

cout << endl << endl << "Subtraction one object and two object: ";

lookArray(four, " ");

// Умножение объекта one на скаляр(в данном случае целое число 10)

ArrayInt five = one.mull(10);

// Выводим результат умножения на экран

cout << endl << endl << "one * 10: ";

lookArray(five, " ");

// Деление объекта one на скаляр(в данном случае целое число 10)

ArrayInt six = one.dev(10);

// Выводим результат деления на экран

cout << endl << endl <<"one / 10: ";

lookArray(six, " ");

}

cout << endl <<"Bye."<< endl;

return 0;

}

void initArray(ArrayInt& arr)

{

for (std::size_t i = 0; i < arr.size(); i++)

{

std::cout << std::endl << "Enter the "<< i + 1 <<" element: ";

std::cin >> arr[i];

}

}

void lookArray(ArrayInt& arr, const char* delim)

{

for (std::size_t i = 0; i < arr.size(); i++)

std::cout << arr[i] << delim;

}

4  Результаты выполнения программы

bandicam 2017-06-10 20-16-45-325

bandicam 2017-06-10 20-18-09-600

bandicam 2017-06-10 20-21-36-607

bandicam 2017-06-10 20-24-49-294

bandicam 2017-06-10 20-36-52-815

Список использованных источников

1.  Шишкин, А. Д. Программирование на языке СИ [Текст]: Учебное пособие

Похожие материалы

Информация о работе