Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.86/7: Рейтинг темы: голосов - 7, средняя оценка - 4.86
0 / 0 / 0
Регистрация: 16.03.2019
Сообщений: 8
1

Массив: Создать динамический одномерный массив для 6ти интовых значений с 2мя конструкторами...

18.03.2019, 00:01. Просмотров 1312. Ответов 12
Метки нет (Все метки)

Нужно создать динамический одномерный массив для 6ти интовых значений с 2мя конструкторами. 1ый должен быть без параметров.
Создать метод Addition(int value), который будет добавлять числа в массив.
Создать метод Range(), если пользователь выходит за границы массива, в этод метод будут передаваться значения.
Количество значений создает пользователь.

С этой задачей полный ступор, так что буду благодарен за решение или наводку.
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
18.03.2019, 00:01
Ответы с готовыми решениями:

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

Создать динамический одномерный массив
Условие : создать динамический одномерный массив заполнить его случайными целыми трехзначными...

Как создать одномерный динамический массив?
Как создать одномерный динамический массив?

Создать и обработать одномерный динамический массив
Задан одномерный массив А. Известно, что среди элементов массива есть хотя бы один отрицательный...

12
143 / 97 / 49
Регистрация: 08.01.2013
Сообщений: 570
18.03.2019, 10:02 2
Цитата Сообщение от Maslovw Посмотреть сообщение
динамический одномерный массив для 6ти интовых значений
C#
1
int [] arr = new int[6];
Цитата Сообщение от Maslovw Посмотреть сообщение
с 2мя конструкторами. 1ый должен быть без параметров.
C#
1
2
3
4
5
class Number
{
   public Number(){}// Конструктор по умолчанию
   public Number(int[] arr){} // Пользовательский конструктор
}
0
Модератор
6311 / 4424 / 1263
Регистрация: 21.04.2018
Сообщений: 12,994
Записей в блоге: 2
18.03.2019, 11:37 3
Цитата Сообщение от Maslovw Посмотреть сообщение
Нужно создать динамический одномерный массив для 6ти интовых значений
Не понятна эта формулировка.
Когда пишут "динамический массив" подразумевается под его "динамикой" возможность изменения его размеров или размерности.
А что в Вашем задании "динамическое" у массива?
0
0 / 0 / 0
Регистрация: 16.03.2019
Сообщений: 8
18.03.2019, 11:52  [ТС] 4
Попробую привести пример. Есть массив на 6 элементов, заполнено 4. Пользователь хочет добавить в массив к примеру 5 элементов, т.е выйти за рамки массива. В этом случае массив должен увеличиться в 2 раза и принять значения пользователя.
0
Модератор
6311 / 4424 / 1263
Регистрация: 21.04.2018
Сообщений: 12,994
Записей в блоге: 2
18.03.2019, 12:21 5
Цитата Сообщение от Maslovw Посмотреть сообщение
Есть массив на 6 элементов, заполнено 4. Пользователь хочет добавить в массив к примеру 5 элементов, т.е выйти за рамки массива. В этом случае массив должен увеличиться в 2 раза и принять значения пользователя.
То есть 6 - это количество элементов на которые увеличивается размерность массива?
Или это начальный размер массива, а увеличивается он в 2 Раза?

Опишите как он должен вести себя в случае: массив на 12 элементов, заполнено 10. Пользователь хочет добавить в массив к примеру 5 элементов.....

Элементы в массив только добавляются? Удаление не предусмотрено?
0
0 / 0 / 0
Регистрация: 16.03.2019
Сообщений: 8
18.03.2019, 12:27  [ТС] 6
Если пользователь задаёт к примеру 12 или более значений, массив будет увеличиваться до тех пор, пока не сможет вместить в себя все элементы.
Будет предусмотрен метод Clean для очистки массива, его я сам смогу реализовать.
0
2 / 2 / 0
Регистрация: 31.03.2017
Сообщений: 7
18.03.2019, 12:29 7
Что - то типо этого ?
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
class Number
{
int [] arr = new int[6];// создаем массив на 6 элементов 
int index=0;// создаем переменную для хранения кол-ва фактических записей в массиве
int [] buffer;// буфер
 
public void Addition(int value)
{
if(arr.Count()<index)// до тех пор пока индекс в диапазоне мы записываем в массив
{
 arr[index]=value;
 index++;// счетчик для подсчета записей
 }
 else 
 {
 buffer=arr;// пересахраняем старые записи чтобы их не потерять
 int arrCount = arr.Count()*2; //переменная для увеличения количества элементов в массиве
 arr = new int[arrCount]; // объявляем новый экземпляр массива , но с большим объемом 
 for (int i=0; i<buffer.Count();i++ ) // записываем старые данные 
 {
 arr[i]=buffer[i];
 index=i;// запоминаем последний индекс записи чтобы продолжить заполнять массив с него
 }
 buffer=null;
 } 
}
}
1
Модератор
6311 / 4424 / 1263
Регистрация: 21.04.2018
Сообщений: 12,994
Записей в блоге: 2
18.03.2019, 12:31 8
Цитата Сообщение от Maslovw Посмотреть сообщение
Если пользователь задаёт к примеру 12 или более значений, массив будет увеличиваться до тех пор, пока не сможет вместить в себя все элементы.
Я понял что он будет увеличиваться!
Я спрашиваю о другом.
С 12 он увеличится: на 6 элементов до 18 или в 2 раза до 24?
0
2 / 2 / 0
Регистрация: 31.03.2017
Сообщений: 7
18.03.2019, 13:05 9
Вот то что нужно скорее всего.
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
int [] arr = new int[6];// создаем массив на 6 элементов 
int index=0;// создаем переменную для хранения кол-ва фактических записей в массиве
 
static void Main(string[] args)
    {
      Console.WriteLine("Введите значения через запятую");
         string a = Console.Readline();
     string[] INFORMATION = a.Split(new String[] { "," }, StringSplitOptions.RemoveEmptyEntries);
     if (INFORMATION.Count()<index)
     {
     foreath(string element in INFORMATION )
     {
       Addition(Convert.ToInt32(element))
     }
     }
     else
     {
     Console.WriteLine("Размер за пределами массива введите кол-во элементов для увеличения");
     string a = Console.Readline();
     Range(Convert.ToInt32(a));
     foreath(string element in INFORMATION )
     {
       Addition(Convert.ToInt32(element))
     } 
     }
    }
public void Addition(int value)
{
 arr[index]=value;
 index++;// счетчик для подсчета записей 
}
 
public void Range(int Count)
{
Array.Resize(ref arr,arr.Length+Count);// увеличиваем на указанное кол-во
}
Добавлено через 7 минут
Написано на скорую руку могут быть ошибки
1
0 / 0 / 0
Регистрация: 16.03.2019
Сообщений: 8
19.03.2019, 00:50  [ТС] 10
Будет увеличиваться всегда в 2 раза. Я так понимаю нужно будет использовать что то вроде логорифма.
0
Модератор
6311 / 4424 / 1263
Регистрация: 21.04.2018
Сообщений: 12,994
Записей в блоге: 2
19.03.2019, 02:23 11
Maslovw, посмотрите такой вариант
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
    public class IntArray
    {
        /// <summary>Внутрений массив</summary>
        int[] array = new int[6];
 
        /// <summary>Возвращает количество элементов в массиве</summary>
        public int Count { get; private set; } = 0;
 
        /// <summary>Возвращает размер внутреннего массива</summary>
        public int Length => array.Length;
 
        /// <summary>Безпараметрический конструктор</summary>
        public IntArray() { }
        
        /// <summary>Конструктор с заданием элементов</summary>
        /// <param name="args">Элементы массива</param>
        public IntArray(int[] args)
        {
            foreach (int numb in args)
                Addition(numb);
        }
 
        /// <summary>Добавление элемента в массив</summary>
        /// <param name="value">Добавляемый элемент</param>
        public void Addition(int value)
        {
            if (Count == Length)
                Array.Resize(ref array, Length * 2);
            array[Count] = value;
            Count++;
        }
 
        /// <summary>Индексатор для получения элементов массива</summary>
        /// <param name="index">Индекс элемента</param>
        /// <returns>Элемент массива с указанным индексом</returns>
        public int this [int index]
            => array[index];
 
        /// <summary>Установка нового размера массива</summary>
        /// <param name="newSize">Новый размер</param>
        public void Range(int newSize)
            => Array.Resize(ref array, newSize);
    }
1
Модератор
6311 / 4424 / 1263
Регистрация: 21.04.2018
Сообщений: 12,994
Записей в блоге: 2
19.03.2019, 11:59 12
Лучший ответ Сообщение было отмечено Maslovw как решение

Решение

Вот более верный вариант
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
    public class IntArray
    {
        /// <summary>Внутрений массив</summary>
        int[] array = new int[6];
 
        /// <summary>Возвращает количество элементов в массиве</summary>
        public int Count { get; private set; } = 0;
 
        /// <summary>Возвращает размер внутреннего массива</summary>
        public int Length => array.Length;
 
        /// <summary>Безпараметрический конструктор</summary>
        public IntArray() { }
 
        /// <summary>Конструктор с заданием элементов</summary>
        /// <param name="args">Элементы массива</param>
        public IntArray(params int[] args)
        {
            foreach (int numb in args)
                Addition(numb);
        }
 
        /// <summary>Добавление элемента в массив</summary>
        /// <param name="value">Добавляемый элемент</param>
        public void Addition(int value)
        {
            if (Count == Length)
                Range(Length * 2);
            array[Count] = value;
            Count++;
        }
 
        /// <summary>Индексатор для получения элементов массива</summary>
        /// <param name="index">Индекс элемента</param>
        /// <returns>Элемент массива с указанным индексом</returns>
        public int this[int index]
        {
            get
            {
                if (index >= Count)
                    throw new ArgumentOutOfRangeException();
 
                return array[index];
            }
            set
            {
                if (index >= Count)
                    throw new ArgumentOutOfRangeException();
 
                array[index] = value;
            }
        }
 
        /// <summary>Установка нового размера массива</summary>
        /// <param name="newSize">Новый размер</param>
        public void Range(int newSize)
        {
            Array.Resize(ref array, newSize);
            if (Count > Length)
                Count = Length;
        }
    }
Добавлено через 3 минуты
Эти варианты не поддерживают Инициализаторы коллекций https://docs.microsoft.com/ru-ru/dot...n-initializers

По документации для этого класс должен реализовывать интерфейс IEnumerable и метод добавления элементов должен иметь имя Add. Но это расходится с Вашим заданием.
1
0 / 0 / 0
Регистрация: 16.03.2019
Сообщений: 8
19.03.2019, 21:57  [ТС] 13
Большое спасибо! Немного под свою программу допилил и всё работает!
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
19.03.2019, 21:57

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Создать одномерный динамический массив произвольного размера (размер ввести)
Ввести значения элементов массива. Определить содержит ли массив заданное число. Если элемент не...

Создать одномерный динамический массив произвольного размера (размер ввести)
Определить содержит ли массив заданное число. Если элемент не найден, то вставить его на последнее...

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

Как создать одномерный динамический массив, элементами которого будут одномерные массивы разной длины?
Здравствуйте. Подскажите как создать одномерный динамический массив, элементами которого будут...


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

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

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