Top.Mail.Ru
Ответы
Аватар пользователя
Изменено
Аватар пользователя
Аватар пользователя
Аватар пользователя
Программирование
+2

В чём ошибка моего кода на C++? В упор не вижу.

12345678910111213141516171819202122232425262728293031323334353637383940
 // 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; 
	} 
 
	 
} 
По дате
По рейтингу
Аватар пользователя
Новичок
12345678
 // Подсчет среднего балла каждого студента  
	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 - целое число а не массив, который даже не объявлен....

Аватар пользователя
Высший разум
12345678910111213141516171819202122232425262728293031323334353637383940
 #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;
}