Как вывести индекс элемента массива в c
Перейти к содержимому

Как вывести индекс элемента массива в c

  • автор:

Массивы

Часто возникает необходимость хранить не одну переменную, а набор однотипных переменных. Например, список учащихся класса – это набор данных строкового типа, координаты вершин многоугольника или коэффициенты многочлена – это набор числовых данных. Для хранения наборов данных используются структуры данных. Основная структура данных – это массив.

— это структура однотипных данных, занимающих непрерывную область памяти. Массив имеет размер — количество элементов в нем. Каждый элемент массива имеет свой номер (также называемый ), обращение к элементу массива осуществляется путем указания его индекса. В языке 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 arr[i]+=1;

// Выводим массив на экран
for(i=0;i cout // Переведем курсор на новую строку
cout return 0;
>

В этом примере при помощи // обозначается начало комментария, весь текст после начала комментария и до конца строки компилятором игнорируется. Второй способ объявления комментария: в начале комментария поставить знаки /* , а в конце – */ . Это позволяет делать комментарии, занимающие несколько строк. В языке C допустимы только такие комментарии. ::min()>@w< >— минимальное значение типа @code —> ::max()>@w< >— максимальное значение типа @code. —>

Упражнения

  1. (A) Выведите на экран все элементы массива с четными индексами (то есть A[0] , A[2] , A[4] , . ).
  2. (B) Выведите на экран все четные элементы массива (то есть те элементы, которые являются четными числами).
  3. (C) Найдите количество положительных элементов в массиве. Программа должна считать массив и вывести единственное число – количество положительных элементов в массиве.
  4. (D) Дан массив. Найдите количество элементов массива, которые больше предыдущего элемента в этом массиве.
  5. (E) Массив содержит только ненулевые числа. Определите, есть ли в данном массиве два соседних элемента с одинаковыми знаками. Программа должна вывести YES , если есть два числа с одинаковыми знаками и NO иначе.
  6. (F) Дан массив. Определите, сколько в этом массиве элементов, которые строго больше обоих своих соседей.
  7. (G) Дан массив. Переставьте элементы массива в обратном порядке без использования дополнительного массива. Программа должна считать массив, поменять порядок его элементов, вывести результат на экран (просто вывести элементы массива в обратном порядке – недостаточно!).
  8. (H) Переставьте соседние элементы массива (0-й элемент поменять с 1-м, 2-й с 3-м и т.д. Если элементов нечетное число, то последний элемент остается на своем месте)
  9. (I) Циклически сдвиньте элементы массива вправо (0-й элемент становится 1-м, 1-й становится 2-м, . последний становится 0-м, то есть массив превращается в массив ).
  10. (J) Найдите значение наибольшего элемента в массиве.
  11. (K) Дан массив, отсортированный по возрастанию (каждый элемент массива не меньше предыдущего элемента, например, ). Найдите количество различных чисел в этом массиве. 2 ,x ^2>+. +@code@formula,x n-1 ,x^(n-1)>.> —>

С++, Получить индексы максимального и минимального элементов массива

Напишите программу, которая принимает с клавиатуры число N, создает матрицу размера N на N, заполненную случайными числами, и выводит ее на экран. Затем найдите позиции (номер строки и столбца) максимального и минимального элементов этой матрицы.

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

#include #include using namespace std; int main() < int min =0; int max =0; int imin =-1; int jmin =-1; int imax =-1; int jmax =-1; srand(time(NULL)); int n = 0; int sum = 0; cin >> n; // Считываем с клавиатуры n int **a = new int* [n]; // Создаем массив указателей for (int i = 0; i < n; i++) < a[i] = new int [n]; // Создаем элементы >// А дальше работа как с обычным массивом. for (int i = 0; i < n; i++) < for (int j = 0; j < n; j++) < a[i][j] = rand() % 10; cout cout // Считаем минимальный и максимальный min = a[0][0];// берем самый первый элемент массива и считаем, что он минимальный. max = a[0][0];// и он же максимальный. for (int i = 0; i < n; i++) < for (int j = 0; j < n; j++) < if (a[i][j] if (a[i][j] >= max) < max = a[i][j]; imax = i; jmax = j; >> > cout delete [] a; // А потом массив return 0; >

Примечание: счет идет с нуля.

  1. C++, Найти минимальный и максимальный элемент массива
  2. C++, сумма всех элементов матрицы
  3. C++, След матрицы
  4. Pascal: Сумма некоторых элементов массива
  5. C, Находится ли элемент матрицы (массива) на диагоналях?

1 Response

Георгий 04.12.2014 / 02:34

Получение индекса элемента массива

Есть переменная int a=5 , которой инициализируем элемент массива int b[3]= , потом получаем переменную int a1=5 . Имея а1 нужно узнать равна ли она элементу массива, и если равна то, самое важное — получить индекс. Так вот, проблема в том, что это надо сделать не используя цикл. В .NET есть Array::IndexOf(Array^, Object^) , есть ли аналог в C++? Может шаблонные классы?

Отслеживать
3,789 1 1 золотой знак 20 20 серебряных знаков 31 31 бронзовый знак
задан 8 мар 2016 в 19:26
Алесандр Вогрик Алесандр Вогрик
115 1 1 золотой знак 1 1 серебряный знак 10 10 бронзовых знаков
Если и есть такой метод — то он все равно использует цикл.
8 мар 2016 в 19:29

Дак ведь у вас неупорядоченный массив, каким еще образом можно найти в нем искомый элемент (или вы чего-то недоговариваете)?

8 мар 2016 в 19:31

Ну возможно, он написан на ассемблере, что даст прирост производительности. А вообще мне кажется, что есть способ нахождения через адреса

8 мар 2016 в 19:31
Глупости. Если подумать, можно доказать, что меньше O(N) не получить
8 мар 2016 в 19:33

@StateItPrimitive а он и не должен быть упорядоченным, он заполняется в течении выполнения программы . Это важно?

8 мар 2016 в 19:34

3 ответа 3

Сортировка: Сброс на вариант по умолчанию

Не используя цикл, можно использовать алгоритм find из STL ( find_if в данном случае — перебор).

Есть и второй способ без применения циклов — применить рекурсию.

Но вы уверены, что вам нужно именно это? 🙂

Если вопрос в производительности — то быстрее цикла все равно ничего не будет, O(N) для неупорядоченного массива никак не переплюнуть.

Другое дело, что хранить эти значения можно не в массиве, а в том же unordered_set и получить свое за O(1) .

Отслеживать
ответ дан 8 мар 2016 в 20:08
220k 15 15 золотых знаков 120 120 серебряных знаков 233 233 бронзовых знака

Всем спасибо, решение найдено. Наиболее удачный вариант — std::map . Возможно он не изменяет О(N), однако, конкретно в моём случае он повысил производительность. Ещё хороший вариант — for(int i = 0; i < count; ++i)// count - размер массива vector[hwnd[i]] = i; , но я не много не понял как задавать индекс через HWND. reinterpret_cast помог, но с ним были другие заморочки. Ещё раз всем спасибо

Отслеживать
ответ дан 9 мар 2016 в 20:58
Алесандр Вогрик Алесандр Вогрик
115 1 1 золотой знак 1 1 серебряный знак 10 10 бронзовых знаков

Предисловие: в комментариях с автором выяснили, зачем ему это, прикладываю ответ

Так как обращение будет частое к массиву, то удобно применить вектор-индикатор. Ограничиваем максимальное значение в массиве MAX_VALUE и создаем int -массив размера MAX_VALUE . На начальном этапе ОДИН РАЗ инициализируем его примерно так:

for(int i = 0; i < count; ++i)// count - размер массива vector[hwnd[i]] = i; 

Теперь чтобы узнать индекс элемента, достаточно обратиться к vector[i] - это и будет его индекс в массиве hwnd . Если нужно добавить/удалить значения в hwnd, то соответствующим образом поменять vector

Пустить на вывод индекс элемента массива

Author24 — интернет-сервис помощи студентам

Найти индекс максимального элемента массива
Не находит правильно индекс максимального элемента, в чём ошибка? #include<stdio.h>.

Найти индекс центрального элемента массива
Дан массив a, в нем найден центральный элемент х, как найти его индекс в массиве a?

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

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

770 / 760 / 59
Регистрация: 06.07.2009
Сообщений: 3,021

Mason28, Делаешь цикл от нуля до количества элементов-1. Каждый элемент старвниваешь с искомым числом. Если сравнение прошло удачно, то выводишь текущий индекс.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *