Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
0 / 0 / 0
Регистрация: 27.09.2022
Сообщений: 11
1

Описать строки кода

26.12.2022, 21:07. Показов 312. Ответов 6
Метки c++ (Все метки)

Author24 — интернет-сервис помощи студентам
Нужно описать каждую строчку кода, что происходит в нём, извиняюсь за тупость, но надо) заранее спасибо :3

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
107
108
109
110
111
112
#include <iostream>
#include <fstream>
using namespace std;
class Matrix {
public:
int size;
int* values;
Matrix(int);
void set_value(int val, int i, int j);
int get_value(int i, int j);
void input_by_row();
void output_by_row();
};
Matrix::Matrix(int a) {
size = a;
values = new int[a * a];
for (int i = 0; i < a * a; i++) values[i] = 0;
}
void Matrix::set_value(int val, int i, int j) {
values[(i - 1) * j - 1] = val;
}
int Matrix::get_value(int i, int j) {
return values[(i - 1) * j - 1];
}
void Matrix::input_by_row() {
int tmp = 0;
for (int i = 0; i < size; i++) {
for (int j = 0; j < i; j++)
values[tmp++] = 0;
for (int j = i; j < size; j++)
cin >> values[tmp++];
}
}
void Matrix::output_by_row() {
int tmp = 0;я
for (int i = 0; i < size; i++) {
for (int j = 0; j < size; j++)
cout << values[tmp++] << ' ';
cout << endl;
}
}
Matrix difference(Matrix a, Matrix b) {
int t = a.size;
Matrix c(t);
for (int i = 0; i < t * t; i++)
c.values[i] = a.values[i] - b.values[i];
return c;
}
void compare(Matrix a, Matrix b) {
int t = a.size;
bool flag = true;
for (int i = 0; i < t * t; i++)
if (a.values[i] != b.values[i]) {
flag = false;
break;
}
26
if (flag) cout << "They are equal" << endl;
else cout << "They are not equal" << endl;
}
void replace(Matrix a, Matrix b) {
int t = a.size;
for (int i = 0; i < t * t; i++)
a.values[i] = b.values[i];
}
int main() {
int tval, ti, tj;
cout << "Please enter value for setting with its row and column indexes" <<
endl;
cin >> tval >> ti >> tj;
Matrix a(ti), b(tj);
a.set_value(tval , ti, tj);
cout << "Value: " << a.get_value(ti, tj) << endl;
cout << "Please enter matrix A" << endl;
a.input_by_row();
cout << "Matrix that you have just entered" << endl;
a.output_by_row();
cout << "Please enter matrix B" << endl;
b.input_by_row();
cout << "Differences of two matrixes:" << endl;
difference(a, b).output_by_row();
compare(a, b);
cout << "Replace of matrix:" << endl;
replace(a, b);
a.output_by_row();
ofstream myfile;
myfile.open("matrix.txt");
//save matrix a to file
myfile << a.size << ' ';
for (int i = 0; i < a.size; i++) {
for (int j = i; j < a.size; j++)
myfile << a.values[i * a.size + j] << ' ';
}
myfile.close();
cout << "Read matrix from a file:" << endl;
//read matrix from a file
ifstream ifile;
ifile.open("matrix.txt");
int tmp, tt;
ifile >> tmp;
for (int i = 0; i < tmp; i++) {
for (int j = 0; j < i; j++)
cout << "0 ";
for (int j = 0; j < a.size - i; j++) {
ifile >> tt;
cout << tt << ' ';
}
cout << endl;
}
ifile.close();
return 0;
}
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
26.12.2022, 21:07
Ответы с готовыми решениями:

Описать основные строки кода программы
#include &lt;fstream&gt; #include &lt;iostream&gt; #include &lt;string&gt; #include &lt;conio.h&gt; #include...

Убрать функцию(сохранить работоспособность кода) и разъяснить(описать код) выделенные строки
Задача ищет и подсчитывает слова которые начинаются на буквы b и B. выделенные строки обозначил...

Описать каждую строчку кода функции либо описать как осуществляется решение этой данной функции
Дана функция и хотелось бы узнать как происходит решение это функции или же подписать каждую строку...

Описать 3 кода
#include &quot;stdafx.h&quot; #include &lt;iostream&gt; #include &lt;stdio.h&gt; #include &lt;locale&gt; using...

Описать работу кода
def bezout(a, b): x, xx, y, yy = 1, 0, 0, 1 while b: q = a // b a, b =...

6
4773 / 2582 / 894
Регистрация: 29.11.2010
Сообщений: 5,590
26.12.2022, 21:27 2
Если у вас этот код работает -- это полноценная откровенная случайность.
В нем столько ошибок, что не должОн.

Немного комментариев
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
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
#include <iostream>
#include <fstream>
 
using namespace std;
 
class Matrix {
public:
    // это данные торчат в паблике?
    // что по инкапсуляции?
    int size;
    int *values;
 
    Matrix(int);
 
    // а где, я вас спрашиваю, деструктор?!
    // где по правилу трёх ещё и конструктор копирования и оператор присваивания
    // где по правилу пяти до кучи конструктор перемещения да оператор присваивания перемещением
 
    // параметры-индексы должны быть типа индексов массива, в С++ для этого есть алиас std::size_t
    // или хотя бы unsigned.
    void set_value(int val, int i, int j);
 
    // почему метод не константный?
    int get_value(int i, int j);
 
    // не надо делать методы с побочными эффектами
    // до кучи, ввод и вывод не то, что делает матрица, а то, что делают с матрицей
    // не должны быть методами-членами класса
    void input_by_row();
    void output_by_row();
};
 
// конструктор, в котором ничего не инициализируется, а в теле задаются значения
// вместо него можно было бы написать однострочный конструктор с пустым телом:
// Matrix::Matrix(int size) : size(size), values(new int[size]{}) {}
Matrix::Matrix(int a) {
    size = a;
    values = new int[a * a];
    for (int i = 0; i < a * a; i++) values[i] = 0;
}
 
void Matrix::set_value(int val, int i, int j) {
    // какого тут -1 везде?! оО
    // вы не знаете, что массивы индексируются с нуля?
    // что вообще этим выражением хотели сказать?
    // это бред какой-то
    // для 1, 1 получается индекс -1?
    values[(i - 1) * j - 1] = val;
}
 
int Matrix::get_value(int i, int j) {
    // и тут та же ерунда
    return values[(i - 1) * j - 1];
}
 
// это должно было быть оформлена в виде отдельной функции, не члена класса
void Matrix::input_by_row() {
    int tmp = 0;
    for (int i = 0; i < size; i++) {
        // бред какой-то, что это и зачем!?
        for (int j = 0; j < i; j++) values[tmp++] = 0;
        for (int j = i; j < size; j++)
            cin >> values[tmp++];
    }
}
 
void Matrix::output_by_row() {
    // какой-то странный способ сэкономить на приведении индекса
    // с помощью отдельной переменной
    int tmp = 0;
    for (int i = 0; i < size; i++) {
        for (int j = 0; j < size; j++)
            cout << values[tmp++] << ' ';
        cout << endl; // спорный endl
    }
}
 
// не надо передавать матрицы по значению
// у вас нет конструкторов копирования и деструкторов -- черте что и сбоку бантик
// это случайно работает
// передавайте матрицы по константной ссылке
Matrix difference(Matrix a, Matrix b) {
    int t = a.size; 
    Matrix c(t);
    for (int i = 0; i < t * t; i++)
        c.values[i] = a.values[i] - b.values[i];
    // тут багуля
    // без конструктора копирования такая операция не гарантированно выполнится
    // тут она условно срабатывает из-за оптимизации компилятора и отсуствия деструктора
    return c;
}
 
// не надо передавать матрицы по значению
// у вас нет конструкторов копирования и деструкторов -- черте что и сбоку бантик
// это случайно работает
// передавайте матрицы по константной ссылке
// почему-то функция сравнения не возвращает результатов
void compare(Matrix a, Matrix b) {
    int t = a.size;
    bool flag = true;
    for (int i = 0; i < t * t; i++)
        if (a.values[i] != b.values[i]) {
            flag = false;
            break;
        }
    // не пишите методы с побочными эффектами, их сложно переиспользовать
    if (flag) cout << "They are equal" << endl;
    else cout << "They are not equal" << endl;
}
 
// я в душе не знаю, что это... замена оператора присваивания?!
void replace(Matrix a, Matrix b) {
    int t = a.size;
    // а если размер матрицы b меньше, чем размер матрицы а?
    for (int i = 0; i < t * t; i++)
        a.values[i] = b.values[i];
}
 
int main() {
    // тут просто в столбик рандомные действия
    int tval, ti, tj;
    cout << "Please enter value for setting with its row and column indexes" <<
         endl;
    cin >> tval >> ti >> tj;
    Matrix a(ti), b(tj);
    a.set_value(tval, ti, tj);
    cout << "Value: " << a.get_value(ti, tj) << endl;
    cout << "Please enter matrix A" << endl;
    a.input_by_row();
    cout << "Matrix that you have just entered" << endl;
    a.output_by_row();
    cout << "Please enter matrix B" << endl;
    b.input_by_row();
    cout << "Differences of two matrixes:" << endl;
    difference(a, b).output_by_row();
    compare(a, b);
    cout << "Replace of matrix:" << endl;
    replace(a, b);
    a.output_by_row();
    ofstream myfile;
    myfile.open("matrix.txt");
//save matrix a to file
    myfile << a.size << ' ';
    for (int i = 0; i < a.size; i++) {
        for (int j = i; j < a.size; j++)
            myfile << a.values[i * a.size + j] << ' ';
    }
    myfile.close();
    cout << "Read matrix from a file:" << endl;
//read matrix from a file
    ifstream ifile;
    ifile.open("matrix.txt");
    int tmp, tt;
    ifile >> tmp;
    for (int i = 0; i < tmp; i++) {
        for (int j = 0; j < i; j++)
            cout << "0 ";
        for (int j = 0; j < a.size - i; j++) {
            ifile >> tt;
            cout << tt << ' ';
        }
        cout << endl;
    }
    ifile.close();
    return 0;
}
1
0 / 0 / 0
Регистрация: 27.09.2022
Сообщений: 11
26.12.2022, 21:34  [ТС] 3
Это код уже принятого курсача) причём код куплен, не мой конечно, но вы забавно ответили
0
4773 / 2582 / 894
Регистрация: 29.11.2010
Сообщений: 5,590
26.12.2022, 22:11 4
Лучший ответ Сообщение было отмечено Fricot как решение

Решение

Цитата Сообщение от Fricot Посмотреть сообщение
Это код уже принятого курсача) причём код куплен, не мой конечно, но вы забавно ответили
Мои соболезнования.

Могу для вас исправить основные моменты:
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
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
#include <iostream>
#include <fstream>
#include <utility>
#include <iomanip>
#include <stdexcept>
 
// матрица, основанная на одномерном массиве данных
template<typename T>
class ArrayMatrix {
public:
 
    // конструктор по-умолчанию
    ArrayMatrix() : height(0), width(0), data(nullptr) {}
 
    // конструктор с двумя параметрами -- высота и ширина матрицы
    ArrayMatrix(std::size_t height, std::size_t width)
            : height(height), width(width), data(new T[height * width]{}) {}
 
    // конструктор с одним параметром, создающий квадратную матрицу
    explicit ArrayMatrix(std::size_t size)
            : height(size), width(size), data(new T[height * width]{}) {}
 
    // правило трёх:
    // конструктор копирования
    ArrayMatrix(const ArrayMatrix<T> &other)
            : height(other.height), width(other.width), data(new T[height * width]) {
        for (std::size_t i = 0, end = width * height; i < end; ++i) {
            data[i] = other.data[i];
        }
    }
 
    // оператор присваивания
    // наивная реализация
    ArrayMatrix<T> &operator=(const ArrayMatrix<T> &other) {
        if (this != &other) {
            T *newData = new T[height * width];
            delete[] data;
            height = other.getHeight();
            width = other.getWidth();
            data = newData;
            for (std::size_t i = 0, end = width * height; i < end; ++i) {
                data[i] = other.data[i];
            }
        }
        return *this;
    }
 
    // деструктор
    ~ArrayMatrix() {
        delete[] data;
    }
 
    // правило пяти:
    // move-конструктор
    ArrayMatrix(ArrayMatrix<T> &&other) noexcept
            : height(std::move(other.height)), width(std::move(other.width)),
              data(std::exchange(other.data, nullptr)) {}
 
    // move-оператор присваивания
    ArrayMatrix<T> &operator=(ArrayMatrix<T> &&other) noexcept {
        if (this != &other) {
            this->height = other.height;
            this->width = other.width;
            this->data = std::exchange(other.data, data);
        }
        return *this;
    }
 
    // количество строк матрицы
    std::size_t getHeight() const {
        return height;
    }
 
    // количество столбцов матрицы
    std::size_t getWidth() const {
        return width;
    }
 
    // оператор доступа к элементам матрицы
    T &operator()(std::size_t row, std::size_t col) {
        // проверка на правильность индексов
        if (row > height || col > height) {
            throw std::invalid_argument("matrix indexes out of range");
        }
        return data[row * width + col];
    }
 
    // константный оператор доступа к константным элементам матрицы
    const T &operator()(std::size_t row, std::size_t col) const {
        // проверка на правильность индексов
        if (row > height || col > height) {
            throw std::invalid_argument("matrix indexes out of range");
        }
        return data[row * width + col];
    }
 
private:
    std::size_t height; // количество строк
    std::size_t width; // количество столбцов
    T *data; // матрица в виде одномерного массива
};
 
// оператор вывода матрицы на экран
template<typename T>
std::ostream &operator<<(std::ostream &out, const ArrayMatrix<T> &m) {
    for (std::size_t i = 0; i < m.getHeight(); ++i) {
        for (std::size_t j = 0; j < m.getWidth(); ++j) {
            out << std::fixed << std::setprecision(2) << std::setw(7) << m(i, j);
        }
        out << std::endl;
    }
    return out;
}
 
// оператор ввода матрицы из потока
template<typename T>
std::istream &operator>>(std::istream &in, ArrayMatrix<T> &m) {
    for (std::size_t i = 0; i < m.getHeight(); ++i) {
        for (std::size_t j = 0; j < m.getWidth(); ++j) {
            in >> m(i, j);
        }
    }
    return in;
}
 
// вычитание матриц различных типов
// тип результата вычисляется во время компиляции
template<typename A, typename B, typename R = decltype(A(0) - B(0))>
ArrayMatrix<R> operator-(const ArrayMatrix<A> &a, const ArrayMatrix<B> &b) {
    if (a.getHeight() != b.getHeight() || a.getWidth() != b.getWidth()) {
        throw std::invalid_argument("matrices must be of equal sizes to add");
    }
    ArrayMatrix<R> result(a.getHeight(), a.getWidth());
    for (std::size_t i = 0; i < result.getHeight(); ++i) {
        for (std::size_t j = 0; j < result.getWidth(); ++j) {
            result(i, j) = a(i, j) - b(i, j);
        }
    }
    return result;
}
 
int main() {
    std::size_t height, width;
    std::cin >> height >> width;
 
    // создание первой матрицы
    ArrayMatrix<int> first(height, width);
 
    std::size_t row, col;
    std::cin >> row >> col;
    // доступ к отдельному элементу по индексу (индексы идут с нуля!)
    // запись
    std::cin >> first(row, col);
    // чтение
    std::cout << "first[" << row << "][" << col << "] = " <<  first(row, col) << std::endl;
 
    // чтение значений матрицы с консоли
    std::cin >> first;
    // вывод на экран
    std::cout << "First:\n" << first << std::endl;
 
    // создание второй матрицы
    ArrayMatrix<int> second(height, width);
 
    // чтение значений из второй матрицы
    std::cin >> second;
    // вывод второй матрицы на экран
    std::cout << "Second:\n" << second << std::endl;
 
    // рассчёт разности матриц и помещение результата в новую матрицу
    ArrayMatrix<int> difference = first - second;
    // вывод разности матриц на экран
    std::cout << "Difference:\n" << difference << std::endl;
 
    // открытие файла на запись
    std::ofstream out("../main.cpp.cout");
    // запись в файл матрицы - разницы
    out << difference;
    // закрытие файла
    out.close();
 
    // открытие файла на чтение
    std::ifstream in("../main.cpp.cout");
    // чтение матрицы из файла
    in >> difference;
    // закрытие файла
    in.close();
    std::cout << "Read matrix:\n" << difference << std::endl;
 
    // присваивание одной матрицы другой
    first = second;
    // проверочный вывод
    std::cout << "First == Second:\n" << first;
 
 
    return 0;
}
Добавлено через 1 минуту
In
Код
4 4
1 1 3
7 -1 -4  1
4  2  3  2
2  2  3  2
4 -3  7 -2
1 2 3 4
4 5 6 7
7 8 9 0
0 1 1 2
Out:
Код
first[1][1] = 3
First:
      7     -1     -4      1
      4      2      3      2
      2      2      3      2
      4     -3      7     -2

Second:
      1      2      3      4
      4      5      6      7
      7      8      9      0
      0      1      1      2

Difference:
      6     -3     -7     -3
      0     -3     -3     -5
     -5     -6     -6      2
      4     -4      6     -4

Read matrix:
      6     -3     -7     -3
      0     -3     -3     -5
     -5     -6     -6      2
      4     -4      6     -4

First == Second:
      1      2      3      4
      4      5      6      7
      7      8      9      0
      0      1      1      2
../main.cpp.cout
Код
      6     -3     -7     -3
      0     -3     -3     -5
     -5     -6     -6      2
      4     -4      6     -4
1
Kuzia domovenok
26.12.2022, 22:15
  #5

Не по теме:

Fricot, дожили при капитализме называется. Теперь курсачи однокурсникам не отдают, а продают...

0
4773 / 2582 / 894
Регистрация: 29.11.2010
Сообщений: 5,590
26.12.2022, 22:16 6
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
Fricot, дожили при капитализме называется. Теперь курсачи однокурсникам не отдают, а продают...
Да ещё и такое гумнище.
2
0 / 0 / 0
Регистрация: 27.09.2022
Сообщений: 11
26.12.2022, 22:50  [ТС] 7
Все задания продают по овер прайсу, сам немного в шоке, сам я обычно бесплатно всем помогаю

Добавлено через 54 секунды
Спасибо большое, очень выручили :3
0
26.12.2022, 22:50
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
26.12.2022, 22:50
Помогаю со студенческими работами здесь

Описать результат кода
Помогите описать результат кода #include &lt;stdio.h&gt; main() { int i=1; while(i&lt;=6) {...

Описать работу кода
Уважаемые форумчане по заданию нужно описать любой процесс шифровки и расшифровки текста....

Описать фрагмент кода
K:=1; For i:=1 to 4 do If c&lt;=0 then k:=k*c-2; Составить блок-схему к отрывку кода (можете устно...

описать алгоритм кода
задача: В обеденный перерыв тяжёлого трудового дня программист Васечкин любит слоняться из стороны...

Описать функцию, что добавляет N символов строки S2 в конец строки S1
Помогите пожалуйста с выполнением лабораторной работы. Задание: 1. Разработать и реализовать...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru