Member 13567384 Ответов: 2

Необходимость использовать генератор случайных чисел в моем коде C++.


Я должен создать равномерное распределение int от 0 до numStudents-1
случайным образом выберите число из этого распределения
очистите консоль
используйте случайно сгенерированный номер, чтобы получить имя sutident в этом индексе
покажите это имя студента на экране
приостановите работу программы до тех пор, пока пользователь не нажмет клавишу
вернитесь в Главное меню.

эти вышеописанные шаги должны быть выполнены в функции со следующим объявлением: void randomStudent(int numStudents, int studentNames[]);

Что я уже пробовал:

Я довольно запутался с numbergenerator, вот мой код для проекта, просто нужно добавить генератор чисел.

#include <iostream>
#include <string>
using namespace std;

int main()
{
	const int MAX_STUDENTS = 30;
	const int MAX_ASSIGNMENTS = 10;
	cout << "Please enter the number of students currently enrolled (max " << MAX_STUDENTS << "): ";
	int numStudents;
	cin >> numStudents;
	
	if (numStudents > 30)
	{
		numStudents = 30;
		cout << "The number of students has been reduced to the max " << MAX_STUDENTS << "." << endl;
	}
	
	string studentNames[MAX_STUDENTS];
	for (int i = 0; i < numStudents; i++)
	{
		cout << "Enter student " << i+1 << "'s name: ";
		cin >> studentNames[i];
	}

	char command = ' ';
	int numAssignments = 0;
	int assignments[MAX_STUDENTS][MAX_ASSIGNMENTS];
	while (command != 'q')
	{
		system("CLS");
		// print the gradebook to screen.
		for (int i = 0; i < numStudents; i++)
		{
			cout << studentNames[i] << "\t";
			if (studentNames[i].size() < 8)
			{
				cout << "\t";
			}
			for (int j = 0; j < numAssignments; j++)
			{
				cout << assignments[i][j] << "\t";
			}
			cout << endl;
		}
		cout << "Do you want to add a (s)tudent, add an (a)ssignment, (c)urve a grade (q)uit? ";
		cin >> command;
		system("CLS");
		switch (command)
		{
		case 's':
			cout << "Please enter the new student's name: ";
			cin >> studentNames[numStudents];
			for (int i = 0; i < numAssignments; i++)
			{
				cout << "Please enter " << studentNames[numStudents] << "'s grade for assignment " << i+1 << ": ";
				cin >> assignments[numStudents][i];
			}
			numStudents++;
			break;
		case 'a':
			for (int i = 0; i < numStudents; i++)
			{
				cout << "Please enter " << studentNames[i] << "'s grade for the new assignemnt: ";
				cin >> assignments[i][numAssignments];
				
			}
			numAssignments++;
			break;
		case 'c':
		{
			int assignmentToCurve = -1;
			cout << "Which Assignment do you wish to curve (1-" << numAssignments << "): ";
			cin >> assignmentToCurve;
			//adjust for arrays starting at 0;
			assignmentToCurve--;
			int sum = 0;
			for (int i = 0; i < numStudents; i++)
			{
				sum += assignments[i][assignmentToCurve];
			}
			float average = (float)sum / numStudents;
			if (average < 70)
			{
				for (int i = 0; i < numStudents; i++)
				{
					assignments[i][assignmentToCurve] += (70 - average);
				}
				cout << "curve of " << (int)(70 - average) << " applied!" << endl;
			}
			else
			{
				cout << "No curve needed!" << endl;
			}

			break;
		}
		case 'q':
			break;
		default:
			cout << command << " is an invalid command!" << endl;
			break;
		}
		system("PAUSE");
	}
}

2 Ответов

Рейтинг:
2

CPallini

Ваш код очень прост C-любить.
Пожалуйста, подумайте о сохранении свойств студента (например, name и assignements) в class (или struct).
Рассмотрите возможность использования std::vectors вместо простого C-как массивы.
Наконец, рассмотрите возможность использования std::uniform_int_distribution[^].


Рейтинг:
0

OriginalGriff

Видеть здесь: СТД::Рэнд - cppreference.com[^] - он включает в себя основной пример.