Форум программистов, компьютерный форум CyberForum.ru

Динамический массив - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Определите структуру Complex для хранения комплексных чисел http://www.cyberforum.ru/cpp-beginners/thread1061789.html
Не могу осилить задание, помогите! Определите структуру Complex для хранения комплексных чисел: struct Complex { double re; //вещественная часть double im; //мнимая часть
C++ найти ошибку в коде Ошибка в 13 строке invalid conversion from 'int' to 'char*' #include <iostream> #include <stdio.h> using namespace std; char **s = new char* , *t; int i, j, n; int main() { for(i=0; i<10; i++) http://www.cyberforum.ru/cpp-beginners/thread1061780.html
C++ Builder Консольная команда tracert средствами C++
Прошу помощи у здешних гуру программирования. Задача: Нужно реализовать консольную команду tracert в C++ коде. Хочу создать дополнительный апплет к уже имеющейся программе. Может кто-уже делал что-либо подобное и может поделиться рабочим кодом??? Была предпринята попытка написания кода, однако при его выполнении выходит ошибка Socket Error #10040 Message to long, похоже это из-за буфера...
C++ Инициализация переменной в классе
Пытаюсь инициализировать в классе переменную и дальше ее использовать class Lines { double PI = 3.141592653589793238462; void static Init(int argc, char** argv) { for(GLdouble i = 0; i < 4.0; i += 0.05) { GLdouble func = exp(-i) * cos(2 * PI * i);
C++ Реализация has_plus http://www.cyberforum.ru/cpp-beginners/thread1061719.html
Подкиньте идею как правильно реализовать аналог boost::has_plus.#include <iostream> #include <type_traits> #include <boost/type_traits/has_plus.hpp> struct A { }; struct B { void operator + (const B&) {} };
C++ Перегрузка операций Нужно выполнить две перегрузки: 1) удаление элемента если он пустой; 2) сравнение по названию(равные). Подскажите как это реализовать. Читаю..вроде не сложно..но не пойму как правильно это сделать... Unit2.h #ifndef Unit2H #define Unit2H подробнее

Показать сообщение отдельно
Lotus34
5 / 6 / 1
Регистрация: 26.10.2012
Сообщений: 124

Динамический массив - C++

02.01.2014, 15:20. Просмотров 890. Ответов 11
Метки (Все метки)

Имеется код, решающий транспортную задачу.
Если задача "закрытая", то есть добавлять строки и столбцы не нужно, то все работает как надо, но как только возникает потребность в добавлении, функционирования прекращается, хотя вычисляющий фрагмент один и тотже, то есть проблема в неправильной инициализации массива, я так думаю.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
#include <iostream>
#include <stdio.h>
#include <windows.h>
using namespace std;
int i,j;
int M,N;
int n,m;//Размерность задачи
float *a;  //адрес массива запасов поставщиков
float *b;  //адрес массива потребностей потребителей
float **C; //адрес массива(двумерного) стоимости перевозки
float **X;//адрес массива(двумерного) плана доставки
 
 
 
int main()
{
    SetConsoleCP(1251);
SetConsoleOutputCP(1251);
    N=n;
    M=m;
    cout<<"Введите колличество поставщиков:  ";// Вводим колличество поствщиков
    cin>>N;
        cout<<"\n";
    cout<<"Введите колличество потребителей: ";// Вводим колличество потребителей
    cin>>M;
    cout<<"\n";
    a = new float[20];//+3
    // Вводим запасы поставщиков 
 
 
    for(i=0;i<N;i++)
    {
        cout<<"Введите запасы "<<i+1<< " поставщика: ";
        cin>>a[i];
    }
        cout<<"\n";
 
    // Вводим запасы потребителей
    b=new float[20];//+3
 
    for(j=0;j<M;j++)
    {
        cout<<"Введите потребность "<<j+1<< " потребителя: ";
        cin>>b[j];
    }
        cout<<"\n";
float** C=new float*[20];//+3
    for (i=0;i<20 ;i++)//+3
    C[i]=new float[20];//+3
 
    // Вводим массив стоимости.
    
         for(i=0;i<N;i++)
         
          for(j=0;j<M;j++)
          {
              cout<<"Введите стоимость перевозки от "<<i+1<<" поставщика к "<<j+1<<"  потребителю:  ";
              cin>>C[i][j];
          }
    
 
float Sa=0;
float Sb=0;
for(int i=0;i<N;i++)//находим суммарные запасы
{
    Sa=Sa+a[i];
}
 
for( j=0;j<M;j++)//находим суммарную потребность
{
    Sb=Sb+b[j];
}
if(Sa==Sb)cout<<"Транспортная задача - закрытая.";
     else
     {
       cout<<"Транспортная задача - открытая. \n";
 
        if(Sa>Sb)
         {
           cout<<"Преобразуем задачу в закрытую путём добавления фиктивного потребителя ";
 
             M++; 
             for( i=0;i<=N;i++)
                C[M][i]=0;//стоимость перевозки фиктивному потребителю равна нулю
             b[M+1]=Sa-Sb;//спрос фиктивного потребителя
           }
        else
         {
           cout<<"Преобразуем задачу в закрытую путём добавления фиктивного поставщика ";
             N++; 
           
             for(int j=0;j<=M;j++)
                   C[i][N]=0;//стоимость перевозки от фиктивного поставщика равна нулю
                   a[N+1]=Sb-Sa;//запас фиктивного поставщика
          }
       }
 
//***************************************************//
 
    //Двумерный массив для Доставки:
     float** X=new float*[20];//выделяем память под массив адресов начала строк
        for(int i=0;i<20;i++)
           X[i]=new float[20];//выделяем память для каждой строки
       /*
        В последней строке(столбце) массива Х будем записывать
        сумму заполненных клеток в соответствующем столбце(строке)
       */
        for(int i=0;i<N;i++)
        {    
            for(int j=0;j<M;j++)
         {
             X[i][j]=-1;//вначале все клетки не заполнены
             if(i==N)X[i][j]=0;//сумма заполненных клеток в j-м столбце
             if(j==M)X[i][j]=0;//сумма заполненных клеток в i-й строке
         }
        }
//***************************************************//
 
//-----------------Метод минимального элемента:
        int im;
        int jm;
        int kk=0;
        float Sij=0;
        do
        {
           int Cmin=-1;
           for(int i=0;i<N;i++)
             for(int j=0;j<M;j++)
               if(X[N][j]!=b[j])//если не исчерпана Потребность Bj
                 if(X[i][M]!=a[i])//если не исчерпан Запас Аі
                    if(X[i][j]<0)//если клетка ещё не заполнена
                      {
                        if(Cmin==-1)//если это первая подходящая ячейка
                           {
                            Cmin=C[i][j];
                            im=i;
                            jm=j;
                           }
                        else //если это не первая подходящая ячейка
                          if(C[i][j]<Cmin)//если в ячейке меньше,чем уже найдено
                            {
                              Cmin=C[i][j];
                              im=i;
                              jm=j;
                             }
                        }
                
               X[im][jm]=min(a[im]-X[im][M],b[jm]-X[N][jm]);//выбираем поставку
               X[N][jm]=X[N][jm]+X[im][jm];//добавляем поставку jm-му потребителю
               X[im][M]=X[im][M]+X[im][jm];//добавляем поставку im-му поставщику
               Sij=Sij+X[im][jm]; //Подсчёт суммы добавленых поставок
               
              
        } while(Sij<max(Sa,Sb));//условие продолжения
 
        int L=0;
        for(int i=0;i<N;i++)
          for(int j=0;j<M;j++)
            if(X[i][j]>=0)L++;//подсчёт заполненных ячеек
        int d=M+N-1-L;//если d>0,то задача - вырожденная,придётся добавлять d нулевых поставок
        int d1=d;//запоминаем значение d
            cout<<"\n";
        cout<<" Начальный опорный план: \n";
            cout<<"\n";
         for(int i=0;i<N;i++)
         {
          for(int j=0;j<M;j++)
          { 
              if (X[i][j]==-1)
                  X[i][j]=0;
 
              cout<<X[i][j]<<" \t ";
          }
 
 
 
 
            cout<<"\n";
        }
         int Sum=0;
 for(int i=0;i<N;i++)
         {
          for(int j=0;j<M;j++)
          {   
              Sum+=X[i][j]*C[i][j];
          }
 }
    cout<<"\n";
    cout<<"Сумма перевозок равно:   "<<Sum;
    cout<<"\n";
 
        // return 0;
system("pause");
}
Подскажите в чем проблема.
Векторы думал использовать, но хочется оформить через массивы.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru