0 / 0 / 0
Регистрация: 07.04.2011
Сообщений: 7
1

ООП, разобрать задание.

29.04.2011, 12:16. Показов 1027. Ответов 7
Метки нет (Все метки)

Составить описание класса для представления комплексных чисел с возможностью задания вещественной и мнимой частей как числами типов double, так и целыми числами. Обеспечить выполнение операций сложения, вычитания и умножения комплексных чисел

Нужно посмотреть в коде ошибки, препод придирается к ней, но не поясняет в чем проблема

Main.cpp
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <iostream>
#include "compl.h"
void main() {
    compl c1( 102, 71 ), c2( 3.2, 2.1 ), c3;
    cout << "Complex number 1 = \t";
    c1.getCompl();
    cout << "Complex number 2 = \t";
    c2.getCompl();
    cout << "Number 1 + Number 2 = \t";
    c3 = c1 + c2;
    c3.getCompl();
    cout << "Number 1 - Number 2 = \t";
    c3 = c1 - c2;
    c3.getCompl();
    cout << "Number 1 * Number 2 = \t";
    c3 = c1 * c2;
    c3.getCompl();
}
Файл Compl.h
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#ifndef COMPL_H
#define COMPL_H
using namespace std;
class compl {
    double d, m;
public:
    compl( int d, int m );
    compl( double d, double m );
    compl();
    compl operator+ ( compl c2 );
    compl operator- ( compl c2 );
    compl operator* ( compl c2 );
    void getCompl();
};
#endif /* COMPL_H */
Файл Compl.cpp
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
#include <iostream>
#include "compl.h"
compl::compl( int d, int m ) 
{
    this->d = d;
    this->m = m;
}
 
compl::compl( double d, double m ) 
{
    this->d = d;
    this->m = m;
}
compl::compl() {    }
compl compl::operator+( compl c2 ) 
{
    compl temp;
    temp.d = d + c2.d;
    temp.m = m + c2.m;
    return temp;
}
compl compl::operator-( compl c2 ) 
{
    compl temp;
    temp.d = d - c2.d;
    temp.m = m - c2.m;
    return temp;
}
compl compl::operator*( compl c2 ) 
{
    compl temp;
    temp.d = d * c2.d - m * c2.m;
    temp.m = d * c2.m + m * c2.d;
    return temp;
}
void compl::getCompl() { cout << "d = " << d << ",\tm = " << m << endl; }
Добавлено через 10 минут
Так же если не трудно помогите разобрать задачи.

Составить описание объектного типа TMatr, обеспечивающего размещение матрицы произвольного размера с возможностью изменения числа строк и столбцов, вывода на экран подматрицы любого размера и всей матрицы.

main.cpp
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
#include "matrix.h"
#include <iostream>
void main() {
    int rows, cols;
    cout << "Rows - ";
    cin >> rows;
    cout << "Cols - ";
    cin >> cols;
    matrix TMatr( rows, cols );
    TMatr.set();
    cout << "Enter number for change rows: ";
    cin >> rows;
    cout << "Enter number for change cols: ";
    cin >> cols;
    if ( rows != 0 || cols != 0 ) {
        if ( (rows >= 0 && cols > 0) || (rows > 0 && cols >= 0) )
            TMatr.plus_plus( rows, cols );
        if ( (rows <= 0 && cols < 0) || (rows < 0 && cols <= 0) )
            TMatr.minus_minus( rows, cols );
        if (rows < 0 && cols > 0)
            TMatr.minus_plus( rows, cols );
        if (rows > 0 && cols < 0)
            TMatr.plus_minus( rows, cols );
    }
    TMatr.print();
    int pos_i, pos_j, num_r, num_c;
    cout << "Enter i position of element: ";
    cin >> pos_i;
    cout << "Enter j position of element: ";
    cin >> pos_j;
    cout << "Enter number of rows of new matrix: ";
    cin >> num_r;
    cout << "Enter number of cols of new matrix: ";
    cin >> num_c;
    TMatr.printSub( pos_i, pos_j, num_r, num_c );
}
matrix.h
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#ifndef MATRIX_H
#define MATRIX_H
using namespace std;
class matrix {
    int rows, cols;
    double **matr; 
public: 
    matrix( int, int );
    void set();
    void plus_plus( int, int );
    void minus_minus( int, int );
    void minus_plus( int, int );
    void plus_minus( int, int );
    void print();
    void printSub( int, int, int, int );
};
#endif /* MATRIX_H */
matrix.cpp
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
#include "matrix.h"
#include <iostream>
matrix::matrix( int rows, int cols ) {
    this->rows = rows;
    this->cols = cols;
    matr = new double *[rows];
    for ( int i = 0; i < rows; i ++ ) {
        matr[i] = new double [cols];
    }
}
void matrix::set() {
    for ( int i = 0; i < rows; i ++ ) {
        for (int j = 0; j < cols; j ++ ) {
            cout << "A[" << i << "][" << j << "] = ";
            cin >> matr[i][j];
        }
    }
}
void matrix::plus_plus( int new_r, int new_c ) {
    int i, j;
    matr = ( double** ) realloc( matr, (rows + new_r) * sizeof( double* ));
    for ( i = rows; i < (rows + new_r); i ++ )
        matr[i] = NULL;
    for ( i = 0; i < (rows + new_r); i ++ )
        matr[i] = ( double* ) realloc( matr[i], (cols + new_c) * sizeof( double ));
    cout << "Fill new row/rows:" << endl;
    for ( i = rows; i < (rows + new_r); i ++ ) {
        for ( j = 0; j < cols; j ++ ) {
            cout << "A[" << i << "][" << j << "] = ";
            cin >> matr[i][j];
        }
    }
    rows += new_r;
    cout << "Fill new col/cols:" << endl;
    for ( i = 0; i < rows; i ++ ) {
        for ( j = cols; j < (cols + new_c); j ++ ) {
            cout << "A[" << i << "][" << j << "] = ";
            cin >> matr[i][j];
        }
    }
    cols += new_c;
}
void matrix::minus_minus( int new_r, int new_c ) {
    int i, j;
    matr = ( double** ) realloc( matr, (rows + new_r) * sizeof( double* ));
    for ( i = rows; i < (rows + new_r); i ++ )
        matr[i] = NULL;
    for ( i = 0; i < (rows + new_r); i ++ )
        matr[i] = ( double* ) realloc( matr[i], (cols + new_c) * sizeof( double ));
    rows += new_r;
    cols += new_c;
}
void matrix::minus_plus( int new_r, int new_c ){
    int i, j;
    matr = ( double** ) realloc( matr, (rows + new_r) * sizeof( double* ));
    for ( i = rows; i < (rows + new_r); i ++ )
        matr[i] = NULL;
    for ( i = 0; i < (rows + new_r); i ++ )
        matr[i] = ( double* ) realloc( matr[i], (cols + new_c) * sizeof( double ));
    cout << "Fill new rows/cols:" << endl;
    for ( i = 0; i < (rows + new_r); i ++ ){
        for ( j = cols; j < (cols + new_c); j ++ ){
            cout << "A[" << i << "][" << j << "] = ";
            cin >> matr[i][j];
        }
    }
    rows += new_r;
    cols += new_c;
}
void matrix::plus_minus( int new_r, int new_c ) {
    int i, j;
    matr = ( double** ) realloc( matr, (rows + new_r) * sizeof( double* ));
    for ( i = rows; i < (rows + new_r); i ++ )
        matr[i] = NULL;
    for ( i = 0; i < (rows + new_r); i ++ )
        matr[i] = ( double* ) realloc( matr[i], (cols + new_c) * sizeof( double ));
    cout << "Fill new rows/cols:" << endl;
    for ( i = rows; i < (rows + new_r); i ++ ) {
        for ( j = 0; j < (cols + new_c); j ++ ) {
            cout << "A[" << i << "][" << j << "] = ";
            cin >> matr[i][j];
        }
    }
    rows += new_r;
    cols += new_c;
}
void matrix::print() {
    int i, j;
    cout << "Matrix:" << endl;
    for ( i = 0; i < rows; i ++ ) {
        for (j = 0; j < cols; j ++ ) {
            cout << matr[i][j] << "  ";
        }
        cout << endl;
    }
}
void matrix::printSub( int pos_i, int pos_j, int num_r, int num_c ) {
    int i, j;
    cout << "Your matrix:" << endl;
    for ( i = pos_i; i < pos_j + num_r; i ++ ) {
        for ( j = pos_j; j < pos_i + num_c; j ++ ) {
            cout << matr[i][j] << "  ";
        }
        cout << endl;
    }
}
Добавлено через 1 минуту
Составить описание класса одномерных массивов строк, каждая строка которых задается длиной и указателем на выделенную для нее память. Предусмотреть возможность обращения к отдельным строкам массива по индексам, контроль выхода за пределы индексов, выполнения операций поэлементного сцепления двух массивов с образованием нового массива, слияния двух массивов с исключением повторяющихся элементов, печать (вывод на экран) элементов массива и всего массива.

Main.cpp
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
#include "ArrayStr.h"
#include <iostream>
 
void main() {
    int n = 3;
    string *str1, *str2;
 
    str1 = new string[n];
    str2 = new string[n];
 
    str1[0] = "One";
    str1[1] = "Two";
    str1[2] = "Three";
 
    str2[0] = "-One";
    str2[1] = "Two";
    str2[2] = "-Three";
 
    ArrayStr s1( n, str1 ), s2( n, str2 ), s3;
 
    cout << "String 1" << endl;
    s1.getArrayStr( 3 );
    cout << "String 2" << endl;
    s2.getArrayStr( 1 );
    cout << "String 3 = s1 + s2" << endl;
    s3 = s1 + s2;
    s3.getArray();
    cout << "String 3 = s1 xor s2" << endl;
    s3 = s1.Merge(s2);
    s3.getArray();
    delete [] str1;
    delete [] str2;
 
}
ArrayStr.h
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#ifndef ARRAYSTR_H
#define ARRAYSTR_H
 
#include <string>
 
using namespace std;
 
class ArrayStr {
    int n;
    string *s;
public:
    ArrayStr( int n, string *str );
    ArrayStr();
 
    ArrayStr operator+( ArrayStr s2 );
    ArrayStr Merge( ArrayStr a2 );
 
    void getArrayStr( int ind );
    void getArray();
};
#endif /* ARRAYSTR_H */
ArrayStr.cpp
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
#include <iostream>
#include "ArrayStr.h"
 
ArrayStr::ArrayStr( int n, string *str ) {
    this->n = n;
    s = new string[n];
    for ( int i = 0; i < n; i++ ) {
        s[i] = str[i];
    }
}
ArrayStr::ArrayStr() {}
ArrayStr ArrayStr::operator+( ArrayStr a2 ) {
    ArrayStr tmp;
    tmp.n = n;
    tmp.s = new string[n];
    for( int i = 0; i < n; i++ ) {
        tmp.s[i] = s[i] + a2.s[i];
    }
    return tmp;
    delete [] tmp.s;
}
ArrayStr ArrayStr::Merge( ArrayStr a2 ) {
    ArrayStr tmp;
    tmp.n = n;
    tmp.s = new string[n];
    for( int i = 0; i < n; i++ ) {
        if (s[i] != a2.s[i]) {
            tmp.s[i] = s[i] + a2.s[i];
        }
        continue;
    }
    return tmp;
    delete [] tmp.s;
}
void ArrayStr::getArrayStr( int ind ) {
    if (ind >= 0 && ind <= n) {
        cout << "s[" << ind << "] = " << s[ ind - 1 ] << endl;
    }
    else cout << "Error!" << endl;
}
void ArrayStr::getArray() {
    for( int i = 0; i < n; i++ ) {
        cout << "str[" << i+1 << "] = " << s[ i ] << endl;
    }
}
__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
29.04.2011, 12:16
Ответы с готовыми решениями:

Расстолковать задание по ООП С++
Написать саму прогу для меня не проблема,но вот только не совсем пойму задание,непонятна конкретно...

задание по ООП, классы, матрицы
Составить описание класса, обеспечивающего представление матрицы произвольного размера с...

ООП. Тестовое задание собеседования.
Это тестовое задание для устройста на работу. Я не совсем понимаю что от меня хотят. Не могли бы вы...

Необходимо выполнить задание ООП
В статическое свойство objects класса InterfaceObject добавить по одному из объектов производных...

7
Каратель
Эксперт С++
6601 / 4020 / 401
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
30.04.2011, 01:35 2
Цитата Сообщение от fastfooddgd Посмотреть сообщение
Нужно посмотреть в коде ошибки, препод придирается к ней, но не поясняет в чем проблема
Принципиальная ошибка - это вывод на экран почти в каждом методе, в правильность синтасиса не вглядывался.
Да и на месте преподя я бы вас забанил за
C++
1
void main()
0
silent_1991
30.04.2011, 02:01
  #3

Не по теме:

Maxwe11, преподы сами так пишут, а ещё заставляют квартиры от домов наследовать и много чего другого нехорошего делать...

0
377 / 228 / 79
Регистрация: 24.11.2009
Сообщений: 695
30.04.2011, 07:54 4
препод придирается к ней, но не поясняет в чем проблема
и правильно делает, смените имя класса.

Добавлено через 50 минут
Так же в задании со строковыми массивами merge() выполняет конкатенацию неравных элементов, хотя по идее должна формировать массив уникальных строк.
т.е., если массивы:
  1. "One";
  2. "Two";
  3. "Three";
  1. "-One";
  2. "Two";
  3. "-Three";
merge сделает:
  1. "One-One";
  2. "Two";
  3. "Three-Three";
по заданию должна cделать:
  1. "One";
  2. "Two";
  3. "Three"
  4. "-One";
  5. "-Three";
1
3380 / 1587 / 553
Регистрация: 29.11.2010
Сообщений: 3,265
30.04.2011, 12:22 5
Возможно, в первой задаче "препод" "придирается" к методу вывода на экран и к общему стилю кода.
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 <iostream>
 
class Complex {
 public:
  Complex()
    : real_(0.0), imaginary_(0.0) {}
  Complex(float real, float imaginary)
    : real_(real), imaginary_(imaginary) {}
  float Real() const { return real_; }
  void  Real(float value) { real_ = value; }
  float Imaginary() const { return imaginary_; }
  void  Imaginary(float value) { imaginary_ = value; }
  Complex operator+(const Complex other) {
    return Complex(real_ + other.Real(), imaginary_ + other.Imaginary());
  }
  Complex operator-(const Complex other) {
    return Complex(real_ - other.Real(), imaginary_ - other.Imaginary());
  }
  Complex operator*(const Complex other) {
    return Complex(real_ * other.Real() - imaginary_ * other.Imaginary(),
                   real_ * other.Imaginary() + imaginary_ * other.Real());
  }
  friend std::ostream &operator<<(std::ostream &stream, const Complex &number) {
    return stream << number.Real() << "+" << number.Imaginary() << "i";
  }
 private:
  float real_;
  float imaginary_;
};
 
int main(int argc, char *argv[]) {
  Complex a(102, 71), b(3.2, 2.1);
  std::cout << a + b << std::endl
            << a - b << std::endl
            << a * b << std::endl;
  return 0;
}
0
377 / 228 / 79
Регистрация: 24.11.2009
Сообщений: 695
30.04.2011, 16:11 6
нет, просто compl - зарезервированое слово.
0
Эксперт С++
623 / 467 / 57
Регистрация: 28.01.2011
Сообщений: 605
30.04.2011, 16:20 7
Vladimir., нет, compl никогда не был зарезервированным словом. Это всего лишь макрос, определенный в заголовке iso646.h.
1
0 / 0 / 0
Регистрация: 07.04.2011
Сообщений: 7
10.05.2011, 12:43  [ТС] 8
Цитата Сообщение от lemegeton Посмотреть сообщение
Возможно, в первой задаче "препод" "придирается" к методу вывода на экран и к общему стилю кода.
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 <iostream>
 
class Complex {
 public:
  Complex()
    : real_(0.0), imaginary_(0.0) {}
  Complex(float real, float imaginary)
    : real_(real), imaginary_(imaginary) {}
  float Real() const { return real_; }
  void  Real(float value) { real_ = value; }
  float Imaginary() const { return imaginary_; }
  void  Imaginary(float value) { imaginary_ = value; }
  Complex operator+(const Complex other) {
    return Complex(real_ + other.Real(), imaginary_ + other.Imaginary());
  }
  Complex operator-(const Complex other) {
    return Complex(real_ - other.Real(), imaginary_ - other.Imaginary());
  }
  Complex operator*(const Complex other) {
    return Complex(real_ * other.Real() - imaginary_ * other.Imaginary(),
                   real_ * other.Imaginary() + imaginary_ * other.Real());
  }
  friend std::ostream &operator<<(std::ostream &stream, const Complex &number) {
    return stream << number.Real() << "+" << number.Imaginary() << "i";
  }
 private:
  float real_;
  float imaginary_;
};
 
int main(int argc, char *argv[]) {
  Complex a(102, 71), b(3.2, 2.1);
  std::cout << a + b << std::endl
            << a - b << std::endl
            << a * b << std::endl;
  return 0;
}
В этой задаче он сказал что надо делать вообще по шаблону.
То что тут я написал он не хочет принимать
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
10.05.2011, 12:43

Правильно ли сделано задание по ООП С++, если нет - подправьте
Базовый класс: Работник с различными формами начисления заработной платы. Производные классы:...

Разобрать задание
Здравствуйте! Помогите разобраться в задании. Не знаю с чего начать писать программу. Оператор...

Не могу разобрать задание !
Есть задание: Определить принадлежность некоторого значения k интервалам (n, m], . Я не прошу...

Тема: сортировка - разобрать задание
C клавиатуры ввести два массива целых чисел A и B. Написать функцию которая из них образует n пар...


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

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

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