Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 15.04.2011, 15:44   #11
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Цитата:
в этой проге (что выше) используются функции, которые мы еще не изучали
Конечно зависит от препода, но в идеале разве в этом (не в том, что за вас кто-то написал, а в том что вы используете функции, которые еще не изучали) есть что-то плохое? Невозможно ведь изучить и запомнить все, а пользоваться справочниками\учебниками, в которых можно найти эти функции не запрещено же, наоборот хорошо, что человек умеет сам найти нужную ему информацию\знания
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 15.04.2011, 15:45   #12
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

X shr N - двоичный (битовый) сдвиг числа X на N разрядов вправо.
можно заменить на целочисленное деление на 2 в цикле:
Код:
for i:=1 to N do
   X := X div 2;
аналогично,
X shl N - двоичный (битовый) сдвиг числа X на N разрядов влево.
можно заменить на умножение на 2 в цикле:
Код:
for i:=1 to N do
   X := X * 2;
p.s. а то, что Вы (скорее всего) абсолютно не понимаете алгоритм,
по которому осуществляется перебор, Вас, похоже, не смущает?!!
Serge_Bliznykov вне форума Ответить с цитированием
Старый 16.04.2011, 19:55   #13
music66
 
Регистрация: 07.04.2011
Сообщений: 9
По умолчанию

Спасибо, попробую еще раз разобраться
music66 вне форума Ответить с цитированием
Старый 18.04.2011, 18:01   #14
music66
 
Регистрация: 07.04.2011
Сообщений: 9
По умолчанию

Сократила программу до нужного мне размера.
Код:
Type
  Weights = record
    W:array[0..19] of Real;
    Count:integer;
  end;

Procedure ClearWeights(var p:Weights);
Begin
  p.Count:=0;
End;

Procedure AddWeight(var p:Weights; Weight:Real);
Begin
  p.W[p.Count]:=Weight;
  p.Count:=p.Count+1;
End;

Function GetNumberOfVariants(const p:Weights):integer;
var temp:integer;
Begin
  temp:=1;
  GetNumberOfVariants:=round(power(temp*2,p.Count));
End;

Procedure SplitByVariant(const input:Weights; var out1,out2:Weights; variant:integer);
var i:integer;
Begin
  ClearWeights(out1);
  ClearWeights(out2);
  For i:=0 to input.Count-1 do
  Begin
    if (((variant shr i) and 1)=1) then
      AddWeight(out1,input.W[i])
    else
      AddWeight(out2,input.W[i])
  End;
End;

function GetSumWeights(const p:Weights):real;
var s:real;
    i:integer;
Begin
  s:=0;
  for i:=0 to p.Count-1 do
    s:=s+p.W[i];
  GetSumWeights:=s;
End;

var n,i:integer;
    M,raznica,temp:real;
    Source,w1,w2:Weights;
Begin
  writeln('Vvedite kolichestvo kamnei');
  readln(n);
  Writeln('Vvedite vesa > 0');
  for i:=1 to n do
   begin
     Readln(M);
     if (M>0) then AddWeight(Source,M);
   end;

  SplitByVariant(Source,w1,w2,0);
  raznica:=abs(GetSumWeights(w1)-GetSumWeights(w2));

   for i:=1 to GetNumberOfVariants(Source) do
   Begin
      SplitByVariant(Source,w1,w2,i);
      temp:=abs(GetSumWeights(w1)-GetSumWeights(w2));
    if (temp<raznica) then raznica:=temp;
   End;

  Writeln('Raznica mezhdy summami -',raznica:3:0);
End.
Появилось пару вопросов:
Что означает p.W[p.Count] ?
И как работают функция GetNumberOfVariants и процедура SplitByVariant ?
music66 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Комбинаторика kiborrgg Помощь студентам 6 25.03.2011 15:50
Комбинаторика MadReason Помощь студентам 4 09.12.2010 22:52
Комбинаторика Васильева Зинаида Помощь студентам 1 15.10.2010 18:55
Комбинаторика в Паскале shegan Помощь студентам 0 21.12.2009 21:01