Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.67/3: Рейтинг темы: голосов - 3, средняя оценка - 4.67
E-Katya
0 / 0 / 0
Регистрация: 27.02.2014
Сообщений: 3
#1

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

27.02.2014, 14:10. Просмотров 531. Ответов 4
Метки нет (Все метки)

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;
}
Почему при проверке заполнения массива выводятся неправильные значения?
0
Миниатюры
Почему при проверке заполнения массива выводятся неправильные значения?  
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.02.2014, 14:10
Ответы с готовыми решениями:

Пользовательский класс Library: почему не выводятся значения полей класса?
я создала класс Библиотека (название – char* автор – char* стоимость – float)...

Ошибка при проверке значения char
Выдает ошибку, что m не определена, в If. Если добавить int m, то компилит, но...

Неожиданное поведение программы: почему на консоль не выводятся крайние значения заданного диапазона?
Помогите, пожалуйста, наити ошибку!? Не выводится крайнее значение, то есть...

Не выводятся на экран значения элементов массива
const int arraySize = 10; int data = { 34, 56, 4, 10, 77, 51, 93, 30, 5,...

Почему при записи в файл не выводятся четные строки?
#include &lt;iostream&gt; #include &lt;cctype&gt; #include &lt;fstream&gt; #include &lt;cstdlib&gt;...

4
SatanaXIII
Супер-модератор
Эксперт С++
5770 / 2768 / 375
Регистрация: 01.11.2011
Сообщений: 6,728
Завершенные тесты: 1
27.02.2014, 14:27 #2
Потому, что в программе ошибка.
0
ValeryS
Модератор
7170 / 5437 / 674
Регистрация: 14.02.2011
Сообщений: 18,379
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 элементов а записываем в шестой
0
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);
}
0
Миниатюры
Почему при проверке заполнения массива выводятся неправильные значения?  
alsav22
5439 / 4834 / 831
Регистрация: 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()(в этом куске и дальше в коде) нужно просто <, а не <=, иначе выход за границу массива.
0
27.02.2014, 23:01
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.02.2014, 23:01

Ошибка при проверке массива
sf::String *TileMap = new sf::String; for (size_t i = 0; i &lt; 15; i++) {...

Почему после передачи в функцию массива, выводятся случайные числа, если использовать *(uk++) во второй раз?
Интересует такой вопрос: почему после передачи в функцию массива выводятся...

Почему при изменении размера окна не меняется цвет заполнения?
Почему при изменении размера окна не меняется цвет заполнения?:no: ... ...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

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