Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2008.07.27;
Скачать: CL | DM;

Вниз

Парамерт функции   Найти похожие ветки 

 
Kaer ©   (2008-06-20 22:36) [0]

Имеется 2 вот такие функции

function Maximum(const Items:array of integer):integer;
var j:integer;
begin
if length(Items) = 0 then exit;
result:=Low(Items);
for j:=Low(Items) to High(Items) do
 if result<Items[j] then result:=Items[j];
end;

function W(index,count: integer): integer;
begin
 if index=0 then exit;
 case count of
 0:  w:=Maximum([ar[index,count]+w(index-1,count)]);
 1:  w:=Maximum([ar[index,count]+w(index-1,count-1),ar[index,count-1]+w(index-1,count)]);
 2:  w:=Maximum([ar[index,count]+w(index-1,count-2),ar[index,count-1]+w(index-1,count-1),ar[index,count-2]+w(index-1,count)]);
 3:  w:=Maximum([ar[index,count]+w(index-1,count-3),ar[index,count-1]+w(index-1,count-2),ar[index,count-2]+w(index-1,count-1),ar[index,count-3]+w(index-1,count)]);
 4:  w:=Maximum([ar[index,count]+w(index-1,count-4),ar[index,count-1]+w(index-1,count-3),ar[index,count-2]+w(index-1,count-2),ar[index,count-3]+w(index-1,count-1),ar[index,count-4]+w(index-1,count)]);
 end;
end;

В функции Максимум находится большее число, мне так и надо, но вот как сделать так чтобы я мог определить не только значение этого числа, а еще сам параметр который его определяет?
например строка
 2:  w:=Maximum([ar[index,count]+w(index-1,count-2),ar[index,count-1]+w(index-1,count-1),ar[index,count-2]+w(index-1,count)]);
допустим жирным выделино максимально значение, как узнать что это не допустим 150, а значения index и count?


 
grisme   (2008-06-20 22:45) [1]

иврит? O__o


 
Игорь Шевченко ©   (2008-06-20 23:04) [2]


>  case count of


я с ужасом думаю, что будет, если count будет от 0 до 15


 
Palladin ©   (2008-06-20 23:16) [3]


>if length(Items) = 0 then exit

это как это эксит? то бишь результат функции мы всевышнему назначить позволим?

в принципе, если ты конечно последовал моему совету заняться изысканием открытых массивов, то должен был бы уже уяснить, что нижний индекс у них всегда 0, а цикл строжайше рекомендуется строить до Length()-1

но, судя по всему, изысканиями ты не озадачился...

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


 
Игорь Шевченко ©   (2008-06-20 23:20) [4]


> если ты конечно последовал моему совету заняться изысканием
> открытых массивов, то должен был бы уже уяснить, что нижний
> индекс у них всегда 0, а цикл строжайше рекомендуется строить
> до Length()-1


Хорошо, что я вовремя услышал, а то тоже, как дурак, строил циклы от Low до High.
Пойду срочно переделывать, раз такая строгость в рекомендации.


 
Anatoly Podgoretsky ©   (2008-06-20 23:22) [5]

> Игорь Шевченко  (20.06.2008 23:04:02)  [2]

Ну не страшно, ты подумай лучше о том, что селектор ограничен 2 миллиардами, вот что страшно.


 
Palladin ©   (2008-06-20 23:42) [6]


>Игорь Шевченко ©   (20.06.08 23:20) [4]

хем, спокойно :) дарую тебе  вольность обращаться хоть по -4 напрямую, свет с тобой :)

вот только... давно ли ты писал

Procedure hh(const a:array of integer);
Var
c:int64;

...
c:=high(a);
и почувствовал ли ты разницу в значениях при

c:=length(a)-1

:)


 
Игорь Шевченко ©   (2008-06-20 23:56) [7]

Palladin ©   (20.06.08 23:42) [6]

function High1 (const A: array of Integer): Integer;
var
 C: Int64;
begin
 C := Length(A) - 1;
 Result := A[C];
end;

function High2 (const A: array of Integer): Integer;
var
 C: Int64;
begin
 C := High(A);
 Result := A[C];
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
 ShowMessageFmt ("%d vs %d", [High1([1,2,3,4]), High2([1,2,3,4])]);
end;

4 vs 4

Я где-то ошибся ?


 
Palladin ©   (2008-06-21 00:06) [8]

во первых не приводить int64 к integer, а сделать ShowMessage(IntToStr()) например, ну или просто посмотреть значение переменной c в отладчике при F7, во вторых передать пустой массив [] и в ту и в ту процедуру... тут то все и всплывет, по крайней мере в д6

буду рад если сообщишь результаты для своей версии делфи )


 
Игорь Шевченко ©   (2008-06-21 00:30) [9]

function High1 (const A: array of Integer): Integer;
var
 C: Int64;
begin
 C := Length(A) - 1;
 ShowMessage (IntToStr(C));
 Result := 0;
end;

function High2 (const A: array of Integer): Integer;
var
 C: Int64;
begin
 C := High(A);
 ShowMessage (IntToStr(C));
 Result := 0;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
 ShowMessageFmt ("%d vs %d", [High1([1,2,3,4]), High2([1,2,3,4])]);
 ShowMessageFmt ("%d vs %d", [High1([]), High2([])]);
end;

При пустом массиве High1 выдает -1 (Length([])-1), High2 выдает 4294967295
Turbo Delphi 2006.

Я все-таки полагаю это слишком уж граничным условием, чтобы были такие строгости в циклах от 0 до Length(Foo)-1 вместо от Low(Foo) до High(Foo)

кроме того мне трудно использовать Int64 в качестве индекса массива, это, наверное, врожденное...


 
Palladin ©   (2008-06-21 00:46) [10]

да, согласен, конечно. случай довольно не частый. посетила меня, просто, однажды мысль сэкономить на локальных переменных в одном часто вызываемом методе... в итоге: около 2ух часов поиска плавающего AV и твердого убеждения, что High никогда больше не применю к массивам...


 
Германн ©   (2008-06-21 01:12) [11]

Дискуссия Тимура с Игорем с комментарием Анатолия интересна. А остальное - туман.
> допустим жирным выделино максимально значение, как узнать
> что это не допустим 150, а значения index и count?

Трудно понять объяснение на пальцах выданное на форуме.


 
Leonid Troyanovsky ©   (2008-06-21 11:12) [12]


> Kaer ©   (20.06.08 22:36)  

> В функции Максимум находится большее число, мне так и надо,
>  но вот как сделать так чтобы я мог определить не только
> значение этого числа, а еще сам параметр который его определяет?

function Maximum(const Items:array of integer; var ItemIndex):integer;
..
ItemIndex := j;

--
Regards, LVT.


 
Kaer ©   (2008-06-21 13:22) [13]


> Германн ©

хотите я тут приведу главу с теорией и примером расчета, я правда не уверен ведь это математика а тут форум о делфи, вдруг меня забанят :-)


 
Kaer ©   (2008-06-21 13:27) [14]


> Игорь Шевченко ©

А что не так? от 0 до 15 нельзя чтоли в case делать? объясните пожалуста а то мне непонятно


> Palladin ©   (20.06.08 23:16) [3]
> >if length(Items) = 0 then exitэто как это эксит? то бишь
> результат функции мы всевышнему назначить позволим?

странно а у меня почемуто все работает, и расчитывает правильно как надо, без ошибок


 
Kaer ©   (2008-06-21 13:28) [15]


> Leonid Troyanovsky ©


> Regards, LVT.

А что это? :-)


 
Kaer ©   (2008-06-21 13:31) [16]

Модераторы, можно я я тут опубликую главу книги, для удобства понимания задачи которая мне трубуется?


 
Kaer ©   (2008-06-22 09:46) [17]

Вобщем молчание знак согласия.
Глава книги:
http://slil.ru/25919030
Код программы:

program Project1;

{$APPTYPE CONSOLE}

uses
 SysUtils;

var
 i,j: integer;
 ar: array[1..4,0..4] of integer; //Таблица

//Функция перевода символов из ANSI в ASCII
function Rus(mes: string):string;
var
 t: integer;
begin
 for t:=1 to length(mes) do
 case mes[t] of
   "A".."п" : mes[t] := Chr(Ord(mes[t]) - 64);
   "р".."я" : mes[t] := Chr(Ord(mes[t]) - 16);
 end;
 Rus := mes;
end;

//Функция возвращающая максимум из входных параметров
function Maximum(const Items:array of integer):integer;
var j:integer;
begin
if length(Items) = 0 then exit;
result:=Low(Items);
for j:=Low(Items) to High(Items) do
 if result<Items[j] then result:=Items[j];
end;

//Основная функция расчета
function W(index,count: integer): integer;
begin
 if index=0 then exit;
 case count of
 0:  w:=Maximum([ar[index,count]+w(index-1,count)]);
 1:  w:=Maximum([ar[index,count]+w(index-1,count-1),ar[index,count-1]+w(index-1,count)]);
 2:  w:=Maximum([ar[index,count]+w(index-1,count-2),ar[index,count-1]+w(index-1,count-1),ar[index,count-2]+w(index-1,count)]);
 3:  w:=Maximum([ar[index,count]+w(index-1,count-3),ar[index,count-1]+w(index-1,count-2),ar[index,count-2]+w(index-1,count-1),ar[index,count-3]+w(index-1,count)]);
 4:  w:=Maximum([ar[index,count]+w(index-1,count-4),ar[index,count-1]+w(index-1,count-3),ar[index,count-2]+w(index-1,count-2),ar[index,count-3]+w(index-1,count-1),ar[index,count-4]+w(index-1,count)]);
 end;
end;

begin
 writeln(Rus("Задача о вложении средств"));

 //Присвоение массиву значений таблицы
 ar[1,0]:=0;   ar[2,0]:=0;   ar[3,0]:=0;   ar[4,0]:=0;
 ar[1,1]:=40;  ar[2,1]:=50;  ar[3,1]:=30;  ar[4,1]:=60;
 ar[1,2]:=50;  ar[2,2]:=70;  ar[3,2]:=55;  ar[4,2]:=75;
 ar[1,3]:=65;  ar[2,3]:=85;  ar[3,3]:=70;  ar[4,3]:=95;
 ar[1,4]:=75;  ar[2,4]:=95;  ar[3,4]:=95;  ar[4,4]:=110;

 //Вывод
 for j:=1 to 4 do
 begin
   writeln;
   for i:=0 to 4 do
   begin
     write("Max W");
     write(j);
     write("(");
     write(i*100);
     write(") = ");
     writeln(W(j,i));
   end;
 end;

 writeln;
 for i:=4 downto 1 do
 begin
   write(Rus("Отрасль "));
   write(i);
   writeln(" = 100");
 end;

 writeln;
 write(Rus("Для завершения нажмите "));
 write("<Enter>...");
 readln;
end.

Как видно из кода программа будет правильно рассчитывать W. но вот как сделать чтобы она еще и правильно расчитывала вложения в отрасли, я хоть убейте не могу сообразить. у мено щас тупо выводит что все по 100.


 
Slym ©   (2008-06-23 06:50) [18]

а смысл?
0: w:=Maximum([ar[index,count]+w(index-1,count)]);
1: w:=Maximum([ar[index,count]+w(index-1,count-1)...
2: w:=Maximum([ar[index,count]+w(index-1,count-2)...

не проще 0?


 
Slym ©   (2008-06-23 07:22) [19]

:)
function W(index,count: integer): integer;
var
 i:integer;
 Items:array of integer;
begin
 if index=0 then exit;
 SetLength(Items,count+1);
 for i:=Low(Items) to High(Items) do
   Items[i]:=ar[index,count-i]+W(index-1,i);
 result:=Maximum(Items);
end;


 
Kaer ©   (2008-06-24 13:11) [20]


> Slym ©

а мы не ищем легких путей :-)


 
Slym ©   (2008-06-24 13:27) [21]

Kaer ©   (24.06.08 13:11) [20]
а мы не ищем легких путей :-)

8(представил путь при увеличении размерности входных данных...


 
Kaer ©   (2008-06-24 13:57) [22]


> Slym ©

спасибо канешно, но к сожалению это не решает моей проблемы :-(


 
Slym ©   (2008-06-24 14:23) [23]

Kaer ©   (24.06.08 13:57) [22]
спасибо канешно, но к сожалению это не решает моей проблемы :-(

дак тебе алгоритм нужен? я то ошибки в коде правил :)


 
Галинка   (2008-06-24 14:25) [24]

а передавать еще один параметр в функцию, в который и писать индекс (на сколько я поняла именно индекс максимального нужен) додуматься сложно?

Вам известна procedure val(string, int, int)? Так там так и поступают. Все параметры передаются функции: из какой переменной конвертить, в какую результат записать, и код ошибки вернуть, если таковая случилась.


 
Галинка   (2008-06-24 14:28) [25]

т.е. твой прототип может быть таким

procedure Maximum(const Items:array of integer, IndOfMax: integer, MaxItem: integer);


 
Kaer ©   (2008-06-24 16:25) [26]

щас постораюсь объеснить :-)
программа для расчета межотраслевого балланса, тоесть есть 4 гипотетические отрасли, между которыме нужно распеределить 400 у.е., в каждую можно вложить 100, 200, 300, 400 или 0(тоесть вообще не вкладывать), но сумма этих вложений не должан превыщать 400.
вот эта таблица

> //Присвоение массиву значений таблицы  ar[1,0]:=0;   ar[2,
> 0]:=0;   ar[3,0]:=0;   ar[4,0]:=0;  ar[1,1]:=40;  ar[2,1]:
> =50;  ar[3,1]:=30;  ar[4,1]:=60;  ar[1,2]:=50;  ar[2,2]:
> =70;  ar[3,2]:=55;  ar[4,2]:=75;  ar[1,3]:=65;  ar[2,3]:
> =85;  ar[3,3]:=70;  ar[4,3]:=95;  ar[1,4]:=75;  ar[2,4]:
> =95;  ar[3,4]:=95;  ar[4,4]:=110;

первый параметр это номер отрасли, второй колличство вложений(1=100, 2=200, и тд). а после равно это прибыль этой отрасли(первый параметр!) после вложения в неё средаст(второй параметр).
Например если в первую отрасль вложить 100 то прибыль будет 40 едениц, а если 400 то прибыль будет всего 65. (как видите она увеличится всего в 1.8 раза, и не окупается, значит имеет смысл вложить в неё 100, а осталные 300 распределить между другими 3 отраслями.

вот тут

> writeln;  for i:=4 downto 1 do  begin    write(Rus("Отрасль
> "));    write(i);    writeln(" = 100");  end;


я вывожу что оптимальный баланс будет если между отраслями распределить по 100, но это потому что я знаю ответ :-). Вот как раз как добиться того чтобы прога сама это додумывалась вот что мне нужно.


 
Leonid Troyanovsky ©   (2008-06-24 16:33) [27]


> Галинка   (24.06.08 14:28) [25]

> procedure Maximum(const Items:array of integer, IndOfMax:
>  integer, MaxItem: integer);

From [12]:

> function Maximum(const Items:array of integer; var ItemIndex):
> integer;
> ..
> ItemIndex := j;

Но, нас игнорируют (марш лилипутов).
--
Regards, LVT.


 
Галинка   (2008-06-24 17:16) [28]

это наверное надо алгоритм сначала правильный. Тогда он правильно в код перевется.


 
Kaer ©   (2008-06-24 17:59) [29]


> Галинка


> Вам известна procedure val(string, int, int)

к сожалению не известна


> Leonid Troyanovsky

честно говоря, я не поял, пожалуста объесните мне


 
Галинка   (2008-06-24 18:11) [30]

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


 
Leonid Troyanovsky ©   (2008-06-24 21:42) [31]


> Kaer ©   (24.06.08 17:59) [29]

> честно говоря, я не поял, пожалуста объесните мне

Дык, напряги мыслительную мышцу.
По крайней мере, попытайся.

--
Regards, LVT.


 
Kaer ©   (2008-06-25 17:46) [32]


> Leonid Troyanovsky

я пытался, я не понимаю, завтра нада чтобы программа к курсовой была готова, если вы можете мне помоч то пожалуста помогите, было бы очень здорово если бы вы написали код или просто дали толковое объяснение, пожалуста


 
Anatoly Podgoretsky ©   (2008-06-25 17:58) [33]

> Kaer  (25.06.2008 17:46:32)  [32]

Ну пора сухари и носки готовить.


 
Игорь Шевченко ©   (2008-06-25 17:59) [34]


> завтра нада чтобы программа к курсовой была готова


пиши, в чем проблема ?


> было бы очень здорово если бы вы написали код


Видишь ли, Леониду курсовую не надо сдавать


 
Германн ©   (2008-06-25 18:01) [35]


> Kaer ©   (25.06.08 17:46) [32]
>
>

http://delphimaster.net/view/15-1214399860/


 
Kaer ©   (2008-06-25 18:16) [36]


> Игорь Шевченко

я вот тут описал [26]


 
Игорь Шевченко ©   (2008-06-25 21:40) [37]

Kaer ©   (25.06.08 18:16) [36]


> я вот тут описал [26]


да мне тоже не надо курсовую


 
Kaer ©   (2008-06-26 09:43) [38]


> Игорь Шевченко

зачем тогда спрашивать в чем проблема, если все рано не хотите помочь?  это стеб что ли такой? :-(


 
Anatoly Podgoretsky ©   (2008-06-26 10:27) [39]

Вот завтра и наступило.


 
Anatoly Podgoretsky ©   (2008-06-26 10:28) [40]

Вопрос более не актуален, теперь надо идти на форум prizyv.ru


 
Kaer ©   (2008-06-26 10:36) [41]


> Anatoly Podgoretsky

у меня есть еще целый день, я же сказал чтобы она была готова, а не что она будет сдаваться :-)


 
Kaer ©   (2008-06-26 10:37) [42]

вот ближе к вечеру тему думаю можно закрыть


 
Dennis I. Komarov ©   (2008-06-26 10:37) [43]

> [38] Kaer ©   (26.06.08 09:43)


ССЗБ


 
Kaer ©   (2008-06-26 10:38) [44]


> ССЗБ

а?


 
Dennis I. Komarov ©   (2008-06-26 10:38) [45]

Для начала попробуй описать, что ты хочешь от функции получить

ЗЫ
  Код чей?


 
Kaer ©   (2008-06-26 10:40) [46]

код мой, мне нужен алгоритм который бы определял сколько нужно вложить денег в отрасль


 
Dennis I. Komarov ©   (2008-06-26 10:40) [47]

> [44] Kaer ©   (26.06.08 10:38)

Видишь у него голубые штаны? Должен присесть три раза и слелать "КЮ"


 
Dennis I. Komarov ©   (2008-06-26 10:41) [48]

> [46] Kaer ©   (26.06.08 10:40)

Функция не знает ни о отрослях, и тем более о деньгах... Попробуй еще раз


 
Kaer ©   (2008-06-26 10:44) [49]


program Project1;

{$APPTYPE CONSOLE}

uses
 SysUtils;

var
 i,j: integer;
 ar: array[1..4,0..4] of integer;

function Rus(mes: string):string;
var
 t: integer;
begin
 for t:=1 to length(mes) do
 case mes[t] of
   "A".."&#239;" : mes[t] := Chr(Ord(mes[t]) - 64);
   "&#240;".."&#255;" : mes[t] := Chr(Ord(mes[t]) - 16);
 end;
 Rus := mes;
end;

function Maximum(const Items:array of integer; ItemIndex: integer):integer;
var j:integer;
begin
if length(Items) = 0 then exit;
result:=Low(Items);
for j:=Low(Items) to High(Items) do
 if result<Items[j] then result:=Items[j];
end;

function W(index,count: integer): integer;
var
i:integer;
Items:array of integer;
begin
if index=0 then exit;
SetLength(Items,count+1);
for i:=Low(Items) to High(Items) do
  Items[i]:=ar[index,count-i]+W(index-1,i);
result:=Maximum(Items,count);
end;

begin
 writeln(Rus("&#199;&#224;&#228;&#224;&#247;&#224; &#238; &#226;&#235;&#238;&#230;&#229;&#237;&#232;&#232; &#241;&#240;&#229;&#228;&#241;&#242;&#226;"));

 ar[1,0]:=0;   ar[2,0]:=0;   ar[3,0]:=0;   ar[4,0]:=0;
 ar[1,1]:=40;  ar[2,1]:=50;  ar[3,1]:=30;  ar[4,1]:=60;
 ar[1,2]:=50;  ar[2,2]:=70;  ar[3,2]:=55;  ar[4,2]:=75;
 ar[1,3]:=65;  ar[2,3]:=85;  ar[3,3]:=70;  ar[4,3]:=95;
 ar[1,4]:=75;  ar[2,4]:=95;  ar[3,4]:=95;  ar[4,4]:=110;

 for j:=1 to 4 do
 begin
   writeln;
   for i:=0 to 4 do
   begin
     write("Max W");
     write(j);
     write("(");
     write(i*100);
     write(") = ");
     writeln(w(j,i));
   end;
 end;

 writeln;
 for i:=4 downto 1 do
 begin
   write(Rus("Отрасль  "));
   write(i);
   writeln(" = 100");
 end;


 writeln;
 write(Rus("&#196;&#235;&#255; &#231;&#224;&#226;&#229;&#240;&#248;&#229;&#237;&#232;&#255; &#237;&#224;&#230;&#236;&#232;&#242;&#229; "));
 write("<Enter>...");
 readln;
end.


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


 
Dennis I. Komarov ©   (2008-06-26 10:52) [50]

> [49] Kaer ©   (26.06.08 10:44)

Твой код - это плод только твоего больного воображения.

Если ты не хочешь помочь себе, то никто этого уже не сможет...


 
Kaer ©   (2008-06-26 10:55) [51]


> Dennis I. Komarov

а почему больного? и вобщето я себе очень хочу помоч


 
Kaer ©   (2008-06-26 11:03) [52]

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


 
Dennis I. Komarov ©   (2008-06-26 11:03) [53]

> а почему больного?

Прочитай сначала ветку :) Здорового я ничего не нашел. Ну да ладно...

Приведу пример:

Функция возращающая значение большего и двух целых чисел:

function Max(a, b: Integer): Integer;
begin
 if a > b then Result:=a else Result:=b;
end;


 
Dennis I. Komarov ©   (2008-06-26 11:05) [54]

> [52] Kaer ©   (26.06.08 11:03)

:) Сполз под стул :))))))))))))


 
Kaer ©   (2008-06-26 11:34) [55]


> Dennis I. Komarov


> Функция возращающая значение большего и двух целых чисел:

двух целых чисел или из двух?


 
Dennis I. Komarov ©   (2008-06-26 11:35) [56]

> [55] Kaer ©   (26.06.08 11:34)

из конечно. Вот теперь опиши так же свою


 
Kaer ©   (2008-06-26 11:51) [57]

боюсь если вы не знаете теории меж отраслевого баланса это будет трудно. Но я не боюсь трудностей :-)
Так, это функция расчета(меня в ней все устраивает:-))

function W(index,count: integer): integer;
var
i:integer;
Items:array of integer;
begin
if index=0 then exit;
SetLength(Items,count+1);
for i:=Low(Items) to High(Items) do
  Items[i]:=ar[index,count-i]+W(index-1,i);
result:=Maximum(Items);
end;

это функция нахождения максимума(в ней меня тоже все устраивает:-))

function Maximum(const Items:array of integer):integer;
var j:integer;
begin
if length(Items) = 0 then exit;
result:=Low(Items);
for j:=Low(Items) to High(Items) do
 if result<Items[j] then result:=Items[j];
end;

они делает вот что
W4(400) = max(q4(400) + W3(0); q4(300) + W3(100); q4(200) + W3(200); q4(100) + W3(300); q4(0) + W3(400)) = max(110 + 0; 95 + 50; 75 + 90; 60 + 120; 0 + 145) = 180.
W4(400) - в 4 отрасли вкладывается 400 уе. функция просчитывает оптимальное соотношение.
Жирыным виделено место, где максимальное число и которое вернется функцией макс - 180. Как видите отрасли 4 (q4) нужно вложить 100. а остальное распределить между 3 другими отраслями(w3(300)). Я не знаю как отследить то что именно в 4 отрсль вложется 100. а остальное уйдет дальшев другие отрасля.
Я не могу ивидель алгоритма как это можно осуществить. Может нужно написать новую функцию, или изменить старые?


 
Dennis I. Komarov ©   (2008-06-26 11:58) [58]

> [57] Kaer ©   (26.06.08 11:51)

Да не нужен мне твой баланс со своей теорией.
Вырази то что хочешь математически


 
Kaer ©   (2008-06-26 12:02) [59]

q4(100) мне надо отлавить вот это значение, всего таких значений будет 4(q1,q2,q3,q4)


 
Kaer ©   (2008-06-26 12:03) [60]

если бы я знал как это выразить математически я бы не стал спрашивать алгоритм :)


 
clickmaker ©   (2008-06-26 12:06) [61]

а как можно определить рентабельность отрасли, не зная, насколько быстро и прибыльно она будет окупаться?
тогда единственный вариант - тупо поделить 400 на 4


 
Kaer ©   (2008-06-26 12:11) [62]


> clickmaker

вопщето для этого есть таблица, вот она

 ar[1,0]:=0;   ar[2,0]:=0;   ar[3,0]:=0;   ar[4,0]:=0;
 ar[1,1]:=40;  ar[2,1]:=50;  ar[3,1]:=30;  ar[4,1]:=60;
 ar[1,2]:=50;  ar[2,2]:=70;  ar[3,2]:=55;  ar[4,2]:=75;
 ar[1,3]:=65;  ar[2,3]:=85;  ar[3,3]:=70;  ar[4,3]:=95;
 ar[1,4]:=75;  ar[2,4]:=95;  ar[3,4]:=95;  ar[4,4]:=110;


первый парамерт отрасль, второй количестов вложений в неё(1=100, 2=200 и тд)


 
clickmaker ©   (2008-06-26 12:19) [63]

> вопщето для этого есть таблица, вот она

а, ну да, ну да...
и в чем проблема? Найти максимальную суммы прибыли по всем четырем, имея граничное условие "сумма индексов не больше 4" ?


 
Kaer ©   (2008-06-26 12:25) [64]


> clickmaker

максимальную сумму прибыли я нахожу = 180, я не нахожу в какие отрасли при этом скоко было вложено


 
clickmaker ©   (2008-06-26 12:34) [65]

> [64] Kaer ©   (26.06.08 12:25)

то есть? у тебя же индексы есть 1-4?


 
Kaer ©   (2008-06-26 12:37) [66]

индексы это номер отрасли, а не то скока в неё вложили


 
Kaer ©   (2008-06-26 12:37) [67]

мутная задача, да? :-)


 
Галинка   (2008-06-26 12:41) [68]

задача нормальная. Алгорит мутный.


 
clickmaker ©   (2008-06-26 12:41) [69]

> [66] Kaer ©   (26.06.08 12:37)


> первый парамерт отрасль, второй количестов вложений в неё(1=100,
> 2=200 и тд)

это что?


 
clickmaker ©   (2008-06-26 12:42) [70]

ну то есть неправильно я выразился: не индекс, а "номер вложения"


 
Slym ©   (2008-06-26 14:19) [71]

program Project1;

{$APPTYPE CONSOLE}

uses Windows;

var ar: array[1..4,0..4] of integer; //Таблица

function Rus(const Str:string):string;
begin
 SetLength(result,Length(Str));
 CharToOEM(PChar(Str),PChar(result));
end;

//Функция возвращающая максимум из входных параметров
function Maximum(const Items:array of integer):integer;
var i:integer;
begin
 if length(Items) = 0 then exit;
 result:=Low(Items);
 for i:=Low(Items) to High(Items) do
   if Items[result]<Items[i] then result:=i;
end;

function W(index,count:integer;out choise:integer): integer;
var
i:integer;
Items:array of integer;
begin
 result:=0;
 if index=0 then exit;
 SetLength(Items,count+1);
 for i:=Low(Items) to High(Items) do
   Items[i]:=ar[index,i]+W(index-1,count-i,choise);
 choise:=Maximum(Items);
 result:=Items[choise];
end;

procedure SupaPupaW;
var i,s,c,Gt:integer;
begin
 s:=4;Gt:=0;
 for i:=4 downto 1 do
 begin
   W(i,s,c);
   Gt:=Gt+ar[i,c];
   writeln(Rus("Отрасль "),i, "=",c*100);
   s:=s-c;
 end;
 writeln(Rus("Итого "),Gt);
end;

begin
writeln(Rus("Задача о вложении средств"));

//Присвоение массиву значений таблицы
ar[1,0]:=0;   ar[2,0]:=0;   ar[3,0]:=0;   ar[4,0]:=0;
ar[1,1]:=40;  ar[2,1]:=50;  ar[3,1]:=30;  ar[4,1]:=10;//ar[4,1]:=60;
ar[1,2]:=50;  ar[2,2]:=70;  ar[3,2]:=55;  ar[4,2]:=75;
ar[1,3]:=65;  ar[2,3]:=85;  ar[3,3]:=70;  ar[4,3]:=95;
ar[1,4]:=75;  ar[2,4]:=95;  ar[3,4]:=95;  ar[4,4]:=110;

SupaPupaW;
write(Rus("Для завершения нажмите "));
write("<Enter>...");
readln;
end.


 
Slym ©   (2008-06-26 14:21) [72]

Kaer ©   (26.06.08 11:03) [52]
это для моей подруги

с тебя хотябы ее ню фотка :)


 
Anatoly Podgoretsky ©   (2008-06-26 14:26) [73]

Это не мой мотороллер.


 
Kaer ©   (2008-06-26 15:06) [74]

Оно работает! Оно работает!!!


 
Kaer ©   (2008-06-26 15:07) [75]


> Slym

Спасибо нашим поварам за то что вкусно варят нам!


 
Игорь Шевченко ©   (2008-06-26 20:53) [76]


> помоему меня тут не правильно поняли, я делаю это не для
> себя, это для моей подруги, просто она попросила о помощи
> в написании программы так как сама не может


подруга не может, ты не можешь...Кузнеца пробовал пригласить ?


 
Игорь Шевченко ©   (2008-06-26 20:54) [77]

Slym ©   (26.06.08 14:19) [71]

А подруга-то не твоя нифига


 
Anatoly Podgoretsky ©   (2008-06-26 21:31) [78]

> Игорь Шевченко  (26.06.2008 20:53:16)  [76]

А нафига нам кузнец, не кузнец нам не нужен.


 
Германн ©   (2008-06-26 21:35) [79]


> Anatoly Podgoretsky ©   (26.06.08 21:31) [78]

Тогда сантехника.



Страницы: 1 2 вся ветка

Текущий архив: 2008.07.27;
Скачать: CL | DM;

Наверх




Память: 0.69 MB
Время: 0.024 c
2-1214563180
cvg
2008-06-27 14:39
2008.07.27
Почему при сравнении элементов массива компилятор выдает ошибку?


2-1214396148
lewka-serdceed
2008-06-25 16:15
2008.07.27
считавание с web страниц


3-1203079907
SerMaxx
2008-02-15 15:51
2008.07.27
Список таблиц базы данных


6-1190631328
ZuArt
2007-09-24 14:55
2008.07.27
Чтение WEB страниц


2-1214361504
apic
2008-06-25 06:38
2008.07.27
GetFocus()