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

Почему при проверке заполнения массива выводятся неправильные значения? - C++

Восстановить пароль Регистрация
 
E-Katya
0 / 0 / 0
Регистрация: 27.02.2014
Сообщений: 3
27.02.2014, 14:10     Почему при проверке заполнения массива выводятся неправильные значения? #1
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
// ConsoleApplication15.cpp: определяет точку входа для консольного приложения.
//
 
#include "stdafx.h"
#include <iostream>
#include <iomanip>
#include "stdafx.h"
#include "stdio.h"
#include <conio.h>
 
/*выделяем память под массивы*/
int UR[3][2];
int mas_det[2][2], mas_det1[2][2], mas_det2[2][2], mas_det3[2][2];
/*выделяем память под глобальные переменные*/
float det, det1, det2, det3;
float x1, x2, x3;
float det_temp = 0;  //возвращаемая переменная
float z[5];         //вспомогательный массив
 
using namespace std;
float det_function(float array[2][2]);  //функция вычисления детерминанта
/*описание функции*/
float det_function(float array[2][2]){
    /*извлечение массива*/
    z[0] = (array[1][1]) * (array[2][2]) * (array[3][3]);
    z[1] = (array[1][2]) * (array[2][3]) * (array[3][1]);
    z[2] = (array[1][3]) * (array[2][1]) * (array[3][2]);
    z[3] = -((array[1][3]) * (array[2][3]) * (array[3][1]));
    z[4] = -((array[1][1]) * (array[2][3]) * (array[3][2]));
    z[5] = -((array[1][2]) * (array[2][1]) * (array[3][3]));
    /*нахождение определителя*/
 
    for (int det_count = 0; det_count <= 5; det_count++){
        det_temp += z[det_count];
    }
    return(det_temp);
}
 
 
 
int _tmain(int argc, _TCHAR* argv[])
{
    setlocale(LC_ALL, "Russian");   //русский язык в консоли
    /*ввод значений с клавиатуры*/
 
 
    for (int i = 0; i <= 2; i++)   //строки массива
    {
        std::cout << " уравнение № " << i + 1 << " \n"; //подсказка
 
        for (int j = 0; j <= 3; j++)   //столбцы массива
        {
            cout << "Введите коэф.  уравнения: ";  //выводим подсказку
            cin >> UR[i][j];                //запоминаем введенное значение
        }
    }
    /*проверка ввода*/
    cout << UR[0][0] << "*x1" << "+" << UR[0][1] << "*x2" << "+" << UR[0][2] << "*x3" << "=" << UR[0][3] << endl;
    cout << UR[1][0] << "*x1" << "+" << UR[1][1] << "*x2" << "+" << UR[1][2] << "*x3" << "=" << UR[1][3] << endl;
    cout << UR[2][0] << "*x1" << "+" << UR[2][1] << "*x2" << "+" << UR[2][2] << "*x3" << "=" << UR[2][3] << endl;
 
 
    
        cout << "\n\nPoluchennyj massiv\n";
 
        for (int i = 0; i < 3; i++)
        {
            for (int j = 0; j < 4; j++)
                cout << setw(4) << UR[i][j];
 
            cout << endl;
        }
    
 
 
    _gettch();
    return 0;
}
Почему при проверке заполнения массива выводятся неправильные значения?
Миниатюры
Почему при проверке заполнения массива выводятся неправильные значения?  
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.02.2014, 14:10     Почему при проверке заполнения массива выводятся неправильные значения?
Посмотрите здесь:

Функция заполнения массива и сравнения среднего значения элементов C++
C++ Почему при изменении размера окна не меняется цвет заполнения?
При выводе массива выводятся лишние непонятные символы C++
C++ Выбивает ошибку, в чём ошибка при проверке массива?
C++ Почему в setnamedisc нужно использовать char * для установки значения, а при возвращении значения тип метода должен быть char* ?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
SatanaXIII
Супер-модератор
Эксперт С++
 Аватар для SatanaXIII
5548 / 2562 / 233
Регистрация: 01.11.2011
Сообщений: 6,333
Завершенные тесты: 1
27.02.2014, 14:27     Почему при проверке заполнения массива выводятся неправильные значения? #2
Потому, что в программе ошибка.
ValeryS
Модератор
6376 / 4842 / 442
Регистрация: 14.02.2011
Сообщений: 16,045
27.02.2014, 14:32     Почему при проверке заполнения массива выводятся неправильные значения? #3
Цитата Сообщение от E-Katya Посмотреть сообщение
float det_function(float array[2][2]){
* * /*извлечение массива*/
* * z[0] = (array[1][1]) * (array[2][2]) * (array[3][3]);
* * z[1] = (array[1][2]) * (array[2][3]) * (array[3][1]);
* * z[2] = (array[1][3]) * (array[2][1]) * (array[3][2]);
* * z[3] = -((array[1][3]) * (array[2][3]) * (array[3][1]));
* * z[4] = -((array[1][1]) * (array[2][3]) * (array[3][2]));
* * z[5] = -((array[1][2]) * (array[2][1]) * (array[3][3]));
размер передаваемого массива 2х2
а тут обращение и к 3 элементу и к 4 как так?

Добавлено через 1 минуту
Цитата Сообщение от E-Katya Посмотреть сообщение
z[5] =
да и это выход за пределы
всего в массиве 5 элементов а записываем в шестой
E-Katya
0 / 0 / 0
Регистрация: 27.02.2014
Сообщений: 3
27.02.2014, 15:00  [ТС]     Почему при проверке заполнения массива выводятся неправильные значения? #4
Поправила код, все равно какая-то ерунда. Почему, когда я записываю в массив UR значения с клавиатуры, при проверочном выводе выводятся совершенно другие числа???
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
// ConsoleApplication15.cpp: определяет точку входа для консольного приложения.
//
 
#include "stdafx.h"
#include <iostream>
#include <iomanip>
#include "stdafx.h"
#include "stdio.h"
#include <conio.h>
 
/*выделяем память под массивы*/
float UR[3][2];
float mas_det[2][2], mas_det1[2][2], mas_det2[2][2], mas_det3[2][2];
/*выделяем память под глобальные переменные*/
float det, det1, det2, det3;
float x1, x2, x3;
float det_temp;  //возвращаемая переменная
float z[5];         //вспомогательный массив
 
using namespace std;
float det_function(float array[2][2]);  //функция вычисления детерминанта
 
 
 
 
int _tmain(int argc, _TCHAR* argv[])
{
    setlocale(LC_ALL, "Russian");   //русский язык в консоли
    /*ввод значений с клавиатуры*/
 
 
    for (int i = 0; i <= 2; i++)   //строки массива
    {
        std::cout << " уравнение № " << i + 1 << " \n"; //подсказка
 
        for (int j = 0; j <= 3; j++)   //столбцы массива
        {
            cout << "Введите коэф.  уравнения: ";  //выводим подсказку
            cin >> UR[i][j];                //запоминаем введенное значение
        }
    }
    /*проверка ввода*/
    cout << UR[0][0] << "*x1" << "+" << UR[0][1] << "*x2" << "+" << UR[0][2] << "*x3" << "=" << UR[0][3] << endl;
    cout << UR[1][0] << "*x1" << "+" << UR[1][1] << "*x2" << "+" << UR[1][2] << "*x3" << "=" << UR[1][3] << endl;
    cout << UR[2][0] << "*x1" << "+" << UR[2][1] << "*x2" << "+" << UR[2][2] << "*x3" << "=" << UR[2][3] << endl;
 
    /*подготовка массивов для детерминанта*/
 
    for (int is = 0; is <= 2; is++){
        for (int js = 0; js <= 2; js++){
            mas_det[is][js] = UR[is][js];
            }
    }
 
    for (int is = 0; is <= 2; is++){
        for (int js = 0; js <= 2; js++){
            mas_det1[is][js] = UR[is][js];
        }
    }
    for (int is = 0; is <= 2; is++){
        for (int js = 0; js <= 2; js++){
            mas_det2[is][js] = UR[is][js];
        }
    }
 
    for (int is = 0; is <= 2; is++){
        for (int js = 0; js <= 2; js++){
            mas_det3[is][js] = UR[is][js];
        }
    }
    
    /*применяем Сарруса для заданных массивов*/
    mas_det1[0][0] = UR[3][0];
    mas_det1[0][1] = UR[3][1];
    mas_det1[0][2] = UR[3][2];
 
    mas_det2[1][0] = UR[3][0];
    mas_det2[1][1] = UR[3][1];
    mas_det2[1][2] = UR[3][2];
 
    mas_det3[2][0] = UR[3][0];
    mas_det3[2][1] = UR[3][1];
    mas_det3[2][2] = UR[3][2];
 
    /*проверка на нуль и ветвление*/
    det = det_function(mas_det);
    det1 = det_function(mas_det1);
    det2 = det_function(mas_det2);
    det3 = det_function(mas_det3);
 
    cout << "det=" << det << endl;
    cout << "det1=" << det1 << endl;
    cout << "det2=" << det2 << endl;
    cout << "det3=" << det3 << endl;
 
 
    /*расчет корней*/
    x1 = det1 / det;
    x2 = det2 / det;
    x3 = det3 / det;
 
    /*ввывод результатов*/
    cout << "x1=" << x1 << endl;
    cout << "x2=" << x2 << endl;
    cout << "x3=" << x3 << endl;
 
 
    for (int is = 0; is <= 2; is++){
        for (int js = 0; js <= 2; js++){
            cout<<mas_det[is][js];
        }
        cout << endl;
    }
    cout << endl;
 
 
 
    for (int is = 0; is <= 2; is++){
        for (int js = 0; js <= 2; js++){
            cout << mas_det1[is][js];
        }
        cout << endl;
    }
    cout << endl;
 
    _gettch();
    return 0;
}
 
/*описание функции*/
float det_function(float array[2][2]){
    /*извлечение массива*/
    z[0] = (array[0][0]) * (array[1][1]) * (array[2][2]);
    z[1] = (array[0][1]) * (array[1][2]) * (array[2][0]);
    z[2] = (array[0][2]) * (array[1][0]) * (array[2][1]);
    z[3] = -((array[0][2]) * (array[1][2]) * (array[2][0]));
    z[4] = -((array[0][0]) * (array[1][2]) * (array[2][1]));
    z[5] = -((array[0][1]) * (array[1][0]) * (array[2][2]));
    /*нахождение определителя*/
 
    for (int det_count = 0; det_count <= 5; det_count++){
        det_temp += z[det_count];
    }
    return(det_temp);
}
Миниатюры
Почему при проверке заполнения массива выводятся неправильные значения?  
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
27.02.2014, 23:01     Почему при проверке заполнения массива выводятся неправильные значения? #5
C++
1
2
3
4
5
6
7
8
9
10
for (int i = 0; i <= 2; i++)   //строки массива
    {
        std::cout << " уравнение № " << i + 1 << " \n"; //подсказка
 
        for (int j = 0; j <= 3; j++)   //столбцы массива
        {
            cout << "Введите коэф.  уравнения: ";  //выводим подсказку
            cin >> UR[i][j];                //запоминаем введенное значение
        }
    }
Как это совмещается с этим?
C++
1
float UR[3][2];
Три строки, два столбца. У вас, в for(), наоборот. И в условиях for()(в этом куске и дальше в коде) нужно просто <, а не <=, иначе выход за границу массива.
Yandex
Объявления
27.02.2014, 23:01     Почему при проверке заполнения массива выводятся неправильные значения?
Ответ Создать тему
Опции темы

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