Лабораторная_работа_1_НикитинаДС
.docx
Лабораторная работа 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();
}
}
}