Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Где ошибка в коде? Матрица

14K
09 ноября 2006 года
KerK
29 / / 18.07.2006
Начирикал задачу...но что-то не правильно...

1.Задача равномерного распределения видов работ.
Предприятие выпускает m видов продукции, причем потребность предприятия в продукции с номером iє1:m на заданный срок n дней составляет целое количество b>0
единиц.
Требуется составить наиболее равномерный план выпуска продукции предприятием, т.е. определить целое количество x[i,j]>=0 единиц выпуска продукции вида iє1:m в течении дня iє1:n, таким образом, чтобы выполнялись условия:
а)x[i,1]+x[i,2]+…+x[i,n]=b
(условие обеспечения потребности)
б)&#1472;x[i,p]-x[i,q]&#1472;<=1
(условие равномерности выпуска продукции по видам)
в)&#1472;x[1,p]+x[2,p]+..+x[m,p]-x[1,q]+x[2,q]+…+x[m,q]&#1472;<=1
(условие равномерности выпуска продукции в совокупности)
Размерность:n не менее 10,m-12.


Код:
#include <conio.h>
#include <iostream.h>
#include <math.h>
void main()
{
int m; //kol. vidov prod.
int n; //kol. dney
   int a[12][10];
   int b[12];
   int i,j,e,l,l1,i1,j1,i2,j2,j5;
   int z,k,flag;
   cout << "\n Vvedite koli4estvo produktov";
   cin >> m;
   cout << "\n Vvedite koli4estvo dney";
   cin >> n;
for (i=0;i<m;i++)
{
cout << "\n Vvedite plan";
cin >> b;
}
for (i=0;i<m;i++)
{
z=b/n;
for (j=0;j<n;j++) a[j] = z;
}

for (i1=0;i1<m;i1++)
{
z=b[i1]/n;
k=b[i1]-(z*n);
j5=0;
while (k>0)
{

for(j=0;j<n;j++)
{
flag=1;
l=0;
for (i=0;i<m;i++) l=l+a[j];

for (j2=j5;j2<n;j2++)
{
for (i2=0;i2<m;i2++) l1=l1+a[i2][j2];
if (((l+1)-l1)>1) flag=0;
l1=0;
}
if (flag=1&&k>0)
{
a[i1][j]=a[i1][j]+1;
k=k-1;
}
j5=j5+1;
}
}
}

for (i=0;i<m;i++)
{
for (j=0;j<n;j++)
cout<<" "<<a[j];
cout<<"\n";
}
getch();

}


Например ввожу я кол. прод. 3
дни 5
план на прод. №1 51
план на прод. №2 52
план на прод. №3 53

он мне должен выдать такую матрицу
1 2 3 4 5
1) 11 10 10 10 10
2) 10 11 11 10 10
3) 11 10 10 11 11
--------------
32 31 31 31 31

а выдает такое
1 2 3 4 5
1) 11 10 10 10 10
2) 11 11 10 10 10
3) 11 11 11 10 10
--------------
33 32 31 30 30

По идее все должно работать....
Плиз помогите, заранее спасибо.
3.0K
09 ноября 2006 года
Мerlin
267 / / 25.07.2006
Сперва нужно бы инициализировать L1.
14K
09 ноября 2006 года
KerK
29 / / 18.07.2006
[QUOTE=Мerlin]Сперва нужно бы инициализировать L1.[/QUOTE]

в смысле? что это даст?
3.0K
09 ноября 2006 года
Мerlin
267 / / 25.07.2006
[QUOTE=KerK]в смысле? что это даст?[/QUOTE]Как минимум будет на 1 баг меньше. Вообще-то считатется хорошим тоном, при нахождении суммы, сперва переменную для суммы проинициализировать 0-м. Ты это делаешь только после вычисления первой суммы.
 
Код:
for (j2=j5;j2<n;j2++)
{
  L1 = 0;
  for (i2=0;i2<m;i2++) l1=l1+a[i2][j2];
    if (((l+1)-l1)>1) flag=0;
  //l1=0;
}
14K
09 ноября 2006 года
KerK
29 / / 18.07.2006
[QUOTE=Мerlin]Как минимум будет на 1 баг меньше. Вообще-то считатется хорошим тоном, при нахождении суммы, сперва переменную для суммы проинициализировать 0-м. Ты это делаешь только после вычисления первой суммы.
 
Код:
for (j2=j5;j2<n;j2++)
{
  L1 = 0;
  for (i2=0;i2<m;i2++) l1=l1+a[i2][j2];
    if (((l+1)-l1)>1) flag=0;
  //l1=0;
}
[/QUOTE]

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

Хотелось бы услышать ответ по поводу, того почему не правильно считает
3.0K
09 ноября 2006 года
Мerlin
267 / / 25.07.2006
[QUOTE=KerK]Это-то понятно...но пока до хорошего тона далеко, программа не хочет работать... Программа в черновом варианте, поэтому в программе используются много ненужных переменных...

Хотелось бы услышать ответ по поводу, того почему не правильно считает[/QUOTE]Второй баг.
Вместо
if (flag=1&&k>0)
нужно
if (flag[color=red]==[/color]1&&k>0)
14K
09 ноября 2006 года
KerK
29 / / 18.07.2006
[QUOTE=Мerlin]Второй баг.
Вместо
if (flag=1&&k>0)
нужно
if (flag[color=red]==[/color]1&&k>0)

Мимоходом, твоя прога вообще не считает.[/QUOTE]

уже исправил )) на другом форуме подсказали, что в сравнении нужно ставить ==
14K
09 ноября 2006 года
KerK
29 / / 18.07.2006
Исправил ==, теперь подсчитал так

1 2 3 4 5
1) 11 10 10 10 10
2) 10 11 11 10 10
3) 10 10 10 11 11
--------------
31 31 31 31 31

Получается надо вернуться к первому элементу 3 строки...
14K
09 ноября 2006 года
KerK
29 / / 18.07.2006
Код:
#include <conio.h>
#include <iostream.h>
#include <math.h>
void main()
{
    int m; //kol. vidov prod.
    int n; //kol. dney
   int a[12][10];
   int b[12];
   int i,j,l,l1,i1,i2,j2,j5;
   int z,k,flag;
   cout << "\n Vvedite koli4estvo produktov";
   cin >> m;
   cout << "\n Vvedite koli4estvo dney";
   cin >> n;
   for (i=0;i<m;i++)
   {
    cout << "\n Vvedite plan";
       cin >> b;
    }

   for (i=0;i<m;i++)
   {
    z=b/n;
        for (j=0;j<n;j++) a[j] = z;
   }


   for (i1=0;i1<m;i1++)
   {
    z=b[i1]/n;
      k=b[i1]-(z*n);
        j5=0;
      while (k>0)
      {

                     for(j=0;j<n;j++)
                    {
                     flag=1;
                            l=0;
                        for (i=0;i<m;i++) l=l+a[j];

                        for (j2=j5;j2<n;j2++)
                        {
                           l1=0;
                          for (i2=0;i2<m;i2++)  l1=l1+a[i2][j2];
                              if (((l+1)-l1)>1) flag=0;
//                        cout << (l+1)-l1;
//                        getch();
                            }
                            if (flag==1&&k>0)
                        {
                        a[i1][j]=a[i1][j]+1;
                           k=k-1;
                            }
                     j5=j5+1;
                  }
      }
    }

   for (i=0;i<m;i++)
   {
       for (j=0;j<n;j++)
      cout<<" "<<a[j];
       cout<<"\n";
   }
   getch();

}


все заработало вроде на этих цифрах.... Не работало потому что сначала был убран while
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог