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

Классы. Протокол класса. Конструкторы и деструкторы - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 5.00
zmei89
31 / 6 / 1
Регистрация: 10.09.2010
Сообщений: 810
22.11.2011, 21:06     Классы. Протокол класса. Конструкторы и деструкторы #1
на С++ Создать класс «матрица». Данный класс должен содержать элементы типа int, определяющие число строк, столбцов и состояние ошибки. Определить конструктор без параметров, конструктор с одним параметром, конструктор с двумя параметрами, деструктор.
Определить метод, возвращающий значение элемента матрицы и его адрес. Определить функцию печати матрицы. Определить функции поиска максимального и минимального элемента, умножения матрицы на число, транспонирования матрицы, сложения и вычитания матриц. В случае нехватки памяти и несоответствия размерностей устанавливать код ошибки и выводить его на экран.

что нужно переделать в этом коде


C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
pragma once
class CMatrixStr
{
private:
    int Rows;
    int Cols;
    float ** FloatData;
    float * DataMin;
    float * DataMax;
        
public:
    CMatrixStr(int Row=1,int Col=1);
    ~CMatrixStr(void);
    float GetAt(int Row,int Col);
    void SetAt(int Row,int Col,float Data);
    void Display();
    void MinMax(int Row);
    void Fill();
};
Перейдем к собственно телу матрицы (matrix.cpp)
Для начала включим в него необходимые файлы

C++
1
2
3
4
#include "iostream.h"       // для работы   cin
#include "stdlib.h"             // для функций работы с числами
#include "stdio.h"              // для printf
#include "matrix.h"            // заголовочный для класса
Опишем конструктор класса (вызывается при объявлении переменной с типом CMatrixStr). Конструктор запускается с параметрами количества строк и количества столбцов. Если вдруг эти параметры будут пропущены, то, чтобы не ломалась программа, при объявлении конструктора задаются единицы.

C++
1
2
3
4
CMatrixStr::CMatrixStr(int Row,int Col)
{
    Rows = Row;        // присвоим внутренним переменным переданные параметры
    Cols = Col;
Выделим динамически память для хранения минимального и максимального значения каждого ряда полученной матрицы.

C++
1
2
    DataMin = new float[Rows];  
    DataMax = new float[Rows];
Для хранения собственно данных матрицы сначала выделим память для массива указателей на каждый ряд матрицы
C++
1
    FloatData= new float * [Rows];
Теперь для каждого ряда выделяем память для хранения элементов в колонках и попутно забиваем новые значения нулями и присваиваем нулевые значения для минимального и максимального элемента.
C++
1
2
3
4
5
6
7
8
9
10
    for (int j=0;j<Rows;j++){
        FloatData[j] = new float[Cols];
        DataMin[j]=0.0;
        DataMax[j]=0.0;
        for (int i=0;i<Cols;i++){
            FloatData[j][i]=0.0;
        }
    }
    return;
};
C++
1
2
CMatrixStr::~CMatrixStr()
{
В деструкторе обязательно освобождаем выделенную память для каждого ряда ...

C++
1
2
3
    for (int j=0;j<Rows;j++){
        delete FloatData[j];
    }
и для массива указателей на ряды и на массивы минимальных и максимальных значений
C++
1
2
3
4
delete [] FloatData;
delete [] DataMin;
delete [] DataMax;
};
Методы "получить значение элемента" и "установить значение элемента" необходимы для защищенного доступа к элементам матрицы извне. Т.к. при запросе на запись и получение данных проверяются переданные параметры, то в программе гарантировано не будет выхода за границы массива. Причем при передаче неправильных границ массива можно активизировать диагностические сообщения, которых здесь нет по причине учебного задания.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
float CMatrixStr::GetAt(int Row,int Col)
{
    if (Row < 0 || Row > Rows)
        Row=0;
    if (Col < 0 || Col > Cols)
        Col=0;
    return FloatData[Row][Col]; 
};
 
void CMatrixStr::SetAt(int Row, int Col,float Data)
{
    if (Row < 0 || Row > Rows)
        Row=0;
    if (Col < 0 || Col > Cols)
        Col=0;
    FloatData[Row][Col]=Data;
}
Одной функцией получаем минимальные и максимальные значения для ряда матрицы. Соответственно параметр - ряд

C++
1
2
void CMatrixStr::MinMax(int Row)
{
Для начала присваиваем минимуму и максимуму значения нулевой колонки. Это значение будет у нас эталоном.

C++
1
2
    DataMin[Row]=FloatData[Row][0];
    DataMax[Row]=FloatData[Row][0];
Теперь сравниваем каждое значение в колонке

C++
1
    for (int i=1;i<Cols;i++){
и если оно меньше того значения, которое записано в DataMin, то присваиваем новое значение

C++
1
2
        if (DataMin[Row] > FloatData[Row][i])
            DataMin[Row]= FloatData[Row][i];
и если оно больше того значения, которое записано в DataMax, то присваиваем новое значение

C++
1
2
3
4
    if  (DataMax[Row]< FloatData[Row][i])
            DataMax[Row]=FloatData[Row][i];
    }
}
Заполнение матрицы рядами цифр по одной - тяжелое занятие. Пусть за нас компьютер заполнит матрицу случайными значениями

C++
1
2
3
4
5
6
7
8
9
10
void CMatrixStr::Fill()
{
    for (int j=0;j<Rows;j++){
        for (int i=0;i<Cols;i++){
            FloatData[j][i]=(float)rand();
        }
        MinMax(j);     // и не забудем при этом пересчитать минимальное и максимальное значение для каждого ряда
    }
    return;
}
Осталось только вывести матрицу на печать

C++
1
2
3
4
5
6
7
8
9
10
11
12
void CMatrixStr::Display()
{
    printf("\n Matrix \n");
    for (int j=0;j<Rows;j++){
        printf("Row:%i>", j);        // нумеруем каждый ряд
        for (int i=0;i<Cols;i++){
            printf("%5.0f ",FloatData[j][i]); // печатаем колонки
        }
        printf(" Max: %5.0f Min: %5.0f Min-Max = %5.0f    // выводим разность \n",DataMax[j],DataMin[j],DataMax[j]-DataMin[j]);
    }
    return;
}
А программа будет совсем простая файл main.cpp:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include "iostream.h"
#include "matrix.h"
 
void main()
{
    // спросим сколько колонок и строк
    int Row,Col;
    cout << "\nRow ?:" ;
    cin >> Row ;
    cout << "\nCol ?:" ;
    cin >> Col ;
 
 
    CMatrixStr Matrix(Row,Col);    // создадим нашу матрицу
    Matrix.Fill();                               // заполним значениями
    Matrix.Display();                        // и покажем результаты
}
 Комментарий модератора 
Используйте теги форматирования кода!
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.11.2011, 21:06     Классы. Протокол класса. Конструкторы и деструкторы
Посмотрите здесь:

C++ Конструкторы и деструкторы
C++ Классы. Конструкторы. Деструкторы
C++ Классы. Протокол класса. Конструкторы и деструкторы
C++ Классы. Протокол класса. Конструкторы и деструкторы
Аналог realloc, знающий классы и вызывающий конструкторы/деструкторы C++
C++ Классы, конструкторы, деструкторы, методы классов
C++ классы (конструкторы, дестрцкторы, функции членов класса)
Классы, Конструкторы, Деструкторы. Отредактировать программу C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Bers
22.11.2011, 21:12
  #2

Не по теме:

Цитата Сообщение от zmei89 Посмотреть сообщение
что нужно переделать в этом коде
по-моему ман расжован так, что даже блондинка справится

zmei89
31 / 6 / 1
Регистрация: 10.09.2010
Сообщений: 810
22.11.2011, 21:17  [ТС]     Классы. Протокол класса. Конструкторы и деструкторы #3
да тут полно что надо передалать
Yandex
Объявления
22.11.2011, 21:17     Классы. Протокол класса. Конструкторы и деструкторы
Ответ Создать тему
Опции темы

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