2014-09-25 2 views
-3

Эй, ребята, я пытаюсь работать над этим заданием, которое у меня есть. Я новичок в программировании, и это мое третье задание. Любая помощь будет оценена по достоинству. Я не уверен, что im на правильном пути или нет. вот что я должен сделать:C# случайные операторы и математические проблемы, do loop

Позволяет пользователю вводить числовой ответ на математическую проблему и отображать средний балл. Пользователю будет разрешено отвечать на множество математических задач по своему усмотрению. После каждой записи мы будем отображать текущий средний балл. Разница между циклом while и циклом do заключается в том, что цикл while проверяет условие перед запуском своего кодового блока, где цикл do будет выполнять свой блок кода, а затем проверить условие. Следовательно, имена цикла предварительного теста для цикла while и post-test для цикла do. Поскольку цикл do является циклом посттеста, он всегда будет выполнять свой блок кода один раз с минимальным минимумом.

эти шаги им пытаются следовать:

Внутри основного метода блок кода, который мы собираемся создать сделать петлю. Преимущество цикла do заключается в том, что он всегда будет выполняться один раз. В этом приложении мы воспользуемся этим преимуществом, чтобы повторить несколько шагов. Следующие шаги - это то, что мы хотим повторить:

  1. Очистить консоль Окно дисплея. (Это приведет к загромождению отображения дисплея)
  2. Использование случайного объекта для получения/хранения двух случайных чисел для математической задачи.
  3. Случайно решите, какой оператор математики использовать (+ - * /) и сохраните символ.
  4. Отобразить заголовок приложения и математическую проблему.
  5. Получите ответ от пользователя и сохраните его в переменной (т. Е. «Вход»).
  6. Преобразование переменной (ввода) из строки в двойную или целую.
  7. На основе математического символа выведите правильный ответ, используя случайные числа.
  8. Если пользовательский ввод соответствует правильному ответу, добавьте значение вопроса вопроса к полученному сумме.
  9. Добавьте значение вопроса к точкам возможного общего количества.
  10. Отображать сообщение с полученными очками, возможными и средними (заработанные/возможные).
  11. Отобразите сообщение с вопросом, хотите ли они выйти или получить новую математическую проблему.
  12. Приостановить отображение и получить ответ пользователя о выходе или продолжить.!
using System; 
    using System.Collections.Generic; 
    using System.Linq; 
    using System.Text; 
    using System.Threading.Tasks; 

    namespace MathProblems 
    { 
     class Program 
     { 
      static void Main(string[] args) 
      { 
       string input; 
       double totalPoints = 0; 
       double userEarnedPoints = 0; 
       double average = 0; 
       int number1 = 0; 
       int number2 = 0; 
       int operators = 0; 
       int answer = 0; 
       double correctAnswer = 0; 
       int mathProblem = 0; 

       do 
       { 
        Console.Clear(); 
        Random number = new Random(); 
        number1 = number.Next(1, 31); 
        number2 = number.Next(1, 31); 
        operators = number.Next(1, 5); // 1 = add, 2 = minus, 3 = multiply, 4 = divide 
        Console.WriteLine("\tMath Problems\n"); 

        switch (operators) 
        { 
         case 1: 
          answer = number1 + number2; 
          break; 
         case 2: 
          answer = number1 - number2; 
          break; 
         case 3: 
          answer = number1 * number2; 
          break; 
         case 4: 
          answer = number1/number2; 
          break; 
         default: 
          break; 


        } 
        //if (operators == 1) 
        //{ 
        // Console.WriteLine("{0} + {1} = ", number1, number2); 

        //} 
        //else if (operators == 2) 
        //{ 
        // Console.WriteLine("{0} - {1} = ", number1, number2); 
        //} 
        //else if (operators == 3) 
        //{ 
        // Console.WriteLine("{0} * {1} = ", number1, number2); 
        //} 
        //else if (operators == 4) 
        //{ 
        // Console.WriteLine("{0}/{1} = ", number1, number2); 
        //} 
        //break; 


       } while (true); 

       Console.ReadLine(); 
+5

Так что это вопрос? –

+0

Я бы сказал, да, ты на правильном пути. 'answer', вероятно, должен быть' double' для обработки деления, например, 7/2. –

+3

Вы создаете новый экземпляр «Random» в цикле - это плохая идея. См. Http://csharpindepth.com/Articles/Chapter12/Random.aspx Теперь, каков ваш точный вопрос? Вы предоставили свое задание и то, что вы сделали до сих пор, но нам нужно точно знать, что вы просите. Где вы застряли? –

ответ

1

Для того, чтобы получить пользовательский ввод, что вам нужно сделать Console.ReadKey() (для одного символа) или Console.ReadLine() (для строки символов завершенного Enter). Затем вы можете захватить этот ввод в переменной, а затем выполнить сравнение с ним, чтобы получить ответ пользователя или определить, хотите ли они продолжить или нет.

Вам также нужно будет проверить, что ввод был целым числом. Вы можете использовать int.TryParse() для этого. Он вернет true, если строка была целым числом и сохранит целое число в параметре out.

Затем вы можете сравнить userAnswer с реальным ответом, чтобы узнать, правильно ли они взяли его.Кроме того, похоже, что вам нужно, чтобы увеличить общие проблемы и оценки пользователей (когда они получают ответ правильный)

Один из способов сделать это будет:

{ 
    var rnd = new Random(); 
    var quit = false; 
    var userScore = 0; 
    var totalProblems = 0; 
    var percentCorrect = 0d; 

    while (!quit) 
    { 
     Console.Clear(); 

     var number1 = rnd.Next(1, 31); 
     var number2 = rnd.Next(1, 31); 
     var operation = rnd.Next(1, 5);    
     string operatorString; 
     int answer; 
     totalProblems++; 

     Console.WriteLine("\tMath Problem:"); 
     Console.WriteLine("\t-------------"); 

     switch (operation) 
     { 
      case 1: 
       answer = number1 + number2; 
       operatorString = "+"; 
       break; 
      case 2: 
       answer = number1 - number2; 
       operatorString = "-"; 
       break; 
      case 3: 
       answer = number1 * number2; 
       operatorString = "*"; 
       break; 
      case 4: 
       answer = number1/number2; 
       operatorString = "/"; 
       break; 
      default: 
       answer = 0; 
       operatorString = "?"; 
       break; 
     } 

     Console.WriteLine("\t{0} {1} {2}", number1, operatorString, number2); 

     Console.Write("\nEnter your answer here (round down if necessary): "); 
     var input = Console.ReadLine(); 
     int inputAsInt; 

     while (!int.TryParse(input, out inputAsInt)) 
     { 
      Console.Write("Answer must be an integer. Try again: "); 
      input = Console.ReadLine(); 
     } 

     if (inputAsInt == answer) 
     { 
      Console.WriteLine("Correct!"); 
      userScore++; 
     } 
     else 
     { 
      Console.WriteLine("Sorry, the correct answer was: {0}", answer); 
     } 

     percentCorrect = Math.Round((double)userScore/totalProblems * 100, 2); 

     Console.WriteLine("\nYou have answered {0} of {1} questions correctly, " + 
      "for a total of {2}%.", userScore, totalProblems, percentCorrect); 

     Console.Write("\nPress 'q' to quit, or any other key to continue... "); 
     if (Console.ReadKey().Key == ConsoleKey.Q) quit = true; 
    } 

    var letterGrade = 
     percentCorrect < 60 ? "F" 
     : percentCorrect < 67 ? "D" 
     : percentCorrect < 70 ? "D+" 
     : percentCorrect < 73 ? "C-" 
     : percentCorrect < 77 ? "C" 
     : percentCorrect < 80 ? "C+" 
     : percentCorrect < 83 ? "B-" 
     : percentCorrect < 87 ? "B" 
     : percentCorrect < 90 ? "B+" 
     : percentCorrect < 93 ? "A-" 
     : "A"; 

    Console.WriteLine("\n\nThank you for playing. You've earned you a letter " + 
     "grade of: {0}", letterGrade); 
    Console.Write("\nPress any key to exit..."); 
    Console.ReadKey(); 
} 
+0

@ kegs88 Не уверен, что это отвечает на ваш вопрос или нет? –

Смежные вопросы