Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
 
victory19933
2 / 2 / 1
Регистрация: 24.04.2011
Сообщений: 70
#1

Большое потребление памяти приложением - C++

21.05.2015, 13:40. Просмотров 609. Ответов 22
Метки нет (Все метки)

Здравствуйте! Как всегда нужна ваша помощь...
Почему происходит ошибка компиляции при увеличении числа N в строке "#define N=170".

Вот при таком значении N программа еще работает.
N отвечает за максимальное количество неизвестных в системе.
Но в требовании задача должна работать примерно до N = 1500.

В чем ошибка? Может просто комп не тянет?
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
202
203
204
205
206
207
208
209
210
#include <iostream>
#include <vector>
#include <fstream>
#include <Cstring> 
#include <math.h>
#define N 170
using namespace std;
int n, k, m;
const double pi=3.1415926536;
double eps = 0.00001;
vector <int> st(10000);
 
ifstream in;  // Ïîòîê in áóäåì èñïîëüçîâГ*ГІГј äëÿ Г·ГІГҐГ*ГЁГї
ofstream out; // Ïîòîê out áóäåì èñïîëüçîâГ*ГІГј äëÿ Г§Г*ГЇГЁГ±ГЁ
 
int a[100000][1500];
double b[10000][1500];
 
void glavelem( int k, double mas[][N+1], int n, int otv[] );
int j=0;
int gen(int pos)
{ 
    if (pos == 0) 
    {
        for (int i = k-1; i >= 0; i--)
            {
                 printf("%d ", st[i]);
                
                a[j][k-i-1] = st[i];
               
                out<<"a["<<j<<"]["<<k-i-1<<"]="<<st[i]<<" "; //-pravilnaya str
             }
             j++;
             printf("\n");
             out<<"\n";
        return 1;
    }
    
    int ans = 0;
    for (int i = 0; i < n; i++) 
    {
        st[pos-1] = i;
       
        ans += gen(pos-1);
       
    }
    return ans;
}
 
int main()
{           
     in.open("in.txt");
    out.open("out.txt");
    cout<<"Vvedite p, N, M posledovatelno cherez probel:"<<endl;
    cin>>n>>k>>m;            //k=N - drobnye koeff,  n=p - prostye chisla, m - celaya chast
    float nk1 = pow(n,k);
    
    int nk = nk1;
    
    printf("%d ",nk);
    printf("\n");
     for (int i1=0; i1<100000; i1++)
         for (int j1=0; j1<1500; j1++)
         a[i1][j1]=0;
         
    printf("Total: %d ", gen(k));
    printf("\n");
 
double sum[200000];
int i,j,w,k1;
double mas[N][N+1];
double mas1[N][N+1];
 for (int i1=0; i1<200000; i1++)
     sum[i1]=0;
 
 for (int i1=1; i1<nk; i1++)
{    for (int j1=0; j1<k; j1++) 
        { 
        sum[i1]+=a[i1][j1]/pow(2,j1+1);
//        sum[i1+nk-1]-=a[i1][j1]/pow(2,j1+1);
        }
    out<<"sum["<<i1<<"]="<<sum[i1];
    out<<"\n";
//    out<<"sum["<<i1+nk-1<<"]="<<sum[i1+nk-1];
//    out<<"\n";
}
       for (i=0; i<(nk*2-2)/2; i++)
          {
                 for (j=0; j<pow(n,k+m); j++)
                   {   
                       b[i][j] = cos(2*pi*sum[i+1]*j/nk);
                       b[i+(nk*2-2)/2][j] = sin(2*pi*sum[i+1]*j/nk);
                   }
           }
       for (i=0; i<(nk*2-2); i++)
           {   
               for (j=0; j<pow(n,k+m); j++)
                     out<<b[i][j]<<" ";
               out<<endl;
           }
////////////////////////////////////////////////////////////////////////////////
 
for (j=nk*2-2;j<=pow(n,k+m)-1;j++)
{   
     for (i=0;i<nk*2-2;i++)
         mas[i][nk*2-2]=b[i][j];
     for (i=0; i<nk*2-2; i++)
     for (w=0; w<nk*2-2; w++)
         mas[i][w]=b[i][w];
         
         for (i=0; i<nk*2-2; i++)
         for (w=0; w<nk*2-1; w++)
             if (fabs(mas[i][w])<eps) mas[i][w]=0;       // zamena na 0
             
         //vivod matricy: kotoruyu nado reshat
       out<<"\n";
       out<<"j="<<j<<endl;  
      for (i=0; i<nk*2-2; i++)
      {   
          for (w=0; w<nk*2-1; w++)
              out<<mas[i][w]<<" ";        
          out<<endl;
      }  
       
// METOD GAUSSA:         
  double x[N]; //---------ÊîðГ*ГЁ ñèñòåìû
  int otv[N]; //-------ГЋГІГўГҐГ·Г*ГҐГІ Г§Г* ïîðÿäîê êîðГ*ГҐГ©
 
   //----------Г‘Г*Г*Г·Г*Г«Г* ГўГ±ГҐ êîðГ*ГЁ ГЇГ® ïîðÿäêó
  for (i = 0; i < nk*2-2; i++)
    otv[i] = i;
  //--------------Ïðÿìîé õîä ìåòîäГ* ГѓГ*ГіГ±Г±Г*
  for (k1 = 0; k1 < nk*2-2; k1++)
  {
      glavelem(k1, mas, nk*2-2, otv); //------ÓñòГ*Г*îâêГ* ГЈГ«Г*ГўГ*îãî ýëåìåГ*ГІГ*
    
      for (w = nk*2-2; w >= k1; w--)
           mas[k1][w] /= mas[k1][k1];
      for ( i = k1 + 1; i < nk*2-2; i++ )
      for ( w = nk*2-2; w >= k1; w-- )
        {
            mas[i][w] -= mas[k1][w] * mas[i][k1];
        }
  }
  //ГЋГЎГ°Г*ГІГ*ûé õîä
  for ( i = 0; i < nk*2-2; i++ )
    x[i] = mas[i][nk*2-2];
    
  for ( i = nk*2-2 - 2; i >= 0; i-- )
    for ( w = i + 1; w < nk*2-2; w++ )
      x[i] -= x[w] * mas[i][w];
      
  //-----Âûâîä ðåçóëüòГ*ГІГ*
  for ( i = 0; i <nk*2-2; i++ )
    for ( w = 0; w < nk*2-2; w++ )
      if ( i == otv[w] )
      { //----ГђГ*Г±Г±ГІГ*âëÿåì êîðГ*ГЁ ïîïîðÿäêó
        out<<"x["<<i<<"] = "<<x[w]<<endl;
      }     
  for (int r = nk*2-2; r <= pow(n,k+m)-1; r++)
      {
          x[r]=0;
          x[j]=1;
          out<<"x["<<r<<"] = "<<x[r]<<endl;
      }              
}
     in.close();
     out.close();
     
    system("PAUSE");
    return 0;
}
//----------------------------------------------
//ГЋГЇГЁГ±Г*Г*ГЁГҐ ГґГіГ*óöèè
//----------------------------------------------
void glavelem(int k2, double mas[][N+1], int n2, int otv[] )
{   // in.open("in.txt");
    // out.open("out.txt");
  int i2, j2, i_max = k2, j_max = k2;
  double temp;
  //Èùåì Г¬Г*ГЄГ±ГЁГ¬Г*ëüГ*ûé ГЇГ® ìîäóëþ ýëåìåГ*ГІ Гў ñòîëáöå
j2=k2;
  for ( i2 = j2; i2 < n2; i2++ )    
      if ( fabs( mas[i_max] [j_max] ) < fabs( mas[i2] [j2] ) )
          {
            i_max = i2;
            j_max = j2;
          }
    
  //ÏåðåñòГ*âëÿåì ñòðîêè
  for ( j2 = k2; j2 < n2 + 1; j2++ )
  {
    temp = mas[k2][j2];
    mas[k2][j2] = mas[i_max][j2];
    mas[i_max][j2] = temp;
  }
 
//  ГЏГҐГ°ГҐГ±ГІГ*âëÿåì ñòîëáöû
  for ( i2 = 0; i2 < n2; i2++ )
 {
    temp = mas[i2] [k2];
    mas[i2] [k2] = mas[i2] [j_max];
    mas[i2] [j_max] = temp;
 }
 
   //  Г“÷èòûâГ*ГҐГ¬ èçìåГ*ГҐГ*ГЁГҐ ïîðÿäêГ* êîðГ*ГҐГ©
  i2 = otv[k2];
  otv[k2] = otv[j_max];
  otv[j_max] = i2;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.05.2015, 13:40
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Большое потребление памяти приложением (C++):

Среднее месячное потребление для каждой из машин
Нужно написать программу для автопарка из 4 машин(1 легковая, 2 микроавтобуса и...

Работа с консольным приложением
Пожалуйста, подскажите кто может. Программа сделана для консольного...

Не является приложением WIN32
Написал игру Pac Man(Win 32). Подскажите пожалуйста что можно сделать чтобы не...

Большое число
Добрый день. Есть проблема #include&lt;iostream&gt; using namespace std; int...

Нотация O большое
Здорова! Есть задачка: &quot;Изучите О() нотацию. Приведите реалистичный пример, в...

Выделить в памяти 1024 ячейки по 8 байт и вывести их адреса(МИНИ менеджер памяти))
Вот тут появилась такая интересная задача: требуется сделать программу которая...

22
Kapex
15 / 15 / 4
Регистрация: 11.11.2014
Сообщений: 122
22.05.2015, 08:35 #21
Хулиган, вообще хотелось бы думать, что я умнее компилятора
0
DrOffset
7518 / 4514 / 1097
Регистрация: 30.01.2014
Сообщений: 7,362
22.05.2015, 12:51 #22
Цитата Сообщение от Kapex Посмотреть сообщение
вообще хотелось бы думать, что я умнее компилятора
http://www.cyberforum.ru/post6037257.html
1
Kuzia domovenok
2215 / 1984 / 447
Регистрация: 25.03.2012
Сообщений: 6,971
Записей в блоге: 1
22.05.2015, 13:02 #23
Зашёл в тему почитать, как кто-то оптимизирует своего убийцу ГТА-5, жрущего гигабайты оперативки...
А тут вот оно что, Михалыч! Какая-то очередная школоло-задачка про массивы!
Мне интересно, как это вообще писалось? Сначала накопипастили 200+ строк кода, не проверяя его работоспособность, а потом, когда пришло время запускать, оказалось, что даже первые строки не работают? Кто так пишет программы???
0
22.05.2015, 13:02
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.05.2015, 13:02
Привет! Вот еще темы с решениями:

Работа с другим консольным приложением
у меня есть консольное приложение, которое выводит информацию на экран мне...

Можно ли разместить переменную в нужную ячейку памяти и реально ли хранить данные, разбросанными по памяти?
Добрый день. Не могу найти информацию по двум вопросам : 1) могу ли я...

Резервирование памяти/освобождение памяти для трехмерного массива
Необходимо создать трехмерный массив (A), в котором элементы вдоль направления...

Большое простое число
Ребят, помогите ,пожалуйста, найти 64 битное простое число. И как можно узнать...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
23
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru