


В чём ошибка моего кода на C++? В упор не вижу.
// Two-dimensional_arrays1
#include <iostream>
#include <stdlib.h>
#include <time.h>
const int kol_vo_students = 30;
const int kol_vo_otsenok = 5;
int main()
{
{
system("chcp 1251 > NUL");
srand(time(NULL));
int otsenki_studentov[kol_vo_students][kol_vo_otsenok];
double sredniye_otsenki_studentov[kol_vo_students];
// Заполнение массива оценок случайными значениями
for (int i = 0; i < kol_vo_students; ++i) {
for (int j = 0; j < kol_vo_otsenok; ++j) {
otsenki_studentov[i][j] = rand() % 4 + 2; // случайная оценка от 2 до 5
}
}
// Подсчет среднего балла каждого студента
for (int i = 0; i < kol_vo_students; ++i) {
double summa = 0;
for (int j = 0; j < kol_vo_otsenok; ++j) {
summa += kol_vo_otsenok[i][j];
}
kol_vo_otsenok[i] = summa / kol_vo_otsenok;
}
// Вывод среднего балла каждого студента
for (int i = 0; i < kol_vo_students; ++i) {
std::cout << "Студент" << i++ << ": Средний балл = " << kol_vo_otsenok[i] << std::endl;
}
}
// Подсчет среднего балла каждого студента
for (int i = 0; i < kol_vo_students; ++i) {
double summa = 0;
for (int j = 0; j < kol_vo_otsenok; ++j) {
summa += kol_vo_otsenok[i][j];
}
kol_vo_otsenok[i] = summa / kol_vo_otsenok;
Это что?!Вместо получения средней оценки студента суммируешь что?!!!
2) kol_vo_otsenok - целое число а не массив, который даже не объявлен....
#include <cstdlib>
#include <ctime>
#include <iomanip>
#include <iostream>
#define RAND(min, max) (rand() % ((max) - (min)) + (min))
int main() {
system("chcp 1251 > NUL");
srand(static_cast<unsigned>(time(nullptr)));
constexpr size_t kol_vo_students = 30;
constexpr size_t kol_vo_otsenok = 5;
int otsenki_studentov[kol_vo_students][kol_vo_otsenok]{};
double sredniye_otsenki_studentov[kol_vo_students]{};
size_t i = 0;
for (auto& row : otsenki_studentov) {
std::cout << std::setw(2) << ++i << ". ";
for (auto& value : row) {
value = RAND(2, 6);
std::cout << std::setw(4) << value << ' ';
}
puts("");
}
puts("");
i = 0;
for (const auto& row : otsenki_studentov) {
auto summa = 0.0;
for (auto value : row) {
summa += value;
}
sredniye_otsenki_studentov[i] = summa / kol_vo_otsenok;
++i;
}
i = 0;
std::cout << std::fixed << std::setprecision(1);
for (auto average : sredniye_otsenki_studentov) {
std::cout << "Студент " << std::setw(2) << i + 1
<< ": Средний балл = " << sredniye_otsenki_studentov[i] << '\n';
++i;
}
system("pause > nul");
}
В строке summa += kol_vo_otsenok[i][j]; ты обращаешься к переменной kol_vo_otsenok как к двумерному массиву, хотя ты хотел обратиться к otsenki_studentov. Это приведет к ошибке компиляции.
В следующей строке kol_vo_otsenok[i] = summa / kol_vo_otsenok; также имеется ошибка: ты пытаешься присвоить результат выражения типа double целочисленной переменной kol_vo_otsenok[i].
В цикле вывода среднего балла каждого студента ты используешь оператор i++, что приведет к неправильному выводу номеров студентов.
kol_vo_otsenok[i] = summa / kol_vo_otsenok;
kol_vo_otsenok - не массив, а целое число
В целом следовало бы уменьшить количество проходов по циклам и сделать все максимум в 2 цикла. Так повысится производительность и читаемость кода.
#include <iostream>
#include <vector>
#include <random>
int main() {
int kol_vo_students = 30;
int kol_vo_otsenok = 5;
std::vector<std::vector<int>> otsenki_studentov(kol_vo_students, std::vector<int>(kol_vo_otsenok));
std::random_device rd;
std::mt19937 gen(rd());
std::uniform_int_distribution<> dis(2, 5);
for (int i = 0; i < kol_vo_students; i++) {
for (int j = 0; j < kol_vo_otsenok; j++) {
otsenki_studentov[i][j] = dis(gen);
}
}
std::vector<double> sredniye_otsenki_studentov(kol_vo_students);
for (int i = 0; i < kol_vo_students; i++) {
int summa = 0;
for (int j = 0; j < kol_vo_otsenok; j++) {
summa += otsenki_studentov[i][j];
}
sredniye_otsenki_studentov[i] = static_cast<double>(summa) / kol_vo_otsenok;
}
for (int i = 0; i < kol_vo_students; i++) {
std::cout << "Студент " << i << ": Средний балл = " << sredniye_otsenki_studentov[i] << std::endl;
}
return 0;
}