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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
E-Katya
0 / 0 / 0
Регистрация: 27.02.2014
Сообщений: 3
#1

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

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

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

Неожиданное поведение программы: почему на консоль не выводятся крайние значения заданного диапазона? - C++
Помогите, пожалуйста, наити ошибку!? Не выводится крайнее значение, то есть если брать от -2 до 3х, то нету х=3 и соответственно у. И ещё...

Не выводятся на экран значения элементов массива - C++
const int arraySize = 10; int data = { 34, 56, 4, 10, 77, 51, 93, 30, 5, 52 }; cout &lt;&lt; &quot;Unsorted array:\n&quot;; for(int...

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

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

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

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
SatanaXIII
Супер-модератор
Эксперт С++
5602 / 2636 / 242
Регистрация: 01.11.2011
Сообщений: 6,495
Завершенные тесты: 1
27.02.2014, 14:27     Почему при проверке заполнения массива выводятся неправильные значения? #2
Потому, что в программе ошибка.
ValeryS
Модератор
6551 / 5017 / 463
Регистрация: 14.02.2011
Сообщений: 16,733
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);
}
Миниатюры
Почему при проверке заполнения массива выводятся неправильные значения?  
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.02.2014, 23:01     Почему при проверке заполнения массива выводятся неправильные значения?
Еще ссылки по теме:

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

Выбивает ошибку, в чём ошибка при проверке массива? - C++
Написал программу, в ней есть следующие строки: (НЕ рабочий вариант) if((now &lt;= 0) || (debt_d &lt;= 0)) { cheching = false; ...

Функция заполнения массива и сравнения среднего значения элементов - C++
Написать функцию, которая заполняет массив случайными числами. Принимаемые параметры – имя массива, его размер и диапазон случайных чисел....

При выводе массива выводятся лишние непонятные символы - C++
Имеется массив vord из 10 символов. Ввожу несколько символов(например 4 символа) в этот массив. Определяю их количество - count. Создаю...

Почему не работает цикл while для заполнения и do while для вывода массива? - C++
//--------------------------------------------------------------------------- #include &lt;vcl.h&gt; #include &lt;conio.h&gt; #include...

Написать программу заполнения двумерного массива A по схеме, результаты заполнения выдать на экран и в файл - C++
помогите, пожалуйста, написать программу заполнения двумерного массива A по схеме. Результаты заполнения выдать на экран и в файл. ...


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

Или воспользуйтесь поиском по форуму:
alsav22
5416 / 4812 / 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     Почему при проверке заполнения массива выводятся неправильные значения?
Ответ Создать тему
Опции темы

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