Массивы
Часто возникает необходимость хранить не одну переменную, а набор однотипных переменных. Например, список учащихся класса – это набор данных строкового типа, координаты вершин многоугольника или коэффициенты многочлена – это набор числовых данных. Для хранения наборов данных используются структуры данных. Основная структура данных – это массив.
— это структура однотипных данных, занимающих непрерывную область памяти. Массив имеет размер — количество элементов в нем. Каждый элемент массива имеет свой номер (также называемый ), обращение к элементу массива осуществляется путем указания его индекса. В языке C++ элементы нумеруются, начиная с 0, поэтому последний элемент массива имеет номер на 1 меньше размера массива.
Массив в языке C++ задается следующим образом:
тип_элементов идентификатор [ размер ];
где тип_элементов — произвольный тип данных языка C++, который будут иметь элементы массива, например, int , double и т.д.; идентификатор — имя массива, размер — число элементов в нем.
К элементу массива можно обращаться, как идентификатор [ индекс ] . Например, если было сделано объявление
то таким образом создается 5 элементов массива типа double : A[0] , A[1] , A[2] , A[3] , A[4] .
Пример программы, которая создает массив типа int[] , заданного пользователем размера, считывает с клавиатуры его элементы, затем прибавляет к каждому элементу массива число 1 , затем выводит результат на экран:
#include
using namespace std;
int main()
int n; // Размер массива
int i; // Счетчик в циклах
int arr[n]; // Объявление массива (так делать нельзя), лучше вместо такого объявления массива использовать std::vector arr(n);
// Прибавляем по 1 к каждому элементу
for(i=0;i
// Выводим массив на экран
for(i=0;i
cout return 0;
>
В этом примере при помощи // обозначается начало комментария, весь текст после начала комментария и до конца строки компилятором игнорируется. Второй способ объявления комментария: в начале комментария поставить знаки /* , а в конце – */ . Это позволяет делать комментарии, занимающие несколько строк. В языке C допустимы только такие комментарии. ::min()>@w< >— минимальное значение типа @code —> ::max()>@w< >— максимальное значение типа @code. —>
Упражнения
- (A) Выведите на экран все элементы массива с четными индексами (то есть A[0] , A[2] , A[4] , . ).
- (B) Выведите на экран все четные элементы массива (то есть те элементы, которые являются четными числами).
- (C) Найдите количество положительных элементов в массиве. Программа должна считать массив и вывести единственное число – количество положительных элементов в массиве.
- (D) Дан массив. Найдите количество элементов массива, которые больше предыдущего элемента в этом массиве.
- (E) Массив содержит только ненулевые числа. Определите, есть ли в данном массиве два соседних элемента с одинаковыми знаками. Программа должна вывести YES , если есть два числа с одинаковыми знаками и NO иначе.
- (F) Дан массив. Определите, сколько в этом массиве элементов, которые строго больше обоих своих соседей.
- (G) Дан массив. Переставьте элементы массива в обратном порядке без использования дополнительного массива. Программа должна считать массив, поменять порядок его элементов, вывести результат на экран (просто вывести элементы массива в обратном порядке – недостаточно!).
- (H) Переставьте соседние элементы массива (0-й элемент поменять с 1-м, 2-й с 3-м и т.д. Если элементов нечетное число, то последний элемент остается на своем месте)
- (I) Циклически сдвиньте элементы массива вправо (0-й элемент становится 1-м, 1-й становится 2-м, . последний становится 0-м, то есть массив превращается в массив ).
- (J) Найдите значение наибольшего элемента в массиве.
- (K) Дан массив, отсортированный по возрастанию (каждый элемент массива не меньше предыдущего элемента, например, ). Найдите количество различных чисел в этом массиве. 2 ,x ^2>+. +@code@formula,x n-1 ,x^(n-1)>.> —>
Количество элементов массива + всех массивов внутри массива
Каким способом можно посчитать количество элементов [1, 2, [3, 4, [5]]], чтобы получилось семь. Другой пример: [[[[[[[[[]]]]]]]]] — должно получиться восемь. Я сегодня провёл примерно три часа, но так ничего и не добился.
function deepCount (a) < let count = 0 count = count + a.length function inside (o) < return o.length >for (i in a) < if (typeof a[i] === 'object') < count = count + inside(a[i]) >> console.log(count) > deepCount([1, 2, [3, 4, [5]]])
Вот всё, чего я достиг. Выдаёт шесть, но я не понимаю, как сделать рекурсию функции на саму себя, чтобы бесконечно проверяло, сколько массивов внутри.
Отслеживать
задан 17 сен 2022 в 14:02
2 ответа 2
Сортировка: Сброс на вариант по умолчанию
Можно рекурсивно. Проверять является ли элемент массива массивом и если да, то передавать этот элемент аргументом. Если нет увеличивать счетчик.
let m = [1, 2, [3, 4, [5]]]; let count = 0; function recursion(m) < for (const elem of m) < if (Array.isArray(elem)) < count++; recursion(elem); >else < count++ >> return count > console.log(recursion(m))
Отслеживать
ответ дан 17 сен 2022 в 14:19
2,450 2 2 золотых знака 6 6 серебряных знаков 17 17 бронзовых знаков
Функция recursion работает правильно один раз.
17 сен 2022 в 20:12
@StanislavVolodarskiy Затупил) Потому, что надо спать и высыпаться.
18 сен 2022 в 7:06
deepCount устроена так: в счётчик помещается длина массива. Затем перебираются элементы массива. Если какой-то из них тоже массив, к счётчику добавляется результат рекурсивного вызова deepCount :
const deepCount = a => < let c = a.length; for (const v of a) < if (Array.isArray(v)) < c += deepCount(v); >> return c; >; console.log(deepCount([1, 2, [3, 4, [5]]])); console.log(deepCount([[[[[[[[[]]]]]]]]]));
Отслеживать
ответ дан 17 сен 2022 в 20:21
Stanislav Volodarskiy Stanislav Volodarskiy
29.7k 3 3 золотых знака 16 16 серебряных знаков 54 54 бронзовых знака
- javascript
- массивы
-
Важное на Мете
Похожие
Подписаться на ленту
Лента вопроса
Для подписки на ленту скопируйте и вставьте эту ссылку в вашу программу для чтения RSS.
Дизайн сайта / логотип © 2023 Stack Exchange Inc; пользовательские материалы лицензированы в соответствии с CC BY-SA . rev 2023.10.27.43697
Нажимая «Принять все файлы cookie» вы соглашаетесь, что Stack Exchange может хранить файлы cookie на вашем устройстве и раскрывать информацию в соответствии с нашей Политикой в отношении файлов cookie.
Сначала вводится количество элементов массива, после сами элементы массива
Все элементы массива, кратные 3, помножить на их индекс, а затем найти среднее арифметическое элементов преобразованного массива.
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
Ответы с готовыми решениями:
Помогите сделать ввод количества элементов массива и сами элементы массива
var a:array of integer; i:integer; BEGIN clrscr; randomize; writeln(‘Массив А:’); for i:=1.

Определить количество положительных элементов массива. Элементы массива задаются датчиком случайных чисел (размерность массива произвольна)
Определить количество положительных элементов массива. Элементы массива задаются датчиком случайных.
709 / 348 / 120
Регистрация: 09.12.2020
Сообщений: 919
1 2 3 4 5 6
from random import randint a = [randint(1, 10) for _ in range(10)] for i in range(len(a)): if a[i] % 3 == 0: a[i] *= i print(a, (sum(a) / len(a)), sep='\n')
Регистрация: 18.01.2021
Сообщений: 4
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
def creatingArray(a): mas = [] while a > 0: elem = int(input()) mas.append(elem) a -= 1 return mas def arrayTransformation(mas): for i in range (0, len(mas)): if mas[i] % 3 == 0: mas[i] *= i return mas def averageArrayElem(mas): a = 0 for i in range (0, len(mas)): a += mas[i] return a / len(mas) count = int(input("введите количество элементов массива: ")) mas = arrayTransformation(creatingArray(count)) print("\n", "массив после преобразования:", "\n", mas, "\n") print("среднее арифметическое элементов массива: ", averageArrayElem(mas))
С клавиатуры вводится количество элементов, после чего вводится сам массив, после чего выводится преобразованный массив и среднее арифметическое элементов массива. Всё как в условии задачи.
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
Помогаю со студенческими работами здесь

Вывести сначала все нечетные элементы массива, а после – четные
Здравствуйте, только учусь С++ и не могу решить задачу, которая выглядит следующим следующим.

Вычислить количество положительных элементов массива и сумму элементов массива, расположенных после последнего элемента, равного нулю
В одномерном массиве, состоящем из n вещественных элементов, вычислить: количество положительных.

Количество положительных элементов массива, сумма элементов массива после последнего элемента, равного нулю
В одномерном массиве, который состоит из n действительных элементов, рассчитать: а) количество.
Переписать массивы A и B в массив C: сначала записать элементы массива A, а затем элементы массива B
14. Заданы два массива a и b. Переписать их в массив c так, чтобы сначала были записаны элементы.
Как задается количество элементов массива
Массив представляет набор однотипных данных. Формальное определение массива выглядит следующим образом:
тип_переменной название_массива [длина_массива]
После типа переменной идет название массива, а затем в квадратных скобках его размер. Например, определим массив из 4 чисел:
int numbers[4];
Число элементов массива также можно определять через константу:
const int n = 4; int numbers[n]; // содержит 4 элемента
Некоторые компиляторы (например, G++) также поддерживают установку размера с помощью переменных.
Данный массив имеет четыре числа, но все эти числа имеют неопределенное значение. Чтобы установить значения элементов массива, указываются фигурные скобки (инициализатор), внутри которых перечисляются значения для элементов массива:
int numbers[4] <>; //
В данном случае фигурные скобки пусты, поэтому все элементы массива получают нулевые значения.
Также мы можем указать конкретные значения для всех элементов массива:
int numbers[4] ;
В данном случае в памяти выделяется некоторая область из четырех ячеек по 4 байта (размер типа int), где каждая ячейка содержит определенный элемент массива:
Если значений в инициализаторе меньше, чем элементов в массиве, то значения передаются первым элементам, а остальные получают нулевые значения:
int numbers[4] ; //
Если значений в инициализаторе больше, чем элементов в массиве, то при компиляции возникнет ошибка:
int numbers[4] ; // ! Ошибка
Здесь массив имеет размер 4, однако ему передается 6 значений.
Если размер массива не указан явно, то он выводится из количества переданных значений:
int numbers[] ;
В данном случае в массиве есть 6 элементов.
При этом не допускается присвоение одному массиву другого массива:
int nums1[] ; int nums2[] = nums1; // ошибка
Индексы. Получение и изменение элементов массива
После определения массива мы можем обратиться к его отдельным элементам по индексу. Индексы начинаются с нуля, поэтому для обращения к первому элементу необходимо использовать индекс 0. Обратившись к элементу по индексу, мы можем получить его значение, либо изменить его. Например, получим второй элемент (индекс 1):
int n = numbers[1];
Изменение значения второго элемента:
numbers[1] = 123;
Например, получим и изменим значения элементов:
#include int main() < int numbers[4]; int first = numbers[0]; // получаем первый элемент std::cout
При обращении по индексу следует учитывать, что мы не можем обратиться по несуществующему индексу. Так, если в массиве 4 элемента, то мы можем использовать индексы с 0 до 3 для обращения к его элементам. Использование любого другого индекса приведет к ошибке:
int numbers[4]; int forth = numbers[4]; // !Ошибка - в массиве только 4 элемента
Константные массивы
Если необходимо, чтобы нельзя было изменять значения элементов массива, то такой массив можно определить как константный с помощью ключевого слова const
const int numbers[4]; // numbers[1] = 23; // ошибка - значения элементов массива изменить нельзя
Длина массива
Длина массива не всегда бывает известна. Однако может потребоваться получить ее. Для этого можно использовать несколько способов. Первый способ, который пришел из языка С, представляет применение оператора sizeof :
#include int main() < int numbers[]; std::cout
По сути длина массива равна совокупной длине его элементов. Все элементы представляют один и тот же тип и занимают один и тот же размер в памяти. Поэтому с помощью выражения sizeof(numbers) находим длину всего массива в байтах, а с помощью выражения sizeof(numbers[0]) - длину одного элемента в байтах. Разделив два значения, можно получить количество элементов в массиве.
Второй способ представляет применение встроенной библиотечной функции std::size() :
#include int main() < int numbers[]; int count = std::size(numbers); std::cout
Перебор массивов
Используя циклы, можно пробежаться по всему массиву и через индексы обратиться к его элементам:
#include int main() < const int n = 4; int numbers[n] ; for(int i=0; i < n; i++) < std::cout >
Чтобы пройтись по массиву в цикле, надо знать его длину. Здесь длина задана константой n.вначале надо найти длину массива. И в цикле for перебираем все элементы, пока счетчик i не станет равным длине массива. В итоге на консоль будут выведены все элементы массива:
11 12 13 14
Другой пример - вычислим сумму элементов массива:
#include int main() < int numbers[]; int sum <>; for (int i <>; i < std::size(numbers); sum += numbers[i++]); std::cout
Здесь длина массива вычисляется динамически - с помощью функции std::size() .
Перебор элементов в стиле for-each
Используем другую форму цикла for , которая предназначена специально для перебора последовательностей, в том числе для массивов
#include int main() < int numbers[4] ; for(int n : numbers) < std::cout >
При переборе массива каждый перебираемый элемент будет помещаться в переменную number, значение которой в цикле выводится на консоль.
Если нам неизвестен тип объектов в массиве, то мы можем использовать спецификатор auto для определения типа:
for(auto n : numbers)
Ввод значений массива с консоли
Подобно тому, как вводятся данные для отдельных переменных, можно вводить значения для отдельных элементов массива. Например, пусть пользователь вводит значения числового массива:
#include int main() < const int max ; // максимальная длина массива - не больше 6 чисел int numbers[max]; // массив для ввода чисел int i<>; // счетчик введенных чисел std::cout > numbers[i]; // вводим число i++; > // выводим массив for (i =0; i < max; ++i) < std::cout std::cout
Здесь в цикле сначала вводятся шесть чисел для каждого элемента массива, затем выводим этот массив.