Member 13513329 Ответов: 3

Создание викторины на языке Си#


Приветствую вас, я работаю над проектом для школы (поэтому мне хотелось бы получить совет или примеры, но нужно сделать эту работу самому). Единственный способ, которым я добрался до этого, - это смотреть видео на youtube. Теперь мне нужна более конкретная помощь. Ниже приводится описание задания, а затем описание того, где я нахожусь и что ищу. Все делается на языке Си#
Назначение:
Программа должна отображать вопросы, по одному, и возможные ответы, а также принимать ответ от пользователя. Если ответ правильный, программа должна перейти к следующему вопросу. Если это неверно, сохраните вопрос для второй попытки и перейдите к следующему вопросу. Когда список вопросов закончился, вопросы, которые были пропущены ранее или на которые были даны неверные ответы, должны быть показаны снова в их первоначальном порядке. Ведите подсчет правильных ответов для каждой категории вопросов и выводите итоговый подсчет после двух попыток. Кроме того, покажите правильный ответ, когда это необходимо, во втором раунде опроса.

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

The first time I have ever done this form of programming is 3 weeks ago so I am VERY new (have experience programming CNC machines but that is entirely different). I have managed to get the questions all in and when they are answered by the user it can register if it is correct or incorrect. I am trying to figure out how to get it to loop around a second time (after all the questions have been asked) to ask only the questions that were answered incorrectly, then at the end of the second loop (if necessary) give the number correct out of the total. I tried having Correct = 1 then at the end of the program put a line in for it to add "Correct" up but it only seems to register 1 and not the 10 times it should.
Любая помощь будет очень признательна.

Suvendu Shekhar Giri

Пожалуйста, поделитесь соответствующим блоком кода/проблемной частью.

Member 13513329

Код версии 4 со всеми вопросами и ответами заменен общей информацией.

общественная статический недействительным Questionone()
{
Приставка.Напишите("Q1) выбрать неправильно?\n1) справа\n2) Другое\n3) неправильно\n4) не выбирай\n");
int answer1 = преобразовать.ToInt32(Консоль.Линия чтения());
Приставка.ReadKey();
Строка message1 = (answer1 != 3) ? "Неверно" : "Правильно";
Приставка.WriteLine(message1);
}
общественная статический недействительным Questiontwo()
{
Приставка.Напишите("Q2) знаете ли вы?\n1) True\n2) False\n");
int answer2 = преобразовать.ToInt32(Консоль.Линия чтения());
Приставка.ReadKey();
Строка message2 = (answer2 != 2) ? "Неверно" : "Правильно";
Приставка.WriteLine(message2);
}
общественная статический недействительным Questionthree()
{
Приставка.Напишите("Q3) Выберите меня?\n1) я\n2) ты\n3) Их\n4) Они\n");
int answer3 = преобразовать.ToInt32(Консоль.Линия чтения());
Приставка.ReadKey();
Строка message3 = (answer3 != 1) ? "Неверно" : "Правильно";
Приставка.WriteLine(message3);
}
общественная статический недействительным Questionfour()
{
Приставка.Напишите("Q4), что происходит?\n1) влево\n2) вверх\n3) вниз\n4) вправо\n");
int answer4 = преобразовать.ToInt32(Консоль.Линия чтения());
Приставка.ReadKey();
Строка message4 = (answer4 != 3) ? "Неверно" : "Правильно";
Приставка.WriteLine(message4);
}
общественная статический недействительным Questionfive()
{
Приставка.Напишите("Q5) Выберите один из них?\n1) верх, середина и низ\n2) Да, нет, иначе\n3) может быть, Вероятно, нет, определенно нет\n4) Спереди, сзади, сбоку\n");
int answer5 = конвертировать.ToInt32(Консоль.Линия чтения());
Приставка.ReadKey();
Строка message5 = (answer5 != 2) ? "Неверно" : "Правильно";
Приставка.WriteLine(message5);
}
общественная статический недействительным Questionsix()
{
Приставка.Писать("В6) Думаю.\n1) True\n2) False\n");
int answer6 = преобразовать.ToInt32(Консоль.Линия чтения());
Приставка.ReadKey();
Строка message6 = (answer6 != 2) ? "Неверно" : "Правильно";
Приставка.WriteLine(message6);
}
общественная статический недействительным Questionseven()
{
Приставка.Напишите("Q7) вы ставите.\n1) True\n2) False\n");
int answer7 = конвертировать.ToInt32(Консоль.Линия чтения());
Приставка.ReadKey();
Строка message7 = (answer7 != 1) ? "Неверно" : "Правильно";
Приставка.WriteLine(message7);
}
общественная статический недействительным Questioneight()
{
Приставка.Напишите("Q8) вверх.\n1) True\n2) False\n");
int answer8 = преобразовать.ToInt32(Консоль.Линия чтения());
Приставка.ReadKey();
Строка message8 = (answer8 != 2) ? "Неверно" : "Правильно";
Приставка.WriteLine(message8);
}
публичный статический пустотный опросник()
{
Приставка.Напишите("Q9) Cool.\n1) True\n2) False\n");
int answer9 = конвертировать.ToInt32(Консоль.Линия чтения());
Приставка.ReadKey();
Строка message9 = (answer9 != 2) ? "Неверно" : "Правильно";
Приставка.WriteLine(message9);
}
общественная статический недействительным Questionten()
{
Приставка.Напишите("Q10) X произошло _ _ _ раз(ы) раньше.\n1) ноль\n2) один\n3) Два\n4) Три\n");
int answer10 = конвертировать.ToInt32(Консоль.Линия чтения());
Приставка.ReadKey();
Строка message10 = (answer10 != 2) ? "Неверно" : "Правильно";
Приставка.WriteLine(message10);
}
публичный статический пустота главный(строка[] аргументы)
{
Приставка.Писать("имя: меня\nCourse: мой курс\nAssignment название: мой тест\пдля ответа введите номер вашего выбора, затем нажмите клавишу Enter, затем любую клавишу.\Н");
Questionone();
Questiontwo();
Questionthree();
Questionfour();
Questionfive();
Questionsix();

Member 13513329

Вот последний маленький кусочек, которого там нет...

Questionseven();
Questioneight();
Questionnine();
Questionten();
Приставка.ReadKey();

3 Ответов

Рейтинг:
20

phil.o

Отвечая на ваш комментарий:
Счетчик-это просто переменная int, которую можно увеличить.
Вот несколько ссылок, вам нужно время, чтобы получить базовое представление о программировании ООП:
Классы (Руководство По Программированию На C# )
Примеры списков C#
Создайте тест с несколькими вариантами ответов с массивами на языке Си#
Это лишь некоторые общие рекомендации, чтобы показать вам, как вы можете структурировать свою программу в ООП-способе; они не являются прямым решением, которое вы можете скопировать/вставить.
Вы должны сначала изучить немного классов и списков, затем взять ручку и бумагу и записать процесс, используя свои новые знания. Довольно трудно дать вам осмысленное руководство, так как мы не знаем, как много из разработки c# вы уже знаете; единственное, что можно сказать, это то, что способ, которым вы сначала думали создать свою программу, придет и укусит вас очень быстро.
Наконец, вот какой-то общий алгоритм, который поможет вам начать работу:

int counter = 0;
List<Question> questions = new List<Question>();
// Fill this list with questions
List<Question> wrongAnswered = new List<Question>();
for each (Question question in questions) {
  // Present the question to the user and wait for the answer
  // If answer is correct -> increment counter by 1
  // If answer is incorrect, add the question to the wrongAnswered list
}
for each (Question question in wrongAnswered) {
  // Present the question to the user and wait for the answer
  // If answer is correct -> increment counter by 1
}
// Present the result (counter) to the user

Надеюсь, это поможет. Любезно.


Member 13513329

Спасибо за помощь, я узнаю об этой области и что делать.

Рейтинг:
0

phil.o

Вот общее руководство: при первом проходе вопросов добавьте к списку вопросов те, на которые не были даны правильные ответы. После первого прохода повторите этот список вопросов и задайте их во второй раз.


Member 13513329

Это вроде того, что я думал, что мне придется сделать, но это может быть действительно многослойным (по крайней мере, с тем, как я представляю себе это в своем уме, может быть, есть лучший способ?). Вот о чем я думаю (всего 2 вопроса):

К1
прямо пойдешь со 2 кварталом
неправильно перейти к Q2.2
К2
прямо 2/2 правильно
неверный переход к Q2.1
Q2.1
прямо 2/2 правильно
неправильно 1/2 правильно
Q2.2
право обратиться в В1.1
неверный переход к Q1.2
Q1.1
прямо 2/2 правильно
неправильно 1/2 правильно
Q1.2
право 1/2 правильно
неверный переход к Q2.3
Q2.3
право 1/2 правильно
неправильно 0/2 правильно

phil.o

Это не очень хорошее решение, так как оно даст вам экспоненциальное число случаев.
Почему бы не пойти по пути ООП, создав вопрос класса со всеми соответствующими полями (текст вопроса, выбор и правильный ответ), а затем создать список вопросов, по которым вы сможете перебирать? Во время итерации вы можете увеличить счетчик, если получен правильный ответ, или добавить вопрос в список "второй шанс", если ответ был неправильным. Затем повторите список второго шанса, если это необходимо.

Member 13513329

Как бы я это сделал? Можете ли вы привести пример или ссылку на него? Я не знаю, как сделать контратаку или получить второй шанс. Я опубликовал то, что у меня есть для кода так далеко выше, чтобы вы могли видеть, где я нахожусь.

Рейтинг:
0

W∴ Balboos, GHB

Не делая за вас работы, я дам вам несколько подходов, которые я бы использовал. Я предполагаю, что вы не подключены к базе данных.


    Я бы создал структуру данных
  • В нем будет содержаться вопрос
  • Он будет содержать все, что вы хотите сервер в качестве ответа
  • Он будет содержать поле для пометки Вопрос Правильный
  • Он также может содержать поля для подсчета количества попыток и т. д., В зависимости от того, что еще вы хотите сделать.


Массив этих структур может быть пройден и обработан любым способом, который вы пожелаете.

Научиться понимать, создавать и использовать структуры данных поможет вам очень хорошо !