Как заполнить генератор случайных чисел текущим временем, отобразить заголовок и назначить случайные даты рождения X количеству людей (C ++) - PullRequest
0 голосов
/ 05 марта 2019

Я работаю над заданием, в котором мне нужно создать программу, которая:

  1. Запросит у пользователя его имя
  2. Запрашивает у пользователя число избирателей
  3. Сохранить введенное пользователем значение
  4. Сообщить об ошибках, если пользователь вводит отрицательное число или символ
  5. Заполнить генератор случайных чисел текущим временем
  6. отображать заголовокfor (voterCount = 0; voterCount

  7. использовать генератор случайных чисел, чтобы:

    генерировать bYear (ограничено между 1900 и 2000)

    сгенерировать в месяц

    сгенерировать bDay (предел 1 и 31)

У меня есть первые 4 вниз:

#include <iostream>
#include <cstdlib>
#include <time.h>

using namespace std;

int main()
{

    int  numVoters;
    char name[35]; // Variable that stores "Name" of user added max char to be 25
    const int MIN_MONTH = 1;
    const int MAX_MONTH = 12;
    int bMonth;


    cout << "Please enter your first name: ";
    cin.getline(name,35); // used getline because without getline I kept getting a single char

    cout << "Hello " << name << endl;
    cout << "Please enter amount of voters: ";
    cin  >> numVoters;
    while (numVoters > 0)
    {
        cout << "You entered: " <<numVoters << endl;
    }
        cout << "ERROR! ERROR! WRONG DATA TYPE PLEASE RUN THE PROGRAM 
        AGAIN";

    return 0;

    }

Я не знаючто делать дальше Я пытался продолжить, используя то, что вижу в Интернете, но когда я это делаю, я получаю бесконечный цикл из числа избирателей

#include < iostream > 
#include < cstdlib > 
#include < time.h >

  using namespace std;

int main() {

  int numVoters;
  char name[35]; // Variable that stores "Name" of user added max char to be 25
  const int MIN_MONTH = 1;
  const int MAX_MONTH = 12;
  int bMonth;

  cout << "Please enter your first name: ";
  cin.getline(name, 35); // used getline because without getline I kept getting a single char

  cout << "Hello " << name << endl;
  cout << "Please enter amount of voters: ";
  cin >> numVoters;
  while (numVoters > 0) {
    cout << "You entered: " << numVoters << endl;
  }
  cout << "ERROR! ERROR! WRONG DATA TYPE PLEASE RUN THE PROGRAM AGAIN";

  unsigned seed = time(0); // gets current computer time
  srand(seed); // seeds the random number gen

  for (numVoters = 0; numVoters < 0; numVoters++)

  {

    bMonth = rand() % (MAX_MONTH - MIN_MONTH + 1) + MIN_MONTH;
    cout << "Random month: " << bMonth << endl;
  }
  return 0;

}

Помощь с # 5-7

Алгоритм.

Ответы [ 2 ]

0 голосов
/ 05 марта 2019
while (numVoters > 0)
{
    cout << "You entered: " <<numVoters << endl;
}
    cout << "ERROR! ERROR! WRONG DATA TYPE PLEASE RUN THE PROGRAM 
    AGAIN";

Приведенный выше код говорит, что до тех пор, пока numVoters больше 0, бесконечно выводите numVoters.Вам нужен оператор if else, так как вы хотите сказать, что если число избирателей превышает 0, выведите число избирателей и продолжайте выполнять задачи 5, 6 и 7. В противном случае вы хотите вывести ошибку.В псевдокоде:

if (numVoters > 0) {
    output numVoters
    do tasks 5,6,7
}
else {
    output error
    return 0
}

Или вы можете просто вместо этого сделать, если numVoters равен или меньше 0, вывести ошибку и выйти из программы.Поместите код для задачи 5,6,7 после цикла if, чтобы он выполнялся только при отсутствии ошибки:

if (numVoters =< 0) { 
    output error
    return 0
}
//code for 5,6,7 after and outside of the if loop

Также (voterCount = 0; voterCount < numVoters; voter++), мне кажется (int voterCount = 0; voterCount < numVoters; voterCount++).

В общем, я думаю, вы неправильно понимаете циклы while и for.Вы должны прочитать их, чтобы понять, где вы ошиблись.

0 голосов
/ 05 марта 2019

Как кто-то сказал, что ваш цикл while бесконечен, если задано правильное значение

gettimeofday () информация может быть найдена здесь http://man7.org/linux/man-pages/man2/gettimeofday.2.html

rand_r () информация может быть найдена здесь https://linux.die.net/man/3/rand_r

Держите это под рукой, это хорошие рекомендации для будущей курсовой работы!

#include <iostream>
#include <cstdlib>
#include <time.h>
#include <sys/time.h>

using namespace std;
const int MAX_LENGTH = 35;
const int MAX_MONTH = 12;
const int MAX_DAY = 31;
const int MAX_YEAR = 100;
void getName(char name []);
void sayName(char name []);
int getVoters();

int main() {

  int numVoters;
  char name[MAX_LENGTH]; // Variable that stores "Name" of user added max char to be 25

  struct timeval tv;

  getName(name);
  sayName(name);
  numVoters = getVoters();

  unsigned int seed = time(0); // gets current computer time
  gettimeofday(&tv,NULL);

  int day = 0;
  int month = 0;
  int year = 0;
  int voterNumber = 1;
  for (int i = numVoters;i > 0;i--)
  {
    seed = (unsigned int)((tv.tv_sec+tv.tv_usec)*i);
    month = rand_r(&seed)%MAX_MONTH + 1;
    day = rand_r(&seed)%MAX_DAY + 1;
    year = rand_r(&seed)%(MAX_YEAR+1) + 1900;

    cout<<"Voter #"<<voterNumber++<<" DD/MM/YYY DOB: ";
    cout<<day<<"/"<<month<<"/"<<year<<endl;
  }
  return 0;

}



void getName(char name[])
{
    cout<<"Please enter your first name: ";
    cin.getline(name,35);
}

void sayName(char name [])
{
    cout<<"Hello "<<name<<endl;
}

int getVoters()
{
    int voters = -1;
    cout<<"Please enter amount of voters: ";
    cin>>voters;

    if(voters < 0)
    {
        cout << "ERROR! ERROR! WRONG DATA TYPE PLEASE RUN THE PROGRAM AGAIN";
    }
    else if(voters == 0)
    {
        cout<<"Either you entered 0 or an invalid date type";
    }
    else
    {
        cout << "You entered: " << voters << endl;
    }
    return voters;

}
...