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

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

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Одномерный массив E(n) http://www.cyberforum.ru/cpp-beginners/thread389518.html
Помогите решить задачу Одномерный массив E(n); n=10 Найти максимальный и минимальный элемент среди четных.
C++ Задачка на линейный двусвязный список Попросили сделать задачку, а я вот никак не могу разобраться... если кому не трудно помогите. Каждый узел линейного двусвязного списка хранит информацию о некотором городе. В состав этой информации входят сведения о названии города, названии региона и количестве жителей. Требуется вывести на экран названия регионов в порядке убывания суммарной численности городского населения. Добавлено через... http://www.cyberforum.ru/cpp-beginners/thread389504.html
C++ Телефонный справочник на visual C++
Ребят, помогите. Нужно написать программу Телефонный справочник. Объявить структуру для хранения информации об элементе телефонного справочника (ФИО, номер телефона) В программе реализовать следующие действия: - Заполнение телефонного справочника; - Поиск записи по номеру абонента; - Поиск записи по фамилии абонента; Эти действия нужно сделать в виде отдельных функций.
class c++ помогите с программой C++
1. Разработать класс, представляющий собой абстракцию какого-либо объекта. Класс должен содержать 3-4 свойства и 3-6 методов, характеризующих наиболее существенные свойства и функции объекта. Доступ к свойствам класса должен быть закрытым (private) , к методам – открытым (public); изменение свойств (состояния) объекта осуществляется соответствующими методами. 2. Программа должна выполнять...
C++ Две задачи на строки http://www.cyberforum.ru/cpp-beginners/thread389469.html
3) Даны строки S и S0. Удалить из строки S все подстроки, совпадающие с S0. Если совпадающих подстрок нет, то вывести строку S без изменений. 4) Дан текст. Найти все слова, которые содержат символ «t» и встречаются в тексте не менее 2 раз. Пример. Текст: "to be or not to be". Слова: "to". Заранее спасибо!
C++ Дана последовательность целых чисел за которой следует 0.Найти номер максимального элемента в этой последовательности. Помогите решить задачи в Си,использую основные операторы языка Си.При решении использовать все типы циклов (for,while,do while) 1Дана последовательность целых чисел за которой следует 0.Найти номер максимального элемента в этой последовательности. 2P=a*(a+1)*....*(a+n-1) Прошу...:( Добавлено через 20 минут ап...:( подробнее

Показать сообщение отдельно
zmei89
31 / 6 / 1
Регистрация: 10.09.2010
Сообщений: 833

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

22.11.2011, 21:06. Просмотров 1145. Ответов 2
Метки (Все метки)

на С++ Создать класс «матрица». Данный класс должен содержать элементы типа 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();                        // и покажем результаты
}
 Комментарий модератора 
Используйте теги форматирования кода!
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru