Условие задачи:
Описать тип TDate — структура с полями целого типа Day (день), Month
(месяц) и Year (год). Протестировать является ли дата правильной. Создать
массив структур (не более чем для пяти дат). Вывести на экран количество дат,
которые соответствуют осенне-зимнему периоду, а также сами даты.
Код почти готов, подскажите пожалуйста как организовать вывод дат которые соответствуют осенне-зимнему периоду, что нужно дописать
Вот код:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace лаба_3
{
class Структуры
{
struct TDate
{
int Day, Month, Year;
public TDate(int d, int m, int y)
{
Day = d;
Month = m;
Year = y;
}
public void Show()
{
Console.WriteLine(Day + "." + Month + "." + Year);
}
public bool True_date()
{
if (Month < 1 || Month > 12) return false;
if (Day < 1) return false;
if (Month == 1 && Day > 31) return false;
if (Month == 3 && Day > 31) return false;
if (Month == 5 && Day > 31) return false;
if (Month == 7 && Day > 31) return false;
if (Month == 8 && Day > 31) return false;
if (Month == 10 && Day > 31) return false;
if (Month == 12 && Day > 31) return false;
if (Month == 4 && Day > 30) return false;
if (Month == 6 && Day > 30) return false;
if (Month == 9 && Day > 30) return false;
if (Month == 11 && Day > 30) return false;
if (Year % 4 == 0 && Month == 2 && Day > 29) return false;
if (Year % 4 != 0 && Month == 2 && Day > 28) return false;
return true;
}
}
static void Main(string[] args)
{
//лр3
Console.WriteLine("Введите не больше 5 дат в массиве");
int N = Int32.Parse(Console.ReadLine());
if (N > 5 || N < 0)
{
Console.WriteLine("Число введено не корректно");
return;
}
TDate[] mass_date = new TDate[N];
for (int i = 0; i < N; i++)
{
Console.WriteLine("Введите число");
int ch = Int32.Parse(Console.ReadLine());
Console.WriteLine("Введите месяц");
int m = Int32.Parse(Console.ReadLine());
Console.WriteLine("Введите год");
int y = Int32.Parse(Console.ReadLine());
mass_date[i] = new TDate(ch, m, y);
}
Console.WriteLine("исходный массив: ");
for (int i = 0; i < N; i++)
{
mass_date[i].Show();
if (mass_date[i].True_date()) Console.WriteLine("Дата правильная");
else Console.WriteLine("Дата не правильная");
}
Console.ReadKey();
}
}
}
C#
Помогите решить задачу на С#
foreach (TDate d in mass_date.Select( x => x.Month <3 || x.Month >8)) d.Show();
Олег Ерастов
Не подскажете в каком месте правильнее будет это вставить?
using System;
namespace Answer {
class Program {
static void Main() {
var dates = new TDate[5];
for (var i = 0; i < dates.Length; ++i) {
dates[i].Day = InputInt32("Введите число: ");
dates[i].Month = InputInt32("Введите месяц: ");
dates[i].Yaer = InputInt32("Введите год: ");
Console.Clear();
if (!dates[i].Correct()) {
Console.WriteLine($"Даты {dates[i]} не существует!");
--i;
}
}
var count = 0;
for (var i = 0; i < dates.Length; ++i) {
if (dates[i].Month < 3 || dates[i].Month > 8) {
++count;
Console.WriteLine(dates[i]);
}
}
Console.WriteLine($"Количество дат осенне-зимнего периода: {count}");
Console.ReadKey();
}
static int InputInt32(string msg) {
int value;
do Console.Write(msg); while (!int.TryParse(Console.ReadLine(), out value));
return value;
}
}
public struct TDate {
public int Day { get; set; }
public int Month { get; set; }
public int Yaer { get; set; }
public bool Correct() {
int[] months = { 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
if (Day < 1 || Month < 1 || Yaer < 1 || Month > 12) return false;
if (Leap(Yaer) && Month == 2 && Day < 30) return true;
if (Day > months[Month]) return false;
return true;
}
public bool Leap(int year) {
if (year % 4 != 0) return false;
if (year % 100 == 0 && year % 400 != 0) return false;
return true;
}
public override string ToString() {
var date = (Day < 10 ? "0" + Day.ToString() : Day.ToString()) + ".";
date += (Month < 10 ? "0" + Month.ToString() : Month.ToString()) + ".";
date += Yaer.ToString();
return date;
}
}
}
namespace Answer {
class Program {
static void Main() {
var dates = new TDate[5];
for (var i = 0; i < dates.Length; ++i) {
dates[i].Day = InputInt32("Введите число: ");
dates[i].Month = InputInt32("Введите месяц: ");
dates[i].Yaer = InputInt32("Введите год: ");
Console.Clear();
if (!dates[i].Correct()) {
Console.WriteLine($"Даты {dates[i]} не существует!");
--i;
}
}
var count = 0;
for (var i = 0; i < dates.Length; ++i) {
if (dates[i].Month < 3 || dates[i].Month > 8) {
++count;
Console.WriteLine(dates[i]);
}
}
Console.WriteLine($"Количество дат осенне-зимнего периода: {count}");
Console.ReadKey();
}
static int InputInt32(string msg) {
int value;
do Console.Write(msg); while (!int.TryParse(Console.ReadLine(), out value));
return value;
}
}
public struct TDate {
public int Day { get; set; }
public int Month { get; set; }
public int Yaer { get; set; }
public bool Correct() {
int[] months = { 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
if (Day < 1 || Month < 1 || Yaer < 1 || Month > 12) return false;
if (Leap(Yaer) && Month == 2 && Day < 30) return true;
if (Day > months[Month]) return false;
return true;
}
public bool Leap(int year) {
if (year % 4 != 0) return false;
if (year % 100 == 0 && year % 400 != 0) return false;
return true;
}
public override string ToString() {
var date = (Day < 10 ? "0" + Day.ToString() : Day.ToString()) + ".";
date += (Month < 10 ? "0" + Month.ToString() : Month.ToString()) + ".";
date += Yaer.ToString();
return date;
}
}
}
Олег Ерастов
Спасибо большое за помощь!
Похожие вопросы
- Помогите решить задачу C#! С помощью switch case.
- Помогите решить задачу на с#
- C# Помогите решить задачу! Нужен полный код!
- Помогите решить задачу на c#
- Помогите решить простую задачу на c#
- Решить задачи C#
- С#. Решить задачу по программированию С#.
- Решить задачу через C#
- Помогите написать задачу на C#
- Помогите с задачей по c#