Member 13251426 Ответов: 2

Как я могу закодировать это в C# с использованием массивов


потратили много часов, пытаясь решить эту проблему, но безуспешно. использование C#

Местное бюро водительских прав попросило вас создать приложение, которое оценивает письменную часть экзамена на водительские права. Экзамен состоит из 20 вопросов с множественным выбором. Вот правильные ответы:

1. B 2. D 3. A 4. A 5. C
6. A 7. B 8. A 9. C 10. D
11. B 12. C 13. D 14. A 15. D
16. C 17. C 18. B 19. D 20. A
Ваша программа должна хранить эти правильные ответы в массиве. Программа должна прочитать ответы студента на каждый из 20 вопросов из текстового файла и сохранить ответы в другом массиве. (Создайте свой собственный текстовый файл для тестирования приложения). После того, как ответы студента будут прочитаны из файла, программа должна отобразить сообщение, показывающее, сдал ли студент экзамен или не прошел. (Чтобы сдать экзамен, учащийся должен правильно ответить на 15 из 20 вопросов.) Затем он должен отобразить общее количество правильно отвеченных вопросов, общее количество неправильно отвеченных вопросов и список, показывающий номера вопросов из неправильно отвеченных вопросов.

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

использование системы;
использование системы.Коллекции.Общий;
использование системы.ComponentModel;
используя системы.Сведения;
использование системы.Рисование;
использование System. Linq;
используя системы.Текст;
использование системы.Нарезание резьбы.Задачи;
использование системы.Окна.Формы;
использование системы.ИО;

пространство имен WernerCh7_4
{
общественности частичного класс form1 : форма
{
открытый form1()
{
метод InitializeComponent();
}

частный недействительными обработчика button1_click(объект отправителя, EventArgs в электронной)
{
int score = 0;
инт пропустил = 0;
string[] lines = файл.ReadAllLines("Answers/Answers.txt");
строка[] correctAnswers = { "Б", "Д", "А", "В", "С", "А", "Б", "В", "С", "Д", "Б", "С", "D", "С", "Д", "С", "С", "Б", "Д", "А" };
string[] userAnswers = null;

пробовать
{

если (строки.Длина != 0)
{
userAnswers = lines[0]. Split(new char[] { ' ' });
}

if (userAnswers != null)
{

List & lt;int32 & gt; wrongQuestions = новый список & lt;int32>();

for (int index = 0; index < correctAnswers.Длина; индекс++)
{
if (userAnswers[index].Equals (correctAnswers[index])) оценка++;
еще неправильные вопросы.Добавить (индекс + 1);
}
если (оценка >= 15)
{
этикетка 1.Текст = ("Перевал");
}
ещё
{
этикетка 1.Текст = ("Не");

}
метка2.Текст = результат.ToString("N");
пропущено = 20 очков;
этикетка 3.Текст = пропущен.ToString("N");

Ящик для сообщений.Show ("неправильные вопросы:" + строка.Присоединиться(",", wrongQuestions.Метод toArray()));

}
}
поймать (исключение бывший)
{
Ящик для сообщений.Показать (например, сообщение);
}
}
}
}

2 Ответов

Рейтинг:
2

Patrice T

Цитата:
потратили много часов, пытаясь решить эту проблему, но безуспешно.

Программирование-это не вопрос удачи, это вопрос усвоения уроков и методов и их применения.
Сформулируйте свою проблему в коде, чтобы получить некоторую помощь.

Мы не делаем вашу домашнюю работу.
Домашнее задание предназначено не для того, чтобы проверить ваши навыки просить других людей выполнять вашу работу, а для того, чтобы заставить вас думать и помочь вашему учителю проверить ваше понимание пройденных вами курсов, а также проблем, возникающих при их применении.
Любая ваша неудача поможет учителю выявить ваши слабости и наметить меры по их исправлению.
Любая ваша неудача поможет вам узнать, что работает, а что нет, это называется "методом проб и ошибок".
Так что попробуйте, перечитайте свои уроки и начинайте работать. Если вы застряли на конкретной проблеме, покажите свой код и объясните эту точную проблему, мы можем помочь.

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

Идея "развития" заключается в том, что это слово предполагает: "систематическое использование научно-технических знаний для достижения конкретных целей или требований." BusinessDictionary.com[^]
Это не то же самое, что "быстро гуглите и сдавайтесь, если я не могу найти точно правильный код".


Member 13251426

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

Patrice T

"Учитель признался нам, что понятия не имеет, как это сделать, потому что его просто бросили в класс, чтобы научить этому"
Это означает, что ваш учитель недостаточно квалифицирован, чтобы преподавать в вашем классе, и что ожидается неудача.

Рейтинг:
1

OriginalGriff

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

private string[] ReadStudent(string path)
    {
    return File.ReadAllLines(path);
    }

Затем напишите метод "process" :
private int[] ProcessStudent(string[] shouldBe, string[] was)
    {
    if (shouldBe.Length != was.Length)
        {
        throw new ArgumentException("Incorrect number of solutions!");
        }
    ...
    return new int[0];
    }
(Мы рассмотрим это через мгновение)
И метод "отображения":
private void DisplayResults(string[] shouldBe, int[] StudentErrors)
    {
    ...
    }

Ваш код для их использования становится намного более читабельным:
string[] correctAnswers = { "B", "D", "A", "A", "C", "A", "B", "A", "C", "D", "B", "C", "D", "A", "D", "C", "C", "B", "D", "A" };
string[] studentAnswers = ReadStudent("Answers\\Answers.txt");
int[] studentErrors = ProcessStudent(correctAnswers, studentAnswers);
DisplayResults(correctAnswers, studentErrors);

Результаты отображения могут вычислять числа, необходимые для печати, только по двум параметрам:
Количество правильных ответов - это длина массива correctAnswers, минус длина массива studentErrors.
Количество неправильных ответов - это длина массива studentErrors.
Номера вопросов, которые были неправильными, находятся в массиве studentErrors.

Я оставлю это как упражнение для читателя - это довольно просто!

"Настоящая работа" выполняется в методе ProcessStudent - и это довольно просто, если вы познакомились с коллекциями C#, такими как класс List<>, Но я предполагаю, что вы этого не сделали, поскольку массивы - плохой способ выполнить все это упражнение, если вы знаете о коллекциях!

Поэтому мы сделаем это с массивами.
Начните с объявления временного массива для хранения неправильных номеров ответов - мы сделаем его достаточно большим, чтобы вместить действительно плохого ученика:
int[] wrong = new int[shouldBe.Length];

Теперь мы хотим посмотреть на данные ответы и заполнить неправильные ответы. Для этого нам нужны индексы:
int[] wrong = new int[shouldBe.Length];
int wrongIndex = 0;
for (int i = 0; i < shouldBe.Length; i++)
    {
    //...
    }
Внутри цикла это тоже довольно просто: проверьте ответ, и если он неправильный, добавьте число в массив ошибок:
if (shouldBe[i] != was[i])
    {
    wrong[wrongIndex++] = i + 1;
    }
Индекс основан на нуле,поэтому нам нужно добавить один, чтобы получить номер вопроса на основе одного.
Теперь все, что нам нужно сделать, это вернуть только номера вопросов об ошибках в" неправильном " массиве:
int[] justTheWrongOnes = new int[wrongIndex];
for (int i = 0; i < wrongIndex; i++)
    {
    justTheWrongOnes[i] = wrong[i];
    }
return justTheWrongOnes;
И мы закончили!

Однако я бы посоветовал вам прочитать и понять это, а не копировать и вставлять его в свой код и передавать: если вы передадите это точно так, как я написал, ваш наставник будет знать, что вы не писали it...so прочтите его, поймите и подумайте о подобном решении, которое вы можете написать сами.