Пользователь пока ничего не рассказал о себе

Наибольший вклад в теги

Все теги (1)

Лучшие ответы пользователя

Все ответы (3)
  • Как определить общее сопротивление соединения?

    @Wildlife
    Вообще, ошибок у вас полно. Помимо пропущенных скобок в условиях, можно выделить следующие существенные ошибки:

    1) Неправильные операторы в 17-й строке. Поменяйте || на &&
    2) 22 и 41 строка: нет смысла в проверке, я бы написал на экран: "Некорректные данные".
    3) В 34-й строке то же самое, что и в 17-й, также я бы поставил не ">0", а ">=0"
    4) Также лучше избавиться от русских букв.

    #include <stdio.h>
    #include <conio.h>
    #include <iostream>
     
    using namespace std;
     
    void main()
    {
        double Rsum,R1,R2,R3,x;
        setlocale(LC_ALL, "rus");
        cout << "Укажите номер типа соединения - параллельное (0) или последовательное (1)";
        cin>>x;
        if (x==0)
        {
            if ((R1>=0)&&(R2>=0)&&(R3>=0))
                    {
                    cout << "Введите R1, R2 и R3: ";
                    cin>>R1; cin>>R2; cin>>R3;
                    Rsum=1/(1/R1+1/R2+1/R3);
                    }
                    else
                        if ((R1<0)&&(R2<0)&&(R3<0))
                    {
                    Rsum=0;
                    }
                    cout << "Сопротивление соединения равно: " << Rsum;
        }
     
        if (x==1)
        {
     
            if ((R1>=0)&&(R2>=0)&&(R3>=0))
                    {
                    Rsum=R1+R2+R3;
                    }
                    else
                        if ((R1<0)&&(R2<0)&&(R3<0))
                    {
                    Rsum=0;
                    cout << "Общее соединение равно: " << Rsum;
                    }
                    getch();
                    system("pause");
        }
    
    }


    Вроде код должен работать, проверьте. Я не проверял - накидал по-быстрому.
    Ответ написан
  • Как создать класс, который проверяет, является матрица нормальной?

    @Wildlife
    Во-первых, вы неверно описали оператор присваивания. Матрицу нужно полностью копировать, а не только указатели на строки. Поэтому вы и работаете с одни и тем же набором чисел.

    Во-вторых, вы не выполнили Правило трёх, а, тем более, Правило пяти.

    В-третьих, вы неверно написали метод транспонирования. Например, неквадратную матрицу он у вас не обработает.

    И, наконец, вы запутались в логике работы и начали придумывать какие-то пути обхода проблемы, которой не существует.

    Попробуйте это:

    #include<iostream>
    #include<cstdlib>
    #include<conio.h>
    using namespace std;
    class Myclass {
        void create()
        {
            arr = new int* [rows];
            for (int i = 0; i < rows; i++)
                arr[i] = new int[cols];
        }
        void destroy()
        {
            for (int i = 0; i < rows; i++)
                delete[] arr[i];
            delete arr;
        }
        void copyFrom(const Myclass& other)
        {
            for (int i = 0; i < rows; ++i)
                for (int j = 0; j < cols; ++j)
                    arr[i][j] = other.arr[i][j];
        }
    public:
        int rows;
        int cols;
        int** arr;
     
        Myclass(int r, int c) : rows(r), cols(c), arr(nullptr)
        {
            create();
        }
        Myclass(const Myclass& other) : rows(other.rows), cols(other.cols), arr(nullptr)
        {
            create();
            copyFrom(other);
        }
        ~Myclass()
        {
            destroy();
        }
     
        void input(int rows, int cols)
        {
            for (int i = 0; i < rows; i++)
            {
                for (int j = 0; j < cols; j++)
                {
                    cin >> arr[i][j];
                }
            }
        }
        void inputb(int rows, int cols)
        {
            for (int i = 0; i < rows; i++)
            {
                for (int j = 0; j < cols; j++)
                {
                    arr[i][j] = 0;
                }
            }
        }
        void print()
        {
            for (int i = 0; i < rows; i++)
            {
                for (int j = 0; j < cols; j++)
                {
                    cout << arr[i][j] << "\t";
                }
                cout << endl;
            }
        }
        Myclass transpont()
        {
            Myclass res(cols, rows);
            for (int i = 0; i < rows; ++i)
                for (int j = 0; j < cols; ++j)
                    res.arr[j][i] = arr[i][j];
            return res;
        }
        Myclass& operator=(const Myclass& other)
        {
            destroy();
            rows = other.rows;
            cols = other.cols;
            create();
            copyFrom(other);
            return *this;
        }
    };
    int main()
    {
        int r, c;
        cout << "Enter rows:";
        cin >> r;
        cout << "Enter cols:";
        cin >> c;
     
        Myclass a(r, c);
        Myclass b(r, c);
     
        a.input(r, c);
        cout << "_______A____" << endl;
        a.print();
     
        cout << "_______B____" << endl;
        b.inputb(r, c);
        b.print();
     
        b = a.transpont();
        cout << "_______B_ after b = a.transpont()___" << endl;
        b.print();
     
        cout << "_______A____" << endl;
        a.print();
     
     
        _getch();
        return 0;
    }
    Ответ написан