Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Ошибка в динамическом массиве https://www.cyberforum.ru/ cpp-beginners/ thread1961141.html
Проблема при добавлении сотрудника. Первый сотрудник добавляется просто прекрасно, а вот при записи второго сотрудника выдает ошибку и выбрасывает из программы. У кого есть время посмотрите...
Удалить последний элемент очереди C++
Нужно удалить последний элемент очереди. struct node { node *next; int info; }; void deleteLastElement(node*&el, node*begin, node*&end) { while (begin != NULL) { begin = begin->next;...
C++ Алгоритм Шеннона-Фано Помогите, реализовать Алгоритм Шеннона-Фано на С ++, так чтобы мы вводили сроку из символов, а на выходе получали закодированную сроку из нулей и единиц. И как можно рассчитать энтропию и... https://www.cyberforum.ru/ cpp-beginners/ thread1961128.html C++ Рассчитать энтропию и избыточность для введенной строки (Matlab -> C++) Помогите, нужно рассчитать энтропию и избыточность для введенной сроки, вот код написан на MATLAB, можно перевести его на С ++? Заранее спасибо! Очень нужно .. S = input('Введите строку', 'S'); S... https://www.cyberforum.ru/ cpp-beginners/ thread1961124.html
C++ Циклы
C++ Задача 1. Разбить введенное число на отдельные цифры и вывести в прямом и обратном порядке. Задача 2. Дано натуральное число n. Подсчитать количество цифр k в числе, где k – номер варианта. ...
C++ Что можно узнать о программисте по программе? https://www.cyberforum.ru/ cpp-beginners/ thread1961117.html
День всем добрый! Недавно я залил свою прогу на сайт Virustotal. Теперь я в лёгком недоумении. В описании программы кроме использованных функций и библиотек я нашёл... ПУТЬ К ПРОГРАММЕ НА МОЁМ...
C++ Как отобразить Китайские иероглифы в Dev-C++ ? Всем привет,в програме написанной на DEV-C++ нужно отобразить китайские иероглифы, при каждом запуске програмы вместо иероглифов появляются различные символы(%?:*\./итд). Говорят что при изменении... https://www.cyberforum.ru/ cpp-beginners/ thread1961110.html Подключение файлов main.cpp some.cpp some.h DEV-C++ C++
Всем привет, программа разделенна на три файла poly.cpp main.cpp poly.h Кто мог бы объяснить как происходит подключение этих файлов, и как её запустить? Среда: DEV-C++(5.11v)Спасибо за внимание!
C++ Подскажите что это за сортировка и правильно ли она записана? #include <iostream> #include <iomanip> #include <ctime> #include <windows.h> using namespace std; void main() { setlocale(LC_ALL, "rus"); https://www.cyberforum.ru/ cpp-beginners/ thread1961102.html C++ Подсчитать среднее арифметическое элементов массива Задание:Дан одномерный массив вещественных чисел А. Создать новый массив В, занеся в каждый элемент среднее арифметическое всех предыдущих элементов массива А (в первый элемент заносится значение... https://www.cyberforum.ru/ cpp-beginners/ thread1961096.html
Удаление последнего элемента очереди C++
Привет, нужна функция, которая удаляет последний элемент очереди
C++ Работа с файлами. Запись и удаление файла https://www.cyberforum.ru/ cpp-beginners/ thread1961067.html
Эта функция помечает на удаление, удаляет, снимает пометку на удаление и переименовывает часть строки. Работает с файлами output и temp Дело в том, что ничего в temp.txt не пишется. Когда удаляется...
0 / 0 / 0
Регистрация: 31.03.2017
Сообщений: 8
0

Инициализация глобальной переменной - C++ - Ответ 10334538

15.04.2017, 19:12. Показов 987. Ответов 2
Метки (Все метки)

Здравствуйте, мне необходимо в программе по решению СНАУ добавить возможность задавать коэфициенты при неизвестных вводом через консоль.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <iostream>
#include <vector>
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
using namespace std;
vector<vector<double>> J(3, vector<double>(3, 0)); // матрица Якоби
vector<double> Z(3), Fk(3), Zk(3); // под вектора   
vector<vector<double>> T; // обратная матрица
double k = 0, dt = 0.000001, e = 0.00001;
// Ввод функций
double f1(double x, double y, double z) {
   return  x + x*x - 2*y*z - 0.1;
}
 
double f2(double x, double y, double z) {
   return  y - y*y + 3*x*z + 0.2;
}
 
double f3(double x, double y, double z) {
   return  z + z*z + 2*x*y - 0.3;
}
............
Как добавить возможность задавать коэффициенты перед неизвестными вводом с консоли? ( не вводя их каждый раз в функцию,как показал ниже )
Кликните здесь для просмотра всего текста

C++
1
2
3
4
5
6
double f1(double x, double y, double z) {
int M;
cout << "введите M";
cin >> M;
   return  x + x*x - M*y*z - M;
}

Если задать изначально глобальную переменную int m=2, то все работает
Кликните здесь для просмотра всего текста

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
.........
using namespace std;
int M=2;
vector<vector<double>> J(3, vector<double>(3, 0)); // матрица Якоби
vector<double> Z(3), Fk(3), Zk(3); // под вектора   
vector<vector<double>> T; // обратная матрица
double k = 0, dt = 0.000001, e = 0.00001;
 
double f1(double x, double y, double z) {
   return  x + x*x - M*y*z - M;
}
 
double f2(double x, double y, double z) {
   return  y - y*y + M*x*z + M;
}
 
double f3(double x, double y, double z) {
   return  z + z*z + M*x*y - M;
}
............

вводом с консоли никак не получается. Пробовал
Кликните здесь для просмотра всего текста

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
............................
using namespace std;
int M;
void znach()
{
cout << "введите M";
cin >> M;
}
 
vector<vector<double>> J(3, vector<double>(3, 0)); // матрица Якоби
vector<double> Z(3), Fk(3), Zk(3); // под вектора   
vector<vector<double>> T; // обратная матрица
double k = 0, dt = 0.000001, e = 0.00001;
 
double f1(double x, double y, double z) {
   return  x + x*x - M*y*z - M;
}
 
double f2(double x, double y, double z) {
   return  y - y*y + M*x*z + M;
}
 
double f3(double x, double y, double z) {
   return  z + z*z + M*x*y - M;
}
............

но в данном случае программа работала некорректно.

Добавлено через 50 минут
На всякий случай выложил полный начальный код
Кликните здесь для просмотра всего текста

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
#include <iostream>
#include <vector>
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
 
 
using namespace std;
 
 
#define N 3 // 
 
 
vector<vector<double>> J(N, vector<double>(N, 0)); // матрица Якоби
vector<double> Z(N), Fk(N), Zk(N); // под вектора   
vector<vector<double>> T; // обратная матрица
double k = 0, dt = 0.000001, e = 0.00001;
 
//===========Функции=====================
double f1(double x, double y, double z) {
   return  x + x*x - 2*y*z - 0.1;
}
 
double f2(double x, double y, double z) {
   return  y - y*y + 3*x*z + 0.2;
}
 
double f3(double x, double y, double z) {
   return  z + z*z + 2*x*y - 0.3;
}
 
//===========Производные=================
typedef double(*pointer)(double, double, double);
double dtx(pointer f, double x, double y, double z, double dt) {
    return (f(x + dt, y, z) - f(x,y,z)) / dt;
}
 
double dty(pointer f, double x, double y, double z, double dt) {
    return (f(x, y + dt, z) - f(x,y,z)) / dt;
}
 
double dtz(pointer f, double x, double y, double z, double dt) {
    return (f(x, y, z + dt) - f(x,y,z)) / dt;
}
 
// найти обратную матрицу
vector <vector<double>> inverse(vector<vector<double>> J) {
    int n = J.size();
    vector <vector<double>> T(n, vector<double> (n, 0));  
    for (int i = 0; i < n; i++){
        T[i][i] = 1.0;
    }  
    for (int i = 0; i < n; i++){
        int row = i;
        double mx = J[i][i];
        for(int k = i + 1; k < n; k++){
            if (abs(J[k][i]) > mx){
                row = k;
                mx = abs(J[k][i]);
            }
        }
        if (row != i) {
            swap(J[row], J[i]);
            swap(T[row], T[i]);
        }
        for (int j = i+1; j < n; j++){
            double e = J[j][i]/J[i][i];
            for (int k = 0; k < n; k++){
                J[j][k] -= e*J[i][k];
                T[j][k] -= e*T[i][k];
            }
        }
    }
    for (int i = n - 1; i >= 0; i--) {
        for (int j = i - 1; j >= 0; j--){
            double e = J[j][i]/J[i][i];
            for (int k = 0; k < n; k++){
                J[j][k] -= e*J[i][k];
                T[j][k] -= e*T[i][k];
            }
        }
        for (int j = 0; j < n; j++) {
            T[i][j] /= J[i][i];
        }
    }
    return T;
}
 
// Вывод на печать
 
void Print(int k)
{
    
    if ( k == 1 )
    printf("\n|    k   |    Zk   |  F(Zk)  |   Zk+1  |    e<   |\n");        
    printf(  "|--------|---------|---------|---------|---------|\n");
        
    printf("| %4d   |", k);
    for (int i = 0; i < N; i++) {
            printf(" %-8.4f|", Z[i]);
            printf(" %-8.4f|", Fk[i]);
            printf(" %-8.4f|", Zk[i]);
            printf(" %-8.5f|", abs(Z[i]-Zk[i]));            
            if( i + 1 != N ) printf("\n|        |");
            else puts("");
    }
}
    
void main()
{
    // задать начальное приближение
    // X            Y            Z
    Zk[0] = -0.1; Zk[1] = 0.2; Zk[2] = -0.3;
    
    do
    {   
        // копируем текущее значение
        for (int i = 0; i < N; i++) Z[i] = Zk[i];
        
        // вычисляем ф-ции
        Fk[0] = f1(Z[0], Z[1], Z[2]); 
        Fk[1] = f2(Z[0], Z[1], Z[2]);
        Fk[2] = f3(Z[0], Z[1], Z[2]);
        
        // составить матрицу Якоби
        J[0][0] = dtx(&f1, Z[0], Z[1], Z[2], dt);
        J[0][1] = dty(&f1, Z[0], Z[1], Z[2], dt);
        J[0][2] = dtz(&f1, Z[0], Z[1], Z[2], dt);
                
        J[1][0] = dtx(&f2, Z[0], Z[1], Z[2], dt);
        J[1][1] = dty(&f2, Z[0], Z[1], Z[2], dt);
        J[1][2] = dtz(&f2, Z[0], Z[1], Z[2], dt);
 
        J[2][0] = dtx(&f3, Z[0], Z[1], Z[2], dt);
        J[2][1] = dty(&f3, Z[0], Z[1], Z[2], dt);
        J[2][2] = dtz(&f3, Z[0], Z[1], Z[2], dt);
                    
        // найти обратную матрицу от J
        T = inverse(J); 
    
        // умножаем матрицу T на вектор Fk   
        for (int i = 0; i < N; i++) {
            Zk[i] = 0;
            for (int j = 0; j < N; j++) {
                Zk[i] += T[i][j] * Fk[j];
            }
            Zk[i] = Z[i] - Zk[i]; // отнять от текущего значения
        }
        k++;
        Print( (int)k);
    }while ( abs(Z[0] - Zk[0]) > e );
    
    printf("\n Roots \n X : %.4f\n Y : %.4f\n Z : %.4f\n", Zk[0], Zk[1], Zk[2]);
 
 
    system("pause");
}


Вернуться к обсуждению:
Инициализация глобальной переменной C++
__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
15.04.2017, 19:12
Готовые ответы и решения:

Различие глобальной и глобальной статической переменной
у нас есть заголовочный файл со стражами, допустим global.h , его используют несколько других...

Избавиться от глобальной переменной
#include &lt;iostream&gt; // подключаем ввод/вывод #include &lt;cmath&gt; ...

Вывод глобальной переменной
Переменная f объявлена и инициализирована как глобальная переменная, но после этих циклов...

Можно ли обратиться к перекрытой глобальной переменной?
int x; void f(int x); int main() { f(2); return 0; }; void f(int x) { x=x; // здесь я...

2
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
15.04.2017, 19:12

Srand для обнуления глобальной переменной
Надо для переменной задать рандомное значение, чтобы каждый раз при запуске обнулял. #pragma once...

Как сделать матрицу глобальной переменной?
int main() {randomize(); int N,M; cout&lt;&lt;&quot;Vvedit rozmirnist matrici NxM:\n&quot;; cin&gt;&gt;N; cin&gt;&gt;M;...

Работа с глобальной переменной типа bool
ок, я создала глобальную переменную типа bool (да, лучше этого избегать и все такое, но сейчас так...

Увеличение значения переменной, обявленной в глобальной области
Начал изучать CUDA, т. к. надо пистаь курсач... И вот у меня появился вопрос. Допустим я выделил в...

Как изменить значение глобальной переменной в функции?
#include &lt;cstdlib&gt; #include &lt;stdlib.h&gt; #include &lt;iostream&gt; #include &lt;ctime&gt; #include &lt;math.h&gt; ...

Класс памяти по умолчанию для глобальной переменной
Здравствуйте! Прочитала такую вещь тут Вот что-то не укладывается мне в голове пункт 2 и...

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