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

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

01.11.2016, 17:39. Показов 4775. Ответов 2
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Характеристикой столбца целочисленной матрицы назовем сумму модулей его
отрицательных нечетных элементов. Переставляя столбцы заданной матрицы,
расположить их в соответствии с ростом характеристик. Найти сумму элементов в тех
столбцах, которые содержат хотя бы один отрицательный элемент.
Всё работает,но последнее задание не могу сделать. Сумма неправильно считается, а в чём ошибка не знаю. Помогите,пожалуйста

Кликните здесь для просмотра всего текста
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
86
87
88
89
90
91
92
93
namespace ConsoleApplication5
{
    class Program
    {
        static void Main(string[] args)
        {
            int i, j;//объявление переменных
            Console.WriteLine("Введите строки массива");
            int stroki = Convert.ToInt32(Console.ReadLine());//объявление переменной и ввод её значения
            Console.WriteLine("Введите количество столбцов массива:");
            int stolbsi = Convert.ToInt32(Console.ReadLine());//объявление переменной и ввод её значения 
            int[,] mat = new int[stroki, stolbsi];//объявление матрицы
            Random random = new Random();//объявление функции Random
            Console.WriteLine("Исходная матрица: ");
            for (i= 0; i < stroki; i++) //организуем цикл по строкам
            {
                for (j = 0; j < stolbsi; j++) //организуем цикл по столбцам
                {
                    mat[i, j] = random.Next(-100, 100);//рандомно присваиваем элементу матрицы значение от -100 до 100
                    Console.Write(mat[i, j] + "\t");//вывод элементов матрицы,которые разделены табуляцией
                }
                Console.WriteLine();
            }
            int[] summ = new int[stolbsi]; //создаём массив характеристик столбцов
            for (j = 0; j < stolbsi; j++)  //организуем цикл по столбцам
            {
                summ[j] = 0;//обнуляем элементы массива характеристик столбцов
                for (i = 0; i < stroki; i++)  //организуем цикл по строкам
                { 
                    if (mat[i, j] < 0 && mat[i, j] % 2 != 0) //проверка на отрицательность и нечётность элемента матрицы
                        summ[j] += Math.Abs(mat[i, j]);//сумма элементов столбца матрицы
                }
                Console.WriteLine("Сумма отрицательных нечётных элементов равна:{0}", summ[j]);
            }
            for (j = 0; j < summ.Length; j++) //организуем цикл для первого элемента
 
                for (i = j + 1; i < summ.Length; i++) //организуем цикл для последующего элемента
                    if (summ[j] < summ[i])
                    {
                        int s = summ[j];//объявление переменной и присваивание ей суммы
                        summ[j] = summ[i];//присваиваем сумме по столбцам сумме по строкам
                        summ[i] = s;//присваиваем сумме по строкам переменную
                        for (int k = 0; k < stolbsi; k++)
                        {
                            s = mat[j, k];
                            mat[j, k] = mat[i, k];
                            mat[i, k] = s;
                        }
                    }
            Console.WriteLine("Новая отсортированная матрица: ");
            for (i = 0; i < stroki; i++)//организуем цикл по строкам
            {
                for (j = 0; j < stolbsi; j++)//организуем цикл по столбцам
                    Console.Write("{0, 1}", mat[i, j] + "\t");
                Console.WriteLine(" Сумма отрицательных нечётных элементов равна: {0}", summ[i]);
            }
            int summ1 = 0;//объявление переменной
            bool jj = true;
            int H = 0;
            summ1 = 0;//присваивание переменной начальное значение
            for (i = 0; i < stroki; i++)//организуем цикл по строкам
            {
              j = 0;
                while
                    (jj==true)
                {   
             
                while 
                ( j < stolbsi)//организуем цикл по столбцам
                { 
                    if (mat[i, j] < 0 && H ==0)//проверка на отрицательные элементы в столбце
                    {
                            jj = true;                          
                            H = j;
                          j = 0;
                            summ1 = 0;
                            break;//прерывание цикла
 } 
                            summ1 += mat[i,j];//вычисляем сумму
                       j++;
                        Console.Write("Сумма столбцов равна: {0}", +summ1);
                        Console.WriteLine();
                        if (j == stolbsi)
                        {
                            jj = false;
                        }  
                    }
                  }   
                }
                Console.ReadKey();
            }
        }
    }
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
01.11.2016, 17:39
Ответы с готовыми решениями:

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

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

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

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

2
28 / 28 / 23
Регистрация: 06.10.2016
Сообщений: 74
02.11.2016, 01:00 2
Мои комментарии в коде(FD->начало комментария и FD<- конец комментария).
Теперь всё работает.
Кликните здесь для просмотра всего текста
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
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
using System;
using System.Collections.Generic;
 
namespace ConsoleApplication5
{
    class Program
    {
        /*Характеристикой столбца целочисленной матрицы назовем сумму модулей его
отрицательных нечетных элементов. Переставляя столбцы заданной матрицы,
расположить их в соответствии с ростом характеристик. Найти сумму элементов в тех
столбцах, которые содержат хотя бы один отрицательный элемент.         */
        //FD -> лучше на будущее выносить рандом в глобальное объявление для более устойчивой рандомизации(рекомендации из учебников)
        // в Вашем случае роли особо не играет
        static Random random = new Random();//объявление функции Random
        static List<int> l = new List<int>();//объявляем список для дальнейшей сортировки по возрастанию массива rang
        //объявил глобально, т.к. он нам понадобится в 2-х ф-циях
        static void Main(string[] args)
        {
            int i, j;//объявление переменных
            Console.WriteLine("Введите строки массива");
            int stroki = Convert.ToInt32(Console.ReadLine());//объявление переменной и ввод её значения
            Console.WriteLine("Введите количество столбцов массива:");
            int stolbsi = Convert.ToInt32(Console.ReadLine());//объявление переменной и ввод её значения 
            int[,] mat = new int[stroki, stolbsi];//объявление матрицы
            //Random random = new Random();//объявление функции Random <-FD
            Console.WriteLine("Исходная матрица: ");
            for (i= 0; i < stroki; i++) //организуем цикл по строкам
            {
                for (j = 0; j < stolbsi; j++) //организуем цикл по столбцам
                {
                    mat[i, j] = random.Next(-100, 100);//рандомно присваиваем элементу матрицы значение от -100 до 100
                    Console.Write(mat[i, j] + "\t");//вывод элементов матрицы,которые разделены табуляцией
                }
                Console.WriteLine();
            }
            int[] summ = new int[stolbsi]; //создаём массив характеристик столбцов
            for (j = 0; j < stolbsi; j++)  //организуем цикл по столбцам
            {
                summ[j] = 0;//обнуляем элементы массива характеристик столбцов
                for (i = 0; i < stroki; i++)  //организуем цикл по строкам
                {
                    if (mat[i, j] < 0 && mat[i, j] % 2 != 0) //проверка на отрицательность и нечётность элемента матрицы
                        summ[j] += Math.Abs(mat[i, j]);//сумма элементов столбца матрицы
                }
                Console.WriteLine("Сумма отрицательных нечётных элементов равна:{0}", summ[j]);
            }
            //FD - > тут не происходит сортировки матрицы по характеристикам столбца, к тому же периодически падает по индексу вне пределов
            //for (j = 0; j < summ.Length; j++) //организуем цикл для первого элемента
            //    for (i = j + 1; i < summ.Length; i++) //организуем цикл для последующего элемента
            //        if (summ[j] < summ[i])
            //        {
            //            int s = summ[j];//объявление переменной и присваивание ей суммы
            //            summ[j] = summ[i];//присваиваемсумме по столбцам сумме по строкам
            //            summ[i] = s;//присваиваем сумме по строкам переменную
            //            for (int k = 0; k < stolbsi; k++)
            //            {
            //                s = mat[j, k];
            //                mat[j, k] = mat[i, k];
            //                mat[i, k] = s;
            //            }
            //        }
            Console.WriteLine("");
            mat = GetRankedMatrix(mat, summ);
            Console.WriteLine("Новая отсортированная матрица: ");
            for (i = 0; i < stroki; i++)//организуем цикл по строкам
            {
                for (j = 0; j < stolbsi; j++)//организуем цикл по столбцам
                    Console.Write("{0, 1}", mat[i, j] + "\t");
                Console.WriteLine("");//FD заменил, у Вас i строки, а Вы выводите характеристики столбцов...
                //если строк больше, чем столбцов - выпадаете в ошибку
                //Console.WriteLine(" Сумма отрицательных нечётных элементов равна: {0}", summ[i]);
            }
            foreach (int a in l)//l уже корректно отсортирован в ф-ции GetRankedMatrix, осталось вывести на печать
                Console.WriteLine("Сумма отрицательных нечётных элементов равна: {0}", a);
            //<-FD
            //FD тут совсем всё плохо, комментарю полностью
            //int summ1 = 0;//объявление переменной
            //bool jj = true;
            //int H = 0;
            //summ1 = 0;//присваивание переменной начальное значение
            //for (i = 0; i < stroki; i++)//организуем цикл по строкам
            //{
            //    j = 0;
            //    while
            //    (jj == true)
            //    {
 
            //        while
            //        (j < stolbsi)//организуем цикл по столбцам
            //        {
            //            if (mat[i, j] < 0 && H == 0)//проверка на отрицательные элементы в столбце
            //            {
            //                jj = true;
            //                H = j;
            //                j = 0;
            //                summ1 = 0;
            //                break;//прерывание цикла
            //            }
            //            summ1 += mat[i, j];//вычисляем сумму
            //            j++;
            //            Console.Write("Сумма столбцов равна: {0}", +summ1);
            //            Console.WriteLine();
            //            if (j == stolbsi)
            //            {
            //                jj = false;
            //            }
            //        }
            //    }
            //}
            //FD-> в новой матрице нужно получить сумму элементов столбца, если есть хотябы 1 отрицательный элемент
            //summ[] - нам больше не нужен - обнулим и задействуем
            summ = new int[stolbsi];//на всякий случай: stolbsi = mat.GetLength(1)
            bool isNegative = false;
            for (j = 0; j < mat.GetLength(1); j++)
            {
                isNegative = false;
                //проверяем на отрицательность элементы
                for (i = 0; i < mat.GetLength(0); i++)
                {
                    if (mat[i, j] < 0)
                    { isNegative = true;}
 
                }
                if (isNegative)
                {
                    for (i = 0; i < mat.GetLength(0); i++)
                        summ[j] += mat[i, j];
                }
            }
            for (j = 0; j < summ.Length; j++ )
                Console.WriteLine("Сумма элементов столбца {0} = {1}", j, summ[j]);
 
                Console.ReadKey();
        }
        //FD ->
        //входящие: матрица и массив характеристик столбцов
        //возвращает матрицу с переставленными согласно возрастанию значений rang столбцами
        static int[,] GetRankedMatrix(int[,] matr, int[] rang) 
        {
            int[,] rangedMatr = new int[matr.GetLength(0), matr.GetLength(1)];//объявляем матрицу, которую будем возвращать
            for (int i = 0; i < rang.Length; i++ )
                l.Add(rang[i]);//заполняем
 
            l.Sort();//сортируем по возрастанию значений
            int k = 0;
            int count = 0;
            foreach(int i in l)
            {
                //находим позицию столбца в исходной матрице
                for(int j = 0; j < rang.Length;j++)
                {
                    if(i == rang[j])
                        k = j;
                }
                //вписываем столбец исходной матрицы в его новое место
                for (int n = 0; n < matr.GetLength(0); n++)
                { rangedMatr[n, count] = matr[n, k]; }
                count++;
            }
            return rangedMatr; 
        }
    }
}

Большие куски кода прячьте, пожалуйста под SPOILER (значек "+" возле "OFF") отож читать больно хлопотно.
2
2 / 2 / 1
Регистрация: 28.12.2016
Сообщений: 50
03.01.2017, 22:52 3
mat = GetRankedMatrix(mat, summ); для чего это ?
0
03.01.2017, 22:52
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
03.01.2017, 22:52
Помогаю со студенческими работами здесь

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

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

Переставляя столбцы заданной матрицы расположить их в соответствии с убыванием характеристик
Характеристикой столбца целочисленной матрицы назовём сумму его положительных чётных...

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


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

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

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