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

Объявление массива внутри цикла - C++

Восстановить пароль Регистрация
 
ostapovilya
0 / 0 / 0
Регистрация: 15.02.2012
Сообщений: 58
10.05.2014, 15:24     Объявление массива внутри цикла #1
Доброго всем денечка, так сказать с прошедшим Днем Победы
Пишу на Visual studio 2010 C++. Есть набросок кода. У меня вопрос: можно ли вот так в наглую внутри цикла переопределить массив?(Закаментил). Еще никак не пойму почему в 39,40 и 89,90 строках подчеркивает красным вторую квадратную скобку, ругаясь на неконстантное значение
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
#include <conio.h>
#include <math.h>
#include <stdio.h>
#include <stdlib.h>
// #pragma warning(disable : 4996)
void main()
{
    int i,k,j,a,sizex,size2x,size2y,sizey;
    double x,y,A,B,C,F,Hx,Hy,Ht,t,e,tend;
    double* alpha;
    double* alpha2;
    double* beta;
    double* beta2;
    double** U;
    double** U2;
    printf( "stop point tend:");
    scanf("%lf", &tend);
    printf( "Accurance:");
    scanf("%lf", &e);
    t=0;
    Hx=0.1;//Начальные точности
    Hy=0.1;
    Ht=0.1;
    sizex=2/Hx;//Начальные размеры матриц
    size2x=4/Hx;
    sizey=3/Hy;
    size2y=6/Hy;
    while(t<tend)
    {
        if (i%2==0)
        {
            A=1/(Hx*Hx);
            B=-2/(Hx*Hx)-2/Ht;
            C=1/(Hx*Hx);
            alpha=new double[sizex];
            beta=new double[sizex];
            alpha2=new double[size2x];
            beta2=new double[size2x];
            U=new double[sizex][sizey];
            U2=new double[size2x][size2y];
        while (y<3)
            {
                x=0;
                for(k=0;k<2/Hx;k++)
                {
                    alpha[0]=0;
                    beta[0]=0;
                    alpha[k+1]=B/(C-alpha[k]*A);
                    beta[k+1]=A*beta[k]+F(k)/(C-alpha[k]);//F(k)-функция, пока ее в коде нет
                }
                for(k=1;k<2/Hx;k++)
                {
                    U[sizex][j]=2*t;
                    U[sizex-k][j]=alpha[sizex-k+1]*U[sizex-k+1][j]+beta[sizex-k+1];
                }
                x=0;
                for(k=0;k<4/Hx;k++)
                {
                    alpha2[0]=0;
                    beta2[0]=0;
                    alpha2[k+1]=B/(C-alpha[k]*A);
                    beta2[k+1]=A*beta[k]+F(k)/(C-alpha[k]);
                }
                for(k=1;k<4/Hx;k++)
                {
                    U2[sizex][j]=2*t;
                    U2[sizex-k][j]=alpha[sizex-k+1]*U[sizex-k+1][j]+beta[sizex-k+1];
                }
                a=0;
                for(k=0;k<2/Hx;k++)
                {
                    if(U[k][j]-U2[2*k][j]>e)
                    {
                        a=1;
                    }
                }
                if(a==1)
                {
                    Hx=Hx/2;
                    A=1/(Hx*Hx);
                    B=-2/(Hx*Hx)-2/Ht;
                    C=1/(Hx*Hx);
                    /*sizex=2/Hx;
                    size2x=4/Hx;
                    alpha=new double[sizex];
                    beta=new double[sizex];
                    alpha2=new double[size2x];
                    beta2=new double[size2x];
                    U=new double[sizex][sizey];
                    U2=new double[size2x][size2y]*/;
                }
                else
                {
                    y=y+Hy;
                    j++;
                }
            }
        }

Не по теме:


Попалась довольно замороченная задачка по численным методам. Дано уравнение теплопроводности на трехмерном пространстве (х,у,t) с граничным условием Дирихле. Задачу надо численно решить методом переменных направлений. Суть метода: Пространство сначала разбивается на слои с шагом Ht. Далее каждый слой разбивается сеткой с шагами Hx и Hy по х и у соответственно. Для начала осуществляется прямая прогонка по положительному направлению х и ищутся специальные коэффициенты. Далее в обратном направлении по рекуррентными формулам находится значение функции на строке слоя. Причем для нечетных слоев прогонка ведется по х(строкам), а для нечетных по y(столбцам).
Собственно закавыка номер раз в том, что при расчете текущего слоя нужно обращаться к предыдущему слою, поэтому решение приходится записывать в двумерный массив.
Закавыка номер два в том, что чтобы быть уверенным в точности метода, слой нужно считать в начале с обычными шагами Нх и Ну, а потом с половинными Нх/2 и Ну/2. Причем если разница этих значений велика, то шаг необходимо ополовинить, следовательно изменится размер матрицы в большую сторону
Это так сказать преамбула, которая может быть прояснит проблему


P.S. Тут много че можно вынести в функции, просто торопился, есть ошибки. Есть непарные скобки, скопипастил только половину кода
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.05.2014, 15:24     Объявление массива внутри цикла
Посмотрите здесь:

Цикл внутри цикла C++
Не увеличивается значение внутри цикла C++
C++ Объявление объекта внутри функции
C++ Объявление переменных внутри блока switch
Ругань на объявление массива внутри класса C++
C++ определение переменной внутри цикла
Таймер ожидания внутри цикла C++
Объявление переменной внутри цикла while C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ответ Создать тему
Опции темы

Текущее время: 23:25. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru