Форум программистов, компьютерный форум, киберфорум
Наши страницы
C# для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
Silent58
0 / 0 / 0
Регистрация: 10.06.2013
Сообщений: 4
#1

Реализовать класс календаря, используя для хранения дат массив

30.12.2013, 11:47. Просмотров 943. Ответов 4
Метки нет (Все метки)

Задача такая: реализовать класс календаря, используя для хранения дат массив.
Разработать индексатор для класса.
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
class Kalendar
    {
        // поля
 
        int day;                              // номер дня месяца
        int month;                            // номер месяца
        int year;                             // номер года
        Kalendar[][] storage;                 // хранилище для дат года
// свойства   (свойства Day, Month, Year  {get;set;} существуют)
public Kalendar this [int i,int j]            // индексатор
        {
            get
            {
                return this.storage[i][j];   //(вот сюда выводит индекс находился вне границ массива)
            }
            set
            {
                this.storage[i][j] = value;
            }
        }
// конструктор 
public Kalendar(int Day, int Month, int Year)
        {
            day = Day;
            month = Month;
            year = Year;
            storage = new Kalendar[Month][];
        }
Дальше в Main не хочет заполнять массив. У меня уже мозги сломались.
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
class Program
    {
        static void Main(string[] args)
        {
Console.WriteLine("\tЗаполняем новый календарь значениями.");
            Console.Write("\tВведите день : ");
            int dayN = Convert.ToInt32(Console.ReadLine());
            Console.Write("\tВведите месяц : ");
            int monthN = Convert.ToInt32(Console.ReadLine());
            Console.Write("\tВведите год : ");
            int yearN = Convert.ToInt32(Console.ReadLine());
            int daysInMonth = DateTime.DaysInMonth(yearN, monthN);
            int monthInYear=12;
for (int i = 1; i <= monthInYear; i++)
                for (int j = 1; j <= daysInMonth;j++ )
                  {
                      Kalendar kalendar  = new Kalendar(j, i, yearN);
                      kalendar[monthN, dayN] = kalendar[i, j];
                  }
           
                    Console.ReadKey();
        }
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
30.12.2013, 11:47
Ответы с готовыми решениями:

Массив или коллекция для хранения дат
Есть задача: нужно сделать программу , которая будет сохранять(на время работы...

Реализовать класс для хранения данных
Вообще-м ,нужно реализовать класс для хранения данных ,например о товарах в...

Реализовать программу, используя для хранения экземпляров разработанных классов стандартные параметризованные коллекции
using System; using System.Collections.Generic; using System.Text; ...

Реализовать класс для матриц. В этом классе реализовать интерфейс, содержащий методы для выполнения операций
Реализовать класс для матриц. В этом классе реализовать интерфейс, содержащий...

Существует ли класс, для хранения графа
Здравствуйте! Подскажите, существует ли класс, для хранения графа? Добавлено...

4
Spectral-Owl
576 / 554 / 155
Регистрация: 29.06.2010
Сообщений: 1,588
Завершенные тесты: 1
30.12.2013, 11:57 #2
Цитата Сообщение от Silent58 Посмотреть сообщение
class Kalendar
{
...
Kalendar[][] storage; // хранилище для дат года
вот... вот это наркоманство... или явно очень мощное колдунство. каждый экземпляр класса календарь имеет ещё 365 экземпляров класса календарь? а каждый из них тоже размножается как канадский кролик?
1
Silent58
0 / 0 / 0
Регистрация: 10.06.2013
Сообщений: 4
30.12.2013, 12:01  [ТС] #3
kalendar[12][daysInMonth] - имелось в виду.
0
Spectral-Owl
576 / 554 / 155
Регистрация: 29.06.2010
Сообщений: 1,588
Завершенные тесты: 1
30.12.2013, 14:14 #4
без разницы что имелось в виду. получилось то что получилось. ну ладно, кроме вышеописанной проблемы техасских кроликов обращу внимание на следующие моменты:

массив storage является массивом массивов, а их инициализируют как то так:
C#
1
2
3
storage = new Kalendar[12][];
for(int m=0;m<12;m++)
     storage[m] =  new Kalendar[DateTime.DaysInMonth(yearN, m)];
это было только инициализация массива, теперь необходимо инициализировать каждый отдельный элемент в нём. а если учесть что каждый отдельный элемент в массиве имеет свою пару массивов, каждый элемент которого должен быть инициализирован и иметь ещё одну пару массивов... ну думаю теперь вам понятно что экземпляр класса не должен иметь массив массивов экземпляров того же класса. это нелогично. календарь не имеет своим свойством ещё 365 календарей, каждый из которых имеет ещё по 365 календарей. необходимо пересмотреть логику проекта.

Добавлено через 1 час 17 минут
может это будет интересно:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
using System;
using System.Linq;
using System.Collections;
using System.Collections.Generic;
 
namespace ConsoleApplication1
{
    class Dates
    {
        private Dictionary<int, Year> Years = new Dictionary<int, Year>();
 
        public Year this[int year]
        { get { return this.Years[year]; } }
 
        public Dates(int startYear, int stopYear)
        {
            for (int i = startYear; i < stopYear; i++)
                Years.Add(i, new Year(i));
        }
    }
 
    class Year
    {
        public int YearNumber = 0;
        private Month[] Months = new Month[12];
 
        public Month this[int month]
        { get { return this.Months[month+1]; } }
 
        public Year(int year)
        {
            this.YearNumber = year;
            for (int i = 0; i < 12; i++)
                Months[i] = new Month(YearNumber, i+1);
        }
    }
 
    class Month
    {
        public int YearNumber = 0;
        public int MonthNumber = 0;
        private Day[] Days;
 
        public Day this[int day]
        { get { return this.Days[day + 1]; } }
 
        public Month(int year, int month)
        {
            this.YearNumber = year;
            this.MonthNumber = month;
 
            int count = DateTime.DaysInMonth(year, month);
            this.Days = new Day[count];
 
            for (int i = 0; i < count; i++)
                this.Days[i] = new Day(YearNumber, MonthNumber, i+1);
        }
    }
 
    class Day
    {
        public int YearNumber = 0;
        public int MontNumber = 0;
        public int DayNumber = 0;
 
        public Day(int year, int month, int day)
        {
            this.DayNumber = day;
            this.MontNumber = month;
            this.YearNumber = year;
        }
 
        public override string ToString()
        { return new DateTime(YearNumber, MontNumber, DayNumber).DayOfWeek.ToString(); }
    }
 
 
    class Program
    {
        static void Main(string[] args)
        {
            Dates dat = new Dates(1990, 2013);
            Console.WriteLine(dat[1999][9][28]);
            
            Console.Read();
        }
    }
}
инкремент месяца и дня необходим из за того что отсчет элементов массива с нуля, но первый месяц таки первый, а не нулевой.

Добавлено через 3 минуты
а если самый первый класс расширить до такого вида:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
 class Dates
    {
        private Dictionary<int, Year> Years = new Dictionary<int, Year>();
 
        public Year this[int year]
        { get { return this.Years[year]; } }
 
        public Month this[int year, int month]
        { get { return this.Years[year][month]; } }
 
        public Day this[int year, int month, int day]
        { get { return this.Years[year][month][day]; } }
 
        public Dates(int startYear, int stopYear)
        {
            for (int i = startYear; i < stopYear; i++)
                Years.Add(i, new Year(i));
        }
    }
то можно получить такие ништяки:
C#
1
2
3
4
5
6
7
8
9
static void Main(string[] args)
        {
            Dates dat = new Dates(1990, 2013);
            Console.WriteLine(dat[1999][9][28]);
            Console.WriteLine(dat[1999, 9][28]);
            Console.WriteLine(dat[1999, 9, 28]);
            
            Console.Read();
        }
1
Silent58
0 / 0 / 0
Регистрация: 10.06.2013
Сообщений: 4
30.12.2013, 15:48  [ТС] #5
Большое спасибо Spectral-Owl , Вы меня натолкнули (как я надеюсь на нужную мысль). Очень интересно.
0
30.12.2013, 15:48
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.12.2013, 15:48

Класс для хранения логина-пароля
Здравствуйте, уважаемые. Накидал некоторый ГУЙ (Windows Forms) для MySQL. ...

Класс для хранения визуальных объектов
Проблемы создания классов вроде как и нету.. но, тута понадобилось создать...

Реализовать структуру данных для хранения координат прямоугольника
Ребята, помогите... Зачет по ОПП. Задание - реализовать структуру данных для...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru