Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 12.10.2014, 11:46
Elka123 Elka123 вне форума
Прохожий
 
Регистрация: 21.09.2014
Сообщения: 7
Версия Delphi: Delphi 10
Репутация: 10
По умолчанию Выводит 0

добрый вечер. Такой вопрос, почему он умножает только на 0 в моей последовательности, ведь должна либо 0 либо 1 подставлять

Даны натуральные числа а1,…,а5.Предположим,что имеются 5 гирь весом а1,…,а5.Обозначим через Cк число способов,которыми можно составить вес л,то есть Cк-число решений уравнения а1Х1+…+а5Х5=к, где Хi может принимать значение 0 и 1(i= 1,…,5).Получить С0,…,С5.
Код:
program Project12;

{$APPTYPE CONSOLE}

   uses
SysUtils;
var
C:array of integer;
Type IndexType = 1..5;
Mas = array [IndexType] of integer;
var dim:1..5;
a:Mas;
N,i,v,g,j,l,t,r,sum,m, k: integer;


begin
  try

sum:=0;
j:=0;

begin
repeat

writeln('vvodim sami (1) ili random (2) ?');
readln(N)
until (N<>1) or (N<>2);
if N=1
then for i:= 1 to 5 do
begin
write(' vvedite A[ ' , i , ' ] = ' );
readln(a[i])
end
else begin randomize;
for i:= 1 to 5 do
a[i]:= - 0 + Random(71);
end;
writeln;
writeln('otv a');
m:=0;
for i:=low(IndexType) to high(IndexType) do begin
write(a[i]:5,' ');
m :=m+a[i];
end;
writeln;
end;
SetLength(C,m);
write(' vvedite k ' );
readln(k);

C[i]:=0;

for i:=0 to k do
for v := 0 to 1 do
for g := 0 to 1 do
for l := 0 to 1 do
for t := 0 to 1 do
for r := 0 to 1 do

while C[sum] <> k do
begin
sum:=a[1]*v+a[2]*g+a[3]*l+a[4]*t+a[5]*r;
C[sum] := C[sum] + 1;
if sum=k
then
writeln (' posledovatelnost ',a[1], ' *' , v , '+ ',a[2],' * ', g ,'+ ',a[3], ' * ', l ,'+ ',a[4], ' * ', t ,'+ ',a[5], ' * ',r,' = ',sum)
end;
writeln (' kol-vo predstavlenii ');
 for i := 0 to 5 do
writeln ('ves ',k,' mojem poluchit sum sposobom ',sum );

except
on E: Exception do
Writeln(E.ClassName, ': ', E.Message);
end;
readln;
end.
Админ: Пользуемся тегами для оформления кода!

Последний раз редактировалось Admin, 12.10.2014 в 19:32.
Ответить с цитированием
  #2  
Старый 22.10.2014, 10:39
Аватар для madMonia
madMonia madMonia вне форума
Новичок
 
Регистрация: 25.02.2014
Сообщения: 50
Версия Delphi: Delphi XE3
Репутация: 2545
По умолчанию

Давайте систему циклов

Код:
for i:=0 to k do
  for v := 0 to 1 do
    for g := 0 to 1 do
      for l := 0 to 1 do
        for t := 0 to 1 do
          for r := 0 to 1 do
 
            while C[sum] <> k do
            begin
               sum:=a[1]*v+a[2]*g+a[3]*l+a[4]*t+a[5]*r;
               C[sum] := C[sum] + 1;
               if sum=k
                  then
                     writeln (...)
            end;

Что происходит?
1) При первом выполнии цикла While (i=v=g=l=r=t=0) sum=0. Благодаря оператору C[sum] := C[sum] + 1; значение в C[sum] становится равным k, другими словами, С[0]=k, sum=0.
2) Происходит выход из While и запускается новая итерация циклов for, при которой r=1, а все остальные счетчики по прежнему 0. При этом в sum по прежнему 0, а c[sum]=k. В следствии этого, цикл While не выполняется, потому что условие его выполнения ложно. То же происходит для всех последующих итераций, что и создает у вас ощущение, что i, v,g,l,r,t всегда 0. Понятнее стало? Я бы посоветовал что-то поправить, но, если честно, вообще не понял зачем вам while
__________________
Невозможно заточить карандаш тупым топором. Столь же тщетно пытаться сделать это десятком тупых топоров
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 19:18.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025