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

не получается составить программу - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Создать титульный лист и построить график кубической параболы http://www.cyberforum.ru/cpp-beginners/thread223968.html
Создать титульный лист и построить график кубической параболы
C++ не пойму в чем дело всем привет! такая вот у меня проблема: две сортировки должны отсортировать массивы из 1000, 5000 и 10000 элементов и подсчитать время выполнения каждоу сортировки к каждому массиву. сортирует вроде нормально и с временем все кажется в порядке. ошибок программа не выдает, но перед тем как она запускается ваходит ошибка. может потому что я в функциях сортировок указал размерность массива 1000,... http://www.cyberforum.ru/cpp-beginners/thread223936.html
класс и методы C++
помогите с лабой пожалуйста! нужно что бы в Методе Insert можно было задавать и количество добавляемых элементов( одинаковых) было: Array aa(7); aa.SetElem(0,2.3); aa.SetElem(1,3.3); aa.SetElem(2,-3.4); aa.SetElem(3,5.4); aa.SetElem(4,8.3); aa.SetElem(6,4.5);
C++ Идущие подряд числа
Есть код, суть его в возведении числа в степень (ооочень большую степень - 3^3456), в результате тоже как бы число (массив), нужно выяснить, есть ли в этом массиве 2 (3, 4...) подряд идущие цифры (11, 22, например), если есть вывести кол-во таких "пар" :). Я в тупике вообще. #include <iostream> #include <deque> #include <algorithm> #include <functional> typedef std::deque<int> ...
C++ Сложение и умножение матриц http://www.cyberforum.ru/cpp-beginners/thread223920.html
Даны матрицы A,B,C порядка n. Найти матрицу D=(A+B)C
C++ Пожалуйста найдите ошибку На форуме нашел такую задачу: Гражданин 1 марта открыл счет в банке, вложив 1000 рублей. Через каждый месяц размер вклада увеличивается на 2 % от имеющейся суммы. Определить за какой месяц величина ежемесячного увеличения вклада превысит 30 рублей. Решил ее обобщить и сделать так чтобы можно было указать сумму вклада, процент и предел. Задача довольна простая, но я в этом деле новичок. У... подробнее

Показать сообщение отдельно
Минич
 Аватар для Минич
66 / 66 / 3
Регистрация: 26.11.2010
Сообщений: 123
05.01.2011, 12:52     не получается составить программу
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
/*
4,13x1-2,87x2-1,94x3+0,61x4= 0,32,
1,27x1+7,23x2-0,15x3+1,71x4=-4,16,
0,19x1+2,75x2+3,14x3-0,76x4= 2,33;
2,87x1+4,33x2-2,41x3-3,42x4= 2,79;
    Метод Гаусса — Жордана
1. Выбирают первый слева столбец матрицы, в котором есть хоть одно отличное от нуля значение.
2. Если самое верхнее число в этом столбце есть ноль, то меняют всю первую строку матрицы с другой строкой матрицы, где в этой колонке нет нуля.
3. Все элементы первой строки делят на верхний элемент выбранного столбца.
4. Из оставшихся строк вычитают первую строку, умноженную на первый элемент соответствующей строки, с целью получить первым элементом каждой строки (кроме первой) ноль.
5. Далее проводят такую же процедуру с матрицей, получающейся из исходной матрицы после вычёркивания первой строки и первого столбца.
6. После повторения этой процедуры n-1 раз получают верхнюю треугольную матрицу
7. Вычитаем из предпоследней строки последнюю строку, умноженную на соответствующий коэффициент, с тем, чтобы в предпоследней строке осталась только 1 на главной диагонали.
8. Повторяют предыдущий шаг для последующих строк. В итоге получают единичную матрицу и решение на месте свободного вектора (с ним необходимо проводить все те же преобразования).
9. Чтобы получить обратную матрицу, нужно применить все операции в том же порядке к единичной матрице.
*/
 
#include <iostream>
#include <iomanip>
using namespace std;
 
const int n = 4;
double arr[n][n+1] = { {4.13, -2.87, -1.94,  0.61,  0.32},
                       {1.27,  7.23, -0.15,  1.71, -4.16},
                       {0.19,  2.75,  3.14, -0.76,  2.33},
                       {2.87,  4.33, -2.41, -3.42,  2.79} };
 
int firstLeftColumn(int);   // Выбор первого слева столбца матрицы
int firstTopRow(int);       // Выбор перовой сверху строки не содержащей 0
void swapLines(int, int);   // Обмен строк
void calcArr(int);          // вычисление
void inputArr();            // вывод массив в консоль
 
void main()
{
    setlocale(LC_ALL, "Russian");
    inputArr();
    
    // 5. Далее проводят такую же процедуру с матрицей, получающейся из исходной матрицы
    // после вычёркивания первой строки и первого столбца.
    // 6. После повторения этой процедуры n в€’ 1 раз получают верхнюю треугольную матрицу
    for (int i = 0; i < n; i++)
        calcArr(i); 
    
    // 7. Вычитаем из предпоследней строки последнюю строку, умноженную на соответствующий
    // коэффициент, с тем, чтобы в предпоследней строке осталась только 1 на главной диагонали.
    double temp;
    for (int k = n - 1; k > 0; k--) {
        for (int i = k - 1; i >= 0; i--) {  // цикл по предпоследним строкам
            temp = arr[i][k];
            for (int j = 0; j < n + 1; j++) // цикл по последним строкам
                arr[i][j] -= arr[k][j] * temp;
        }
    }
 
    // 8. Повторяют предыдущий шаг для последующих строк. В итоге получают единичную матрицу
    // и решение на месте свободного вектора (с ним необходимо проводить все те же преобразования).
 
    // 9. Чтобы получить обратную матрицу, нужно применить все операции в том же порядке    
    // к единичной матрице.
 
    inputArr();
    for (int i = 0; i < n; i++)
        cout << "x" << i + 1 << "=" << arr[i][n] << endl;
 
    system("pause");
}
 
int firstLeftColumn(int p)
{
    for (int j = p; j < n; j++)
        for (int i = p; i < n; i++)
            if(arr[i][j])
                return j;
}
 
int firstTopRow(int p, int column)
{
    for (int i = p + 1; i < n; i++)
        if(arr[i][column])
            return i;
}
 
void swapLines(int p, int line)
{
    double temp;
    for (int j = 0; j < n + 1; j++) {
            temp = arr[p][j];
            arr[p][j] = arr[line][j];
            arr[line][j] = temp;
        }
}
 
void calcArr(int p)
{   
    // 1. Выбрать первый слева столбец матрицы, в котором есть хоть одно отлично от нуля значение
    int numCol = firstLeftColumn(p);    // номер столбца
    
    // 2. Если самое верхнее число в этом столбце есть ноль, то меняют всю первую строку матрицы
    // с другой строкой матрицы, где в этой колонке нет нуля
    if (!arr[p][numCol])
        swapLines(p, firstTopRow(p, numCol));
 
    // 3. Все элементы первой строки делят на верхний элемент выбранного столбца
    double temp = arr[p][numCol];
    for (int j = 0; j < n + 1; j++)
        arr[p][j] /= temp;
    
    // 4. Из оставшихся строк вычитают первую строку, умноженную на первый элемент соответствующей
    // строки, с целью получить первым элементом каждой строки (кроме первой) ноль.
    for (int i = p + 1; i < n; i++) {
        temp = arr[i][p];
        for (int j = 0; j < n + 1; j++)
            arr[i][j] -= arr[p][j] * temp;
    }
}
 
void inputArr()
{
    cout << endl;
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < n + 1; j++) {
            if (j == n)
                cout << " |";
            cout << setw(6) << arr[i][j];
        }
        cout << endl;
    }
}
 
Текущее время: 07:42. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru