Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.82/11: Рейтинг темы: голосов - 11, средняя оценка - 4.82
14 / 14 / 1
Регистрация: 17.08.2015
Сообщений: 460

Почему не заполняется массив vector?

17.09.2015, 07:48. Показов 2554. Ответов 25
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте!

Не могу понять, почему не заполняется массив vector..
Он в классе объявлен типа public.

C++ (Qt)
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
#include <iostream>
#include <cmath>
#include <vector>
using namespace std;
 
class RunKutMer{
private:
    float a,y0,InEps,h;//x=a, f(x)=f(a)=y0, h - шаг
    float k1,k2,k3,k4,k5; //коэффициенты для рассчетов
    int i=0;
public:
vector <float> H; //создали массив для h
vector <float> Y; // создали массив значений для у
vector <float> X; // создали массив значений для x
 
vector <float> dY;
 
vector <float> Eps; //массив значений для точности эпсилон
 
 
    float f(float x, float y){
       return x*x+y*y-4;
      }
//нужно по-видимому запихивать получившиеся значения в массив
    //мы используем vector
 
    void EnterData(){
        cout<<"Enter a= ";cin>>a;
        X.push_back(a); //теперь в массиве X есть первый элемент
        cout<<"Enter the amount of function f(a)= ";cin>>y0;
        Y.push_back(y0);//теперь в массиве Y есть первый элемент
        cout<<"Enter Eps= ";cin>>InEps;//точность введенная пользователем, ОНА НЕ МЕНЯЕТСЯ
        //Eps.push_back(InEps);
        cout<<"Enter step h= ";cin>>h;
        H.push_back (h);  //записал в массив H первый элемент h
    }
    void OutPut(){
        cout<<"a= "<<a<<endl;
        cout<<"f(a)= "<<y0<<endl;
    }
    void Body(){
        i=0;
X[1]=2;X[2]=0;
    //   for(;;){//бесконечный цикл
//Почему не заполняется массивы X, Y, H и Eps???
           X[i+1]=X[i]+H[i];
 
           k1=(H[i]/3)*(f(X[i],Y[i]));
           k2=(H[i]/3)*(f(X[i]+H[i]/3,Y[i]+k1));
           //cout<<endl<<"k1= "<<k1<<endl<<"k2= "<<k2<<endl;
           k3=(H[i]/3)*(f(X[i]+H[i]/3,Y[i]+k1/2+k2/2));
           k4=(H[i]/3)*(f(X[i]+H[i]/2,Y[i]+(3.0/8)*k1+(9.0/8)*k3 ));
           k5=(H[i]/3)*(f(X[i]+H[i],Y[i]+(3.0/2)*k1-(9.0/2)*k3+6*k4 ));
 
           dY[i]=(1.0/2)*(k1+4*k4+k5);
           Y[i+1]=Y[i]+dY[i];
 
           i++;
           //сделали выше первую итерацию, теперь уточняем эпсилон и соответственно шаг h
           Eps[i]=(1.0/5)*(k1+4*k4-(9.0/2)*k3-(1.0/2)*k5);
 
           //условие проверки для эпсилон
           cout<<Eps[i];
      // }
    }
 
 
};
 
int main()
{
      RunKutMer W;
      W.EnterData();
      W.OutPut(); //так как переменные типа private, то обращаться к ним можно только через функции
      cout<<endl<<W.H[0]<<endl;cout<<W.X[0]<<endl;cout<<W.Y[0]<<endl;//проверил, что действительно занес все в vectora
      W.Body();
 
 
}
Может ли кто-то сказать, почему не заполняются массивы X, Y, H и Eps?

И как это исправить?

Добавлено через 25 минут
А всё понятно..

Дурак я, команды push_back( ) ведь нигде нету..

Добавлено через 22 минуты
А неет. Не в этом дело, вот подправил так:

C++ (Qt)
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
void Body(){
 
//X[1]=2;X[2]=0;
    //   for(;;){//бесконечный цикл
 
           X[i+1]=X[i]+H[i];
           X.push_back(X[i+1]);           // записали в массив Х
 
           k1=(H[i]/3)*(f(X[i],Y[i]));
           k2=(H[i]/3)*(f(X[i]+H[i]/3,Y[i]+k1));
 
           //cout<<endl<<"k1= "<<k1<<endl<<"k2= "<<k2<<endl;
 
           k3=(H[i]/3)*(f(X[i]+H[i]/3,Y[i]+k1/2+k2/2));
           k4=(H[i]/3)*(f(X[i]+H[i]/2,Y[i]+(3.0/8)*k1+(9.0/8)*k3 ));
           k5=(H[i]/3)*(f(X[i]+H[i],Y[i]+(3.0/2)*k1-(9.0/2)*k3+6*k4 ));
 
           dY[i]=(1.0/2)*(k1+4*k4+k5);
           dY.push_back(dY[i]);            // записали значение в массив dY
           Y[i+1]=Y[i]+dY[i];
                      Y.push_back(Y[i+1]); // записали значение в массив Y
 
           i++;
           //сделали выше первую итерацию, теперь уточняем эпсилон и соответственно шаг h
           Eps[i]=(1.0/5)*(k1+4*k4-(9.0/2)*k3-(1.0/2)*k5);
                      Eps.push_back(Eps[i]);
 
           //условие проверки для эпсилон
 
      // }
    }
И всё равно не работает... Почему?
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
17.09.2015, 07:48
Ответы с готовыми решениями:

Почему массив заполняется разными числами?
Не могу понять, почему этот массив заполняется разными числами, если всем элементам присваивается значение 1... const int N = 200; ...

В общем, не пойму почему криво заполняется массив
#include &quot;stdafx.h&quot; #include &quot;time.h&quot; #include &quot;stdlib.h&quot; int _tmain(int argc, _TCHAR* argv) { const int N = 10, MIN = -5,...

Нормально ли, что Vector так медленно заполняется ?
Здравствуйте, Подскажите пожалуйста, это нормально, что данный код выполняется 20 секунд!? :( int main() { ...

25
2444 / 1842 / 406
Регистрация: 15.12.2013
Сообщений: 8,243
17.09.2015, 10:13
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от Blitzor DDD Посмотреть сообщение
И сами увидите, что почему то не происходит запись в массивы
42 строка - вы забываете инициализировать.Локальная перекрывает глобальную,нет?
46 строка -допустим,что i=0,тогда вы пытаетесь записать в X[1] ячейку вектора,хотя у вас есть только X[0] - out_of_range.

Добавлено через 1 минуту
Цитата Сообщение от Blitzor DDD Посмотреть сообщение
я не знаю, сколько в нем будет элементов.
Почему вы не знаете сколько там будет элементов?
Судя по представленному коду - вполне себе знаете.
0
14 / 14 / 1
Регистрация: 17.08.2015
Сообщений: 460
17.09.2015, 10:18  [ТС]
Вот в десятой строчке происходит инициализация
Цитата Сообщение от Blitzor DDD Посмотреть сообщение
int i=0;
i=0, (так как в X[0] у меня уже есть), тогда я пытаюсь в след X[1] записать X[1]=X[0]+H[0]
а потом X.push_back(X[i+1]); и записать X[1] в vector X...

Нет, я не знаю, это всего лишь прототип кода. Это должен быть численный метод решения диффура, и сколько там итераций будет я не знаю, следовательно массив какой длины, тоже не знаю..

Тут непонятнО, потому что я условие выхода из бесконечного цикла пока не написал


P.S.

Эх, в Универ надо бежать, пожалуйста, как людей знающих, может быть даже коллег (кто-то заканчивал что-то физ-математическое ?)
прошу Вас объяснить мне причину возникновения проблемы...
0
2444 / 1842 / 406
Регистрация: 15.12.2013
Сообщений: 8,243
17.09.2015, 10:23
Цитата Сообщение от Blitzor DDD Посмотреть сообщение
прошу Вас объяснить мне причину возникновения проблемы...
Причину я объяснил выше.
P.S. Дам вам совет: переходите от простого к сложному. Не беритесь сразу за метод 5-го порядка с переменным шагом,начните с простого - первого или второго с постоянным. Процесс программирования не будет сильно отличатся, а отловить ошибки будет значительно проще.
0
156 / 143 / 62
Регистрация: 08.09.2014
Сообщений: 1,220
17.09.2015, 11:05
Лучший ответ Сообщение было отмечено Blitzor DDD как решение

Решение

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
void Body(){
int i=0; 
//X[1]=2;X[2]=0;
    //   for(;;){
 
           X.push_back(X[i]+H[i]);           
           k1=(H[i]/3)*(f(X[i],Y[i]));
           k2=(H[i]/3)*(f(X[i]+H[i]/3,Y[i]+k1));
 
           //cout<<endl<<"k1= "<<k1<<endl<<"k2= "<<k2<<endl;
 
           k3=(H[i]/3)*(f(X[i]+H[i]/3,Y[i]+k1/2+k2/2));
           k4=(H[i]/3)*(f(X[i]+H[i]/2,Y[i]+(3.0/8)*k1+(9.0/8)*k3 ));
           k5=(H[i]/3)*(f(X[i]+H[i],Y[i]+(3.0/2)*k1-(9.0/2)*k3+6*k4 ));
           dY.push_back((1/2)*((k1+4)*(k4+k5)));            
           Y.push_back(Y[i]+dY[i]); 
           i++;
          
           Eps.push_back((1.0/5)*(k1+4)*k4-(9.0/2)*(k3-(1.0/2)*k5));
      // }
    }
    };
int main()
{
      RunKutMer W;
      W.EnterData();
      W.OutPut(); 
      cout<<endl<<W.H[0]<<endl;cout<<W.X[0]<<endl;cout<<W.Y[0]<<endl;
 
      W.Body();
      for(int i = 0; i < W.X.size(); i++)
        cout << W.X[i] << ' ';
        Sleep(5000);
    return 0;
}
Все заполняется и все отлично работает,
Вот пожалуйста в векторе X 2 элемента 2 и 3, только не проси разбираться в коде
1 элемент вектора это твое значение а, а второй элемент X[0]+H[0], тоесть a+h, записало 2 элемента и вышло условие эпсилона надо рассматривать с циклом а не просто так, тогда будет и 10 и 100 элементов вектора, на данный момент код для меня лично запутан

Если писать X[1]=X[0]+H[0] будет ошибка, так как индекс не входит в интервал допустимых значений(функцию at() посмотри),ты же не написал что вектор имеет 100 или более элементов, а 1 элемента нет и не будет, поэтому надо явно указать что элемент вектора будет
X.push_back(X[i]+H[i]);

А при твоих записях оно пишет в пустоту, поэтому их и нет, почитай про вектора
1
14 / 14 / 1
Регистрация: 17.08.2015
Сообщений: 460
19.09.2015, 19:47  [ТС]
Цитата Сообщение от Игорь1986 Посмотреть сообщение
Sleep(5000);
А какой инклюдник для Sleep() ?
0
156 / 143 / 62
Регистрация: 08.09.2014
Сообщений: 1,220
19.09.2015, 22:53
Задержка экрана system("pause"); и так тоже можно но нужен тогда #include <cstdlib>
Для getchar(); нужен #include <conio.h>
cin.get(); тогда #include <iostream.h>
Sleep() #include <windows.h>
Вроде все варианты
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
19.09.2015, 22:53

Почему не заполняется массив MBI?
Подскажите, пожалуйста, почему не заполняется массив MBI? В чем ошибка? Private Declare Function OpenProcess Lib...

Почему не заполняется и не выводиться массив?
&lt;!DOCTYPE html&gt; &lt;html ng-app=&quot;FilterApp&quot;&gt; &lt;head&gt; &lt;meta charset=&quot;utf-8&quot; /&gt; &lt;title&gt;Filter function&lt;/title&gt; &lt;link...

Почему не заполняется данный массив?
Добрый день, почему массив не присваивает значения $i=1; $query1 = &quot;SELECT * FROM stavka where id_group='$_SESSION' order by...

Не понятно почему не заполняется МАССИВ Dictionary
Вот когда я делаю так: Dictionary&lt;string, int&gt; dic; dic = new Dictionary&lt;string, int&gt;() dic.add(&quot;123&quot;, 123); ...

Почему While не срабатывает второй раз и массив не заполняется?
Добрый вечер. Почему While не срабатывает второй раз и массив не заполняется? Но если закоментить первый While то второй начинает...


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

Или воспользуйтесь поиском по форуму:
26
Ответ Создать тему
Новые блоги и статьи
Процесс ориентированная диалектика (не новость - просто системное обновление, философия).
Hrethgir 20.06.2026
Однажды один участник в своём блоге, на этом форуме, сделал запись "О языках замолвите слово". Понимая, что язык - важная вещь, я решил хорошо подумать, прежде чем сказать, и сказал то, что вы видите. . .
Контроль уникальности строк в табличной части документа
Maks 18.06.2026
Алгоритм из решения ниже разработан на примере нетипового документа "ПланированиеСпецтехники" с табличной частью "НаличиеОборудования", разработанного в КА2. Задача: контроль уникальности строк в. . .
Клиент
Uhbif79 18.06.2026
Здесь простой клиент для работы с сервером.
Сервер
Uhbif79 18.06.2026
Выкладываю простейший сервер.
Дефенестрация
kumehtar 18.06.2026
Узнал интересное слово. Дефенестрация. Это когда ты выбрасываешь кого-либо или что-либо из окна. Возьму на вооружение)))
Дихотомия добра и зла
kumehtar 18.06.2026
Как Дзен-буддисты говорят о добре и зле: не нужно воевать против зла, нужно воевать против невежества. Тогда добро станет ествественным, и поэтому вечным. Но дело в том, что невежество всё время. . .
Своя Интернет-Компания
iceja 18.06.2026
Я программист с экономическим образованием, пишу свой проект, это SaaS для бизнесов. Мне нужен co-founder с высшим экономическим образованием, и/ или инвестор. Сейчас проект в интенсивной разработке,. . .
24 Мат модель здравосохранения: функциональные требования к строительству пищеблока
anaschu 18.06.2026
СРесурсами1: финансовый SD-контур, калькулятор функциональных требований пищеблока Сегодня разделили затраты в агенте Экономика по образцу модели НАСОСЫ, добавили расчёт ROI и построили первый. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru