public void BuildQuestionStatistics(KeyValuePair <string, QuestionStatistics> qStatistics)
        {
            _questions.WriteLine(qStatistics.Key);

            _questions.Write("Правильных ответов:");
            _questions.WriteLine(qStatistics.Value.RightAnswersAmount);

            _questions.Write("Неправильных ответов:");
            _questions.WriteLine(qStatistics.Value.WrongAnswersAmount);

            _questions.Write("Всего ответов:");
            _questions.WriteLine(qStatistics.Value.RightAnswersAmount +
                                 qStatistics.Value.WrongAnswersAmount);

            _questions.Write("Правильный ответ:");
            _questions.WriteLine(qStatistics.Value.RightAnswerIndex + 1);

            _temp.SetPos1();

            for (var i = 0; i < qStatistics.Value.AnswersDistribution.Length; i++)
            {
                _temp.Write(i + 1);
                _temp.WriteLine(qStatistics.Value.AnswersDistribution[i]);
            }

            _temp.GoBack();
            _temp.SetPos2();
            _temp.WriteLine();
            _temp.CreateChart("QuestionStatistics-" + qStatistics.Key.GetHashCode(),
                              "Ответы пользователей", _questions);
            _questions.WriteLine();
        }
        public void ToStream(Stream stream, DataAnalyserReport report)
        {
            _main.Write("Всего тестов:");
            _main.WriteLine(report.TotalAmountOfTests);

            _main.Write("Количество уникальных e-mail'ов:");
            _main.WriteLine(report.AmountOfUniqueEmails);

            BuildAttemptDistributionChart(report.AttemptDistribution);
            BuildResultDistributionChart(report.ResultDistribution);

            (var kDistr, var bDistr) = report.GetAdditionalInfo();

            if (kDistr != null && bDistr != null)
            {
                BuildNumericDistributionChart(kDistr, "KDistribution", "Распределение коэффициента K");
                BuildNumericDistributionChart(bDistr, "BDistribution", "Распределение коэффициента B");

                var distr = new DoubleNumericDistribution(kDistr.LeftBorder, kDistr.RightBorder,
                                                          bDistr.LeftBorder, bDistr.RightBorder, 10);

                foreach (var el in report.PersonStatistics)
                {
                    if (el.Value.AdditionalInfo != null)
                    {
                        distr.AddNumerics(el.Value.AdditionalInfo.Value.K,
                                          el.Value.AdditionalInfo.Value.B,
                                          el.Value.AdditionalInfo.Value.R);
                    }
                }

                BuildKAndBDistributionsChart(distr);
                BuildSigmaMinDistributionChart(distr);
                BuildSigmaMaxDistributionChart(distr);
            }

            foreach (var el in report.QuestionStatistics)
            {
                BuildQuestionStatistics(el);
            }

            _package.SaveAs(stream);
        }
        public void BuildAttemptDistributionChart(uint[] attemptDistribution)
        {
            _temp.SetPos1();

            for (var i = 0; i < attemptDistribution.Length; i++)
            {
                if (attemptDistribution[i] != 0)
                {
                    _temp.Write(i + 1);
                    _temp.WriteLine(attemptDistribution[i]);
                }
            }

            _temp.GoBack();
            _temp.SetPos2();
            _temp.WriteLine();
            _temp.CreateChart("AttemptDistribution", "Распределение попыток", _main);
        }