Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
 Аватар для 4iFF
21 / 21 / 1
Регистрация: 06.07.2012
Сообщений: 88

Половина двумерного массива теряет значения

11.08.2012, 14:55. Показов 894. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Тут код:
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
//заголовок
#ifndef MATRIX_H
#define MATRIX_H
#include <iostream>
using std::istream;
using std::ostream;
using std::cout;
using std::cerr;
using std::endl;
using std::dec;
 
class Matrix{
    friend istream &operator>>(istream &,Matrix &);
    friend ostream &operator<<(ostream &,const Matrix &);
public:
    Matrix();
 
    void setFilling(int,int,int);
 
    Matrix &operator=(const Matrix &);
    Matrix &operator+(const Matrix &);
private:
    static const int size1 = 10,size2 = 10;
    int matrix[size1][size2];
};
#endif
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
//определения
#include "Matrix.h"
 
Matrix::Matrix(){
    for (int i = 0;i < size1;i++)
        for (int y = 0;y < size2;y++)
            matrix[i][y] = 1;
}
 
istream &operator>>(istream &in,Matrix &matrix){
    int x,y,num;
 
    cout << "Enter coordinates and number ^x:>y:num :";
    in >> x;
    in.ignore();
    in >> y;
    in.ignore();
    in >> num;
 
    if (in.fail() != 0 || x < 0 || y < 0){
        cerr << "Error! Incurrect input!" << endl;
        exit(0);
    }
 
    matrix.setFilling(x-1,y-1,num);
 
    return in;
}
 
ostream &operator<<(ostream &out,const Matrix &matrix){
    for (int i = 0;i < matrix.size1;i++){
        for (int y = 0;y < matrix.size2;y++)
            out << matrix.matrix[i][y] << " ";
        
        out << endl;
    }
 
    return out;
}
 
Matrix &Matrix::operator=(const Matrix &m){
    for (int i = 0;i < size1;i++)
        for (int y = 0;y < size2;y++)
            matrix[i][y] = m.matrix[i][y];
 
    return *this;
}
 
Matrix &Matrix::operator+(const Matrix &m){
    Matrix temp;
 
    for (int i = 0;i < size1;i++)
        for (int y = 0;y < size2;y++)
            temp.matrix[i][y] = matrix[i][y] + m.matrix[i][y];
 
    return temp;
}
 
void Matrix::setFilling(int x,int y,int value){
    matrix[x][y] = value;    
}
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
//main
#include <iostream>
using std::cout;
using std::cin;
using std::endl;
 
#include "Matrix.h"
 
int main(){
    Matrix matrix1, matrix2,matrix3;
 
    cout << "matrix1:\n" << matrix1 << endl;
 
    cout << "matrix2:\n" << matrix2 << endl;
 
    matrix3 = matrix1 + matrix2;
 
    cout << "matrix3:\n" << matrix3 << endl;
 
    return 0;
}
Проблема в том что при передаче объекта Matrix от оператора "+" к оператору "=" половина двумерного массива matrix[size1][size2] "теряет" значение (огромные отрицательные числа).Подробнее: в операторе "+" temp.matrix[size1][size2] получает совершенно верные значения (без "потерь"), а вот в операторе "=" m.matrix[size1][size2] верен только наполовину (matrix[size1][size2] присвоено значения 1).В чем возможно проблема? Заранее спасибо за ответы...
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
11.08.2012, 14:55
Ответы с готовыми решениями:

Запрашивать размеры двумерного массива, значения его элементов и выводит на экран массива в виде матрицы
помогите решить!!!!!!!! Составьте программу, которая запрашивает размеры двумерного массива, значения его элементов и выводит на...

Объявление двумерного массива (не целочисленные значения)
Здравствуйте. Помогите объявить двумерный массив с нецелочисленными значениями. Я хочу написать программу по симплекс-методу.

Функция не меняет значения двумерного массива
Проблема в Функции BuildNewMap, мне нужно, чтобы значения элемента в массиве myMap поменялось с 0 на заданное в аргументе функции. Вызвал...

3
Эксперт С++
 Аватар для grizlik78
2382 / 1666 / 279
Регистрация: 29.05.2011
Сообщений: 3,402
11.08.2012, 15:06
operator+ возвращает ссылку на разрушенный к этому времени объект temp. Используйте возврат по значению, а не по ссылке.
1
 Аватар для 4iFF
21 / 21 / 1
Регистрация: 06.07.2012
Сообщений: 88
11.08.2012, 15:08  [ТС]
grizlik78, спасибо за ответ.
0
Полярный
 Аватар для dimcoder
477 / 449 / 158
Регистрация: 11.09.2011
Сообщений: 1,156
11.08.2012, 15:09
Добавлю 5 копеек. Интересно что произойдет при следующем коде:
C++
1
2
Matrix m;
cin >> m;
C++
1
matrix.setFilling(x-1,y-1,num);
А в частности при вводе юзером:
0 0 10
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
11.08.2012, 15:09
Помогаю со студенческими работами здесь

Присвоение значения элементу двумерного массива
Почему я могу сделать так: Coors = 2560.6301, Coors = -1289.7698, Coors = 1044.1250;, а так: Coors = { 2560.6301, -1289.7698, 1044.1250 };...

Вычислить значения элементов двумерного массива
Добрый день, в делфи новичок, нужна помощь в решении задачи: Даны действительные числа а1, ... , а10, b1, ... , b20. Получить...

Поменять местами значения элементов двумерного массива
Составьте программу, меняющую местами значения элементов массива А(N,N) симметрично относительно побочной диагонали. Не могу понять,...

Необходимо отобрать нужные значения из двумерного массива
Имеется двумерный массив. Одна строка (столбец) является порядковым номером, вторая - случайным значением от -1 до 1. Из нужного...

Поиск максимального и минимального значения двумерного массива
Почему-то не срабатывает поиск минимального значения. Но когда вычисляю только! минимальное значение, то все работает. uses crt; const...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
Программный контроль заполнения реквизита табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать контроль заполнения реквизита табличной части. . .
wmic не является внутренней или внешней командой
Maks 02.04.2026
Решение: DISM / Online / Add-Capability / CapabilityName:WMIC~~~~ Отсюда: https:/ / winitpro. ru/ index. php/ 2025/ 02/ 14/ komanda-wmic-ne-naydena/
Программная установка даты и запрет ее изменения
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: при создании документов установить период списания автоматически. . .
Вывод данных в справочнике через динамический список
Maks 01.04.2026
Реализация из решения ниже выполнена на примере нетипового справочника "Спецтехника" разработанного в конфигурации КА2. Задача: вывести данные из ТЧ нетипового документа. . .
Функция заполнения текстового поля в реквизите формы документа
Maks 01.04.2026
Алгоритм из решения ниже реализован на нетиповом документе "ВыдачаОборудованияНаСпецтехнику" разработанного в конфигурации КА2, в дополнении к предыдущему решению. На форме документа создается. . .
К слову об оптимизации
kumehtar 01.04.2026
Вспоминаю начало 2000-х, университет, когда я писал на Delphi. Тогда среди программистов на форумах активно обсуждали аккуратную работу с памятью: нужно было следить за переменными, вовремя. . .
Идея фильтра интернета (сервер = слой+фильтр).
Hrethgir 31.03.2026
Суть идеи заключается в том, чтобы запустить свой сервер, о чём я если честно мечтал давно и давно приобрёл книгу как это сделать. Но не было причин его запускать. Очумелые учёные напечатали на. . .
Модель здравосоХранения 6. ESG-повестка и устойчивое развитие; углублённый анализ кадрового бренда
anaschu 31.03.2026
В прикрепленном документе раздумья о том, как можно поменять модель в будущем
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru