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

Сформировать матрицу по правилу

13.03.2015, 00:55. Показов 1239. Ответов 9
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Всем привет! Никак не могу разобраться с задачей! Есть двумерный массив double[n, 7]. Нужно его сформировать таким образом, чтобы элемент a[i, 3] > 5, если он меньше, то складывать строки в этом столбце ниже (или выше), пока a[i, 3] <=5. При складывании удалить лишние строчки.
Например
Input
1, 2, 3, 1, 0.125, 3, 0.1
1, 2, 3, 6, 1.1, 4, 5
1, 2, 3, 1, 2, 3, 2
1, 2, 3, 3, 4, 5, 0.01
1, 2, 3, 2, 5, 3, 0.001
1, 2, 3, 7, 123, 32, 0.9

Output
1, 2, 3, 7, 0.125, 3, 0.1
1, 2, 3, 6, 2, 3, 2
1, 2, 3, 7, 123, 32, 0.9

Так же возможны и другие случаи
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
13.03.2015, 00:55
Ответы с готовыми решениями:

Сформировать матрицу по правилу
Доброго времени суток, уважаемые форумчане. Мне задали такое задание: сформировать и...

Сформировать матрицу по правилу
Сформировать матрицу М таким образом, чтобы элемент с индексами (I, J) был равен двузнач- ному...

Сформировать матрицу A по правилу
Сформировать матрицу A по правилу Aij=(2Bij + Bmin)/Bmax , где В - произвольно введенная матрица...

Сформировать массив по правилу
Помогите с этим ужасом.. Буду благодарна. Сформировать динамический массив А состоящий из N...

9
16 / 16 / 11
Регистрация: 24.02.2015
Сообщений: 75
13.03.2015, 01:13 2
Эммм...
Удалить строки, это я понял...
Простите, но
Цитата Сообщение от strainik Посмотреть сообщение
складывать
это как?
И что значит
Цитата Сообщение от strainik Посмотреть сообщение
Так же возможны и другие случаи
?
0
0 / 0 / 0
Регистрация: 18.12.2011
Сообщений: 74
13.03.2015, 01:18  [ТС] 3
Предполагается, что столбец 4 не должен быть менее 5, если это не так то мы должны сложить соседние строки
1, 2, 3, 1, 2, 3, 2
1, 2, 3, 3, 4, 5, 0.01
1, 2, 3, 2, 5, 3, 0.001

1, 2, 3, 6, 2, 3, 2
Не обращайте внимания на остальные числа, они не играют существенной роли, только 4 столбец
0
2080 / 1238 / 464
Регистрация: 20.12.2014
Сообщений: 3,237
13.03.2015, 11:15 4
Массив заполнял рандомно. Всё вроде работает, хотя проверял "на бегу":
Кликните здесь для просмотра всего текста
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
            Console.Write("Ввести количество строк n: ");
            int n = Convert.ToInt32(Console.ReadLine());
            double[,] mass = new double[n, 7];
            Console.Write("\nИсходный массив:\n\n");
            Random rnd = new Random();
            for (int i = 0; i < n; i++)
            {
                for (int j = 0; j < 7; j++)
                {
                    mass[i, j] = Convert.ToDouble(rnd.Next(1, 100)) / 10;
                    Console.Write("{0} ", mass[i, j]);
                }
                Console.WriteLine();
            }
            int k = 0;
            while (k < n)
            {
                if (mass[k, 3] <= 5)
                {
                    for (int m = 0; m < 7; m++)
                    {
                        mass[k, m] += mass[k + 1, m];
                        for (int l = k + 1; l < n - 1; l++)
                            mass[l, m] = mass[l + 1, m];
                    }
                    n -= 1;
                }
                else k += 1;
            }
            Console.Write("\nНовый массив:\n\n");
            for (int p = 0; p < n; p++)
            {
                for (int s = 0; s < 7; s++)
                    Console.Write("{0} ", mass[p, s]);
                Console.WriteLine();
            } 
            Console.Read();
1
0 / 0 / 0
Регистрация: 18.12.2011
Сообщений: 74
13.03.2015, 14:58  [ТС] 5
при выпадении на последнюю строчку массива исключение out of range exc
0
2080 / 1238 / 464
Регистрация: 20.12.2014
Сообщений: 3,237
13.03.2015, 15:53 6
Цитата Сообщение от strainik Посмотреть сообщение
при выпадении на последнюю строчку массива исключение out of range exc
У меня работает. Вы сколько строк вводите? Или может быть меняли в коде что-нибудь? Вместо < поставили <= например. Потому что ошибка, если я понял касается выхода за пределы индекса массива. Я еще раз скопирую рабочий код прямо из студии, проверьте еще раз:
Кликните здесь для просмотра всего текста
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
    class Program
    {
        static void Main(string[] args)
        {
            Console.Write("Ввести количество строк n: ");
            int n = Convert.ToInt32(Console.ReadLine());
            double[,] mass = new double[n, 7];
            Console.Write("\nИсходный массив:\n\n");
            Random rnd = new Random();
            for (int i = 0; i < n; i++)
            {
                for (int j = 0; j < 7; j++)
                {
                    mass[i, j] = Convert.ToDouble(rnd.Next(1, 100)) / 10;
                    Console.Write("{0} ", mass[i, j]);
                }
                Console.WriteLine();
            }
            int k = 0;
            while (k < n)
            {
                if (mass[k, 3] <= 5)
                {
                    for (int m = 0; m < 7; m++)
                    {
                        mass[k, m] += mass[k + 1, m];
                        for (int l = k + 1; l < n - 1; l++)
                            mass[l, m] = mass[l + 1, m];
                    }
                    n -= 1;
                }
                else k += 1;
            }
            Console.Write("\nНовый массив:\n\n");
            for (int p = 0; p < n; p++)
            {
                for (int s = 0; s < 7; s++)
                    Console.Write("{0} ", mass[p, s]);
                Console.WriteLine();
            } 
            Console.Read();
        }
    }
0
0 / 0 / 0
Регистрация: 18.12.2011
Сообщений: 74
13.03.2015, 15:57  [ТС] 7
Вот такой пример
0 0 0 7 0 0 0
0 0 0 7 0 0 0
0 0 0 2 0 0 0
0
2080 / 1238 / 464
Регистрация: 20.12.2014
Сообщений: 3,237
13.03.2015, 16:09 8
Цитата Сообщение от strainik Посмотреть сообщение
Вот такой пример
Понятно, проблема в том, что вы не оговорили случай, когда элемент 4го столбца меньше 5, а строчки, с которой нужно его сложить нет. То есть, когда эта строчка в конце массива. Поясните, что делать в этом случае, я поправлю код.
0
0 / 0 / 0
Регистрация: 18.12.2011
Сообщений: 74
13.03.2015, 16:18  [ТС] 9
ммм сложить с предыдущей
0
2080 / 1238 / 464
Регистрация: 20.12.2014
Сообщений: 3,237
13.03.2015, 17:05 10
Лучший ответ Сообщение было отмечено strainik как решение

Решение

Держите, это исправленный вариант программы с рандомным вводом:
Кликните здесь для просмотра всего текста
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
    class Program
    {
        static void Main(string[] args)
        {
            Console.Write("Ввести количество строк n: ");
            int n = Convert.ToInt32(Console.ReadLine());
            double[,] mass = new double[n, 7];
            Console.Write("\nИсходный массив:\n\n");
            Random rnd = new Random();
            for (int i = 0; i < n; i++)
            {
                for (int j = 0; j < 7; j++)
                {
                    mass[i, j] = Convert.ToDouble(rnd.Next(1, 100)) / 10;
                    Console.Write("{0} ", mass[i, j]);
                }
                Console.WriteLine();
            }
            int k = 0;
            while (k < n)
            {
                if (mass[k, 3] <= 5)
                {
                    for (int m = 0; m < 7; m++)
                    {
                        if (n > k + 1)
                        {
                            mass[k, m] += mass[k + 1, m];
                            for (int l = k + 1; l < n - 1; l++)
                                mass[l, m] = mass[l + 1, m];
                        }
                        else 
                        {
                            mass[k - 1, m] += mass[k, m];
                        }
                    }
                    n -= 1;
                }
                else k += 1;
            }
            Console.Write("\nНовый массив:\n\n");
            for (int p = 0; p < n; p++)
            {
                for (int s = 0; s < 7; s++)
                    Console.Write("{0} ", mass[p, s]);
                Console.WriteLine();
            } 
            Console.Read();
        }
    }

А это проверка для вашего конкретного варианта:
Кликните здесь для просмотра всего текста
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
            int n = 3;
            double[,] mass = new double[3, 7] 
            {{0,0,0,7,0,0,0},{0,0,0,7,0,0,0},{0,0,0,2,0,0,0}};
               
            Console.Write("\nИсходный массив:\n\n");
            for (int i = 0; i < 3; i++)
            {
                for (int j = 0; j < 7; j++)
                {
                    Console.Write("{0} ", mass[i, j]);
                }
                Console.WriteLine();
            }
            int k = 0;
            while (k < n)
            {
                if (mass[k, 3] <= 5)
                {
                    for (int m = 0; m < 7; m++)
                    {
                        if (n > k + 1)
                        {
                            mass[k, m] += mass[k + 1, m];
                            for (int l = k + 1; l < n - 1; l++)
                                mass[l, m] = mass[l + 1, m];
                        }
                        else 
                        {
                            mass[k - 1, m] += mass[k, m];
                        }
                    }
                    n -= 1;
                }
                else k += 1;
            }
            Console.Write("\nНовый массив:\n\n");
            for (int p = 0; p < n; p++)
            {
                for (int s = 0; s < 7; s++)
                    Console.Write("{0} ", mass[p, s]);
                Console.WriteLine();
            } 
            Console.Read();
1
13.03.2015, 17:05
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
13.03.2015, 17:05
Помогаю со студенческими работами здесь

Сформировать последовательность по правилу
Помогите решать на с#.Дано вещественное число ε (&gt; 0). Последовательность вещественных чисел AK...

Сформировать массив по правилу
Даны вещественные числа a, а,...,a. Получить b,...,b, где b=(a2 -a)*b при i=1,2,3,...10. ...

Получить матрицу по правилу

Сформировать массив Z(z1,z2,...,z20) по правилу
Всем привет Срочно нужна помощь! Не могу написать программу: Даны массивы X(x1,x2,...,x10)и...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru