Форум программистов, компьютерный форум, киберфорум
C# .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.68/25: Рейтинг темы: голосов - 25, средняя оценка - 4.68
0 / 0 / 0
Регистрация: 29.11.2019
Сообщений: 8
.NET 4.x

Проверка правильного ответа при тестировании

29.11.2019, 16:01. Показов 5173. Ответов 11

Студворк — интернет-сервис помощи студентам
Добрый день.

Создаю программу на C# для тестирования на тему программирования, но не могу сделать так чтоб информация введенная пользователем сравнивалась с элементом массива в котором указан правильный ответ.

В коде указаны два одномерных массива. В одном вопросы,а в другом ответы на них (ответы стоят рандомные, не обращайте внимание там может стоять любое слово):
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
            String[] vopros = new string[5];
            vopros[0] = "В основе концепции объектно - ориентированного программирования лежит понятие";
            vopros[1] = "Перевод программ с языка высокого уровня на язык более низкого уровня обеспечивает программа";
            vopros[2] = "Алгоритм, в котором действия выполняются друг за другом, не повторяясь называется:";
            vopros[3] = "Логический тип данных объявляется служебным словом";
            vopros[4] = "Раздел переменных определяется служебным словом";
            
            
            //Масив ответов.
            String[] Answer = new string[5];
            Answer[0] = "1";
            Answer[1] = "2";
            Answer[2] = "3";
            Answer[3] = "4";
            Answer[4] = "5";
Ниже указан цикл вывода вопросов, а так же условие в котором переменная i должна сравниваться с массивом Answer (i- это ввод ответа пользователем, а Answer - это массив в котором есть элементы с ответами на вопросы). Если кто нибудь знает как сравнить элементы массива и введенный пользователем ответ, буду очень благодарен за помощь.

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
 
            String i;
            int S = 0; 
            foreach (string output in vopros) //Цикл
            {
                Console.Write ("\n" + output + "\n"); //Вывод вопросов.
                i = Console.ReadLine (); //Ввод ответа пользователем
                if (Answer == i) //Если ответ равняется элементу массива, то +1 бал, если нет 0
                {
                    S = S + 1; //+1 бал если ответ верен.
                }
                else
                {
                    S = S + 0; //Если ответ не совпадает 0 балов
                }
            }
            Console.Write("\n" + S); //Вывод балов после теста.
Я знаю что сравниваю выше в коде не элементы массива, а сам массив, но как сравнить именно элементы нигде не могу найти...
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
29.11.2019, 16:01
Ответы с готовыми решениями:

Передача по ссылке: ошибка при тестировании
Здравствуйте. Периодически сталкиваюсь со странной проблемой, то-ли отладчика VS, то-ли глобального бага .NET, то-ли собственной глупости....

Таймер, дающий 20 минут на ответы и вывод правильного ответа в тесте
Привет всем, помогите доделать программу тест. Нужно чтобы стартовал таймер обратного отчета(20 мин.) при нажатии на кнопку Регистрация. ...

Проверка правильного ввода пароля в поле текстбокс
private int i = 3000; На таймере: if (i == 0) { IncorrectPass.Text = "Неверный пароль!"; } if (this.TextBox.Text ==...

11
 Аватар для Immo
692 / 509 / 238
Регистрация: 02.10.2012
Сообщений: 1,741
29.11.2019, 16:43
Лучший ответ Сообщение было отмечено siways как решение

Решение

думаю в вашем случае, лучше использовать словарь, где будет ответ, например
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Dictionary<string, string> questions = new Dictionary<string, string>();
            questions.Add("2+3 = ", "5");
            questions.Add("1+1 = ", "2");
            questions.Add("3*2 = ", "6");
            questions.Add("10/2 = ", "5");
            questions.Add("12-11 = ", "1");
            foreach (var question in questions)
            {
                Console.Write(question.Key);
                string answer = Console.ReadLine();
                if (answer == question.Value)
                    Console.WriteLine("True");
                else
                    Console.WriteLine("False");
            }
1
 Аватар для sau
2773 / 2073 / 386
Регистрация: 22.07.2011
Сообщений: 7,820
29.11.2019, 16:43
siways, За каждым вопросом должен быть закреплен массив ответов и номер правильного ответа.
0
 Аватар для Immo
692 / 509 / 238
Регистрация: 02.10.2012
Сообщений: 1,741
29.11.2019, 17:11
Лучший ответ Сообщение было отмечено siways как решение

Решение

вот вариант с несколькими вариантами ответа, переделать думаю сможете без проблем
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
 Dictionary<string, string[]> questions = new Dictionary<string, string[]>();
            int points = 0;
            //список вопросов и массив ответов, где на нулевой позиции стоит номер ответа
            questions.Add("Какой формы земля?", new string[4] { "2", "Круглая", "Шарообразная", "Квадратная"});
            questions.Add("Это тупой тест?", new string[3] { "1", "Да", "Нет"});
            questions.Add("2 + 2 будет?", new string[5] { "3", "14", "532", "4", "332532" });
            questions.Add("Какого цвета небо?", new string[5] { "1", "Голубое", "Зеленое", "Красное", "Желтое" });
            questions.Add("Самая маленькая частица?", new string[6] { "5", "Нейтрон", "Протон", "Электрон", "Нейтрино", "Кварк" });
            foreach (var question in questions)
            {
                Console.Clear();
                Console.WriteLine(question.Key);
                //выводим варианты ответа
                for (int i = 1; i < question.Value.Count(); i++)
                    Console.WriteLine($"{i}. {question.Value[i]}");
                Console.Write("Ваш вариант ответа:");
                string answer = Console.ReadLine();
                //если он соответствует правильному то добавляем балл
                if (answer == question.Value[0])
                    points++;
            }
            Console.WriteLine($"Вы набрали {points} из {questions.Count}");
0
0 / 0 / 0
Регистрация: 29.11.2019
Сообщений: 8
29.11.2019, 17:25  [ТС]
Спасибо за помощь! Словарь отлично подойдет для данного тестирования

Добавлено через 11 минут
Immo, а как ты вывел варианты с первого и как присвоил им ключи чтоб при нажатии на клавишу цифру выбирался тот или иной вариант?

C#
1
2
3
4
5
//выводим варианты ответа
                for (int i = 1; i < question.Value.Count(); i++)
                    Console.WriteLine($"{i}. {question.Value[i]}");
                Console.Write("Ваш вариант ответа:");
                string answer = Console.ReadLine();
0
 Аватар для Immo
692 / 509 / 238
Регистрация: 02.10.2012
Сообщений: 1,741
29.11.2019, 17:30
не понимаю вопроса, у нас цикл идет не с 0го элемента, а с первого
на нулевой позиции массива стоит номер правильного ответа
0
0 / 0 / 0
Регистрация: 29.11.2019
Сообщений: 8
29.11.2019, 17:43  [ТС]
Immo, но здесь int i = 1 ты задал значение 1 и поставил условие что если элемент массива меньше одного то выйдет следующий элемент массива i++ который больше предыдущего?
0
 Аватар для Immo
692 / 509 / 238
Регистрация: 02.10.2012
Сообщений: 1,741
29.11.2019, 17:50
берем массив, например
C#
1
new string[6] { "5", "Нейтрон", "Протон", "Электрон", "Нейтрино", "Кварк" }
соответственно в нем 6 элементов, индексы соответственно 0,1,2,3,4,5
цикл
C#
1
for (int i = 1; i < question.Value.Count(); i++)
в данном случае начинается с 1 индекса, и соответствует значению "Нейтрон"
условие цикла
C#
1
i < question.Value.Count()
он будет продолжаться пока итерации переменной i меньше question.Value.Count(), она в данном случае равна 6
0
9 / 8 / 1
Регистрация: 24.10.2019
Сообщений: 21
29.11.2019, 17:54
Вот чего-то взбрело:

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
class Test
    {
        public Test(string question, string[] answers, int correctAnswer)
        {
            Question = question;
            Answers = answers;
            CorrectAnswer = correctAnswer;
        }
        public string Question { get; set; }
        public string[] Answers { get; set; }
        public int CorrectAnswer { get; set; }
    }
 
    class ProgrammingQuiz
    {
        int score = 0;
        Test[] tests = null;
        public ProgrammingQuiz()
        {
            tests = new Test[5] {
                new Test("В основе концепции объектно - ориентированного программирования лежит понятие",
                         new string[] { "объект", "язык", "память", "вантуз", }, 0),
                new Test("Перевод программ с языка высокого уровня" +
                        "на язык более низкого уровня обеспечивает программа",
                         new string[] { "отладчик", "ассемблер", "компилятор", "браузер", }, 2),
                new Test("Алгоритм, в котором действия выполняются" +
                         "друг за другом, не повторяясь называется:",
                         new string[] { "тупым", "острым", "прямым", "линейным",}, 2),
                new Test("Логический тип данных объявляется служебным словом",
                         new string[] { "delete", "int", "cat", "bool", }, 3),
                new Test("Раздел переменных определяется служебным словом",
                         new string[] { "var", "string", "for", "foreach", }, 0)
            };
        }
        static void Main(string[] args)
        {
            ProgrammingQuiz quiz = new ProgrammingQuiz();
 
            foreach (var test in quiz.tests)
            {
                quiz.PrintTest(test);
                string answer = quiz.GetUserAnswer();
                bool correctAnswer = (Int32.Parse(answer) - 1) == test.CorrectAnswer;
 
                if (correctAnswer)
                {
                    quiz.score++;
                }
                else
                {
                    quiz.score--;
                }
            }
 
            quiz.PrintResults();
        }
 
 
        void PrintTest(Test test){
            PrintTestQuestion(test.Question);
            PrintTestAnswers(test.Answers);
        }
 
        void PrintTestQuestion(string question){
            Console.WriteLine(question);
        }
 
        void PrintTestAnswers(string[] answers){
            for (int i = 0; i < answers.Length; i++)
            {
                Console.WriteLine($"{i + 1}: {answers[i]}");
            }
        }
 
        string GetUserAnswer(){
            return Console.ReadLine();
        }
 
        void PrintResults(){
            Console.WriteLine($"Your score is: {score}");
        }
    }
0
1152 / 860 / 263
Регистрация: 30.04.2009
Сообщений: 3,603
30.11.2019, 04:01
EMH, Main внутри класса внутри класса? А шо, так можно было?
0
9 / 8 / 1
Регистрация: 24.10.2019
Сообщений: 21
30.11.2019, 10:01
nicolas2008, Оба класса в одном скоупе. Индентация кривая
0
0 / 0 / 0
Регистрация: 29.11.2019
Сообщений: 8
30.11.2019, 14:46  [ТС]
Ребят всем спасибо за помощь, на самом деле очень помогли. Буду изучать данные коды. Надеюсь сам научусь это все делать.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
30.11.2019, 14:46
Помогаю со студенческими работами здесь

Проверка на правильность ответа
При правильном вводе слова приложение выводит, что оно записана не верно. Как этот моментик можно подправить? Основной код: ...

Проверка Правильного Ответа
Как мне вытащить ячейку =&gt; 1 из массива по ячейке =&gt; 10 foreach ($_SESSION ] as $key =&gt; $rowl) { foreach ($rowl as...

Как создать тест без правильного ответа, для сбора информации(ответа)
Как создать тест без правильного ответа, для сбора информации(ответа). К примеру мне нужно создать тест по профориентации, там нет...

Как сделать суммирование баллов при выборе правильного ответа?
Хочу сделать программу на на которой будут разные тематические вопросы при выборе правильного ответа будет начислено игроку 5-10 баллов...

В тесте, при присваивании ответов, иногда просто нет правильного ответа
В тесте, при присваивании ответов, иногда просто нет правильного ответа. Вот код ADOQuery1.SQL.Text:='SELECT pravotv FROM t2 WHERE...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru