Полезное:
Как сделать разговор полезным и приятным
Как сделать объемную звезду своими руками
Как сделать то, что делать не хочется?
Как сделать погремушку
Как сделать так чтобы женщины сами знакомились с вами
Как сделать идею коммерческой
Как сделать хорошую растяжку ног?
Как сделать наш разум здоровым?
Как сделать, чтобы люди обманывали меньше
Вопрос 4. Как сделать так, чтобы вас уважали и ценили?
Как сделать лучше себе и другим людям
Как сделать свидание интересным?
Категории:
АрхитектураАстрономияБиологияГеографияГеологияИнформатикаИскусствоИсторияКулинарияКультураМаркетингМатематикаМедицинаМенеджментОхрана трудаПравоПроизводствоПсихологияРелигияСоциологияСпортТехникаФизикаФилософияХимияЭкологияЭкономикаЭлектроника
|
Список использованных источников. 1 акулич. И. Л. Математическое программирование в примерах и задачах / и ⇐ ПредыдущаяСтр 2 из 2 1 Акулич. И. Л. Математическое программирование в примерах и задачах / И. Л. Акулич. - учеб. пособие для студентов эконом. спец. вузов. – М.: Высшая школа. 1986.-319 с. 2 Вирт. Н. Алгоритмы + структуры данных = программы / Н. Вирт. - М.: Мир. 1985.-353 с. 3 Муну. М. Математическое программирование. Теория алгоритмов / М. Муну. - М.: Наука. 1990.-342 с. 4 Вентцель. Е. С. Элементы динамического программирования / Е. С. Вентцель. - М.: Наука 1987.-472 с. 5 Аоки. М. Введение в методы оптимизации / М. Аоки. М.: Наука. 1977.-297 с. 6 Краснов. М. В помощь программисту / М. Краснов. – учеб. пособие – СПБ.: Графа. 1999.-214 с.
ПРИЛОЖЕНИЯ Приложение 1 Выполнение процедуры «Рассчитать оптимальный план» procedure TForm1.Button5Click(Sender: TObject); Var i,j:byte; px,wx:real; begin prib:=0; Memo1.Clear; Memo1.Enabled:=true; Button6.Enabled:=false; Button8.Enabled:=true; For i:=1 to kc do For j:=1 to kr do Z[i,j]:=StrToFloat(StringGrid1.Cells[i,j]); shag:=kr; Memo1.Lines.Add('Количество вкладываемых средств: '+IntToStr(kc)+' у.е.'); Memo1.Lines.Add('Количество шагов оптимизации: '+IntToStr(shag)); Memo1.Lines.Add(''); For i:=1 to kc do Begin P[i,shag].x:=i; P[i,shag].ws:=Z[i,shag]; End; Memo1.Lines.Add {-------------------Обработка второго шага------------------ s:=1; j:=1; Repeat For i:=0 to s do Begin If (i<>0) Then Begin If (i=s) Then Begin px:=Z[i,shag-1]; wx:=0; End Else Begin px:=Z[i,shag-1]; wx:=P[s-i,shag].ws; End; End Else Begin px:=0; wx:=P[s-i,shag].ws; End; Memo1.Lines.Add('| '+FloatToStr(px)+' | '+'x = '+IntToStr(i)+' | '+FloatToStr(wx)+' |'); ptemp[i].x:=i; ptemp[i].ws:=px+wx; Memo1.Lines.Add('W(s) = '+FloatToStr(px+wx)); End; max:=ptemp[0].ws; a:=0; For i:=0 to s do If ptemp[i].ws>max Then Begin max:=ptemp[i].ws; a:=i; End; inc(j); P[j-1,2]:=ptemp[a]; Memo1.Lines.Add('==================================================='); inc(s); Until s=(kc+1); shag:=2; s:=kc; j:=1; Repeat For i:=0 to s do Begin If (i<>0) Then Begin If (i=s) Then Begin px:=Z[i,shag-1]; wx:=0; End Else Begin px:=Z[i,shag-1]; wx:=P[s-i,shag].ws; End; End Else Begin px:=0; wx:=P[s-i,shag].ws; End; Memo1.Lines.Add('| '+FloatToStr(px)+' | '+'x = '+IntToStr(i)+' | '+FloatToStr(wx)+' |'); ptemp[i].x:=i; ptemp[i].ws:=px+wx; Memo1.Lines.Add('W(s) = '+FloatToStr(px+wx)); End; max:=ptemp[0].ws; a:=0; For i:=0 to s do If ptemp[i].ws>max Then Begin max:=ptemp[i].ws; a:=i; End; inc(j); P[j-1,1]:=ptemp[a]; Memo1.Lines.Add('==================================================='); inc(s); Until s=(kc+1); shag:=1; s:=kc; j:=1; Repeat max:=P[j,shag].ws; For i:=1 to s do If P[i,shag].ws>max Then Begin max:=P[i,shag].ws; a:=i; End; Memo1.Lines.Add(IntToStr(shag)+' предприятию выделить '+FloatToStr(P[a,shag].x)+' у.е.'); prib:=prib+P[a,shag].ws; s:=s-P[a,shag].x; inc(shag); Until shag=kr; For i:=1 to kc do If P[i,shag].x=s Then Memo1.Lines.Add(IntToStr(shag)+' предприятию выделить '+FloatToStr(P[i,shag].x)+' у.е.'); Memo1.Lines.Add(''); Memo1.Lines.Add('Ожидаемая прибыль: '+FloatToStr(prib)+' у.е.'); end; Initialization shag:=0; prib:=0; max:=0; kc:=0; kr:=0; s:=0; a:=0; end.
Приложение 2 Выполнение процедуры «Первичная обработка»для проверки правильности заполнения таблицы; procedure TForm1.Button4Click(Sender: TObject); Var i,j,x,count:byte; b1,b2,b3,b4:boolean; str:string; begin str:=''; b1:=false; b2:=false; b3:=false; b4:=false; count:=0; For i:=1 to StringGrid1.ColCount-1 do For j:=1 to StringGrid1.RowCount-1 do If (StringGrid1.Cells[i,j]='') Then b1:=true; If b1 Then Showmessage('Не все поля таблицы заполнены!') Else Begin For i:=1 to StringGrid1.ColCount-1 do For j:=1 to StringGrid1.RowCount-1 do Begin If (Length(StringGrid1.Cells[i,j])>5) Then Begin b2:=true; StringGrid1.Cells[i,j]:=''; End; End; If b2 Then Showmessage('В таблицу внесено слищком большое число прироста прибыли предприятия') Else Begin For i:=1 to StringGrid1.ColCount-1 do For j:=1 to StringGrid1.RowCount-1 do Begin str:=StringGrid1.Cells[i,j]; For x:=1 to Length(str) do If (str[x]=',') Then inc(count); If ((count>1)or(str[1]=',')or(str[Length(str)]=',')) Then b3:=true; str:=''; count:=0; End; If b3 Then Begin Showmessage('В таблице неверно расставлены запятые!'); Button7.Visible:=true; End Else Begin j:=1; Repeat For i:=1 to StringGrid1.ColCount-2 do If ((StrToFloat(StringGrid1.Cells[i,j]))>(StrToFloat (StringGrid1.Cells[i+1,j]))) Then b4:=true; inc(j); Until (j=StringGrid1.RowCount); If b4 Then Begin Showmessage('Числовые данные в таблице заданы неверно!'); Button7.Visible:=true; End Else Begin Button2.Enabled:=false; Button4.Enabled:=false; Button6.Enabled:=true; Button5.Enabled:=true; Button7.Visible:=false; StringGrid1.Enabled:=false; End; End; End; End; end; Приложение 3 Выполнение процедуры «Изменить» для внесения изменений в табличные данные. procedure TForm1.Button6Click(Sender: TObject); begin StringGrid1.Enabled:=true; Button5.Enabled:=false; Button6.Enabled:=false; Button2.Enabled:=true; Button4.Enabled:=true; Button7.Visible:=true; end; Приложение 4 Выполнение процедуры «Применить параметры» для генерации таблицы; procedure TForm1.Button1Click(Sender: TObject); Var i:byte; begin If (Edit1.Text='') Then Showmessage('Введите количество вкладываемых средств!') Else If ((Edit1.Text='0')or(Edit1.Text='1')or(Edit1.Text='2')) Then Showmessage('Для количества вкладываемых средств нужно ввести значение больше 2 у.е.!') Else If (Length(Edit1.Text)>3) Then Begin Showmessage('Для количества вкладываемых средств слишком большое значение!'); Edit1.Clear; En Else If (StrToInt(Edit1.Text)>250) Then Showmessage('Для количества вкладываемых средств слишком большое значение!') Else If (Edit2.Text='') Then Showmessage('Введите колличество предприятий!') Else If (Edit2.Text='0') Then Showmessage('Для количества предприятий нужно ввести значение отличное от нуля!') Else If (Length(Edit2.Text)>1) Then Begin Showmessage('Для колличества предприятий слишком большое значение!'); Edit2.Clear; End Else If (StrToInt(Edit2.Text)>3) Then Showmessage('Для колличества предприятий слишком большое значение!') Else Begin StringGrid1.ColCount:=StrToInt(Edit1.Text)+1; StringGrid1.RowCount:=StrToInt(Edit2.Text)+1; kc:=StrToInt(Edit1.Text); kr:=StrToInt(Edit2.Text); For i:=2 to StringGrid1.ColCount-1 do StringGrid1.Cells[i,0]:=IntToStr(i); For i:=2 to StringGrid1.RowCount-1 do StringGrid1.Cells[0,i]:='F'+IntToStr(i)+'(x)'; StringGrid1.Enabled:=true; Edit1.Enabled:=false; {Edit2.Enabled:=false;} Button1.Enabled:=false; Button2.Enabled:=true; Button4.Enabled:=true; End; end; Приложение 4 Выполнение процедуры «Рассчитать новый план» для очистки полей ввода-вывода, обнуления значений переменных и возврат к началу для расчета нового оптимального плана; procedure TForm1.Button8Click(Sender: TObject); var i,j:byte; begin For i:=1 to StringGrid1.ColCount-1 do For j:=1 to StringGrid1.RowCount-1 do StringGrid1.Cells[i,j]:=''; Edit1.Text:='3'; Edit2.Text:='3'; Edit1.Enabled:=true; {Edit2.Enabled:=true;} StringGrid1.ColCount:=2; StringGrid1.RowCount:=2; StringGrid1.Cells[0,0]:='X'; StringGrid1.Cells[0,1]:='F1(x)'; StringGrid1.Cells[1,0]:='1'; StringGrid1.Enabled:=false; Button1.Enabled:=true; Button5.Enabled:=false; Button8.Enabled:=false; Memo1.Enabled:=false; shag:=0; prib:=0; max:=0; kc:=0; kr:=0; s:=0; a:=0; Memo1.Clear; end;
|