Практична робота 2. Розв’язування
оптимізаційної задачі
Завдання: на два хлібозаводи борошно надходить від двох млинів. Млини
виробляють за добу 50 і 70 т борошна відповідно. Щоденна потреба хлібозаводів у борошні становить 40 і 80 т відповідно.
Вартість перевезення 1 т борошна з млина до хлібозаводу наведено
в таблиці:
Як потрібно спланувати перевезення, щоб їх загальна вартість за
один день була мінімальною?
Обладнання: комп’ютер зі встановленим табличним процесором.
Хід роботи:
Під час роботи за комп’ютером дотримуйтесь правил безпеки.
1. Побудуйте математичну модель транспортної задачі.
Нехай xij — кількість борошна, перевезена з i-го млина до j-го заводу;
yij — вартість перевезення однієї тонни борошна з i-го млина до j-го
заводу. Повна вартість перевезення:
S =x11·y11+x12·y12+x21·y21+x22·y22 → min
Знайдіть мінімальне значення S, дотримуючись таких умов:
• кількість борошна, перевезена з 1-го млина: x11+x12 <= 50;
• кількість борошна, перевезена з 2-го млина: x21+x22 <= 70;
• кількість борошна, що надійшла на 1-й хлібозавод: x11+x21 >= 40;
• кількість борошна, що надійшла на 2-й хлібозавод: x12+x22 >= 80.
2. На основі математичної моделі занесіть дані у таблицю:
3. Введіть у клітинки C5:D5 формули для обчислення кількості борошна,
що надійшло на j-й хлібозавод.
4. Уведіть у клітинки E3:E4 формули для обчислення кількості борошна,
що вивезено з і-го млина.
5. Виберіть цільову клітинку С13 і введіть формулу:
= C3*C10+C4*C11+D3*D10+D4*D11.
6. Завантажте надбудову Розв’язувач.
7. Заповніть поля вікна Параметри розв‘язувача, в поле Оптимізувати цільову
функцію запишіть адресу цільової клітинки.
8. У поле Змінюючи клітинки змінних укажіть клітинки, які містять кількість
борошна, перевезену з i-го млина до j-го заводу.
9. Введіть обмеження згідно з математичною моделлю.
Задайте умову цілочисельності змінних.
Перевірте зміст поля Підлягає обмеженням за даними,
наведеними на рисунку.
10. Отримайте звіт про успішність пошуку.
11. Сформуйте на окремому аркуші звіт про отримані
результати.
12. Збережіть файл із назвою Практична2.
Зробіть висновок: як застосувати надбудову Розв’язувач для знаходження
оптимального розв’язання транспортної задачі.
$C$3:$D$4 = ціле
$C$5>= $C$6
$D$5=$D$6
$E$3 <= $F$3
$E$4<= $F$4
Когда мы изучаем язык программирования, появляются несколько основных понятий, таких как объявление переменных, и они настолько просты, что мы можем начать их использовать без каких-либо знаний об их функционировании.
Я знаю о чем вы подумали: «Зачем вы тратите время на то, чтобы написать нам об этом?»
Потому что я думаю, что стоит потратить несколько минут, чтобы глубже понять эти элементы, каково их значение и как мы должны их использовать. Это вам избежать некоторых распространенных ошибок и написать код лучше.
В этой статье мы сосредоточимся на том, как хранить данные в JavaScript.
Var
«Давным-давно в далекой галактике…» единственным вариантом определения переменных в JavaScript было использование ключевого слова var, и этого было достаточно для управления данными в коде. Но с введением стандарта ES6 некоторые странности и недостатки старого JS стали довольно очевидными:
Область действия: ключевое слово var позволяет определять переменные только в глобальной и локальной области (либо в области функции). Неважно, сколько у вас вложенных блоков кода, есть только эти две возможности.
Константы: если вы хотите определить что-то, что не будет изменяться во время выполнения кода, вы можете положиться только на здравый смысл разработчиков. Мы можем использовать некоторые полезные соглашения, чтобы разъяснить смысл (например, прописные буквы), но нет ничего, что могло бы гарантировать, что значение не изменится.
Переопределение переменных: вы можете повторять объявление одной и той же переменной, столько раз, сколько хотите (в одной и той же области видимости), и это немного сбивает с толку, если вы хотите сохранить переменные уникальными.
Определения
Прежде чем начать с технических вещей, давайте введем некоторые общие определения:
Переменная — это «контейнер», в котором хранятся многократно использованные данные (очень тривиально).
Идентификаторы — это имена переменных (тоже очень тривиально).
Блок — это фрагмент кода, разделенный парой фигурных скобок (ccskrf), например: if, for, function, и. т. д.
Область действия, определяет видимость переменных внутри кода. Если у вас есть какие-либо сомнения, спросите себя: «Где в коде видна моя переменная?»
ПРИМЕЧАНИЕ , не путайте область действия с контекстом выполнения, который является разными.
** Контекст (или контекст выполнения) ** — это среда, в которой выполняется код JavaScript. Для простоты можно сказать, что контекст — это объект, которому принадлежит код, а this — это ключевое слово, которое является ссылкой на него. Поэтому спросите себя: «На какой объект ссылается this?»
Теперь предположим, что наш разработчик очень увлечен Star Wars (это хорошо), но с подозрением относится к новым стандартам, таким как ES6 (что плохо), хотя существует он уже некоторое время. Поэтому он предпочитает писать свой код в старом стиле ES5, и это будет выглядеть так:
console.log("I am a %s", jedi); var jedi = "Ani"; // выведите переменную jedi перед ее определением // => Я undefined function useTheForce(comeToTheDarkSide) { var jedi = "Obi-Wan Kenobi"; var jedi = "Anakin Skywalker"; if (comeToTheDarkSide) { var jedi = "Darth Vader"; console.log("I am %s", jedi); // => I am Darth Vader } console.log("I am %s", jedi); // Я Darth Vader } useTheForce(true); console.log("I am %s", jedi); // =>Я Ani
Как вы видите, есть три блока кода (включая и глобальный), но только две области видимости. Это из-за того, что код в скобках if не создает область видимости. Консоль выдаст «Я Дарт Вейдер» два раза, а затем «Я Ани» в глобальном масштабе.
Также обратите внимание, что одна и та же переменная объявляется два раза подряд внутри функции, а затем еще раз в выражении if. Это означает, что мы имеем объявление одной и той же переменной в одной и той же области видимости три раза, из-за чего выдается исключение.
Последним, но не менее важным является вывод первого log: мы выведем значение нашей переменной перед ее определением. Это совершенно законно с var и называется «Поднятием (hoisting)».
«Подъем» предполагает, что объявленные переменные и функции физически перемещаются в начало вашего кода. Технически происходит объявления переменных и функций, которые помещаются в память на этапе компиляции, но остаются в коде именно там, где вы их написали. Основная важность подъема состоит в том, что он позволяет вам использовать функции перед тем, как объявлять их в своем коде.
Об этом вы можете почитать здесь.
В нашем примере объявление переменной «jedi» помещается в память и инициализируется значением по умолчанию (undefined).
Let
На данный момент наш разработчик понимает, что ES6 не так уж и плох, и он решает дать let шанс:
console.log("I am a %s", jedi); let jedi = "Ani"; // выведем переменную jedi перед
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
#include "stdafx.h"
#include "stdio.h"
#include <time.h>
#include <stdlib.h>
class vector
{
private:
int* m;
int size;
public :
vector(int n = 0);
vector(const vector &vector2);
~vector();
};
vector::vector( int n )
{
if (n < 0) n = 0;
size = n;
m = new int[n];
if(!m)
printf("Error");
else
m = NULL;
}
vector::vector(const vector &vector2)
{
size = vector2.size;
m = new int [size];
for(int i = 0; i<size;i++)
m[i] = vector2.m[i];
printf("kopia stvorena !");
}
vector::~vector()
{
delete[] m;
}
vector(int *m, int size)
{
srand(time(NULL))
if(!m)
printf("error")
else
for(int i = 0; i < size; i++)
m[i] = rand()% 99;
}
int main()
{
vector v1(45),
system("pause");
return 0;
}