Как сделать вещественный массив
Массив — это совокупность данных одного типа, имеющих одно общее имя. Доступ к элементам массива осуществляется путём указания имени массива и номера элемента.
Особенностью массивов в C# относительно языков C/C++ является то, что память под них всегда выделяется динамически . Это объясняется тем, что любой массив является наследником класса Array.
Вначале рассмотрим работу с одномерным массивом, затем рассмотрим приёмы работы с двухмерными и многомерными массивами.
Одномерные массивы
Одномерный массив — это массив, имеющий одно измерение.
Прежде чем начать работать с массивом, необходимо создать ссылку на объект:
Затем выделяется память под заданное количество элементов массива:
имя_массива = new тип_элементов [ количество_элементов ];
После этого с массивом можно выполнять какие-либо действия.
Например, создадим массив из 5 вещественных чисел:
Две рассмотренные выше операции можно объединить:
double [] x = new double[5];
Как и простую переменную, массив можно инициализировать , т.е. задать элементам массива начальные значения (пусть это будут числа 4,5,3,2,1 ):
double []x = new double[5] ;
Если чисел при инициализации задать больше или меньше необходимого, то система на этапе компиляции выдаст ошибку. Вывод: данных при инициализации надо задавать ровно столько, сколько выделяем памяти.
Полученную запись можно упростить:
Здесь память под массив будет выделяться по фактическому количеству данных, записанных в блоке (фигурных скобках).
В обоих случаях выделяется память под массива из 5 элементов вещественного типа.
К стати. А как система отреагирует вот на такую запись:
Оказывается, совершенно спокойно. Точно так же её вполне устроит и такое:
double []x = new double[0];
Массив из нуль чисел — это тоже массив. Создать его можно, а вот обращаться к данным этого массива не получится. Отрицательное же количество элементов оценивается как ошибочное. Ни создать такой массив, и тем более работать с ним не выйдет. Компилятор сразу выдаст ошибку.
Дальнейшая работа с массивом ведётся так же, как обычно это было в C/C++. После выхода из блока, в котором был создан массив, выделенная под массив память освобождается «сборщиком мусора». Но происходит это не сразу, а тогда, когда система посчитает нужным это сделать. В большинстве случает это не имеет для программиста ни какого значения.
Пример . Дан массив из n действительных чисел. Вычесть из каждого элемента массива среднее значение массива. Распечатать полученный массив.
Возможный вариант решения:
public static void Main(string[] args)
double []x = new double[5];
int i, n = x.Length;
Console.WriteLine(«Задайте вещественных чисел:», n);
s /= n; // это среднее значение
Console.WriteLine(«Массив после обработки:»);
foreach(double r in x)
Console.Write(«Press any key to continue . . . «);
Двумерные массивы (матрицы)
Двумерный массив имеет два измерения. Работа с матрицей, как и работа с одномерным массивом, начинается с создания ссылки на матрицу с последующим выделением памяти. Также возможна инициализация элементов матрицы. Пусть требуется создать матрицу действительных чисел A[2×3] . Рассмотрим варианты работы.
1)Создание ссылки на матрицу и выделение памяти:
double [,]a = new double[2, 3];
2)Создаём ссылку на матрицу, выделяем память и одновременно инициализируем элементы матрицы:
Как видим, каждую строку берём в свой блок, в остальном всё делается так же, как и для одномерного массива.
То же самое можно записать по аналогии с одномерным массивом ещё проще:
Пример . Пронормировать матрицу действительных чисел A[2×3] , т.е. каждый элемент матрицы поделить на максимальное по модулю число.
Возможный вариант решения:
public static void Main(string[] args)
double [,]a = new double[n, m];
Console.WriteLine(«Задайте матрицу A[*]:», n , m);
a[i, j] = double.Parse(Console.ReadLine());
double max = Math.Abs(a[0, 0]);
if(Math.Abs(a[i, j]) > max)
max = Math.Abs(a[i, j]);
Console.WriteLine(«Mатрица A[*] после нормирования:», n , m);
Console.Write(«Press any key to continue . . . «);
Многомерные массивы
При работе с многомерными массивами всё делается по аналогии. Единственно, надо учитывать количество измерений таких массивов.
Пример описания трёхмерного массива:
double [,,]V = new double[2, 3, 3];
Здесь выделяется память под массив, который можно представить состоящим из двух таблиц размером 3 x3 .
Пример инициализации трёхмерного массива:
double [,,]V = new double[2, 3, 3]
А ещё проще инициализировать так:
Дальнейшая работа с многомерными массивами ведётся как и с матрицами, только индексов больше и, как правило, возрастает вложенность циклов.
Стандартные методы и свойства для работы с массивами
Все массивы, как было сказано ранее, являются наследниками класса Array . Благодаря этому при работе с массивами имеется большое количество готовых методов и свойств. Рассмотрим некоторые из них. Во всех примерах x — одномерный массив, a — матрица.
1) Length — возвращает количество элементов в массиве. Обычно используется в циклах, например:
2) Rank — возвращает размерность массива. Пример:
1) Sort() — сортировка массива. Метод многократно перегружен. Примеры использования:
сортируем весь массив по возрастанию:
начиная с i-го элемента, упорядывачиваем k элементов массива (у нас: сортируем 3 элемента, начиная с 2-го):
2) Reverse() — изменяем порядок следования элементов массива на обратный:
А таким способом первые три элемента будут записаны в обратном порядке:
Array.Reverse(x, 0, 3);
3) BinarySearch() — поиск в упорядоченном массиве индекса элемента, равного заданному значению. Если поиск не увенчался успехом, то ответом будет отрицательное число. Пример:
int j = Array.BinarySearch(x, t);
4) IndexOf() — поиск первого вхождения в массиве заданного значения, например, поиск положения числа 4 в массиве x . Если в массиве нет такого значения, то ответом будет отрицательное число.
int j = Array.IndexOf(x,4);
5) LastIndexOf() — поиск последнего вхождения в массиве заданного значения, например, поиск положения числа 4 в массиве x . Если в массиве нет такого значения, то ответом будет отрицательное число.
int j = Array.LastIndexOf(x,4);
6) GetLength() — получение количества элементов по данной размерности. Размерности нумеруются с 0 . Таким образом, для двумерного массива ввод массива действительных чисел с клавиатуры можно записать:
a[i, j] = double.Parse(Console.ReadLine());
Как задать массив с целыми и вещественными числами?
Не bouble, а double.
В описании массива пишете
double *arr2;
а в инициализации —
arr2=new double[n];
Если поменять тип только в одном месте, будет ошибка.
Ответ написан более трёх лет назад
Нравится 1 4 комментария

Эшли Эванстон @Inessevanston Автор вопроса
Как всегда часами тупить из-за опечатки >_<. Спасибо

Эшли Эванстон: поэтому обычно пишут double *arr2 = new double[n]; непосредственно перед местом использования. А то что у в начале наделано переменных это какой-то паскаль-стайл.
AtomKrieg: Так здесь по логике программы массив пересоздаётся много раз, удлинняясь при каждом введённом числе.

Ответы на вопрос 2

инженер, программист, преподаватель
Как задать массив, в который можно записать и целые и вещественные числа?
Пытаюсь поставить тип float или bouble,
1. массив, содержащий значения типов int & double создать нельзя! — C++ типизированный язык, и в массиве могут быть элементы только одного типа;
2. при инициализации массива double вы можете указать константы int, но они будут тут же преобразованы к типу double (но не наоборот);
3. если вы попробуете позже использовать такие загруженные значения как int — это не удасться, они уже преобразованы в double.
Ответ написан более трёх лет назад
Комментировать
Нравится Комментировать

Станислав Макаров @Nipheris Куратор тега C++
Как задать массив, в который можно записать и целые и вещественные числа?
boost::variant
Только сначала убедитесь, что вы понимаете, что делаете и чего хотите.
C++ типизированный язык, и в массиве могут быть элементы только одного типа;
Совершенно верно, и этот тип может быть суммой нескольких других типов (суммой в смысле суммы множеств допустимых значений).
Как сделать вещественный массив
Сообщение от nec117
Начал изучать язык Си. Пока что жуткие проблемы с синтаксисом, пытаюсь понять. Огромная просьба, помогите написать программу, которая создаёт массив вещественных чисел(положительных и отрицательных), а потом выводит сумму всех дробных частей положительных элементов этого массива. Заранее огромнейшее спасибо всем, кто поможет. ОЧень срочно нужно! Помогите..
ромик0: Cколько получают здешние модераторы?
pu4koff: У модераторов сдельная оплата труда. Выдал предупреждение — плюс к премии. Выдал бан — лучший модератор месяца со всеми вытекающими.
| alexinspir |
| Посмотреть профиль |
| Найти ещё сообщения от alexinspir |
Создать двумерный массив из вещественных чисел с рандомными числами C#
у вас вопрос по работе кода, но код вы не показываете. Отредактируйте вопрос, добавьте код, в котором ошибки. Опишите какие ошибки в каких строках возникают.
18 мая 2021 в 21:53
У меня этот код работает. Что здесь не так?
18 мая 2021 в 22:14
он то работает, но вещественные числа не выходят типа 15,34
18 мая 2021 в 22:15
2 ответа 2
Сортировка: Сброс на вариант по умолчанию
На самом деле числа вещественные, просто их надо отформатировать, типа «» , тогда вы увидите нули после запятой. Если вам нужны не нули, то это надо либо генерить целые до 10000, преобразовать в double и делить на 100, либо использовать NextDouble() .
double[,] a = new double[5, 10]; Random random = new Random(); for (int i = 0; i < 5; i++) < for (int j = 0; j < 10; j++) < a[i, j] = random.NextDouble() * 100; // NextDouble() дает случайное вещественное число в диапазоне от 0 до 1 Console.Write("", a[i, j]); > Console.WriteLine(); >
6,72 60,22 24,42 84,20 12,61 30,64 93,47 3,50 22,79 4,34 95,71 90,95 44,50 21,76 1,87 80,73 32,53 40,60 0,96 67,08 41,52 24,01 95,61 63,47 75,61 62,24 24,47 94,76 23,46 20,95 19,74 26,59 48,49 41,25 36,37 14,57 47,68 54,40 53,48 55,64 60,67 24,19 98,83 87,44 9,94 86,21 10,73 9,66 74,33 8,64