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

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

Восстановить пароль Регистрация
 
fastfooddgd
0 / 0 / 0
Регистрация: 07.04.2011
Сообщений: 7
29.04.2011, 12:16     ООП, разобрать задание. #1
Составить описание класса для представления комплексных чисел с возможностью задания вещественной и мнимой частей как числами типов 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;
    }
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.04.2011, 12:16     ООП, разобрать задание.
Посмотрите здесь:

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

Не по теме:

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

Vladimir.
155 / 155 / 10
Регистрация: 24.11.2009
Сообщений: 375
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";
lemegeton
 Аватар для lemegeton
2908 / 1337 / 133
Регистрация: 29.11.2010
Сообщений: 2,720
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;
}
Vladimir.
155 / 155 / 10
Регистрация: 24.11.2009
Сообщений: 375
30.04.2011, 16:11     ООП, разобрать задание. #6
нет, просто compl - зарезервированое слово.
Ma3a
Эксперт C++
612 / 456 / 31
Регистрация: 28.01.2011
Сообщений: 605
30.04.2011, 16:20     ООП, разобрать задание. #7
Vladimir., нет, compl никогда не был зарезервированным словом. Это всего лишь макрос, определенный в заголовке iso646.h.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.05.2011, 12:43     ООП, разобрать задание.
Еще ссылки по теме:

C++ Не могу понять задание по "ООП"
ООП. Тестовое задание собеседования. C++
Разобрать код! C++

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

Или воспользуйтесь поиском по форуму:
fastfooddgd
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;
}
В этой задаче он сказал что надо делать вообще по шаблону.
То что тут я написал он не хочет принимать
Yandex
Объявления
10.05.2011, 12:43     ООП, разобрать задание.
Ответ Создать тему
Опции темы

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