Постановка задачи: даны две матрицы (х,у), нужно найти количество и сумму элементов, принадлежащих отрезку АВ(отрезок пользователь вводит сам), также отриц. элементы заменить модулем этого элемента. Программа должна работать так:
Ввод размерности х
Ввод размерности у
Ввод элементов х
Ввод элементов у
Ввод отрезка для матрицы х
Ввод отрезка для матрицы у
Вывод общего результата(колво, сумма, изм.матрицы)
Проблема: преподша сказала, что нужно создавать отдельную функцию для ввода отрезка, а уже в другой функции (проверка) проверять принадлежат элементы отрезку или нет. У меня не получается связать функции ввода отрезка и функцию проверки. Помогите, пожалуйста....Скрины с кодом прикрепляю
Если что, переменные t,b,y - глобальные.



Сам написанный код показывает и причину проблемы, и способ её решения. Сколько параметров у функции proverka? А сколько передаётся? Откуда можно взять недостающее? Только из функции otrezok. Значит, функция otrezok должна вернуть введённые в ней значения, которые потом следует передать в функцию proverka.
#include
#include
using namespace std;
using range_t = pair;
using stat_t = pair;
size_t input_size(const char* msg) {
cout > value;
return value;
}
double input_value(const char* msg) {
cout > value;
return value;
}
double** create_matix(const char* msg, const size_t n, const size_t m) {
puts(msg);
auto matrix = new double* [n];
for (size_t i = 0; i < n; ++i) {
matrix[i] = new double [m];
for (size_t j = 0; j < m; ++j) {
cin >> matrix[i][j];
}
}
puts("");
return matrix;
}
double** destroy_matrix(double** matrix, const size_t n) {
if (matrix != nullptr) {
for (size_t i = 0; i < n; ++i) {
if (matrix[i] != nullptr) {
delete[] matrix[i];
}
}
delete[] matrix;
matrix = nullptr;
}
return matrix;
}
range_t entering_a_range_of_values(const char* msg) {
puts(msg);
auto a = input_value("Первое значение: ");
auto b = input_value("Второе значение: ");
puts("");
if (a > b) swap(a, b);
return { a, b };
}
stat_t sum_and_count(double** matrix, const size_t n, const size_t m, const range_t& range) {
stat_t stat{};
for (size_t i = 0; i < n; ++i) {
for (size_t j = 0; j < m; ++j) {
if (matrix[i][j] >= range.first && matrix[i][j]
Использование глобальных переменных всуе есть глупость несусветная. Поэтому совет первый: используйте структуру для хранения необходимых компонентов данных и передавайте на нее ссылку в функции. Мало того, самое веселое, что вы внутри функции otrezok переопределяете эти переменные и ввод идет не в ваши глобальные переменные а в их локальные копии :D Поэтому если вы думаете, что после вызова функции otrezok у вас будут инициализированы глобальные переменные то я вас огорчу - жизнь ваших t, b, y из функции otrezok закончится сразу же, как они выйдут за ее пределы.
Далее, в вашей чудесной программе присутствует лишь проверка на на то, что t меньше b, причем, если это не так, пользователь не увидит сообщения об ошибке, так как вы его тут же пытаетесь стереть с экрана при помощи вызова cls. Есть мнение, что этого может быть недостаточно.
Далее, на будущее: использование в качестве аргументов system имени программы без указания полного пути потенциально очень опасно. Особенно это касается Windows систем, так как в них поиск программы начинается с ТЕКУЩЕГО каталога. Это дает атакующему потенциальную возможность выполнить произвольный код от имени пользователя, запустившего процесс. Чтобы было более понятно: если атакующий поместит программу cls.exe в каталог, из которого вы запускаете программу на выполнение, то при запуске вашей программы в Windows выполнится именно она а не то, что вы думали. И уж что она сделает с вашими данными и вашим компьютером можно лишь предполагать. Особенно фееричные последствия будут, если вы работали из под учетки Администратора.
Не самая удачная реализация получилась, но должно быть как то вот так:
https://coliru.stacked-crooked.com/a/d7ae51ffd1b1a5fa
Вообще общий принцип процедурного программирования таков :
Куски кода не должны повторяться.
Каждая процедура должна отвечать за что то одно.
Стараться использовать библиотечные функции
если процедура не влезает на 1 экран, ее стоит пересмотреть.