Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 09.10.2016, 13:05   #1
Sergey Dmitrievich
Новичок
Джуниор
 
Регистрация: 09.10.2016
Сообщений: 2
По умолчанию Где ошибка в коде? С#

Задание:
Формат входного файла
Первая строка входного файла содержит число жителей n (3 ≤ n ≤ 9999, n нечетно). Вторая строка содержит описание массива M, состоящее из n положительных вещественных чисел, разделенных пробелами. Гарантируется, что все элементы массива M различны, их значения имеют точность не более двух знаков после запятой и не превышают 10^6.
Формат выходного файла
В выходной файл выведите три целых положительных числа, разделенных пробелами — индекс минимального, среднего и максимального чисел.
Пример на фото
Моя программа выдает не правильный ответ, в чем ошибка?
Код:
Код:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO;
using System.Globalization;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main()
        {
            string text = File.ReadAllText(@".in");
            string[] numberStrings = text.Split(new char[] { ' ', '\n' }, StringSplitOptions.RemoveEmptyEntries);
            short valuesCount = short.Parse(numberStrings[0]); // <<< количество элементов в массиве

            float[] values = new float[valuesCount]; // <<< создание массива длиной valuesCount

            for (short index = 0; index < valuesCount; ++index)
            {
                values[index] = float.Parse(numberStrings[index + 1], CultureInfo.InvariantCulture.NumberFormat); // <<< заполнение массива
            }


            using (StreamWriter sw = new StreamWriter(@"out"))
            {

                int min = 0;
                float BigMin = values.Min();
                int max = 0;
                float BigMax = values.Max();
                int average = 0;
                float BigAverage = values.Average();
                float[] massive = new float[valuesCount];
                for (short c = 0; c < values.Length; c++) 
                {
                    for (short i = 0; i < values.Length; i++)// <<< нахождение среднего числа
                    {
                        massive[i] = Math.Abs(BigAverage - values[i]);
                    }
                    float massiveMinimal = massive.Min();
                    for (short i = 0; i < massive.Length; i++)
                    {
                        if (massive[i] == massiveMinimal) average = i + 1;
                    }


                    if (values[c] == BigMin) // индекс минимального
                    {
                        min = c + 1;
                    }
                    if (values[c] == BigMax) // индекс максимального
                    {
                        max = c + 1;
                    }

                }
                sw.Write("{0} {1} {2}", min, average, max);
            }
        }
    }
}
Изображения
Тип файла: jpg Безымянный.jpg (8.9 Кб, 53 просмотров)
Sergey Dmitrievich вне форума Ответить с цитированием
Старый 09.10.2016, 13:31   #2
Aleksandr H.
2 the Nation Glory
Старожил
 
Аватар для Aleksandr H.
 
Регистрация: 27.05.2014
Сообщений: 3,289
По умолчанию

так не вариант искать индекс минимального?
Код:
int indexMin = Array.IndexOf(values, values.Min());
Кто умер, но не забыт, тот бессмертен.
Лао-Цзы.
Aleksandr H. вне форума Ответить с цитированием
Старый 09.10.2016, 14:29   #3
Sergey Dmitrievich
Новичок
Джуниор
 
Регистрация: 09.10.2016
Сообщений: 2
По умолчанию

Вариант. Но скорее всего программа выдает неправильный ответ из-за неправильного нахождения среднего числа? Ведь ваша запись не поменяла сути в программе
Sergey Dmitrievich вне форума Ответить с цитированием
Старый 09.10.2016, 15:08   #4
Aleksandr H.
2 the Nation Glory
Старожил
 
Аватар для Aleksandr H.
 
Регистрация: 27.05.2014
Сообщений: 3,289
По умолчанию

Вы не написали что именно у Вас неверно выдало. Ваш код на этих входных данных дает ответ согласно требованию.

сравнивал с консолью
Код:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO;
using System.Globalization;


class myFirstProgram
{
    static void Main(string[] args)
    {

        string text = "5 10.00 8.7 0.01 5.00 3.00";
        string[] numberStrings = text.Split(new char[] { ' ', '\n' }, StringSplitOptions.RemoveEmptyEntries);
        short valuesCount = short.Parse(numberStrings[0]); // <<< количество элементов в массиве

        float[] values = new float[valuesCount]; // <<< создание массива длиной valuesCount

        for (short index = 0; index < valuesCount; ++index)
        {
            values[index] = float.Parse(numberStrings[index + 1], CultureInfo.InvariantCulture.NumberFormat); // <<< заполнение массива
        }


        
            int min = 0;
            float BigMin = values.Min();
            int max = 0;
            float BigMax = values.Max();
            int average = 0;
            float BigAverage = values.Average();
            float[] massive = new float[valuesCount];
       
        foreach (double el in values) Console.Write("{0:f2} \t",el);
        Console.WriteLine();
        Console.WriteLine("\nMIN      \t"+ values.Min().ToString()+"\t"+(Array.IndexOf(values, values.Min())+1));
        Console.WriteLine("AVG_MATH \t" + values.Average().ToString() + "\t" + Array.IndexOf(values, values.Average()));
        int averageIndx = 0;
        for(int i=1;i<values.Length;i++)
        {
            if(Math.Abs(values[i]-BigAverage)< Math.Abs(BigAverage-values[averageIndx]))
            {
                averageIndx = i;
            }
        }
        Console.WriteLine("AVG_MAS \t"+values[averageIndx].ToString()+"\t"+(averageIndx+1));
        Console.WriteLine("MAX     \t" + values.Max().ToString() + "\t" + (Array.IndexOf(values, values.Max()) + 1));



        Console.WriteLine("\n\nauthors solving");
        for (short c = 0; c < values.Length; c++)
            {
                for (short i = 0; i < values.Length; i++)// <<< нахождение среднего числа
                {
                    massive[i] = Math.Abs(BigAverage - values[i]);
                }
                float massiveMinimal = massive.Min();
                for (short i = 0; i < massive.Length; i++)
                {
                    if (massive[i] == massiveMinimal) average = i + 1;
                }


                if (values[c] == BigMin) // индекс минимального
                {
                    min = c + 1;
                }
                if (values[c] == BigMax) // индекс максимального
                {
                    max = c + 1;
                }

            }
            Console.Write("{0} {1} {2}", min, average, max);
        
        Console.ReadLine();

    }
}
Кто умер, но не забыт, тот бессмертен.
Лао-Цзы.
Aleksandr H. вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
спасите, добрые люди, пожаааааалуйста:3 где-то в коде закралась ошибка, потому что выводит левые числа, а где, понятия не имею:с typayababa Помощь студентам 9 19.11.2017 11:48
Где ошибка в коде? FlynnTaggart C# (си шарп) 1 07.10.2016 10:37
Где то ошибка в коде moshkin_ura JavaScript, Ajax 2 23.06.2012 15:53
Где ошибка в этом исходном коде на языке Си? Или ошибка в Excel? ArchiCurtis Помощь студентам 2 07.04.2012 14:16
Где ошибка в коде? levohotnik Microsoft Office Excel 3 28.10.2010 17:30