Автор работы: Пользователь скрыл имя, 04 Мая 2013 в 09:36, курсовая работа
C++ - это попытка решения разработчиками языка С задач объектно-ориентированного программирования (Object Oriented Programming, OOP). Построенный на твердом фундаменте С, С++ помимо ООР поддерживает множество других полезных инструментов, не жертвуя при этом ни мощью, ни элегантностью, ни гибкостью С. С++ уже стал универсальным языком для программистов всего мира.
С++ был разработан сотрудником научно-исследовательского центра AT&T Bell Laboratories (Нью-Джерси, США) Бьярном Страуструпом в 1979 году. Первоначальное название «С с классами» было изменено на С++ в 1983 году. Начиная с 1980 года С++ претерпел две существенные модернизации: в 1985 и 1990 годах.
1. Введение………….………………………………………………. ….…3
2. Линейное программирование …………………………………….….4
3. Примеры задач линейного программирования ……….…………..6
4. Формы записи задачи линейного программирования………..…..7
5. Свойства задачи линейного программирования…..…….….……10
6. Симплексный метод…………………………………………………...12
5. Вывод ………………………………….……………………………….11
7. Список используемой литературы…….……………………… ……12
Содержание.
1. Введение………….……………………………………………
2. Линейное программирование …………………………………….….4
3. Примеры задач линейного программирования ……….…………..6
4. Формы записи задачи линейного программирования………..…..7
5. Свойства задачи линейного программирования…..…….….……10
6. Симплексный метод…………………………………
5. Вывод ………………………………….……………………………….11
7. Список используемой литературы…….……………………… ……12
Приложение ………………….……………………………
Задание: Разработать программу для решения задачи линейного программирования. Алгоритм решения – симплекс-метод. В программе использовать динамические массивы. Результат вывести на консоль.
2. Язык программирования C++.
C++ - это попытка решения разработчиками языка С задач объектно-ориентированного программирования (Object Oriented Programming, OOP). Построенный на твердом фундаменте С, С++ помимо ООР поддерживает множество других полезных инструментов, не жертвуя при этом ни мощью, ни элегантностью, ни гибкостью С. С++ уже стал универсальным языком для программистов всего мира.
С++ был разработан сотрудником научно-исследовательского центра AT&T Bell Laboratories (Нью-Джерси, США) Бьярном Страуструпом в 1979 году. Первоначальное название «С с классами» было изменено на С++ в 1983 году. Начиная с 1980 года С++ претерпел две существенные модернизации: в 1985 и 1990 годах. Последняя третья модель связана с процессом стандартизации С++. Несколько лет назад началась работа по созданию единого международного стандарта по С++. Для этой цели был сформирован объединенный комитет по стандартизации ANSI (American National Standards Institute, Американский национальный институт стандартов) и ISO (International Standards Organization, Международная организация по стандартам) для языка С++. Первый рабочий проект указанного стандарта был предложен 25 января1994 года. Комитет ANSI/ISO по С++ фактически сохранил все основные черты языка, заложенные туда еще Страуструпом и добавил несколько новых инструментов.
C++ - универсальный язык
предоставляет гибкие и эффективные средства определения новых типов. Используя определения новых типов, точно отвечающих концепциям приложения, программист может разделять разрабатываемую программу на легко поддающиеся контролю части. Такой метод построения программ часто называют абстракцией данных. Информация о типах содержится в некоторых объектах типов, определенных пользователем. Такие объекты просты и надежны в использовании в тех ситуациях, когда их тип нельзя установить на стадии компиляции. Программирование с применением таких объектов часто называют объектно-ориентированным. При правильном использовании этот метод дает более короткие, проще понимаемые и легче контролируемые программы.
Ключевым понятием C++ является класс. Класс - это тип,
определяемый пользователем. Классы обеспечивают скрытие данных, гарантированную инициализацию данных, неявное преобразование типов для типов, определенных пользователем, динамическое задание типа, контролируемое пользователем управление памятью и механизмы перегрузки операций. C++ предоставляет гораздо лучшие, чем в C, средства выражения модульности программы и проверки типов. В языке есть также усовершенствования, не связанные непосредственно с классами, включающие в себя символические константы, inline- подстановку функций, параметры функции по умолчанию, перегруженные имена функций, операции управления свободной памятью и ссылочный тип. В C++ сохранены возможности языка C по работе с основными объектами аппаратного обеспечения (биты, байты, слова, адреса и т.п.). Это позволяет весьма эффективно реализовывать типы, определяемые пользователем.
C++ и его стандартные библиотеки
спроектированы так, чтобы
3. Динамическая память.
Именованный объект является либо статическим, либо автоматическим. Статический объект размещается в памяти в момент запуска
программы и существует там до ее завершения. Автоматический объект
размещается в памяти всякий раз, когда управление попадает в блок,
содержащий определение
управление остается в этом блоке. Тем не менее, часто бывает удобно
создать новый объект, который существует до тех пор, пока он
не станет ненужным. В частности, бывает удобно создать объект, который
можно использовать после возврата из функции, где он был создан.
Подобные объекты создает
для их уничтожения в дальнейшем. Про объекты, созданные операцией new, говорят, что они размещаются в свободной памяти. Примерами таких
объектов являются узлы деревьев или элементы списка, которые входят
в структуры данных, размер которых на этапе трансляции неизвестен.
Объект, созданный с помощью операции new, существует, до тех пор,
пока он не будет явно уничтожен операцией delete. После этого
память, которую он занимал, вновь может использоваться new. Обычно нет
никакого "сборщика мусора", ищущего объекты, на которые никто
не ссылается, и предоставляющего занимаемую ими память операции new для повторного использования. Операндом delete может быть только указатель, который возвращает операция new, или нуль. Применение delete к нулю не приводит ни к каким действиям.
Для перераспределения памяти, отведенной операцией new, операция delete должна уметь определять размер размещенного объекта. Чтобы добиться этого, приходится под объект, размещаемый стандартной
операцией new, отводить немного больше памяти, чем под статический
(обычно, больше на одно слово).
Операции со свободной памятью реализуются функциями:
void* operator new(size_t);
void operator delete(void*);
Здесь size_t - беззнаковый целочисленный тип, определенный в библиотеке <stddef.h>.
4. Динамические массивы.
Массив является одним из ключевых понятий программирования. Итак, массив - это несколько значений одного типа, расположенных в памяти последовательно. Зная местоположение первого из этих элементов, можно обратиться к любому из них. Порядковый номер элемента в массиве называется индексом.
Массивы - это та часть языка Си, которая не подверглась изменениям при эволюционировании языка в C++. Поэтому их объявление и работа с ними на обоих этих языках совпадает.
Для создания массива надо написать тип (аналогичен типам переменных) затем имя массива и в квадратных скобках количество элементов.
Например:
….
int numbers[1000]; // массив на 1000 числовых элементов.
….
А для доступа к n-ому элементу необходимо написать имя массива[номер элемента] и работать с ним как с обычной переменной.
Однако представляется возможным, что до некоторого времени размер массива может быть не так велик, чтобы вместить все необходимые данные. Например, предположим, что мы создали массив для хранения 100 объектов. Если позже нам потребуется хранить более 100 объектов, мы должны изменить свою программу и перекомпилировать ее. С другой стороны, вместо распределения массива фиксированного размера наши программы могут запрашивать необходимое количество памяти динамически, т.е. во время выполнения. Например, если программе необходимо следить за объектами, она могла бы запросить память, достаточную для хранения 100 объектов. Аналогично, если программе необходимы только 25 объектов, она могла бы запросить меньше памяти. Распределяя подобным образом память динамически, наши программы непрерывно изменяют свои потребности без дополнительного программирования.
Итак, основные концепции:
Оператор C++ new позволяет программам распределять память во время выполнения. Для использования оператора new нам необходимо указать количество байтов памяти, которое требуется программе. Предположим, например, что программе необходим 50-байтный массив. Используя оператор new, мы можем заказать эту память, как показано ниже:
…
char *buffer = new char[50];
…
Говоря кратко, если оператор new успешно выделяет память, он возвращает указатель на начало области этой памяти. В данном случае, поскольку программа распределяет память для хранения массива символов, она присваивает возвращаемый указатель переменной, определенной как указатель на тип char. Если оператор new не может выделить запрашиваемый вами объем памяти, он возвратит NULL-указатель, который содержит значение 0. Каждый раз, когда наши программы динамически распределяют память с использованием оператора new, они должны проверять возвращаемое оператором new значение, чтобы определить, не равно ли оно NULL.
Многие программы интенсивно используют массивы для хранения множества значений определенного типа. При проектировании своих программ программисты обычно пытаются объявить массивы с размерами, достаточными для удовлетворения будущих потребностей программы. К сожалению, если случится так, что потребности программы когда-нибудь
превысят
подобные ожидания программиста, то кому-то
придется редактировать и
Вместо редактирования и перекомпилирования программ, которые просто запрашивают память с запасом, нам следует создавать свои программы таким образом, чтобы они распределяли требуемую им память динамически во время выполнения, используя оператор new. В этом случае наши программы могут адаптировать использование памяти в соответствии с нашими изменившимися потребностями, избавляя нас от необходимости редактировать и перекомпилировать программу.
Если программе больше не нужна выделенная память, она должна ее освободить, используя оператор delete. Для освобождения памяти с использованием оператора delete мы просто указываем этому оператору указатель на данную область памяти, как показано ниже:
…
delete pointer;
…
Следующий пример использует оператор delete для освобождения выделенной с помощью оператора new памяти:
#include <iostream.h>
#include <string.h>
void main()
{
char *pointer = new char[100]; //Выделение памяти
delete pointer; //Освобождение памяти
}
По умолчанию, если наша программа не освобождает выделенную ей память до своего завершения, операционная система автоматически освобождает эту память после завершения программы. Однако если программа использует оператор delete для освобождения памяти по мере того, как она (память) становится ненужной, то эта память вновь становится доступной для других целей (возможно, для нашей программы, которая опять будет использовать оператор new, или для операционной системы).
5. Многомерные динамические массивы.
Многомерный массив в C++ по своей сути одномерен. Операции new[] и delete[] позволяют создавать и удалять динамические массивы, поддерживая при этом иллюзию произвольной размерности. Деятельность по организации динамического массива требует дополнительного внимания, которое окупается важным преимуществом: характеристики массива (операнды операции new) могут не быть константными выражениями. Это позволяет создавать многомерные динамические массивы произвольной конфигурации. Следующий пример иллюстрирует работу с динамическими массивами.