Отправляет email-рассылки с помощью сервиса Sendsay

RFpro.ru: Microsoft .NET

  Все выпуски  

RFpro.ru: Microsoft .NET


Хостинг портала RFpro.ru:
Московский хостер
Профессиональный ХОСТИНГ на базе Linux x64 и Windows x64

РАССЫЛКИ ПОРТАЛА RFPRO.RU

Лучшие эксперты по данной тематике

Асмик Гаряка
Статус: Советник
Рейтинг: 11022
∙ повысить рейтинг »
Micren
Статус: Профессор
Рейтинг: 1764
∙ повысить рейтинг »
Александр Чекменёв
Статус: Профессор
Рейтинг: 1335
∙ повысить рейтинг »

/ КОМПЬЮТЕРЫ И СОФТ / Программирование / Microsoft .NET : C#

Номер выпуска:241
Дата выхода:17.03.2013, 16:00
Администратор рассылки:Alexey G. Gladenyuk (Управляющий)
Подписчиков / экспертов:58 / 27
Вопросов / ответов:1 / 1

Консультация # 187205: Здравствуйте уважаемые эксперты! Помогите пожалуйста решить следующую задачу с помощью среды разработки Visual C# Express Edition 2010. Задача. В одномерном массиве, состоящем из n целочисленных элементов, вычислить: номер максимального элемента массива; произведение элементов массива, расположенных между первым и вторым нулевыми элемента...


Консультация # 187205:

Здравствуйте уважаемые эксперты! Помогите пожалуйста решить следующую задачу с помощью среды разработки Visual C# Express Edition 2010.

Задача.
В одномерном массиве, состоящем из n целочисленных элементов, вычислить: номер максимального элемента массива; произведение элементов массива, расположенных между первым и вторым нулевыми элементами. Преобразовать массив таким образом, чтобы в первой его половине располагались элементы, стоявшие в нечетных позициях, а во второй половине элементы, стоявшие в четных позициях.

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

Заранее благодарен.



Дата отправки: 14.03.2013, 15:45
Вопрос задал: alekseyvg (Посетитель)
Всего ответов: 1
Страница онлайн-консультации »


Консультирует Александр Чекменёв (Профессор):

Здравствуйте, alekseyvg!

Индексация везде с нуля. Т.о. элементы на нечётных позициях в {5,4,3,2} есть {4, 2}.

Код :
using System;
using System.Collections.Generic;
using System.Text;
using System.IO;

namespace ConsoleApplication2
{
    class Program
    {
        static void Main(string[] args)
        {
            // Загружаем целые числа из файла data.txt
            int[] numbers = loadFromFile("data.txt");

            // Вывод массива
            Console.WriteLine("Исходный массив: ");
            printNumbers(numbers);

            Console.WriteLine("Индекс максимального элемента: {0}", maxIndex(numbers));
            Console.WriteLine("Произведение между первыми нулями: {0}", multBetweenFirstAndSecondZeros(numbers));

            Console.WriteLine("Преобразованный массив:");
            transformNumbers(numbers);
            printNumbers(numbers);
        }

        // Загружает числа из файла
        // Подразумеваются, что числа разделены пробелами или переводами строки
        // Возвращает массив чисел
        static int[] loadFromFile(string fileName)
        {
            List<int> ns = new List<int>();
            using (TextReader reader = File.OpenText(fileName))
            {
                string text = reader.ReadToEnd();
                char[] separators = { ' ', '\n' }; // разделители
                string[] rawNums = text.Split(separators); // делим спложной текст на токены
                foreach (string s in rawNums)
                {
                    int x = int.Parse(s); // из текста в число
                    ns.Add(x); // добавляем число в список
                }
            }

            return ns.ToArray();
        }

        static void printNumbers(int[] xs)
        {
            foreach (int x in xs)
            {
                Console.Write(x);
                Console.Write(' ');
            }
            Console.WriteLine();
        }

        // Поиск индекса максимального элемента
        // возвращает -1, если массив пуст
        static int maxIndex(int[] xs)
        {
            if (xs.Length == 0)
                return -1;

            int maxi = 0;
            for (int i = 0; i < xs.Length; ++i)
            {
                if (xs[i] > xs[maxi])
                {
                    maxi = i;
                }
            }

            return maxi;
        }

        // Возвращает произведение чисел между первым и вторым нулями в массиве.
        // Если таковых нет, возвращает 0
        static int multBetweenFirstAndSecondZeros(int[] xs)
        {
            // Ищем индекс первого нуля
            int firstZeroIndex  = Array.IndexOf(xs, 0);
            // И второго
            int secondZeroIndex = Array.IndexOf(xs, 0, firstZeroIndex+1);

            if (firstZeroIndex == -1 || secondZeroIndex == -1)
                return 0;

            int mult = 1;
            for (int i = firstZeroIndex + 1; i < secondZeroIndex; ++i)
            {
                mult *= xs[i];
            }

            return mult;
        }

        static void transformNumbers(int[] xs)
        {
            // Заводим временный массив
            int[] ys = new int[xs.Length];

            int yi = 0; // индекс в ys
            // нечётные позиции
            for (int xi = 1; xi < xs.Length; xi += 2, ++yi)
            {
                ys[yi] = xs[xi];
            }
            // чётные позиции
            for (int xi = 0; xi < xs.Length; xi += 2, ++yi)
            {
                ys[yi] = xs[xi];
            }

            // Копируем ys в xs
            Array.Copy(ys, xs, xs.Length);
        }
    }
}


Пример содержимого data.txt:
© Цитата:
1 2 3 4 5
6 7 8

Соответствующий вывод:
© Цитата:
Исходный массив:
1 2 3 4 5 6 7 8
Индекс максимального элемента: 7
Произведение между первыми нулями: 0
Преобразованный массив:
2 4 6 8 1 3 5 7
.

Консультировал: Александр Чекменёв (Профессор)
Дата отправки: 14.03.2013, 17:30
Рейтинг ответа:

НЕ одобряю 0 одобряю!


Оценить выпуск | Задать вопрос экспертам

главная страница  |  стать участником  |  получить консультацию
техническая поддержка  |  восстановить логин/пароль

Дорогой читатель!
Команда портала RFPRO.RU благодарит Вас за то, что Вы пользуетесь нашими услугами. Вы только что прочли очередной выпуск рассылки. Мы старались. Пожалуйста, оцените его. Если совет помог Вам, если Вам понравился ответ, Вы можете поблагодарить автора - для этого в каждом ответе есть специальные ссылки. Вы можете оставить отзыв о работе портале. Нам очень важно знать Ваше мнение. Вы можете поближе познакомиться с жизнью портала, посетив наш форум, почитав журнал, который издают наши эксперты. Если у Вас есть желание помочь людям, поделиться своими знаниями, Вы можете зарегистрироваться экспертом. Заходите - у нас интересно!
МЫ РАБОТАЕМ ДЛЯ ВАС!



В избранное