Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Лабораторная_работа_1_НикитинаДС

.docx
Скачиваний:
18
Добавлен:
15.06.2021
Размер:
23.02 Кб
Скачать

Лабораторная работа 1 Вариант 2

Классы, свойства, индексаторы. одномерные, прямоугольные и ступенчатые массивы

Никитина Дарья ПИН-31Д

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Threading.Tasks;

using System.Diagnostics;

namespace Лаба1

{

class Person

{

private string FirstName;

private string LastName;

private System.DateTime BirthDate;

public Person( string f, string l, DateTime d)

{

FirstName = f;

LastName = l;

BirthDate = d;

}

public Person()

{

FirstName = "Daria";

LastName = "Nikitina";

BirthDate = DateTime.Now;

}

public string FName

{

get

{

return FirstName;

}

set

{

FirstName = value;

}

}

public string LName

{

get

{

return LastName;

}

set

{

LastName = value;

}

}

public DateTime BDate

{

get

{

return BirthDate;

}

set

{

BirthDate = value;

}

}

public int YearBirth

{

get

{

return BirthDate.Year;

}

set

{

BirthDate = new DateTime(value, BirthDate.Month, BirthDate.Day);

}

}

public override string ToString()

{

return "Имя: " + FirstName + "\n" + "Фамилия: " + LastName + "\n" + BirthDate.ToString() + "\n";

}

public virtual string ToShortString()

{

return "Имя: " + FirstName + "\n" + "Фамилия: " + LastName + "\n";

}

}

enum Frequency

{

Weekly = 1, Monthly = 2, Yearly = 3

};

class Article

{

public Person Author

{

get;

set;

}

public String Name

{

get;

set;

}

public double Score

{

get;

set;

}

public Article(Person a, string b, double c)

{

Author = a;

Name = b;

Score = c;

}

public Article()

{

Author = new Person();

Name = "";

Score = 0;

}

public override string ToString()

{

return Author.ToShortString() + "\n" + "Название статьи: " + Name + "\n" + "Рейтинг " + Score.ToString() + "\n";

}

}

class Magazine

{

private string Name;

private Frequency Period;

private DateTime Outdate;

private int Count;

private Article[] Articles;

public Magazine(string a, Frequency b, DateTime c, int d)

{

Name = a;

Period = b;

Outdate = c;

Count = d;

}

public Magazine()

{

Name = "";

Period = Frequency.Monthly;

Outdate = DateTime.Today;

Count = 0;

}

public String NameS

{

get

{

return Name;

}

set

{

Name = value;

}

}

public Frequency PeriodS

{

get

{

return Period;

}

set

{

Period = value;

}

}

public DateTime OutdateS

{

get

{

return Outdate;

}

set

{

Outdate = value;

}

}

public int CountS

{

get

{

return Count;

}

set

{

Count = value;

}

}

public Article[] ArticlesS

{

get

{

return Articles;

}

set

{

if (value != null)

Articles = value;

else

Articles = new Article[2];

}

}

public double AverageScore

{

get

{

double sum = 0;

if (Articles != null)

foreach (var a in Articles)

{

if (a != null)

sum += a.Score;

}

sum /= (double)Articles.GetLength(0);

return sum;

}

}

public bool this[Frequency a]

{

get

{

return Period.Equals(a);

}

}

public void AddArticles(Article[] a)

{

if (Articles != null)

Articles.Concat(a);

else

Articles = a;

}

public override string ToString()

{

string result;

result = "Название: " + Name + "\n" + "Периодичность: " + Period.ToString() + "\n" + "Дата издания: " + Outdate.ToShortDateString() + "\n" + "Тираж: " + Count + "\n";

result += "Информация о статьях: \n";

foreach (Article a in Articles)

result = result + a.ToString();

return result;

}

public virtual string ToShortString()

{

return Name + " " + Period.ToString() + " " + Outdate.ToShortDateString() + " " + Count + "\n" + "Средний рейтинг: " + this.AverageScore;

}

}

class Program

{

static void Main(string[] args)

{

Stopwatch timer = new Stopwatch();

Console.WriteLine("Введите данные журнала");

Console.WriteLine("Название");

string tname = Console.ReadLine();

Console.WriteLine("Периодичность");

Frequency tfrec = (Frequency)Frequency.Parse(typeof(Frequency), Console.ReadLine(), true);

Console.WriteLine("Дата выхода");

DateTime tdate = DateTime.Parse(Console.ReadLine());

Console.WriteLine("Тираж");

int tcount = Convert.ToInt32(Console.ReadLine());

Magazine M1 = new Magazine(tname, tfrec, tdate, tcount);

Console.WriteLine("Введите количество статей");

int acount = Convert.ToInt32(Console.ReadLine());

Article[] Articles = new Article[acount];

for (int i = 0; i < acount; i++)

{

Console.WriteLine("Данные автора:Фамилия");

string fname = Console.ReadLine();

Console.WriteLine("Имя");

string lname = Console.ReadLine();

Console.WriteLine("Дата рождения");

string date = Console.ReadLine();

Person author = new Person(fname, lname, DateTime.Parse(date));

Console.WriteLine("Введите название статьи");

string tmp = Console.ReadLine();

Console.WriteLine("Введите рейтинг статьи");

Articles[i] = new Article(author, tmp, Convert.ToDouble(Console.ReadLine()));

}

M1.AddArticles(Articles);

Console.WriteLine(M1.ToShortString());

Console.WriteLine(M1.ToString());

Console.WriteLine("Значения индексаторов");

Console.WriteLine("Weekly " + M1[Frequency.Weekly]);

Console.WriteLine("Monthly " + M1[Frequency.Monthly]);

Console.WriteLine("Yearly " + M1[Frequency.Yearly]);

Console.WriteLine("Введите количество статей в массивах \n Два числа разделенные пробелом или ;");

string[] counts = Console.ReadLine().Split(new char[] { ' ', ';' });

int nrow = Convert.ToInt32(counts[0]);

int ncollumn = Convert.ToInt32(counts[1]);

Article[] Articles1 = new Article[nrow * ncollumn];

for (int i = 0; i < nrow * ncollumn; i++)

Articles1[i] = new Article();

Article[,] Articles2 = new Article[nrow, ncollumn];

for (int i = 0; i < nrow; i++)

for (int j = 0; j < ncollumn; j++)

Articles2[i, j] = new Article();

int sum = 0;

int n = 0;

for (; sum < nrow * ncollumn; n++)

sum += n;

Article[][] Articles3 = new Article[n][];

for (int i = 0; i < n; i++)

{

Articles3[i] = new Article[i];

for (int j = 0; j < i; j++)

Articles3[i][j] = new Article();

}

timer.Start();

for (int i = 0; i < nrow * ncollumn; i++)

{

Articles1[i].Name = "JJJJJJJJJ";

Articles1[i].Score = 5.65;

}

timer.Stop();

long time1 = timer.ElapsedMilliseconds;

timer.Restart();

for (int i = 0; i < nrow; i++)

for (int j = 0; j < ncollumn; j++)

{

Articles2[i, j].Name = "JJJJJJJJJ";

Articles2[i, j].Score = 5.65;

}

long time2 = timer.ElapsedMilliseconds;

timer.Restart();

for (int i = 0; i < n; i++)

for (int j = 0; j < i; j++)

{

Articles3[i][j].Name = "JJJJJJJJJ";

Articles3[i][j].Score = 5.65;

}

long time3 = timer.ElapsedMilliseconds;

timer.Stop();

Console.WriteLine("Время выполнения\n");

Console.WriteLine("Одномерный массив: " + time1.ToString() + "\n");

Console.WriteLine("Двумерный массив: " + time2.ToString() + "\n");

Console.WriteLine("Ступенчатый массив: " + time3.ToString() + "\n");

Console.Read();

}

}

}