Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
vsyo_33.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
1.88 Mб
Скачать

II.2. Теорема об оптимальности в симплекс-методе.

Пусть ЗЛП поставлена на min и х – опорный невырожденный план. Тогда если то план х – оптимальный.

Докво. Выберем произвольный план y=(y1,y2,…,yn)T и пусть z - значение целевой функции на план у: и пусть Покажем, что zzo.Т.к. у доставляет функции значение z, то, в соответствии с условием теоремы, можем записать:

Т.к. у – план, то можно записать:

При этом, т.к. х – опорный невырожденный план, то: И т.к. P1,…,Pm – линейно независимы, то разложения (2) и (3) совпадают, а  Подставим (4) в (1): что в силу произвольности выбора плана у доказывает теорему

I.1. Переменные, массивы и указатели базовых и производных типов, инициализация, допустимые операции над ними.

Переменная – это поимен-ая часть памяти для хранения значений величины, т.е. k перем-ой соотв-ет поле памяти, кот-ое хар-ся адресом нач-го байта (адресом переменной) и кол-вом байт. После компиляции программы имена переменных заменяются их адресами, устанав-ся форма представления значений переменных в соответствии с их типом. Описание переменной должно производится до ее использования:

Класс_памяти тип а11, а22,……. аnn;

Описыв-ые переменные м.б. локальными (auto – для автоматич-их переменных, register – для регистровых, static – для статических) и внешними (extern или static). Если класс памяти для лок. переменных не указан, то они по умолчанию считаются локальными. Если он не указан для внешних переменных, то они доступны только в данном файле после своего описания. Использ-ия спецификатора extern приводит к распростр-ию описания переменной на все файлы программы, а static для внешних величин говорит о том, что эта величина доступна в файле после своего описания и расширять область ее видимости невозможно.

Тип переменной указывается спецификатором типа. Они запис-ся в виде: для переменных целого типа – short (или short int), int, long (или long int); для символьных переменных – char, для переменных с плавающей точкой – float, double, long double.

Нач-ые значения для внешних и стат. переменных м.б. константами или конст-ми выражениями, а для автом. и регистровых –  выражениями, содержащими ранее определённые величины.

Если нач-ое значение в описании переменной отсутствует, то инициализация автом. и регистровых переменных не производится, а статические и внешние инициализ-ся 0 (целые – 0; символьные - \0; с плавающей точкой – 0.0). при этом  инициал-ия стат. (лок.) и внешних переменных производится один раз, до начала выполнения программы, а автом. и регистровых – внутри блока, в месте их описания при выполнении программы.

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

Описания переменных в блоке могут располагаться в  месте, но она доступна лишь после своего описания.

Массив – это упорядоченная совокуп-ть величин одинакового типа, приводимых в программе под одним именем. Его эл-ты распол-ся в последов-ых полях компа друг за другом. Нач-ый эл-т имеет номер 0, следующий 0 1 и т.д. Например, x[0], x[2], x[k+4]. Для удобства использования эл-ты массива можно разбивать на группы, подгруппы и т.д., создавая многомерные массивы. Номера групп и подгрупп также начинаются с 0. Например, эл-ты 2мерного массива у имеют вид: y[0][2], а 3мерного массива z: z[1][1][2]. Эл-ты многомерного массива распол-ся в последов-ых полях памяти, образуя упоряд-ую последов-ть.

Тип элементов массива, его имя, размерность и размеры измерений указ-ся в описании массива, где за его именем приводятся размеры измерений (k в своих квадратных скобках), а также список нач. значений эл-ов, если таковой есть. Например, int x[4]={3,4,2,3}, y[2][4]={1,2,3,4,5,6,7,8}, double r[2] = {4.0,7.0}, z[10][5].

Класс памяти опред-ся как у переменных, но массивы не м.б. регистровыми. Если класс памяти не указан, то лок. массивы являются автомат., внешние доступны в файле своего описания.

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

Если списки нач-ых значений в описании массива отсутствуют, то инициализация элементов автом. массива не производится, а эл-ты стат. и внешних массивов инициал-ся 0.  инициал-ия внешних и стат. массивов производится на этапе загрузки программы. Автом. массивы инициал-ся в блоке при k встрече их описания.

Для массивов может использ-ся модификатор const, кот-ый делает эл-ты массива неизменными, а массив статическим. В определении массива должны приводиться значения элементов.

Указатель – это переменная для хранения адресов данных соотв. типа. Задание адресов переменных и эл-ов массивов ося с помощью предшествующей операции взятия адреса &. Так, если s–переменная,–одномерный массив, то &s – это адрес переменной s, &x[0] и &x[k] – соотв-но адреса нач-го и k-го элементов массива x.

Доступ к данному s возможен непосредственно с помощью имени s или с помощью указателя p с предшествующей *, т.е. s и *p обозначают одно и то же – значение переменной s. * носит название разыменования.

Указатели в программе до их использ-ия должны описыв-ся. Приводится класс и тип памяти, а затем имя указателя, перед кот-ым ставится *. Напр., опред-ны переменная s, указатели *p и *q типа float:

float *p, s, *q ;

Для работы с указателем ему нужно присвоить адрес опред-ой величины с помощью операции присваивания “=”. Напр., char *p=&x[20], *q=&u;

Инициализация указателя может приводиться и явным заданием адреса константы, напр.: int *p = (int*)12;

В описании указателей может использ-ся модификатор const, обозначающий от его места неизменный указатель, неизменное данное или и то, и другое.

В указателе могут храниться адреса данных, адреса других указателей (указатель на указатель). Их описание и использование производится таким же образом, как и указателей на данные, но в описании указателя на указатель вместо * ставятся **, а при использ-ии либо * (работа с адресом в указателе) либо **(работа с данным).

Широкое применение имеют массивы, элементами кот-ых являются указатели. При описании таких массивов перед их именами ставится *. Например, int *d[3]; k эл-нт явл-ся указателем на тип целый.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]