Форум «Всё о Паскале» _ Ада и другие языки _ Где ошибка в коде?
Автор: KerK 9.11.2006 16:33
Начирикал задачу...но что-то не правильно...
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
По идее все должно работать.... Плиз помогите, заранее спасибо.
Автор: volvo 9.11.2006 17:01
На предупреждения компилятора внимания не обращаешь? Он же тебе говорит: "Возможно некорректное присваивание!"
if (flag=1&&k>0)
Сравнение - удвоенный знак "=="
Автор: KerK 9.11.2006 17:14
Цитата(volvo @ 9.11.2006 13:01)
На предупреждения компилятора внимания не обращаешь? Он же тебе говорит: "Возможно некорректное присваивание!"
if (flag=1&&k>0)
Сравнение - удвоенный знак "=="
Спасибо за совет, но это ничего не изменяет в задаче...
Автор: volvo 9.11.2006 17:31
Правда? У меня почему-то после добавления "==" заработало:
Что я неправильно делаю? Или результат опять неверный?
Автор: KerK 9.11.2006 17:37
Цитата(volvo @ 9.11.2006 13:31)
Правда? У меня почему-то после добавления "==" заработало:
Что я неправильно делаю? Или результат опять неверный?
Да все верно, просто я убрал while .... без него не работало....
Если не сложно, можешь подсказать еще, как лучше оптимизировать задачу, чтобы все это смотрелось по-грамотному
Автор: мисс_граффити 9.11.2006 18:02
из того, что бросается в глаза: объявлять переменные не по-паскалевскому... то есть не все кучей в начале, а по блокам. например, зачем тебе глобальные i и j? они все равно используются только в отдельных циклах. вот и пиши