Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
lenarano
2 / 2 / 2
Регистрация: 12.04.2014
Сообщений: 102
#1

Двумерный массив: Добавить методы "ДайЗначениеЯчейки", "УстановиЗначениеЯчейки" - C++

09.05.2015, 00:23. Просмотров 299. Ответов 2
Метки нет (Все метки)

Нужно добавить методы ДайЗначениеЯчейки(индексРяда, индексКолонки), УстановиЗначениеЯчейки(индексРяда, индексКолонки, значение).
Перегрузка [] для двумерного массива не подходит. Нужно реализовать 2 метода. Примеров пока не нашла. Может кто сталкивался или натолкнет на идею. Пока голова идей не подает))
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
#pragma once
#ifndef __MATRIX_H__
#define __MATRIX_H__
#include <iomanip>
 
class Matrix
{
private:
    float **m_ptr;
    size_t m_size;
 
public:
    Matrix(); 
    Matrix( size_t m_size); 
    Matrix(const Matrix &ob); 
    ~Matrix(); 
    size_t Getm_size()const ;
    Matrix &operator= (const Matrix& ob) ;
    Matrix  operator* (const Matrix& ob ); 
    Matrix  operator* (float); 
    Matrix  operator/ ( float); 
    friend std::ostream &operator<< (std::ostream &, const Matrix &);
    friend std::istream &operator>> (std::istream &, Matrix &); 
};
 
 
#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
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
#include <iostream>
#include <Windows.h>
#include <iomanip>
#include "matrix.h"
#include <exception>
 
Matrix::Matrix() : m_size(0),m_ptr(0) {} 
Matrix::Matrix( size_t matrixSize): m_size(matrixSize)
{   if(matrixSize>3)
throw std::exception ("'matrixSize' is invalid."); 
{m_ptr = new float*[m_size];
for ( int i = 0; i < m_size; i++ )
{
    m_ptr[i] = new float[m_size];
}
for ( int i = 0; i < m_size; i++ )
    for ( int j = 0; j <m_size; j++ )
    {
        m_ptr[i][j]=0.0;
    }
}
}
 
Matrix::Matrix(const Matrix &ob) 
{ 
    m_size = ob.m_size; 
    m_ptr = new float*[m_size]; 
    for ( int i = 0; i < m_size; ++i) 
        m_ptr[i] = new float[m_size]; 
    for ( int i = 0; i < m_size; ++i) 
        for ( int j = 0; j < m_size; ++j) 
            m_ptr[i][j] = ob.m_ptr[i][j];
}  
 
Matrix::~Matrix() 
{
    for ( int i = 0; i < m_size; i++ )
    {
        delete []m_ptr[i];
    }
    delete []m_ptr;
} 
Matrix &Matrix::operator=(const Matrix& ob) 
{  
    if (this != &ob) 
    {  
        for ( int i = 0; i < m_size; i++ )
        {
            delete []m_ptr[i];
        }
        delete []m_ptr;
        m_size = ob.m_size;
        m_ptr = new float*[m_size];
        for ( int i = 0; i < m_size; i++ )
        {
            m_ptr[i] = new float[m_size];
        }
        for (int i= 0; i < m_size; ++i) 
            for (int j = 0; j < m_size; ++j) 
                m_ptr[i][j] = ob.m_ptr[i][j]; 
    }
    return *this;
}
 
std::istream &operator>> (std::istream & input, Matrix &obj) 
{   std::cout << "Вводим значения в наш массив 2*2:"<<std::endl;
for (int i = 0; i < obj.m_size; i++)
    for (int j = 0; j < obj.m_size; j++)
        std::cin >> obj.m_ptr[i][j]; 
 
return std::cin;
}
 
std::ostream &operator<< (std::ostream &output, const Matrix &obj) 
{  std::cout<<"Значения в матрице:"<<std::endl;
for (int i = 0; i < obj.m_size; i++)
{std::cout << std::endl;
for (int j = 0; j < obj.m_size; j++)
{
    std::cout << std::setw(5) << std::setprecision(3) << obj.m_ptr[i][j];
}
}
std::cout << std::endl; 
return std::cout; 
}

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
#include "matrix.h"
#include <iostream>
#include <Windows.h>
#include <iomanip>
#include <exception>
 
 
int main()
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    float m;
        Matrix m1(2);
        //Matrix m2(5); в этом случае сработает исключение
        std::cin >> m1;// перегруженная операция ввода
        Matrix m2(2);
        std::cout << "Введите цифру,на которую умножим и разделим матрицу"<<std::endl;
        std::cin >> m;
        m2 = m1 * m;// перегруженная операция *
        std::cout<< "Результаты после умножения матрицы на число. "<< m2; // перегруженная операция вывода
        m2 = m2 / m;// перегруженная операция /
        std::cout << "Результаты после деления матрицы на число. "<< m2;
        std::cout << "Умножение матриц друг на друга:"<<std::endl;
        Matrix m3(2);
        std::cin >> m3;
        Matrix m4(2);
        std::cin >> m4;
        Matrix m5(2);
        m5 = m3 * m4;// [url]http://www.mathprofi.ru/deistviya_s_matricami.html[/url] пункт 5 "умножения матриц"
        std::cout << m5;
        std::cout << "Присвоим последней матрице, выведенной на экран, значение первой матрицы:"<<std::endl;
        m5 = m1;// перегруженная операция =
        std::cout << m5;
    
    system("pause");
    return 0;
}
Добавлено через 1 час 13 минут
пробую перегрузить оператор ()
чтобы в main например вводить
C++
1
2
3
Matrix matrix;
matrix(5,8) = 13;
cout « matrix(6, 22);
C++
1
2
3
4
5
6
7
8
9
double& Matrix::operator()(size_t i, size_t j)
{ 
    if(  i >= m_size || j >= m_size) 
    {
        std::cerr << "error "<< std::endl; 
        exit(1);
    }
    else  
        return  m_ptr[i][j];//ругается на m_ptr
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.05.2015, 00:23
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Двумерный массив: Добавить методы "ДайЗначениеЯчейки", "УстановиЗначениеЯчейки" (C++):

В зависимости от времени года "весна", "лето", "осень", "зима" определить погоду "тепло", "жарко", "холодно", "очень холодно"
В зависимости от времени года &quot;весна&quot;, &quot;лето&quot;, &quot;осень&quot;, &quot;зима&quot; определить...

Класс "Телефонная книга". Дописать методы, "поиск" и "удаления" абонента
Вот код класса, который должен предоставьте пользователю возможность добавлять...

Для каждой строки найти слова, которые не имеют ни одного из букв: "l", "k", "r", "s" i "j"
Задано символьные строки. Строка состоит из нескольких слов (наборов символов),...

Реализовать классы "Воин", "Пехотинец", "Винтовка", "Матрос", "Кортик" (наследование)
Разработать программу с использованием наследования классов, реализующую...

Добавить к возрасту человека указание "год", "года", "лет"
Дано натуральное число n (n&lt;=100), определяющее возраст человека (в годах)....

Создать класс "Вентилятор" содержащий в себе классы: "Двигатель", "Контроллер", "Пульт управления"
Помогите с кодом написания задачи, не понимаю как написать классы в классе. ...

2
Renji
2129 / 1488 / 453
Регистрация: 05.06.2014
Сообщений: 4,328
09.05.2015, 00:33 #2
Цитата Сообщение от lenarano Посмотреть сообщение
return *m_ptr[i][j];//ругается на m_ptr
Потому что оператор возвращает double&, а m_ptr указывает на float. Или убирайте & (но тогда нельзя будет менять возвращенное значение), или везде используйте один тип.
0
rikimaru2013
C++ Game Dev
2471 / 1140 / 348
Регистрация: 30.11.2013
Сообщений: 3,709
09.05.2015, 00:47 #3
перегрузите двойные квадратные скобки для вашего класса Массив - заагрите всех этим обещаю - проверено)
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.05.2015, 00:47
Привет! Вот еще темы с решениями:

Создать класс "Книга" с полями "название книги", "количество страниц", "год издания"
Создать класс Книга поля: название книги,количество страниц,год издания...

Создать абстрактный класс "Издание" и производные классы "Книга", "Статья", "Электронный ресурс"
1. Создать абстрактный класс Издание с методами, позволяющими вывести на экран...

Определить тип данных "Запись", имеющий поля "Фамилия", "Пол", "Зарплата"
определить тип данных запись имеющий поля фамилия пол зарплата. определить...

Базовый класс "Изделие" и производные классы "Мышь", "Клавиатура", "Монитор"
/*Создать класс изделие, с полями себестоимость, цена, время выполнения,...


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

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

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