Форум программистов, компьютерный форум 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
04.01.2014, 12:58  [ТС]     Динамический массив
Ну вот, поправил код, а теперь при закрытой задаче он добавляет нормально строку, но не идет дальше и не считает(
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
195
196
197
198
199
200
201
#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;//адрес массива(двумерного) плана доставки
 
//void zapolnenie()
//{
//}
 
 
 
int main()
{
    SetConsoleCP(1251);
SetConsoleOutputCP(1251);
    N=n;
    M=m;
    cout<<"Введите колличество поставщиков:  ";// Вводим колличество поствщиков
    cin>>N;
        cout<<"\n";
    cout<<"Введите колличество потребителей: ";// Вводим колличество потребителей
    cin>>M;
    cout<<"\n";
    a = new float[N+3];//+3
    // Вводим запасы поставщиков 
 
 
    for(i=0;i<N;i++)
    {
        cout<<"Введите запасы "<<i+1<< " поставщика: ";
        cin>>a[i];
    }
        cout<<"\n";
 
    // Вводим запасы потребителей
    b=new float[M+3];//+3
 
    for(j=0;j<M;j++)
    {
        cout<<"Введите потребность "<<j+1<< " потребителя: ";
        cin>>b[j];
    }
        cout<<"\n";
float** C=new float*[N+3];
for (i=0;i<N+3; i++)
C[i]=new float[M+3];//+3
 
    // Вводим массив стоимости.
    
         for(i=0;i<N;i++)
         
          for(j=0;j<M;j++)
          {
              cout<<"Введите стоимость перевозки от "<<i+1<<" поставщика к "<<j+1<<"  потребителю:  ";
              cin>>C[i][j];
          }
 //Двумерный массив для Доставки:
        X=new float*[N+1+2];//выделяем память под массив адресов начала строк
        for(int i=0;i<N+1+2;i++)
           X[i]=new float[M+1+2];//выделяем память для каждой строки
       /*
        В последней строке(столбце) массива Х будем записывать
        сумму заполненных клеток в соответствующем столбце(строке)
       */
        for(int i=0;i<N+1;i++)
          for(int j=0;j<M+1;j++)
            {
               X[i][j]=-1;//вначале все клетки не заполнены
               if(i==N)X[i][j]=0;//сумма заполненных клеток в j-м столбце
               if(j==M)X[i][j]=0;//сумма заполненных клеток в i-й строке
            }
 
//  zapolnenie();
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[i][M-1]=0;//стоимость перевозки фиктивному потребителю равна нулю
             b[M+1]=Sa-Sb;//спрос фиктивного потребителя
           }
        else
         {
           cout<<"Преобразуем задачу в закрытую путём добавления фиктивного поставщика ";
             N++; 
           
             for(int j=0;j<M;j++)
                   C[N-1][j]=0;//стоимость перевозки от фиктивного поставщика равна нулю
                   a[N+1]=Sb-Sa;//запас фиктивного поставщика
          }
       }
        cout<<endl;
         for(i=0;i<N;i++){
          for(j=0;j<M;j++)
          {
              cout<<C[i][j]<<" ";
          }
          cout<<endl;
         }
//-----------------Метод минимального элемента:
        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");
}
Добавлено через 7 минут
Насколько я понимаю, проблема с массивом X и я видимо снова накосячил с индексацией.
 
Текущее время: 14:00. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru