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);
}
}
}
Если Вы уже зарегистрированы на Портале - войдите в систему, если Вы еще не регистрировались - пройдите простую процедуру регистрации.