1 / 1 / 0
Регистрация: 03.12.2018
Сообщений: 196

Индексатор ограничивающий диапазон от -20 до 20

24.10.2019, 21:46. Показов 3301. Ответов 29
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Как сделать индексатор ограничивающий диапазон от -20 до 20 в одномерном массиве целых числе?
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
class DemoArray
    {
        private int[] intArray;
        private int n;
        public DemoArray(int N)
        {
            n = N;
            intArray = new int[n];
        }
        /*public int this[int i]
        {
            get
            {
                if (i < -20 || i > 20)
                {
                    Console.WriteLine("Индекс вне диапазона");
                    return 0;
                }
                else
                {
                    return intArray[i];
                }
            }
        } */
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
24.10.2019, 21:46
Ответы с готовыми решениями:

Ограничивающий прямоугольник
Нужно написать класс BoundingRectangle, который обрабатывает точки на плоскости и строит по ним прямоугольник минимального размера, в...

Минифильтр, ограничивающий права доступа
Добрый день! Требуется написать минифильтр, ограничивающий права доступа к определённым файлам (например, чтобы заданный файл нельзя было...

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

29
 Аватар для Enifan
1853 / 1201 / 502
Регистрация: 14.10.2018
Сообщений: 3,338
31.10.2019, 19:52
Студворк — интернет-сервис помощи студентам
Saulq, если честно, ваш код вообще не компилируется, как минимум 3 ошибки выдает на стадии компиляции.

Добавлено через 2 минуты
Saulq, например на 8-ой строчке стоит ; (точка с запятой), что ведет к ошибкам
на 123 строчке обращение к переменной scalar которой в принципе не существует
0
1 / 1 / 0
Регистрация: 03.12.2018
Сообщений: 196
31.10.2019, 20:56  [ТС]
Насколько я понял проблема в конструкторе, но как изменить его?

Добавлено через 3 минуты
Enifan, Странно, название метода не скопировалось, а на счет 8-ой строки не понял
Вот новый код:
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
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
using System;
 
namespace Class_Array
{
    class DemoArray
    {
        private int[] intArray;
        private int n;
        public int scalar
        {
            set
            {
                for (int i = 0; i < intArray.Length; i++)
                {
                    intArray[i] *= value;
                }
            }
        }
        public DemoArray(int N)
        {
            n = N;
            intArray = new int[n];
        }
        public DemoArray(DemoArray r)
        {
            n = r.n;
            intArray = new int[r.n];
            for (int i = 0; i < intArray.Length; i++)
            {
                intArray[i] = r[i];
            }
        }
        public int this[int i]
        {
            get
            {
                return intArray[i];
            }
            set 
            {
                if (value < -20 || value > 20)
                {
                    Console.WriteLine("Индекс вне диапазона");
                }
                intArray[i] = value;
            }
        } 
        public void ReadArray()
        {
            Console.WriteLine("Введите элементы: ");
            for (int i = 0; i < intArray.Length; i++)
            {
                Console.Write("Элемент[{0}] = ", i);
                intArray[i] = Convert.ToInt32(Console.ReadLine());
            }
        }
        public void PrintArray()
        {
            for (int i = 0; i < intArray.Length; i++)
            {
                Console.Write("{0}; ", intArray[i]);
            }
            Console.WriteLine();
        }
        public void Sorting()
        {
            for (int j = 0; j < intArray.Length; j++)
            {
                for (int i = 0; i < intArray.Length - 1; i++)
                {
                    if (intArray[i] < intArray[i + 1])
                    {
                        int tmp = intArray[i];
                        intArray[i] = intArray[i + 1];
                        intArray[i + 1] = tmp;
                    }
                }
            }
        }
 
        //Перегрузка операций
        public static DemoArray operator ++(DemoArray x)
        {
            DemoArray tmp = new DemoArray(x.n);
            for (int i = 0; i < x.n; i++)
            {
                tmp[i] = x[i] + 1;
            }
            return tmp;
        }
        public static DemoArray operator --(DemoArray x)
        {
            DemoArray tmp = new DemoArray(x.n);
            for (int i = 0; i < x.n; i++)
            {
                tmp[i] = x[i] - 1;
            }
            return tmp;
        }
        public static DemoArray operator +(DemoArray x, DemoArray y)
        {
            if (x.n == y.n)
            {
                DemoArray summa = new DemoArray(x.n);
                for (int i = 0; i < x.n; i++)
                {
                    summa.intArray[i] = x.intArray[i] + y.intArray[i];
                }
                return summa;
            }
            else
            {
                return null;
            }
        }
    }
    class Program
    {
        static void Main(string[] args)
        {
            Console.Write("Введите размерность массива: ");
            int n = Convert.ToInt32(Console.ReadLine());
            DemoArray Arr = new DemoArray(n);
            Arr.ReadArray();
            Console.WriteLine();
            Console.Write("Вывод элементов: ");
            Arr.PrintArray();
            Console.WriteLine();
 
            Console.Write("Элементы в порядке убывания: ");
            DemoArray Sort = new DemoArray(Arr);
            Sort.Sorting();
            Sort.PrintArray();
 
            DemoArray Scalar = new DemoArray(Arr);
            Console.Write("Вывод элементов умноженых на три: ");
            Scalar.scalar = 3;
            Scalar.PrintArray();
            Console.WriteLine();
 
            DemoArray Inc = new DemoArray(Arr);
            Console.Write("Инкремент: ");
            DemoArray Arr1 = ++Inc; 
            Arr1.PrintArray();
 
            DemoArray Dis = new DemoArray(Arr);
            Console.Write("Дискримент: ");
            DemoArray Arr2 = --Dis;
            Arr2.PrintArray();
 
            Console.Write("Cумма: ");
            DemoArray Arr3 = Arr1 + Arr2;
            Arr3.PrintArray();
        }
    }
}
Добавлено через 1 минуту
scalar это свойство с 9 строки

Добавлено через 22 секунды
И кстати, у меня все запускается
0
 Аватар для Enifan
1853 / 1201 / 502
Регистрация: 14.10.2018
Сообщений: 3,338
31.10.2019, 21:06
Saulq, когда добавилось свойство scalar - сразу все ошибки убрались, вместе с 8-ой строчкой. По поводу того, что не срабатывает сообщение об ошибке - все просто. Если бы вы обращались к объекту класса через перегруженный оператор скобки - то сообщение появилось бы.
C#
1
Arr[i];
Но вы обращаетесь напрямую к массиву, что находится внутри объекта класса. Перегрузка будет действовать когда вы обращаетесь к объекту классу через индекс, но не когда вы обращаетесь к массиву (даже если это массив данного объекта).
0
1 / 1 / 0
Регистрация: 03.12.2018
Сообщений: 196
31.10.2019, 21:14  [ТС]
Enifan, Ничего не понял, что в коде изменить надо?
0
 Аватар для Enifan
1853 / 1201 / 502
Регистрация: 14.10.2018
Сообщений: 3,338
31.10.2019, 21:24
Saulq, как то так, и ваши перегруженные скобки работают. По комментария определите что добавилось, что удалилось
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
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
using System;
 
namespace Class_Array
{
    class DemoArray
    {
        private int[] intArray;
        public int Length { get; private set; } // добавлено
        private int n;
        public int scalar
        {
            set
            {
                for (int i = 0; i < intArray.Length; i++)
                {
                    intArray[i] *= value;
                }
            }
        }
        public DemoArray(int N)
        {
            n = N;
            intArray = new int[n];
            Length = N; // добавлено
        }
        public DemoArray(DemoArray r)
        {
            n = r.n;
            intArray = new int[r.n];
            for (int i = 0; i < intArray.Length; i++)
            {
                intArray[i] = r[i];
            }
            Length = r.Length; // добавлено
        }
        public int this[int i]
        {
            get
            {
                return intArray[i];
            }
            set
            {
                if (value < -20 || value > 20)
                {
                    Console.WriteLine("Индекс вне диапазона");
                }
                intArray[i] = value;
            }
        }
        // Не нужно
        //public void ReadArray()
        //{
        //    Console.WriteLine("Введите элементы: ");
        //    for (int i = 0; i < intArray.Length; i++)
        //    {
        //        Console.Write("Элемент[{0}] = ", i);
        //        intArray[i] = Convert.ToInt32(Console.ReadLine());
        //    }
        //}
        public void PrintArray()
        {
            for (int i = 0; i < intArray.Length; i++)
            {
                Console.Write("{0}; ", intArray[i]);
            }
            Console.WriteLine();
        }
        public void Sorting()
        {
            for (int j = 0; j < intArray.Length; j++)
            {
                for (int i = 0; i < intArray.Length - 1; i++)
                {
                    if (intArray[i] < intArray[i + 1])
                    {
                        int tmp = intArray[i];
                        intArray[i] = intArray[i + 1];
                        intArray[i + 1] = tmp;
                    }
                }
            }
        }
 
        //Перегрузка операций
        public static DemoArray operator ++(DemoArray x)
        {
            DemoArray tmp = new DemoArray(x.n);
            for (int i = 0; i < x.n; i++)
            {
                tmp[i] = x[i] + 1;
            }
            return tmp;
        }
        public static DemoArray operator --(DemoArray x)
        {
            DemoArray tmp = new DemoArray(x.n);
            for (int i = 0; i < x.n; i++)
            {
                tmp[i] = x[i] - 1;
            }
            return tmp;
        }
        public static DemoArray operator +(DemoArray x, DemoArray y)
        {
            if (x.n == y.n)
            {
                DemoArray summa = new DemoArray(x.n);
                for (int i = 0; i < x.n; i++)
                {
                    summa.intArray[i] = x.intArray[i] + y.intArray[i];
                }
                return summa;
            }
            else
            {
                return null;
            }
        }
    }
    class Program
    {
        static void Main(string[] args)
        {
            Console.Write("Введите размерность массива: ");
            int n = Convert.ToInt32(Console.ReadLine());
            DemoArray Arr = new DemoArray(n);
            //Arr.ReadArray(); не нужно
 
            Console.WriteLine("Введите элементы: ");   // добавлено
            for (int i = 0; i < Arr.Length; i++)       // добавлено
            {   // добавлено
                Console.Write("Элемент[{0}] = ", i);   // добавлено
                Arr[i] = Convert.ToInt32(Console.ReadLine());   // добавлено
            }   // добавлено
 
            Console.WriteLine();
            Console.Write("Вывод элементов: ");
            Arr.PrintArray();
            Console.WriteLine();
 
            Console.Write("Элементы в порядке убывания: ");
            DemoArray Sort = new DemoArray(Arr);
            Sort.Sorting();
            Sort.PrintArray();
 
            DemoArray Scalar = new DemoArray(Arr);
            Console.Write("Вывод элементов умноженых на три: ");
            Scalar.scalar = 3;
            Scalar.PrintArray();
            Console.WriteLine();
 
            DemoArray Inc = new DemoArray(Arr);
            Console.Write("Инкремент: ");
            DemoArray Arr1 = ++Inc;
            Arr1.PrintArray();
 
            DemoArray Dis = new DemoArray(Arr);
            Console.Write("Дискримент: ");
            DemoArray Arr2 = --Dis;
            Arr2.PrintArray();
 
            Console.Write("Cумма: ");
            DemoArray Arr3 = Arr1 + Arr2;
            Arr3.PrintArray();
        }
    }
}
0
1 / 1 / 0
Регистрация: 03.12.2018
Сообщений: 196
31.10.2019, 21:32  [ТС]
Enifan, данное решение не соответствует моему заданию, а именно второму пункту.
Создать класс для работы с одномерным массивом:
Поля: массив целых чисел; целое число n - размерность массива
Методы:
1) конструктор позволяющий создать массив размерностью N;
2) ввод элементов массива с клавиатуры;
3) вывод элементов массива на экран;
3) сортировка элементов массива в порядке убывания;
4) свойство доступное только для записи: умножение всех элементов массива на скаляр
5) индексатор ограничивающий диапазон от -20 до 20
0
 Аватар для Enifan
1853 / 1201 / 502
Регистрация: 14.10.2018
Сообщений: 3,338
31.10.2019, 21:44
Saulq, 130-135 строчка, ввод происходит с клавиатуры, элементы добавляются в массив (который находится в объекте Arr)
0
1 / 1 / 0
Регистрация: 03.12.2018
Сообщений: 196
31.10.2019, 21:46  [ТС]
Enifan, Все верно, но вы не учли одного: это должен был быть метод
0
 Аватар для Enifan
1853 / 1201 / 502
Регистрация: 14.10.2018
Сообщений: 3,338
31.10.2019, 21:54
Saulq, сделаем. В том коде, где вы скидывали в последний раз, изменить одно слово в 54 строке
C#
1
this[i] = Convert.ToInt32(Console.ReadLine());
1
1 / 1 / 0
Регистрация: 03.12.2018
Сообщений: 196
31.10.2019, 22:14  [ТС]
Enifan, Все работает, спасибо
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
31.10.2019, 22:14

Обработать выделенный диапазон ячеек, результат записать в смежный диапазон
Напишите в среде Excel макрос, который в выделенном диапазоне ячеек должен выполнять заданные действия и записывать результат в смежную с...

Найти диапазон который соответствует дате и данный диапазон имеет более старшую дату
Добрый день! Подскажите как лучше решить данную задачу - Задача - найти диапазон который соответствует дате(искомого значения) и...

Диапазон чисел - какой диапазон у каждой переменной
все int, можете написать какой диапазон у каждой переменной типа а1= a1 = rand()%7; b1 = rand()%6+4; a2 = rand()%7; b2 =...

Вставить диапазон с 1-го листа на 2-ой и удалить диапазон
Добрый день, всем. Посоветуйте каким образом сделать своеобразную кнопку отмены после вставки диапазона данных. на листе...


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

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

Новые блоги и статьи
Когда логика программы не спасает от человеческих ошибок
Maks 18.08.2026
В последнее время всё чаще и чаще сталкиваюсь с таким явлением, как абсолютная невнимательность (или глупость) пользователей. Проявляется это чаще всего на работе в коллективе. Допустим, человек с. . .
Лето уходит
kumehtar 17.08.2026
Мысли в слух
kumehtar 17.08.2026
Забавно, насколько сейчас стала доступна информация. Например о магии, духовном развитии, медитациях, и других подобных направлениях, ранее зачастую тайных, передаваемых от учителя к ученику. Хотя. . .
Перемещение строк из ТЧ в другой документ с учетом текущего пробега
Maks 17.08.2026
Реализация из решения ниже выполнена на примере нетипового документа "Автозапчасти", с ТЧ "Шины". За основу взят алгоритм отсюда: https:/ / www. cyberforum. ru/ blogs/ 359708/ 10838. html Задача: . . .
Саморегулирующийся социальный контракт для сервера cross-section.
Hrethgir 14.08.2026
С кодом конечно таких глубоких размышлений пока не было, впрочем я уже привык к алгоритмизации. Суть предмета записи: снова в диалоге с нейросетью (я взял пока себе ник для учётки админа - Rector). . . .
Часы электронные
Uhbif79 12.08.2026
Выкладываю программу часов. Программа позволяет: 1. Использовать системное время и дату, 2. Есть возможность вводить время и дату вручную. 3. Реализованы 2 будильника: начало и конец рабочего дня. . . .
Часы с будильником на основе класса QLCDNumber
Uhbif79 12.08.2026
Всем добрый день, выкладываю программу часов с будильником на основе класса QLCDNumber. Здесь я пробовал самостоятельно создавал классы, впервые столкнулся с видимостью переменной одного класса из. . .
Установка MinGW GCC 16.2 и CMake
8Observer8 10.08.2026
VK Видео: https:/ / vkvideo. ru/ video-240781534_456239017 YouTube: eY5-5PyI9NM Текстовая версия
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru