Есть очень интересная задача. Нужно заполнить двумерный массив MxN случайными числами в диапазоне [-5; 10] с помощью ГСЧ, а потом посчитать среднее арифметическое чисел, которые входят в диапазон [5; 15]. Не могу понять, почему не работает заполнение чисел. Также не могу понять, как проверять диапазон чисел, которые будут сгенерированы. Очень нужна помощь.
#include <iostream>
#include <math.h>
#include <time.h>
using namespace std;
int main() {
const int m1 = 5;
const int n1 = 5;
int f[m1][n1];
srand(time(NULL));
for(int i3 = 0; i3 < 5; i3++){
f[m1][n1] = -8 + rand() % 8;
cout << f[i3] << " " << endl;
}
system("pause");
}
Куда вы пишете случайные числа?
f[m1][n1] = -8 + rand() % 8;
Все время в одно и то же место, причем за пределами выделенного массива.
cout << f[i3] << " " << endl;
А выводить пытаетесь просто адреса строк вашего массива...
Входит ли n
в диапазон [a,b]
проверяется просто -
if (n >= a && n <= b) ...
Сама программа:
#include <iostream>
#include <ctime>
using namespace std;
int main(){
srand(time(NULL));
const int m1 = 5;
const int n1 = 5;
int f[m1][n1], count_of_numbers = 0;
float sum = 0;
for(int i = 0; i < m1; ++i) {
for (int j = 0; j < n1; ++j){
f[i][j] = -5 + rand() % 16;
cout << f[i][j] << " ";
if (f[i][j] >= 5 && f[i][j] <= 15){
sum += f[i][j];
++count_of_numbers;
}
}
cout << '\n';
}
cout << "\nFinal result = " << sum/count_of_numbers;
system("pause");
}
1) Убираем библиотеку math.h
- она не понадобиться.
2) В 9 строке вместе с объявлением массива f, объявляем переменную _count_of_numbers_ типа int
для подсчёта количества элементов среднеарифметического чисел.
int f[m1][n1], count_of_numbers = 0;
3) В 10 строке объявляем переменную sum типа float
для подсчёта суммы элементов среднеарифметического чисел.
float sum = 0;
4) Начиная с 11 строки начинается вложенный цикл, необходимый для инициализации элементов массива f. Переменная i необходима для перехода по строкам двумерного массива, а переменная j для перехода по столбцам этого же массива.
5) Немного про rand()
. Изначально функция rand()
генерирует случайное число в диапазоне от 0 до 32767. После записи rand()
% n минимальное возможное число это 0, максимальное n-1 (% это взятие остатка от деления, поэтому максимальное число это n-1). Финальный вариант для генерирования случайных строк выглядит так:
f[i][j] = -5 + rand() % 16;
Минимальное число после rand()
% 16 это 0, поэтому минимальное число после -5 + rand()
% 16 это -5.
Максимальное число после rand()
% 16 это 15, поэтому максимальное число после -5 + rand()
% 16 это 10.
6) В 15 строке в поле if
после присваивания элементу матрицы случайной величины происходит проверка на вхождение в заданный диапазон:
if (f[i][j] >= 5 && f[i][j] <= 15)
Если элемент массива f[i][j]
не меньше 5 f[i][j]
>= 5 и (&& - логическое и) элемент массива не больше 15 f[i][j]
<= 15, то увеличивается сумма чисел подходящих под данное условие:
sum += f[i][j];
данное выражение можно переписать:
sum = sum + f[i][j];
и увеличивается кол-во таких чисел:
++count_of_numbers;
данное выражение также можно переписать:
count_of_numbers = count_of_numbers + 1;
7) в 22 строке происходит вывод среднеарифметического чисел. Среднеарифметическое чисел это сумма чисел делённое на их количество, поэтому на вывод подаётся выражение:
cout << "\nFinal result = " << sum/count_of_numbers;
Вы таки на C++
пишите или на C
? Если на C++
, то распределение ваших чисел задаётся одной строчкой std::uniform_int_distribution(5,15)
. Для заполнения тоже ровно 1 строчка std::generate(matrix.begin(),matrix.end(),generator)
. Далее стандартный filter+fold, в рамках C++
- std::copy_if
+ std::accumulate
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Как программно создать в ячейках таблицы QTableView сетку QGridLayout, в которой размещены лейблы QLable?
Когда много раз ищешь все ссылки на функцию, переменную, да на всё, что угодно, поиск идёт бесконечно, и при этом при попытке выйти из студии...
Делаю на сайте загрузку путем перетаскивания, но столкнулся с проблемойСкрипт отрабатывает нормально, файлы загружаются как надо