IPB
ЛогинПароль:

> Внимание!

1. Пользуйтесь тегами кода. - [code] ... [/code]
2. Точно указывайте язык, название и версию компилятора (интерпретатора).
3. Название темы должно быть информативным.
В описании темы указываем язык!!!

Наладить общение поможет, если вы подпишитесь по почте на новые темы в этом форуме.

> Где ошибка в коде?, Работа с матрицей... с++
сообщение
Сообщение #1


Новичок
*

Группа: Пользователи
Сообщений: 28
Пол: Мужской

Репутация: -  0  +


Начирикал задачу...но что-то не правильно...

1.Задача равномерного распределения видов работ.
Предприятие выпускает m видов продукции, причем потребность предприятия в продукции с номером iє1:m на заданный срок n дней составляет целое количество b[i]>0
единиц.
Требуется составить наиболее равномерный план выпуска продукции предприятием, т.е. определить целое количество x[i,j]>=0 единиц выпуска продукции вида iє1:m в течении дня iє1:n, таким образом, чтобы выполнялись условия:
а)x[i,1]+x[i,2]+…+x[i,n]=b[i]
(условие обеспечения потребности)
б)׀x[i,p]-x[i,q]׀<=1
(условие равномерности выпуска продукции по видам)
в)׀x[1,p]+x[2,p]+..+x[m,p]-x[1,q]+x[2,q]+…+x[m,q]׀<=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[i];
}
for (i=0;i<m;i++)
{
z=b[i]/n;
for (j=0;j<n;j++) a[i][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[i][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[i][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

По идее все должно работать....
Плиз помогите, заранее спасибо.

Сообщение отредактировано: KerK -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов(1 - 5)
сообщение
Сообщение #2


Гость






На предупреждения компилятора внимания не обращаешь? Он же тебе говорит: "Возможно некорректное присваивание!"
if (flag=1&&k>0)

Сравнение - удвоенный знак "=="
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Новичок
*

Группа: Пользователи
Сообщений: 28
Пол: Мужской

Репутация: -  0  +


Цитата(volvo @ 9.11.2006 13:01) *

На предупреждения компилятора внимания не обращаешь? Он же тебе говорит: "Возможно некорректное присваивание!"
if (flag=1&&k>0)

Сравнение - удвоенный знак "=="


Спасибо за совет, но это ничего не изменяет в задаче...
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Гость






Правда? У меня почему-то после добавления "==" заработало:
Прикрепленное изображение

Что я неправильно делаю? Или результат опять неверный?
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


Новичок
*

Группа: Пользователи
Сообщений: 28
Пол: Мужской

Репутация: -  0  +


Цитата(volvo @ 9.11.2006 13:31) *

Правда? У меня почему-то после добавления "==" заработало:
Прикрепленное изображение

Что я неправильно делаю? Или результат опять неверный?


Да все верно, просто я убрал while .... без него не работало....

Если не сложно, можешь подсказать еще, как лучше оптимизировать задачу, чтобы все это смотрелось по-грамотному
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6


просто человек
******

Группа: Пользователи
Сообщений: 3 641
Пол: Женский
Реальное имя: Юлия

Репутация: -  55  +


из того, что бросается в глаза:
объявлять переменные не по-паскалевскому... то есть не все кучей в начале, а по блокам.
например, зачем тебе глобальные i и j? они все равно используются только в отдельных циклах. вот и пиши
for(int j=0;j<n;j++)

и - отступы. иначе код хуже читается.


--------------------
Все содержимое данного сообщения (кроме цитат) является моим личным скромным мнением и на статус истины в высшей инстанции не претендует.
На вопросы по программированию, физике, математике и т.д. в аське и личке не отвечаю. Даже "один-единственный раз" в виде исключения!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 27.11.2020 4:01
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name