Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2008.07.27;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.68 MB
Время: 0.009 c
15-1212779576
DillerXX
2008-06-06 23:12
2008.07.27
Хорошая капча


2-1214475991
Vit
2008-06-26 14:26
2008.07.27
Компиляция и билд


2-1214562652
kazar
2008-06-27 14:30
2008.07.27
помогите алгоритмом


11-1186297255
MTsv DN
2007-08-05 11:00
2008.07.27
MultiSelect in TreeView


15-1213095081
Res
2008-06-10 14:51
2008.07.27
текст с картинки





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский