using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO;
//+ 1. Дан целочисленный массив из 20 элементов.Элементы массива могут принимать целые
//значения от –10 000 до 10 000 включительно.Написать программу, позволяющую найти и
//вывести количество пар элементов массива, в которых хотя бы одно число делится на 3. В
//данной задаче под парой подразумевается два подряд идущих элемента массива.Например,
//для массива из пяти элементов: 6; 2; 9; –3; 6 – ответ: 4.
//+ 2. а) Дописать класс для работы с одномерным массивом.Реализовать конструктор, создающий
//+ массив заданной размерности и заполняющий массив числами от начального значения с
//+ заданным шагом.
//+ Создать свойство Sum, которые возвращают сумму элементов массива,
//+ метод Inverse, меняющий знаки у всех элементов массива,
//+ Метод Multi, умножающий каждый элемент массива на определенное число,
//+ свойство MaxCount, возвращающее количество максимальных элементов.
//+ В Main продемонстрировать работу класса.
//+ б)* Добавить конструктор и методы, которые загружают данные из файла и записывают данные в
// файл
namespace Task_1_2
{
class Program
{
static void Main(string[] args)
{
MyArray array1 = new MyArray(20);
array1.Print();
Console.WriteLine("Количество пар, делящихся на 3 = " + array1.Pair_to_N(3));
MyArray array2 = new MyArray(15, 0, 2);
array2.Print();
Console.WriteLine("Сумма: " + array2.Sum);
array2.Inverse();
Console.Write("Инверсия: ");
array2.Print();
array2.Multi(5);
Console.Write("Умножаем на 5: ");
array2.Print();
Console.WriteLine("Количество максимальных элементов в массиве array1: " + array1.MaxCount);
Console.WriteLine("Количество максимальных элементов в массиве array2: " + array2.MaxCount);
MyArray array3 = new MyArray(100000);
Console.WriteLine("Количество максимальных элементов в массиве array3: " + array3.MaxCount);
MyArray array4 = new MyArray(@"D:\test.txt");
Console.WriteLine("Тестим чтение из файла");
array4.Print();
Console.WriteLine("Тестим запись в файл массива array1 и чтение файла с обновленными данными");
array1.Rec(@"D:\test.txt");
Read(@"D:\test.txt");
Console.ReadKey();
}
/// <summary>
/// Метод считывания из файла txt
/// </summary>
/// <param name="filename">имя файла .txt</param>
static void Read(string filename)
{
if (File.Exists(filename))
{
//Считываем все строки из файла
string[] ss = File.ReadAllLines(filename);
for (int i = 0; i < ss.Length; i++)
{
Console.Write(ss[i] + " ");
}
Console.WriteLine();
}
else Console.WriteLine("Error load file");
}
}
class MyArray
{
int[] a;
Random rnd = new Random();
/// <summary>
/// Создаем целочисленный массив со случайными значениями от -10000 до 10000
/// </summary>
/// <param name="n">количество элементов</param>
public MyArray(int n)
{
a = new int[n];
for (int i = 0; i < n; i++)
a[i] = rnd.Next(-10000, 10000);
}
/// <summary>
/// Создаем целочисленный массив, заполняющийся числами от начального значения с заданным шагом.
/// </summary>
/// <param name="n">количество элементов</param>
/// <param name="start">значение 0 элемента массива</param>
/// <param name="step">шаг изменения каждого последующего значения</param>
public MyArray(int n, int start, int step)
{
a = new int[n];
for (int i = 0; i < n; i++)
{
a[i] = start + step * i;
}
}
/// <summary>
/// Читаем массив из файла
/// </summary>
/// <param name="filename">имя файла .txt</param>
public MyArray(string filename)
{
//Если файл существует
if (File.Exists(filename))
{
//Считываем все строки из файла
string[] ss = File.ReadAllLines(filename);
a = new int[ss.Length];
//Переводим данные из строкового формата в числовой
for (int i = 0; i < ss.Length; i++)
a[i] = int.Parse(ss[i]);
}
else Console.WriteLine("Error load file");
}
/// <summary>
/// Свойство для расчета суммы всех элементов целочисленного массива
/// </summary>
public int Sum
{
get
{
int sum = 0;
for (int i = 0; i < a.Length; i++)
{
sum += a[i];
}
return sum;
}
}
/// <summary>
/// Метод меняющий знаки элементов массива
/// </summary>
public void Inverse()
{
for (int i = 0; i < a.Length; i++)
{
a[i] *= -1;
}
}
/// <summary>
/// Метод умножающий все элементы массива на число
/// </summary>
/// <param name="x">множитель</param>
public void Multi(int x)
{
for (int i = 0; i < a.Length; i++)
{
a[i] *= x;
}
}
/// <summary>
/// Свойство, показывающие количество элементов массива с максимальным значением
/// </summary>
public int MaxCount
{
get
{
int max = a[0];
int count = 1;
for (int i = 1; i < a.Length; i++)
{
if (a[i]>max)
{
max = a[i];
count = 1;
}
else if (a[i] == max)
{
count++;
}
}
return count;
}
}
/// <summary>
/// Выводим на консоль все элементы массива в одной строке
/// </summary>
public void Print()
{
for (int i = 0; i < a.Length; i++)
{
Console.Write("{0} ", a[i]);
}
Console.WriteLine();
}
/// <summary>
/// Выводит количеств пар элементов массива, делящихся на n без остатка
/// </summary>
/// <param name="n">делитель</param>
/// <returns>количество пар элементов массива</returns>
public int Pair_to_N(int n)
{
int count = 0;
for (int i = 0; i < (a.Length - 1); i++)
{
if ((a[i]%n == 0) || (a[i+1]%n == 0))
{
count++;
}
}
return count;
}
/// <summary>
/// Свойство для записи в файл
/// </summary>
/// <param name="filename"></param>
public void Rec(string filename)
{
//переводим данные из чисел в строки
string[] a_string = new string[a.Length];
for (int i = 0; i < a_string.Length; i++)
a_string[i] = Convert.ToString(a[i]);
//пишем массив со строками в файл
System.IO.File.WriteAllLines(filename, a_string);
}
}
}