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




Содержание

 

Задание на курсовое проектирование по дисциплине "Методы программирования"……………………………………………………………….. 2

Введение…………………………………………………………………….……….3

1 Классы и модульная организация………………………………………….…....6

1.1 Классы…………………………………………………….……………….…......6

1.2 Модульная организация программы………….……..………………………...7

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

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

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

3 Листинг программы:…………………………………………………………..... 18

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

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


Задание на курсовое проектирование по дисциплине
"Методы программирования"

Вариант 1.

Описать класс для работы с одномерным массивом целых чисел (вектором).

Обеспечить следующие возможности:

• задание произвольных целых границ индексов при создании объекта;

• обращение к отдельному элементу массива с контролем выхода за пределы

массива;

• выполнение операций поэлементного сложения и вычитания массивов с одинаковыми границами индексов;

• выполнение операций умножения и деления всех элементов массива на скаляр;

• вывод на экран элемента массива по заданному индексу и всего массива.

Написать программу, демонстрирующую все разработанные элементы класса.

Содержание проекта:

Постановка задачи и метод ее решения.

Алгоритмы модулей (функций).

Общий алгоритм программы.

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

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

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

Дата выдачи «_____» ____________20__ г.

Дата сдачи «_____» ____________20__ г.

Задание выдал доц._________________

Задание получил студ._________________

 

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

2017 г.

Введение

 

C++ — компилируемый, статически типизированный язык программирования общего назначения.

Поддерживает такие парадигмы программирования, как процедурное программирование, объектно-ориентированное программирование, обобщённое программирование. Язык имеет богатую стандартную библиотеку, которая включает в себя распространённые контейнеры и алгоритмы, ввод-вывод, регулярные выражения, поддержку многопоточности и другие возможности. C++ сочетает свойства как высокоуровневых, так и низкоуровневых языков. В сравнении с его предшественником — языком C, — наибольшее внимание уделено поддержке объектно-ориентированного и обобщённого программирования.

C++ широко используется для разработки программного обеспечения, являясь одним из самых популярных языков программирования. Область его применения включает создание операционных систем, разнообразных прикладных программ, драйверов устройств, приложений для встраиваемых систем, высокопроизводительных серверов, а также развлекательных приложений (игр). Существует множество реализаций языка C++, как бесплатных, так и коммерческих и для различных платформ. Например, на платформе x86 это GCC, Visual C++, Intel C++ Compiler, Embarcadero (Borland) C++ Builder и другие. C++ оказал огромное влияние на другие языки программирования, в первую очередь на Java и C#.

Синтаксис C++ унаследован от языка C. Одним из принципов разработки было сохранение совместимости с C. Тем не менее, C++ не является в строгом смысле надмножеством C; множество программ, которые могут одинаково успешно транслироваться как компиляторами C, так и компиляторами C++, довольно велико, но не включает все возможные программы на C.

Язык возник в начале 1980-х годов, когда сотрудник фирмы Bell Labs Бьёрн Страуструп придумал ряд усовершенствований к языку C под собственные нужды. Когда в конце 1970-х годов Страуструп начал работать в Bell Labs над задачами теории очередей (в приложении к моделированию телефонных вызовов), он обнаружил, что попытки применения существующих в то время языков моделирования оказываются неэффективными, а применение высокоэффективных машинных языков слишком сложно из-за их ограниченной выразительности. Так, язык Симула имеет такие возможности, которые были бы очень полезны для разработки большого программного обеспечения, но работает слишком медленно, а язык BCPL достаточно быстр, но слишком близок к языкам низкого уровня и не подходит для разработки большого программного обеспечения.

Вспомнив опыт своей диссертации, Страуструп решил дополнить язык C (преемник BCPL) возможностями, имеющимися в языке Симула. Язык C, будучи базовым языком системы UNIX, на которой работали компьютеры Bell, является быстрым, многофункциональным и переносимым. Страуструп добавил к нему возможность работы с классами и объектами. В результате практические задачи моделирования оказались доступными для решения как с точки зрения времени разработки (благодаря использованию Симула-подобных классов), так и с точки зрения времени вычислений (благодаря быстродействию C). В первую очередь в C были добавлены классы (с инкапсуляцией), наследование классов, строгая проверка типов, inline-функции и аргументы по умолчанию. Ранние версии языка, первоначально именовавшегося «C with classes» («Си с классами»), стали доступны с 1980 года.

 

 

Цель настоящей курсовой работы:

Описать класс для работы с одномерным массивом целых чисел (вектором).

Обеспечить следующие возможности:

• задание произвольных целых границ индексов при создании объекта;

• обращение к отдельному элементу массива с контролем выхода за пределы

массива;

• выполнение операций поэлементного сложения и вычитания массивов с одинаковыми границами индексов;

• выполнение операций умножения и деления всех элементов массива на скаляр;

• вывод на экран элемента массива по заданному индексу и всего массива.

Написать программу, демонстрирующую все разработанные элементы класса.

Среда программирования-Dev-C++.

 

 


1 Классы и модульная организация.

1.1 Классы.

 

Класс — это элемент ПО, описывающий абстрактный тип данных и его частичную или полную реализацию. Другие абстрактные типы данных — метаклассы, интерфейсы, структуры, перечисления, — характеризуются какими-то своими, другими особенностями. Наряду с понятием «объекта» класс является ключевым понятием в ООП (хотя существуют и бесклассовые объектно-ориентированные языки, например, Self, Lua; подробнее смотрите Прототипное программирование). Суть отличия классов от других абстрактных типов данных состоит в том, что при задании типа данных класс определяет одновременно как интерфейс, так и реализацию для всех своих экземпляров, а вызов метода-конструктора обязателен. Точный смысл этой фразы будет раскрыт ниже.

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

Идея классов пришла из работ по базам знаний, имеющих отношение к исследованиям по искусственному интеллекту. Используемые человеком классификации в зоологии, ботанике, химии, деталях машин, несут в себе основную идею, что любую вещь всегда можно представить частным случаем некоторого более общего понятия. Конкретное яблоко — это в целом некоторое яблоко, вообще яблоко, а любое вообще яблоко — фрукт. Именно поэтому примеры классов в учебных пособиях по объектно-ориентированному программированию так часто упоминают яблоки и груши.

1.2 Модульная организация программы

 

 

Самый верхний уровень организации программы касается только достаточно больших проектов. Это разделение программы на более-менее независимые части (модули), их независимое проектирование и трансляция.
Иерархия.

Любая сложная система не обходиться без иерархии, без нее большая система превращается в нечто аморфное, необозримое и слабо управляемое.

Естественно, что между ними существует взаимосвязь, но не синтаксическая, а технологическая, соблюдаемая программистом. Иерархия программных единиц имеет три уровня:

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

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

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

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

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

Начало
using std::cout;
using std::cin;
using std::endl;
 
Инициализируем объект one числами введенными с клавиатуры
ArrayInt one(5), two(5);
"Intialization one object"
initArray(one);
"object one: "
lookArray(one, " ");
 
"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);
Выводим объект one на экран
Инициализируем объект two числами введенными с клавиатуры
Выводим объект two на экранс клавиатуры
Поэлементное сложение объектов one и two
Выводим результат поэлементного сложения (объект three) на экран
Поэлементное вычитание объектов one и two

 

 

 

 

Рисунок 1-главная функция int main()
Конец
return 0  
 
"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 на скаляр(в данном случае целое число 10)
Выводим результат умножения на экран
Выводим результат поэлементного вычитания (объект four) на экран
Умножение объекта one на скаляр(в данном случае целое число 10)

 

 


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)
 
 
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_; }
 
 
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
 
 
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
 

 

 
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++
 
 
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:
 
 
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 Результаты выполнения программы

 



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2017-07-02 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: