Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.50/6: Рейтинг темы: голосов - 6, средняя оценка - 4.50
28 / 28 / 10
Регистрация: 10.03.2012
Сообщений: 249
1

Индексаторы. Динамический массив

12.01.2013, 18:59. Показов 1051. Ответов 2
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Не хочет присваивать значения. Строка вывода возвращает ноли.

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
89
90
91
92
93
94
95
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
 
namespace array
{
    class Program
    {
        static void Main(string[] args)
        {
            MyArray ma = new MyArray();
            for (int i = 0; i < 10; i++)
            {
                ma[i] = i;
                Console.WriteLine("ma[" + i + "]=" + ma[i] + " :" + ma.Length);
                Console.ReadKey();
            }
              
 
            //Console.WriteLine(ma.Length);
            Console.ReadKey();
        }
    }
 
    class MyArray
    {
        int[] a;
        int[] buffer;
        int len;
        int currLength = 1;
 
        public MyArray()
        {
            a = new int[currLength];
            Length = currLength;
            //init();
        }
 
        public int Length {
            get {
                return len;
            }
            private set {
                len = value;
            } 
        }
 
        public int this[int index]{
            get {
                if (index < 0) index = 0;
                if (index > currLength - 1)
                    return 0;
                else return a[index];
            }
            
            set {
                if (index < 0) index = 0;
                if (index > currLength - 1)
                {
                    update(ref a, ref buffer, index + 1);
                }
                a[index] = value;
            }
        }
 
        public void delete()  //если надо удалить массив. 
        {
            currLength = 1;
            a = new int [currLength];
            a[0] = 0;
        }
 
        private void init()// создаем массив из 1 елемента.  
        {
            for (int i = 0; i < a.Length; i++)
                a[i] = 0;
        }
 
        private void update(ref int[] a, ref int[] b, int index)  //увеличиваем массив на 1
        {                                                         
            b = new int[index];                              //сюда запишем что было в а. 
            for (int i = 0; i < a.Length; i++)
            {
                b[i] = a[i];
            }
            a = new int[index];  //делаем масив больше
            Length = index;
            for (int i = 0; i < a.Length; i++)
            {
                a[i] = b[i];  //возвращаем то что было. 
            }
        }
    }
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
12.01.2013, 18:59
Ответы с готовыми решениями:

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

Динамический массив при наследовании, элементами которого являются объекты класса наследника динамический массив
Попробовал создать динамический массив, у которого элементы - объекты класса динамический массив,...

Сделать динамический массив структур, причем в структуре так же существует динамический массив
Добрый день. Есть такая пзадача: нужно сделать динамический массив структур, причем в структуре...

Динамический массив ,элементами которого являются объекты класса динамический массив
Доброго времени суток, захотел создать динамический массив ,элементами которого являются объекты...

2
Эксперт .NET
17685 / 12871 / 3365
Регистрация: 17.09.2011
Сообщений: 21,136
12.01.2013, 19:29 2
Цитата Сообщение от van Persie Посмотреть сообщение
C#
1
2
if (index > currLength - 1) 
   return 0;
В каком месте изменяется currLength, чтобы это условие не выполнялось после добавления второго элемента?

Так же пересмотрите метод update - там очень много лишних операций выполняется.
1
28 / 28 / 10
Регистрация: 10.03.2012
Сообщений: 249
12.01.2013, 19:56  [ТС] 3
Цитата Сообщение от kolorotur Посмотреть сообщение
Так же пересмотрите метод update - там очень много лишних операций выполняется.

Немного улучшил, как мне кажется.
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
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
 
namespace array
{
    class Program
    {
        static void Main(string[] args)
        {
            MyArray ma = new MyArray();
            for (int i = 0; i < 10; i++)
            {
                ma[i] = i;
                Console.WriteLine("ma[" + i + "]=" + ma[i] + " :" + ma.Length);
                Console.ReadKey();
            }
            Console.ReadKey();
        }
    }
 
    class MyArray
    {
        int[] a;
        int[] buffer;        
        int currLength = 1;        
 
        public MyArray()
        {
            a = new int[currLength]; 
        }
 
        public int Length {
            get {
                return currLength;
            }
            private set {
                currLength = value;
            } 
        }
 
        public int this[int index]{
            get {
                if (index < 0) index = 0;
                if (index > Length - 1)
                    return 0;
                else return a[index];
            }
            
            set {
                if (index < 0) index = 0;
                if (index > Length - 1)
                {
                    update(ref a, ref buffer, index + 1);
                }
                a[index] = value;
            }
        }
 
        public void delete()  //если надо удалить массив. 
        {
            Length = 1;
            a = new int [currLength];
            a[0] = 0;
        }
 
        private void init()// создаем массив из 1 елемента.  
        {
            for (int i = 0; i < a.Length; i++)
                a[i] = 0;
        }
 
        private void update(ref int[] a, ref int[] b, int index)  //увеличиваем массив на 1
        {   
            b = a;
            a = new int[index];
            Length = a.Length;
            for (int i = 0; i < b.Length; i++)
                a[i] = b[i];
        }
    }
}
0
12.01.2013, 19:56
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
12.01.2013, 19:56
Помогаю со студенческими работами здесь

Создать динамический класс Book, содержащий динамический массив Authors
Мне нужно написать программу,а я не знаю как ее написать. Знаю, тут люди за кого-то не делают,...

Создать динамический класс Book, содержащей динамический массив Authors
всем привет. может кто-то набросать код для такой вот задачи: Создать динамический класс Book,...

Скопировать динамический массив в другой массив только с положительными элементами из первого
Пользователь вводит размер массива и сам массив. Программа копирует в другой массив только...

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


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru