Как я могу исправить мои случайные генераторы, используемые для генерации факторов и сообщений, используя функцию? - PullRequest
0 голосов
/ 27 октября 2019

Я должен написать программу для симуляции системы образования, разделив ее на функции (требования приведены ниже). Я пытаюсь использовать rand () для генерации случайных чисел от 0 до 9, а также для генерации случайных сообщений для отображения, но оба не работают. Может быть проблема в моем операторе switch или определении функции и прототипе или использовании rand () и srand (). Это сложное задание для меня и имеет много компонентов для него. Я знаю, что только начинаю изучать c ++. Если бы у меня было время, я бы обязательно открыл книгу по С ++ и прочитал ее. Если кто-то готов помочь, я буду очень благодарен. Спасибо!

Вот инструкции, которые мне дал мой инструктор:

Шаг 1. Компьютеры играют все большую роль в образовании. Напишите программу, которая поможет ученику начальной школы научиться умножению. Используйте функцию случайного числа, чтобы получить два положительных однозначных целых числа. Затем программа должна подсказать пользователю вопрос, такой как

Сколько будет 6, умноженное на 7?

Затем студент вводит ответ. Далее программа проверяет ответ студента. Если это правильно, отобразите сообщение «Очень хорошо!»и задать еще один вопрос умножения. Если ответ неправильный, отобразите сообщение «Нет. Пожалуйста, попробуйте еще раз». и пусть ученик повторяет один и тот же вопрос несколько раз, пока ученик, наконец, не поймет его правильно.

Для создания каждого нового вопроса должна использоваться отдельная функция. Эта функция должна вызываться один раз, когда приложение начинает выполнение, и каждый раз, когда пользователь правильно отвечает на вопрос.

Шаг 2: Измените программу, чтобы изменить комментарии, отображаемые для каждого правильного ответа и каждого неправильного ответа.

Ответ на правильный ответ следует выбирать из: Очень хорошо! Отлично! Хорошо сделано! Продолжайте в том же духе!

Ответ на неправильный ответ следует выбирать из: Нет. Пожалуйста, попробуйте еще раз. Неправильно. Попробуй еще раз. Не сдавайся! Нет. Продолжайте попытки.

Используйте генерацию случайных чисел, чтобы выбрать число от 1 до 4, которое будет использоваться для выбора соответствующего ответа на каждый ответ. Используйте оператор switch для выдачи ответов.

Шаг 3: Измените программу, чтобы подсчитать количество правильных и неправильных ответов, набранных студентом. После того, как студент наберет 10 ответов, ваша программа должна рассчитать процент правильных ответов.

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

//Function declaration
void getInput(int& userAnswer);
int randomFactors(int a, int b, int randomNumbmer1, int randomNumber2);
int multiply(int correctAnswer, int randomNumber1, int randomNumber2);
int randomRight(int right1, int right2, int randomMessege);
int randomWrong(int wrong1, int wrong2, int randomMessege);

// Main Program
int main()
{
    //Variable declaration
    int correctAnswer = 0,
        userAnswer = 0;
    int randomMessege = 0;
    int right1 = 1,
        right2 = 4;
    int wrong1 = 1,
        wrong2 = 4;
    int cCounter = 0,
        iCounter = 0;

    //While loop counts the number of times user gives an answer
    int count = 0; //control variable for while loop 
    while (count < 10)
    {
        //do while loop for the program to exit when user enters "-1" 
        do
        {
            int a = 0,
                b = 9,
                randomNumber1 = 0,
                randomNumber2 = 0;
            //Function call
            randomFactors(a, b, randomNumber1, randomNumber2);
            multiply(correctAnswer, randomNumber1, randomNumber2);
            getInput(userAnswer);

            /*if else to check if the answer is correct and
            to give another chance if the user is wrong*/
            //icounter and cCounter keep track of the number of correct and incorrect answers

            while(userAnswer != correctAnswer)
            {
                randomWrong(wrong1, wrong2, randomMessege);
                getInput(userAnswer);
                iCounter = iCounter + 1;
            }
            randomRight(right1, right2, randomMessege);
            cCounter = cCounter + 1;
        } while (userAnswer > -1); //end of do while loop

        if (count == 10)
        {
            int percentage = (cCounter / 10) * 100;
            if (percentage >= 75)
            {
                cout << "You have scored " << percentage << "%. Congratulations, you are ready to go to the next level!";
            }
            else
            {
                cout << "You have scored " << percentage << "%. Please ask your instructor for extra help.";
            }
            count, iCounter, cCounter = 0;
        }
        count++;
    }
}

//Function defination
int randomFactors(int a, int b, int randomNumber1, int randomNumber2)
{
    srand(time(0));
    randomNumber1 = rand() % (b + 1) + a;
    randomNumber2 = rand() % (b + 1) + a;
    cout << "How much is " << randomNumber1 << " times " << randomNumber2 << "?\n";
    return randomNumber1, randomNumber2;
}
void getInput(int& userAnswer)
{
    cout << "Enter your answer (-1 to exit):\n";
    cin >> userAnswer;
}
int multiply(int correctAnswer, int randomNumber1, int randomNumber2)
{
    correctAnswer = randomNumber1 * randomNumber2;
    return correctAnswer;
}
int randomRight(int right1, int right2, int randomMessege)
{
    srand(time(0));
    randomMessege = (rand() % (right2 + 1) + right1);
    switch (randomMessege)
    {
    case 1: cout << "Very good!";

    case 2: cout << "Excellent!";

    case 3: cout << "Nice work!";

    case 4: cout << "Keep up the good work!";
    }
    cout << endl << endl;
    return randomMessege;
}
int randomWrong(int wrong1, int wrong2, int randomMessege)
{
    srand(time(0));
    randomMessege = (rand() % (wrong2 + 1) + wrong1);
    switch (randomMessege)
    {
        case 1: cout << "No. Please try again.";

        case 2: cout << "Wrong. Try once more.";

        case 3: cout << "Don't give up!";

        case 4: cout << "No. Keep trying.";
    }
    cout << endl << endl;
    return randomMessege;
}```[![Second picture is of the output I am getting and first is the expected output.[![\]\[1\]][1]][1]][2]


  [1]: https://i.stack.imgur.com/nItE5.png
  [2]: https://i.stack.imgur.com/r6Cv0.png
...