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

Roozevelt

2 / 2 / 2

Регистрация: 22.10.2013

Сообщений: 110

1

Вывести номер элемента массива

23.01.2016, 00:45. Показов 31393. Ответов 3

Метки нет (Все метки)


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

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
#include <iostream>
#include <cstdlib>
#include <conio.h>
using namespace std;
 
void min(int D[0],int minimum)
{
    int Min=D[0];
    for(int i=0;i<10;i++)
    {
        if(Min>D[i])
            Min=D[i];
            minimum=i;
    }
    cout<<"Èíäåêñ ñ ìèíèìàëüíûì çíà÷åíèåì íàøåãî ìàññèâà: "<<minimum;
}
 
int main()
{
    setlocale(LC_ALL, "Russian");
    int D[10];
    int #include <iostream>
#include <cstdlib>
#include <conio.h>
using namespace std;
 
void min(int D[0],int minimum)
{
    int Min=D[0];
    for(int i=0;i<10;i++)
    {
        if(Min>D[i])
            Min=D[i];
            minimum=i;
    }
    cout<<"Èíäåêñ ñ ìèíèìàëüíûì çíà÷åíèåì íàøåãî ìàññèâà: "<<minimum;
}
 
int main()
{
    setlocale(LC_ALL, "Russian");
    int D[10];
    int minimum;
    
    cout<<"Çàïîëíåíèå ìàññèâà:n";
    
    for(int i=0;i<10;i++)
    {
        cout<<"Ââåäèòå çíà÷åíèå "<<i<<" ýëåìåíòà ìàññèâà: ";
        while(!(cin>>D[i]))
        {
            cin.clear();
            while(cin.get()!='n')
            cout<<"Ââåäèòå çíà÷åíèå "<<i<<" ýëåìåíòà ìàññèâà: ";
        }
    }
    system("cls");
    cout<<"Èñõîäíûé ìàññèâ:n";
    for(int i=0;i<10;i++)
        cout<<"D["<<i<<"]="<<D[i]<<endl;
    
    min(D,minimum);
    return 0;
}  ;
    
    cout<<"Çàïîëíåíèå ìàññèâà:n";
    
    for(int i=0;i<10;i++)
    {
        cout<<"Ââåäèòå çíà÷åíèå "<<i<<" ýëåìåíòà ìàññèâà: ";
        while(!(cin>>D[i]))
        {
            cin.clear();
            while(cin.get()!='n')
            cout<<"Ââåäèòå çíà÷åíèå "<<i<<" ýëåìåíòà ìàññèâà: ";
        }
    }
    system("cls");
    cout<<"Èñõîäíûé ìàññèâ:n";
    for(int i=0;i<10;i++)
        cout<<"D["<<i<<"]="<<D[i]<<endl;
    
    min(D,minimum);
    return 0;
}

Добавлено через 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
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
#include <iostream>
#include <cstdlib>
#include <conio.h>
using namespace std;
 
void min(int D[0],int minimum)
{
    int Min=D[0];
    for(int i=0;i<10;i++)
    {
        if(Min>D[i])
            Min=D[i];
            minimum=i;
    }
    cout<<"Index with a minimum value of the array: "<<minimum;
};
 
int main()
{
    setlocale(LC_ALL, "Russian");
    int D[10];
    int minimum;
    
    cout<<"Filling an array:n";
    
    for(int i=0;i<10;i++)
    {
        cout<<"Enter the value of the "<<i<<" element of the array: ";
        while(!(cin>>D[i]))
        {
            cin.clear();
            while(cin.get()!='n')
            cout<<"Enter the value of the "<<i<<" element of the array: ";
        }
    }
    system("cls");
    cout<<"Source array:n";
    for(int i=0;i<10;i++)
        cout<<"D["<<i<<"]="<<D[i]<<endl;
    
    min(D,minimum);
    return 0;
}

__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь



0



Timbl4

20 / 20 / 20

Регистрация: 21.12.2015

Сообщений: 32

23.01.2016, 01:33

2

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
#include <iostream>
 
using namespace std;
 
int main()
{
    setlocale(LC_ALL,"Russian");
    const int n=10;
    int m;
    int array[n];
    for(int i=0; i<n; i++)
    {
        cout<<"Введите " <<i+1 <<" элемент: " <<endl;
        cin>>array[i];
    }
    int min=array[0];
    for(int i=0; i<n; i++)
    {
        if(array[i]<min){
            min=array[i];
            m=i;}
    }
    cout<< "Минимум равен: " << min << " его индекс: " << m+1 << endl;
    system("pause");
}



1



swsq

0 / 0 / 0

Регистрация: 09.06.2015

Сообщений: 4

23.01.2016, 01:43

3

Вот, ошибка в скобках там де if

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
#include <iostream>
#include <cstdlib>
#include <conio.h>
using namespace std;
 
void min(int D[10],int minimum)
{
    int Min = D[0];
    for (int i = 0; i<10; i++)
    {
        if (Min > D[i])
        {
            Min = D[i];
            minimum = i;
        }
    }
    cout << "Index with a minimum value of the array: " << minimum;
};
 
 
void main()
{
    setlocale(LC_ALL, "Russian");
    int D[10];
    int minimum(0);
 
    cout << "Filling an array:n";
 
    for (int i = 0; i<10; i++)
    {
        cout << "Enter the value of the " << i << " element of the array: ";
        cin >> D[i];
        {
            cin.clear();
            while (cin.get() != 'n')
                cout << "Enter the value of the " << i << " element of the array: ";
        }
    }
    system("cls");
    cout << "Source array:n";
    for (int i = 0; i<10; i++)
        cout << "D[" << i << "]=" << D[i] << endl;
    min(D, minimum);
    system("pause");
}



0



GbaLog-

Любитель чаепитий

3734 / 1793 / 563

Регистрация: 24.08.2014

Сообщений: 5,997

Записей в блоге: 1

23.01.2016, 12:16

4

Roozevelt,

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <iostream>
using namespace std;
 
int main() {
    int n,min = 0;
    cin >> n;
    int arr[n];
    for(int  i = 0; i < n; i++ ) {
        cin >> arr[i];
        if( arr[min] > arr[i] ) min = i;
    }
    cout << min << endl;
    cin.get();
    return 0;
}



1



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

Flowneee's user avatar

Flowneee

3,7791 золотой знак19 серебряных знаков31 бронзовый знак

задан 8 мар 2016 в 19:26

Алесандр Вогрик's user avatar

Алесандр ВогрикАлесандр Вогрик

1151 золотой знак1 серебряный знак10 бронзовых знаков

19

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

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

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

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

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

ответ дан 8 мар 2016 в 20:08

Harry's user avatar

HarryHarry

209k15 золотых знаков114 серебряных знаков224 бронзовых знака

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

ответ дан 9 мар 2016 в 20:58

Алесандр Вогрик's user avatar

Алесандр ВогрикАлесандр Вогрик

1151 золотой знак1 серебряный знак10 бронзовых знаков

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

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

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

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

ixSci's user avatar

ixSci

23.7k3 золотых знака45 серебряных знаков60 бронзовых знаков

ответ дан 8 мар 2016 в 20:08

Алексей Саровский's user avatar

10

В этом посте будет обсуждаться, как найти индекс элемента в массиве в C#.

Решение должно либо возвращать индекс первого вхождения требуемого элемента, либо -1, если его нет в массиве.

1. Использование Array.IndexOf() метод

Рекомендуемое решение — использовать Array.IndexOf() метод, который возвращает индекс первого вхождения указанного элемента в этот массив.

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

using System;

public static class Extensions

{

    public static int findIndex<T>(this T[] array, T item) {

        return Array.IndexOf(array, item);

    }

}

public class Example

{

    public static void Main()

    {

        int[] array = { 1, 2, 3, 4, 5 };

        int item = 4;

        int index = array.findIndex(item);

        if (index != 1) {

            Console.WriteLine(String.Format(«Element {0} is found at index {1}», item, index));

        }

        else {

            Console.WriteLine(«Element not found in the given array.»);

        }

    }

}

/*

    результат: Element 4 is found at index 3

*/

Скачать  Выполнить код

2. Использование Array.FindIndex() метод

The Array.FindIndex() метод возвращает индекс первого элемента, который удовлетворяет предоставленному предикату, или -1 если такого элемента нет.

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

using System;

public static class Extensions

{

    public static int findIndex<T>(this T[] array, T item) {

        return Array.FindIndex(array, val => val.Equals(item));

    }

}

public class Example

{

    public static void Main()

    {

        int[] array = { 1, 2, 3, 4, 5 };

        int item = 4;

        int index = array.findIndex(item);

        if (index != 1) {

            Console.WriteLine(String.Format(«Element {0} is found at index {1}», item, index));

        }

        else {

            Console.WriteLine(«Element not found in the given array.»);

        }

    }

}

/*

    результат: Element 4 is found at index 3

*/

Скачать  Выполнить код

3. Использование Enumerable.Select() метод

The System.Linq.Enumerable.Select() метод проецирует каждый элемент последовательности в новую форму. В следующем примере кода показано, как мы можем использовать Select() для проецирования последовательности значений и использования как значения, так и индекса каждого элемента, чтобы найти первое вхождение указанного элемента в этом массиве.

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

using System;

using System.Linq;

using System.Collections.Generic;

public static class Extensions

{

    public static int findIndex<T>(this T[] array, T item)

    {

        try {

            return array

                .Select((element, index) => new KeyValuePair<T, int>(element, index))

                .First(x => x.Key.Equals(item)).Value;

        }

        catch (InvalidOperationException) {

            return 1;

        }

    }

}

public class Example

{

    public static void Main()

    {

        int[] array = { 1, 2, 3, 4, 5 };

        int item = 4;

        int index = array.findIndex(item);

        if (index != 1) {

            Console.WriteLine(String.Format(«Element {0} is found at index {1}», item, index));

        }

        else {

            Console.WriteLine(«Element not found in the given array.»);

        }

    }

}

/*

    результат: Element 4 is found at index 3

*/

Скачать  Выполнить код

 
Мы можем избежать блока try-catch, используя FirstOrDefault() метод вместо First():

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

using System;

using System.Linq;

public static class Extensions

{

    public static int findIndex<T>(this T[] array, T item)

    {

        return array

            .Select((element, index) => new { element, index })

            .FirstOrDefault(x => x.element.Equals(item)) ?. index ?? 1;

    }

}

public class Example

{

    public static void Main()

    {

        int[] array = { 1, 2, 3, 4, 5 };

        int item = 4;

        int index = array.findIndex(item);

        if (index != 1) {

            Console.WriteLine(String.Format(«Element {0} is found at index {1}», item, index));

        }

        else {

            Console.WriteLine(«Element not found in the given array.»);

        }

    }

}

/*

    результат: Element 4 is found at index 3

*/

Скачать  Выполнить код

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

29

30

31

32

33

34

35

36

37

38

39

using System;

using System.Collections.Generic;

public static class Extensions

{

    public static int findIndex<T>(this T[] array, T item)

    {

        EqualityComparer<T> comparer = EqualityComparer<T>.Default;

        for (int i = 0; i < array.Length; i++)

        {

            if (comparer.Equals(array[i], item)) {

                return i;

            }

        }

        return 1;

    }

}

public class Example

{

    public static void Main()

    {

        int[] array = { 1, 2, 3, 4, 5 };

        int item = 4;

        int index = array.findIndex(item);

        if (index != 1) {

            Console.WriteLine(String.Format(«Element {0} is found at index {1}», item, index));

        }

        else {

            Console.WriteLine(«Element not found in the given array.»);

        }

    }

}

/*

    результат: Element 4 is found at index 3

*/

Скачать  Выполнить код

Вот и все, что касается поиска индекса элемента в массиве в C#.

Спасибо за чтение.

Пожалуйста, используйте наш онлайн-компилятор размещать код в комментариях, используя C, C++, Java, Python, JavaScript, C#, PHP и многие другие популярные языки программирования.

Как мы? Порекомендуйте нас своим друзьям и помогите нам расти. Удачного кодирования 🙂

Поэтому я выполняю упражнение, в котором я должен попросить пользователя ввести количество блинов, которые съели 10 человек, распечатать, кто съел больше всего блинов, а затем организовать список от самого большого до самого маленького, в основном я должен распечатать:

Человек 3: съел 10 блинов, Человек 5: съел 9 блинов, Человек 8: съел 8 блинов

Однако после использования пузырьковой сортировки я не могу сопоставить человека с правильным значением, потому что пузырьковая сортировка меняет их! Кто-нибудь знает какой-нибудь способ исправить это? Например, есть ли другой способ организовать значения в массиве, не используя пузырьковую сортировку?

void getPancakes()
{
int x = 0;
int temp;
for(int y = 0; y < 10; y++)
{
++x;
cout << "How many pancakes did person " << x << " eat?" << endl;
cin >> pancakes[y];
}
}

void displayArray(int theArray[],int sizeOfArray)
{
int temp;
int i,j;
int q = 10;
for(i = 0; i <= sizeOfArray - 1 ; i++)
{
for(j = i+1 ; j < sizeOfArray ; j++)
{
if(theArray[i] < theArray[j])
{
temp = theArray[i];
theArray[i] = theArray[j];
theArray[j] = temp;
}
}
}
cout << endl;
for(i = 0; i < 10; i++)
cout << "Person " << i+1 << " ate " << theArray[i] << " pancakes" << endl;
}

2

Решение

Как сказал Коди, вам придется хранить оба значения. Как указали @HgMs, вы могли бы вы класс или struct, который является классом только с открытыми членами данных. Вот пример:

struct person{
int id;
int pancakes;
};

int main(){

const int totalPeople = 10;
person personArray[totalPeople];

for (int i = 0; i < totalPeople; ++i){
cout << "How many pancakes did person " << i << " eat? ";
personArray[i].id = i;
cin >> personArray[i].pancakes;
}

for (int i = 0; i < totalPeople; ++i){
cout << "id: " << personArray[i].id << "t" << "Pancakes eaten: " << personArray[i].pancakes << endl;
}

return 0;
}

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

РЕДАКТИРОВАТЬ: Пузырьковая сортировка будет работать нормально.

2

Другие решения

Ярким примером ссылочного типа данных являются массивы (как объекты!).

Массив представляет собой совокупность переменных одного типа с общим для обращения к ним именем.
В C# массивы могут быть как одномерными, так и многомерными.
Массивы служат самым разным целям, поскольку они предоставляют удобные средства для объединения связанных вместе переменных.
Массивами в C# можно пользоваться практически так же, как и в других языках программирования.
Тем не менее, у них имеется одна особенность: они реализованы в виде объектов. Смотрите также заметку «Массивы. Класс System.Array».
Объединение данных возможно и в коллекции, об этом — в статье Класс ArrayList. Пример необобщенной коллекции

Объявление массивов

Для того чтобы воспользоваться массивом в программе, требуется двухэтапная процедура. Во-первых, необходимо объявить переменную, которая может обращаться к массиву. И во-вторых, нужно создать экземпляр массива (объект), используя оператор new.

Пример:

using System;
   namespace массивы
   {
      class Program
      {
         static void Main(string[] args)
         {
         // Объявляем массив
            int[] myArr = new int[5];
         // Инициализируем каждый элемент 
            myArr[0] = 2004;
            myArr[1] = 2005;
            myArr[2] = 2008;
            myArr[3] = 2008;
            myArr[4] = 2014;
         // вывод элементов массива
            foreach (int r in myArr)
               Console.WriteLine(r);
            Console.ReadKey();
         }
      }
  }

Важно! Если массив только объявляется, но явно не инициализируется, каждый его элемент будет установлен в значение, принятое по умолчанию для соответствующего типа данных (например, элементы массива типа bool будут устанавливаться в false, а элементы массива типа int — в 0). В примере, если мы удалим строки с инициализацией, будет напечатано пять нулей.

Примечание. Такие же действия с полями экземпляра структуры выполняет конструктор по умолчанию (без параметров).

Доступ к элементам массива

Для обращения к элементам массива используются индексы. Индекс представляет номер элемента в массиве, при этом нумерация начинается с нуля, поэтому индекс первого элемента будет равен 0. А чтобы обратиться к пятому элементу в массиве, нам надо использовать индекс 4, к примеру: myArr[4].

Инициализация массива

Помимо заполнения массива элемент за элементом (как показано в предыдущем примере), можно также заполнять его с использованием специального синтаксиса инициализации массивов.

Для этого необходимо перечислить включаемые в массив элементы в фигурных скобках { }. Такой синтаксис удобен при создании массива известного размера, когда нужно быстро задать его начальные значения:

1) инициализация массива с использованием ключевого слова new:
int[] m1 = new int[] {10,20,30,40,50};

2) инициализации строкового массива без использования слова new:
string[] m2 = { «Фамилия», «Имя», «Отчество» };

3) используем ключевое слово new и желаемый размер массива символов:
char[] m3 = new char[4] { ‘Я’,’з’,’ы’,’к’ };

Обратите внимание, что в случае применения синтаксиса с фигурными скобками размер массива указывать не требуется (как видно на примере создания переменной m1), поскольку этот размер автоматически вычисляется на основе количества элементов внутри фигурных скобок.

Кроме того, применять ключевое слово new не обязательно (как при создании массива m2).

Неявно типизированные массивы

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

Рассмотрим пример:

using System;
namespace массивы
   {
   class Program
   {
      static void Main(string[] args)
      {
         var m1 = new[] { 1, 2, 3 };
         Console.WriteLine("Тип массива 1 - {0}", m1.GetType());
         var m2 = new[] { "One", "Two", "Three" };
         Console.WriteLine("Тип массива 2 - {0}", m2.GetType());
         Console.ReadKey();
      }
   }
}

Результат:
36
Разумеется, как и при создании массива с использованием явного синтаксиса C#, элементы, указываемые в списке инициализации массива, должны обязательно иметь один и тот же базовый тип (т.е. должны все быть int, string или char). Обратите внимание на метод GetType(), позволяющий программным путем определять тип элементов массива.

Определение массива объектов

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

Хотя на первый взгляд это выглядит довольно понятно, существует одна важная особенность. В основе каждого типа в системе типов .NET (в том числе фундаментальных типов данных) в конечном итоге лежит базовый класс System.Object.

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

Если обратимся к определению массива, данному выше: «Массив представляет собой совокупность переменных одного типа с общим для обращения к ним именем», то это выглядит несколько противоречиво. Но тем не менее, все это возможно потому, что каждый элемент является объектом. Приведем пример:

using System;
namespace массивы
{
   class Program
   {
      static void Main(string[] args)
      {
      // Объявляем и инициализируем массив объектов
         object[] arrByObject = { true, 10, "Язык C#", 13.7};
      // Выведем элемент тип каждого элемента массива
         foreach (object me in arrByObject)
            Console.WriteLine("{0} - {1}", me, me.GetType());
         Console.ReadLine();
      }
   }
}

Результат:37

Обратите внимание на четвертый тип цикла foreach (object me in arrByObject). Легко запомнить: Для каждого (for each) объекта с именем me, входящего в (in) массив arrByObject (учите английский!). На печать выводится как сам объект (элемент массива объектов), так и тип этого объекта (метод GetType(), присущий всем объектам класса Object, от которого наследуются все типы).

Свойство Length

Реализация в C# массивов в виде объектов дает целый ряд преимуществ. Одно из них заключается в том, что с каждым массивом связано свойство Length, содержащее число элементов, из которых может состоять массив. Следовательно, у каждого массива имеется специальное свойство, позволяющее определить его длину.

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

Вставим в предыдущем примере перед Console.ReadKey() оператор
Console.WriteLine(arrByObject.Length);
Будет напечатано значение, равное 4 (число объектов в массиве). Чаще всего оно используется для задания числа элементов массива в цикле for{}.

Многомерные массивы

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

Двумерные массивы. Простейшей формой многомерного массива является двумерный массив. Местоположение любого элемента в двумерном массиве обозначается двумя индексами. Такой массив можно представить в виде таблицы, на строки которой указывает первый индекс, а на столбцы — второй. Пример объявления и инициализации двумерного массива показан ниже:

using System;
namespace массивы
{
   class Program
   {
      static void Main(string[] args)
      {
      // Объявляем двумерный массив
         int[,] myArr = new int[4, 5];
            Random ran = new Random();
      // Инициализируем данный массив
         for (int i = 0; i < 4; i++)
         {
            for (int j = 0; j < 5; j++)
            {
               myArr[i, j] = ran.Next(1, 15);
               Console.Write("{0}t", myArr[i, j]);
            }
            Console.WriteLine();
         }
         Console.ReadLine();
      }
   }
}

Обратите особое внимание на способ объявления двумерного массива. Схематическое представление массива myArr[,] показано ниже:

38

Заметим, что в программе используется еще один объект – ran, принадлежащий к классу Random, метод которого (функция Next() ) возвращает целое число в заданном диапазоне (1,15).

В C# допускаются массивы трех и более измерений. Ниже приведена общая форма объявления многомерного массива:
тип[,…,] имя_массива = new тип[размер1, размер2, … размеры];

Инициализация многомерных массивов

Для инициализации многомерного массива достаточно заключить в фигурные скобки список инициализаторов каждого его размера:
тип[,] имя_массива = {
{val, val, val, …, val},
{ val, val, val, …, val},
{val, val, val, …, val}
};
где val обозначает инициализирующее значение, а каждый внутренний блок — отдельный ряд.

Первое значение в каждом ряду сохраняется на первой позиции в массиве, второе значение — на второй позиции и т.д.

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

Ниже в качестве примера приведена общая форма инициализации двумерного массива (4 строки, 2 столбца):

 int[,] myArr = {
                 {1,10},
                 {2,20},
                 {3,30},
                 {4,40}
                };

Перейдем к рассмотрению примеров решения задач, где применяются массивы и циклы.

 Задача «Три цикла»

Требуется найти сумму и произведение N элементов массива, используя три варианта циклов (for, while, do-while).
Решение. В классе Program объявим статический массив действительных чисел a[1000] и 7 методов (кроме Main()), ввод исходных данных и вычисление сумм и произведений с использованием трех типов циклов.

Тогда наша программа может быть написана так:

using System;
namespace циклы
{
 class Program
 {
   static double [] a= new double[1000];
   static void Main(string[] args)
   {
      int n = InputA();
      Console.WriteLine("сумма_F = {0}",sumF(n));
      Console.WriteLine("сумма_W = {0}",sumW(n));
      Console.WriteLine("сумма_D = {0}",sumD(n));
      Console.WriteLine("произведение_F = {0}",multyF(n));
      Console.WriteLine("произведение_W = {0}",multyW(n));
      Console.WriteLine("произведение_D = {0}",multyD(n));
      Console.ReadKey();
   }
   // Ввод размерности и массива
   static int InputA()
   {
      int n; 
      Console.Write("Ввести кол-во элементов:");
      n = Convert.ToInt32(Console.ReadLine());
      for (int i = 0; i < n; i++)
      {
         Console.Write("a[{0}]=", i);
         a[i] = Convert.ToDouble(Console.ReadLine());
      }
      return n;
   }
   // Сумма через цикл For
   static double sumF(int n)
   {
      double s = 0;
      for (int k = 0; k < n; k++)
         s = s + a[k];
      return s;
   }
   // Сумма через цикл While          
   static double sumW(int n)
   {
      double s=0;
      int k=0;
      while (k < n)
      {
         s = s + a[k];
         k++;
      }
      return s;
   }
   // Сумма через цикл Do-while           
   static double sumD(int n)
   {
      double s = 0;
      int k = 0;
      do
      {
         s = s + a[k]; 
         k++;
      } while (k <= n);
      return s;
   }
   // Произведение через цикл For         
   static double multyF(int n)
   {
      double p = 1;
      for (int k = 0; k < n; k++)
         p = p * a[k];
      return p;
   }
   // Произведение через цикл While          
   static double multyW(int n)  
   {
      double p = 1;
      int k = 0;
      while (k < n)
      {
         p = p * a[k];
         k++;
      }
      return p;
   }
   // Произведение через цикл For     
   static double multyD(int n)
   {
      double p = 1;
      int k = 0;
      do
      {
         p = p * a[k];
         k++;
      } while (k < n);
      return p;
   }
 }
}

Результат: 41

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

Оператор foreach

Последний пример иллюстрирует применение оператора foreach к массивам. Если есть необходимость выполнить некоторые действия со всеми элементами массивов, то этот оператор цикла будет самым кратким.

using System;
namespace ConsoleApplication1
{
   class Program
   {
      static void Main(string[] args)
      {
      // Объявляем два массива
         int[] myArr = new int[5];
         int[,] myTwoArr = new int[5, 6];
         Random ran = new Random();
      // Инициализируем массивы
         for (int i = 1; i <= 5; i++)
         {
            myArr[i - 1] = ran.Next(1, 20);
            for (int j = 1; j <= 6; j++)
                myTwoArr[i - 1, j - 1] = ran.Next(10, 30);
         }
      // Вычисляем квадрат каждого элемента одномерного массива
         foreach (int f in myArr)
            Console.WriteLine("{0} в квадрате равно {1}", f, f*f);
         Console.WriteLine();
      // Вычислим сумму элементов многомерного массива
         int sum = 0;
         foreach (int f2 in myTwoArr)
            sum += f2;
         Console.WriteLine("Сумма 2d массива: {0}", sum);
         Console.ReadLine();
      }
   }
}

Результат: 42

Смотрите также заметку «Массивы. Класс System.Array«.

Задачи, предполагающие использование массивов и циклов, подробно рассмотрены в разделе «Примеры решения задач на тему «Массивы строки»»

Перейдем к рассмотрению объектов, относящихся к классу String (строка).


NEW: Наш Чат, в котором вы можете обсудить любые вопросы, идеи, поделиться опытом или связаться с администраторами.


Помощь проекту:


узнать номер элемента массива в C#

От:

corpse56

 
Дата:  26.05.08 12:25
Оценка:

Здравствуйте!
создается массив Label’ов
например:

       Checkboxes = new CheckBox[5];

далее в цикле:

       for (int i = 0; i < 5; i++)
       {
           Checkboxes[i] = new CheckBox();
           ...
           Checkboxes[i].CheckedChanged += new EventHandler(_Default_CheckedChanged);
       }

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


Re: узнать номер элемента массива в C#

От:

vmpire

Россия

 
Дата:  26.05.08 12:35
Оценка:

Здравствуйте, corpse56, Вы писали:

C>Здравствуйте!

C>создается массив Label’ов
C>например:
C>

C>       Checkboxes = new CheckBox[5];
C>


C>далее в цикле:

C>

C>       for (int i = 0; i < 5; i++)
C>       {
C>           Checkboxes[i] = new CheckBox();
C>           ...
C>           Checkboxes[i].CheckedChanged += new EventHandler(_Default_CheckedChanged);
C>       }
C>



C>так вот вопрос в том, чтобы передать в событие номер элемента! или узнать его в этом событии.

C>может нужен не простой массив, а какой-нибудь другой контейнер?
C>спасибо

В событие придёт object sender — это и есть тот контрол, который послал событие. Различать контролы можно по именам (если в форме на них CreateMember = true) или назначить каждому свойство Tag и различать по нему.


Re: узнать номер элемента массива в C#

От:

Ziaw

Россия

 
Дата:  26.05.08 12:38
Оценка:

1 (1)

Здравствуйте, corpse56, Вы писали:

C>

C>       for (int i = 0; i < 5; i++)
C>       {
C>           Checkboxes[i] = new CheckBox();
C>           Checkboxes[i].Tag = i; // в обработчике берем его у sender 
C>           Checkboxes[i].CheckedChanged += new EventHandler(_Default_CheckedChanged);
C>       }
C>

… << RSDN@Home 1.2.0 alpha 4 rev. 1089>>


Re[2]: узнать номер элемента массива в C#

От:

vmpire

Россия

 
Дата:  26.05.08 12:38
Оценка:

1 (1)

Здравствуйте, vmpire, Вы писали:

V>Здравствуйте, corpse56, Вы писали:


C>>Здравствуйте!

C>>создается массив Label’ов
C>>например:
C>>

C>>       Checkboxes = new CheckBox[5];
C>>


C>>далее в цикле:

C>>

C>>       for (int i = 0; i < 5; i++)
C>>       {
C>>           Checkboxes[i] = new CheckBox();
C>>           ...
C>>           Checkboxes[i].CheckedChanged += new EventHandler(_Default_CheckedChanged);
C>>       }
C>>



C>>так вот вопрос в том, чтобы передать в событие номер элемента! или узнать его в этом событии.

C>>может нужен не простой массив, а какой-нибудь другой контейнер?
C>>спасибо

V>В событие придёт object sender — это и есть тот контрол, который послал событие. Различать контролы можно по именам (если в форме на них CreateMember = true) или назначить каждому свойство Tag и различать по нему.

Например
for (int i = 0; i < 5; i++)
{
Checkboxes[i] = new CheckBox();
Checkboxes[i].Tag = i;

Checkboxes[i].CheckedChanged += new EventHandler(_Default_CheckedChanged);
}

private void _Default_CheckedChanged(Object sender, EventArgs e)
{
int checkBoxId = ((CheckBox)sender).Tag

}


Re[3]: узнать номер элемента массива в C#

От:

corpse56

 
Дата:  26.05.08 13:09
Оценка:

Здравствуйте, vmpire, Вы писали:

V>Здравствуйте, vmpire, Вы писали:


V>>Здравствуйте, corpse56, Вы писали:


C>>>Здравствуйте!

C>>>создается массив Label’ов
C>>>например:
C>>>

C>>>       Checkboxes = new CheckBox[5];
C>>>


C>>>далее в цикле:

C>>>

C>>>       for (int i = 0; i < 5; i++)
C>>>       {
C>>>           Checkboxes[i] = new CheckBox();
C>>>           ...
C>>>           Checkboxes[i].CheckedChanged += new EventHandler(_Default_CheckedChanged);
C>>>       }
C>>>



C>>>так вот вопрос в том, чтобы передать в событие номер элемента! или узнать его в этом событии.

C>>>может нужен не простой массив, а какой-нибудь другой контейнер?
C>>>спасибо

V>>В событие придёт object sender — это и есть тот контрол, который послал событие. Различать контролы можно по именам (если в форме на них CreateMember = true) или назначить каждому свойство Tag и различать по нему.


V>Например

V>for (int i = 0; i < 5; i++)
V>{
V> Checkboxes[i] = new CheckBox();
V> Checkboxes[i].Tag = i;
V> …
V> Checkboxes[i].CheckedChanged += new EventHandler(_Default_CheckedChanged);
V>}

V>private void _Default_CheckedChanged(Object sender, EventArgs e)

V>{
V> int checkBoxId = ((CheckBox)sender).Tag
V> …

V>}

Спасибо за ответ! а вот еще такой вопрос: в вебприложении, у похожего контрола <asp:CheckBox> нетусвойства Tag. Чем можно его заменить? ID, UniqueID?
спасибо


Re[4]: узнать номер элемента массива в C#

От:

_FRED_

Черногория

@ViIvanov
Дата:  26.05.08 13:21
Оценка:

Здравствуйте, corpse56, Вы писали:

C>Спасибо за ответ!

В качестве благодарности, так же не забывайте, пожалуйста, о вреде оверквотинга.

… << RSDN@Home 1 alpha 3 rev. 0>>

Help will always be given at Hogwarts to those who ask for it.


Re[4]: узнать номер элемента массива в C#

От:

vmpire

Россия

 
Дата:  26.05.08 13:48
Оценка:

Здравствуйте, corpse56, Вы писали:

C>Спасибо за ответ! а вот еще такой вопрос: в вебприложении, у похожего контрола <asp:CheckBox> нетусвойства Tag. Чем можно его заменить? ID, UniqueID?

C>спасибо

Тогда мой первый вариант. Например:

protected CheckBox chkMyBox1;
protected CheckBox chkMyBox2;
protected CheckBox chkMyBox3;

private void _Default_CheckedChanged(Object sender, EventArgs e)
{
    if (sender == chkMyBox1) { 
    ...
    } else if (sender == chkMyBox2) {
    ...
    } else if (sender == chkMyBox3) {
    ...
    else { 
    ... // Всё сломалось
    }
}


Re[4]: узнать номер элемента массива в C#

От:

_FRED_

Черногория

@ViIvanov
Дата:  26.05.08 14:12
Оценка:

2 (1)

Здравствуйте, corpse56, Вы писали:

C>в вебприложении, у похожего контрола <asp:CheckBox> нетусвойства Tag. Чем можно его заменить? ID, UniqueID?

private void _Default_CheckedChanged(Object sender, EventArgs e)
{
  int index = Array.IndexOf(Checkboxes, (CheckBox)sender);
  //…
}

… << RSDN@Home 1 alpha 3 rev. 0>>

Help will always be given at Hogwarts to those who ask for it.


Re[5]: узнать номер элемента массива в C#

От:

corpse56

 
Дата:  27.05.08 12:41
Оценка:

Здравствуйте, _FRED_, Вы писали:

_FR>Здравствуйте, corpse56, Вы писали:


C>>в вебприложении, у похожего контрола <asp:CheckBox> нетусвойства Tag. Чем можно его заменить? ID, UniqueID?

_FR>

_FR>private void _Default_CheckedChanged(Object sender, EventArgs e)
_FR>{
_FR>  int index = Array.IndexOf(Checkboxes, (CheckBox)sender);
_FR>  //…
_FR>}
_FR>

Воооооо! вот что-то такое я и хотел!! спасибо! а сейчас сделал по ID, но обязательно переделаю так.


Re[6]: узнать номер элемента массива в C#

От:

Mace

Украина

http://vhaydin.blogspot.com/
Дата:  28.05.08 10:34
Оценка:

Здравствуйте, corpse56, Вы писали:

C>Здравствуйте, _FRED_, Вы писали:


C>Воооооо! вот что-то такое я и хотел!! спасибо! а сейчас сделал по ID, но обязательно переделаю так.

Я в таких случаях обычно делаю свой класс-наследник от чекбокса, у которого добавляю пропертю Index.


Re[7]: узнать номер элемента массива в C#

От:

_FRED_

Черногория

@ViIvanov
Дата:  28.05.08 10:56
Оценка:

Здравствуйте, Mace, Вы писали:

C>>Воооооо! вот что-то такое я и хотел!! спасибо! а сейчас сделал по ID, но обязательно переделаю так.

M>Я в таких случаях обычно делаю свой класс-наследник от чекбокса, у которого добавляю пропертю Index.

Массивов объектов может быть и несколько

… << RSDN@Home 1 alpha 3 rev. 0>>

Help will always be given at Hogwarts to those who ask for it.

Подождите ...

Wait...

  • Переместить
  • Удалить
  • Выделить ветку

Пока на собственное сообщение не было ответов, его можно удалить.

  • Как вывести номер строки в python
  • Как вывести на экран телефона шагомер
  • Как вывести на экран телефона контакт
  • Как вывести на экран телефона значок
  • Как вывести мтс кэшбэк на телефон