Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.50/4: Рейтинг темы: голосов - 4, средняя оценка - 4.50
2 / 2 / 1
Регистрация: 28.12.2016
Сообщений: 50
1

Дана матрица. Найти произведение элементов в тех строках, которые не содержат отрицательных элементов

30.12.2016, 15:46. Просмотров 771. Ответов 10
Метки нет (Все метки)


C #дана матрица. Найти произведение элементов в тех строках, которые не содержат отрицательных элементов.
Помогите почему произведение считает и отрицательные числа ?
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
static void Main(string[] args)
        {
            Console.Write("Введите размер квадратной матрицы: ");
            int r = Convert.ToInt16(Console.ReadLine());
            int[,] matrix = new int[r, r];
            Random random = new Random();
            int rand;
            //Выводим матрицу на экран
            for (int i = 0; i < r; i++)
            {
                for (int j = 0; j < r; j++)
                {
                    rand = random.Next(-10, 100);
                    matrix[i, j] = rand;
                    Console.Write(matrix[i, j] + "\t");
                }
                Console.WriteLine();
            }
            
            //Произведение элементов в тех строках, которые не содержат отрицательных элементов;
 
            int[] RowTotal = new int[r];
             for (int i = 0; i < r; i++)
            {
                for (int j = 0; j < r; j++)
                {
                    if (matrix[i, j] > 0)
                    {
                        if (!RowTotal[i].Equals(0))
                        RowTotal[i] *= matrix[i, j];
                        else RowTotal[i] = matrix[i, j]; 
                     }
                }
             }              
                         for (int i = 0; i < r; i++)
                Console.WriteLine("Строка  {0} матрицы имеет произведение положительных элементов =: {1}", i+1, RowTotal[i]);
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
30.12.2016, 15:46
Ответы с готовыми решениями:

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

Найти произведение элементов в тех строках матрицы, которые не содержат отрицательных элементов
для квадратной матрицы: 1)найти произведение элементов в тех строках, которые не содержат...

Определить произведение элементов в тех строках, которые не содержат отрицательных элементов
Задание- Дано- квадратная матрица. Определить произведение элементов в тех строках, которые не...

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

10
99 / 103 / 62
Регистрация: 19.11.2015
Сообщений: 380
30.12.2016, 15:53 2
Считает отрицательные, потому что вы проверяется только текущий элемент в 26 строчке вашего кода.
А в задании написано во всей строке нужно чтобы не было отрицательных, но это легко исправить таким образом:

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
for (int i = 0; i < r; i++)
            {
                for (int j = 0; j < r; j++)
                {
                    if (matrix[i, j] > 0)
                    {
                        if (!RowTotal[i].Equals(0))
                        RowTotal[i] *= matrix[i, j];
                        else RowTotal[i] = matrix[i, j]; 
                     }
                     else
                     break;
                }
             }
1
265 / 249 / 186
Регистрация: 28.10.2015
Сообщений: 723
30.12.2016, 15:59 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
using System;
using System.Linq;
 
class Program
{
    static void Main()
    {
        Random rnd = new Random();
        int[,] matrix = new int[10, 10];
        for (int i = 0; i < matrix.GetLength(0); i++)
        {
            for (int j = 0; j < matrix.GetLength(1); j++)
            {
                Console.Write(matrix[i, j] = rnd.Next(-10, 100));
                Console.Write("\t");
            }
            Console.WriteLine();
        }
        for (int i = 0; i < matrix.GetLength(0); i++)
        {
            if (Enumerable.Range(0, matrix.GetLength(1)).Any(j => matrix[i, j] < 0))
            {
                Console.WriteLine("Row {0} contains negative number(s)!", i);
            }
            else
            {
                long p = Enumerable.Range(0, matrix.GetLength(1)).Aggregate(1L, (a, j) => a * matrix[i, j]);
                Console.WriteLine("Row {0} multiplied: {1}", i, p);                    
            }
        }
    }
}
0
2 / 2 / 1
Регистрация: 28.12.2016
Сообщений: 50
30.12.2016, 16:05  [ТС] 4
только он теперь считает, до того момента пока не встретит отрицательное число, а можно чтобы он строчку с отрицательным числом вообще пропускал?
0
587 / 472 / 184
Регистрация: 19.04.2016
Сообщений: 1,869
30.12.2016, 16:55 5
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
using System;
using System.Linq;
 
namespace NewInt
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.Write("Введите размер квадратной матрицы: ");
            int r = int.Parse(Console.ReadLine());
 
            int[,] matrix = new int[r, r];
            Random random = new Random();
 
            for (int i = 0; i < r; i++)
            {
                Console.Write($"{i} => ");
                for (int j = 0; j < r; j++)
                {
                    int tmp = random.Next(-10, 100);
                    matrix[i, j] = tmp;
                    Console.Write(matrix[i, j] + "\t");
                }
                Console.WriteLine();
            }
 
            Console.WriteLine();
 
            for (int i = 0; i < r; ++i)
            {
                var tmp = matrix.Cast<int>()
                    .Skip(i * r)
                    .Take(r)
                    .ToArray();
 
                if (!tmp.Any(n=> n < 0))
                {
                    Console.WriteLine($"{i} => {tmp.Aggregate(1L, (k, m) => k * m)}");
                }
            }
 
            Console.ReadKey();
        }
 
    }
}
1
2 / 2 / 1
Регистрация: 28.12.2016
Сообщений: 50
30.12.2016, 17:12  [ТС] 6
спасибо большое , но это слишком сложно (

Добавлено через 6 минут
Когда находишь последний максимум ругается на int j=0; как не пытался ничего не получилось, в чем ошибка ?


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
static void Main(string[] args)
        {
            Console.Write("Введите размер квадратной матрицы: ");
            int r = Convert.ToInt16(Console.ReadLine());
            int[,] matrix = new int[r, r];
            Random random = new Random();
            int rand;
            //Выводим матрицу на экран
            for (int i = 0; i < r; i++)
            {
                for (int j = 0; j < r; j++)
                {
                    rand = random.Next(-10, 100);
                    matrix[i, j] = rand;
                    Console.Write(matrix[i, j] + "\t");
                }
                Console.WriteLine();
            }
            //Сумма элементов в тех столбцах, которые не содержат отрицательных элементов
            for (int j = 0; j < r; j++)
            {
                int s = 0;
                bool fl = true;
                for (int k = 0; k < r; k++)
                {
                    s += matrix[k, j];
                    if (matrix[k, j] < 0) fl = false;
                }
                if (fl)
                    Console.WriteLine("Сумма элементов столбца [{0}] = " + s, j + 1);
            }
            //Произведение элементов в тех строках, которые не содержат отрицательных элементов;
 
            int[] RowTotal = new int[r];
            for (int i = 0; i < r; i++)
            {
 
                for (int j = 0; j < r; j++)
                {
                    if (matrix[i, j] < 0)
                        RowTotal[i] = 0;
                    if (matrix[i, j] > 0)
                    {
                        if (!RowTotal[i].Equals(0))
                            RowTotal[i] *= matrix[i, j];
                        else RowTotal[i] = matrix[i, j];
                    }
                    else
                        break;
                }
            }
                for (int i = 0; i < r; i++)
                Console.WriteLine("Строка  {0} матрицы имеет произведение положительных элементов =: {1}", i + 1, RowTotal[i]);
 
              //   Максимум среди сумм элементов диагоналей, параллельных главной диагонали матрицы
                             int max = 0; 
                             int j=0;
                            int curr = 0;
                            for (int i = 0;  j< r - 1; j++)
                            {
                                curr = 0;
                                 for (i = 0; i < r - j - 1; i++)
                                 {
                                     curr += matrix[i, i + 1 + j];
                                  }
                                  if (j == 0)
                                      max = curr;
                                  else if
                                      (max < curr)
                                     max = curr;
                                 Console.WriteLine("Максимальное значение={0}", max);
                             }
                Console.ReadKey();
            }
        }
    }
0
265 / 249 / 186
Регистрация: 28.10.2015
Сообщений: 723
30.12.2016, 17:42 7
Вот более простодыристый вариант, без LINQ:

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
using System;
 
class Program
{
    static void Main()
    {
        Random rnd = new Random();
        int[,] matrix = new int[10, 10];
        for (int i = 0; i < matrix.GetLength(0); i++)
        {
            for (int j = 0; j < matrix.GetLength(1); j++)
            {
                Console.Write(matrix[i, j] = rnd.Next(-10, 100));
                Console.Write("\t");
            }
            Console.WriteLine();
        }
        for (int i = 0; i < matrix.GetLength(0); i++)
        {
            long p = 1L;
            int j;
            for (j = 0; j < matrix.GetLength(1); j++)
            {
                if (matrix[i, j] < 0) break;
                p *= matrix[i, j];
            }
            if (j == matrix.GetLength(1))
            {
                Console.WriteLine("Row {0} multiplied: {1}", i, p);
            }
            else
            {
                Console.WriteLine("Row {0} contains negative number(s)!", i);
            }
        }
    }
}
1
2 / 2 / 1
Регистрация: 28.12.2016
Сообщений: 50
30.12.2016, 18:05  [ТС] 8
все получилось, только в конце по-прежнему int j=0; выдает ошибку , может где-то скобку не там поставил ?


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
using System;
 
namespace lab_11
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.Write("Введите размер квадратной матрицы: ");
            int r = Convert.ToInt16(Console.ReadLine());
            int[,] matrix = new int[r, r];
            Random random = new Random();
            int rand;
            //Выводим матрицу на экран
            for (int i = 0; i < r; i++)
            {
                for (int j = 0; j < r; j++)
                {
                    rand = random.Next(-10, 100);
                    matrix[i, j] = rand;
                    Console.Write(matrix[i, j] + "\t");
                }
                Console.WriteLine();
            }
            //Сумма элементов в тех столбцах, которые не содержат отрицательных элементов
            for (int j = 0; j < r; j++)
            {
                int s = 0;
                bool fl = true;
                for (int k = 0; k < r; k++)
                {
                    s += matrix[k, j];
                    if (matrix[k, j] < 0) fl = false;
                }
                if (fl)
                    Console.WriteLine("Сумма элементов столбца [{0}] = " + s, j + 1);
            }
            //Произведение элементов в тех строках, которые не содержат отрицательных элементов;
 
            for (int i = 0; i < r; i++)
            {
                long p = 1L;
                int j;
                for (j = 0; j < r; j++)
                {
                    if (matrix[i, j] < 0) break;
                    p *= matrix[i, j];
                }
                if (j == r)
                {
                    Console.WriteLine("Row [{0}] multiplied: {1}", i, p);
                }
                else
                {
                    Console.WriteLine("Row [{0}] contains negative number(s)!", i);
                }}
                //   Максимум среди сумм элементов диагоналей, параллельных главной диагонали матрицы
 
            int max = 0;
           [COLOR="Red"] int j = 0;[/COLOR]
            int curr = 0;
            for (int i = 0; j < r - 1; j++)
            {
                curr = 0;
                for (i = 0; i < r - j - 1; i++)
                {
                    curr += matrix[i, i + 1 + j];
                }
                if (j == 0)
                    max = curr;
                else if
                    (max < curr)
                    max = curr;
                Console.WriteLine("Максимальное значение={0}", max);
            }
                Console.ReadKey();
            }
        }
    }
0
587 / 472 / 184
Регистрация: 19.04.2016
Сообщений: 1,869
30.12.2016, 19:18 9
Цитата Сообщение от zxxrc19 Посмотреть сообщение
скобку не там поставил ?
может стоит реализовать свой код? а то как-то...
Цитата Сообщение от zxxrc19 Посмотреть сообщение
int j = 0;
int curr = 0;
for (int i = 0; j < r - 1; j++)
{
curr = 0;
for (i = 0; i < r - j - 1; i++)
{ curr += matrix[i, i + 1 + j];
}
Что тут должно происходить?)
0
2 / 2 / 1
Регистрация: 28.12.2016
Сообщений: 50
30.12.2016, 20:55  [ТС] 10
считать максимум среди сумм элементов диагоналей, параллельных главной диагонали матрицы
или совсем не так?

Добавлено через 35 минут
исправил
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
int l = 1;
            for (int i = 1; i < r; i++)
            {
 
                for (int k = 0; k < r - i; k++)
                {
                    massiv[i - 1] += matrix[i + k, i + k - l];
                }
                l++;
            }
            l = 1;
            for (int i = 1; i < r; i++)
            {
                for (int k = 0; k < r - i; k++)
                {
                    massiv[r - 2 + i] += matrix[k, k + l];
                }
                l++;
            }
 
            Console.WriteLine("Диагонали: ");
            for (int j = 0; j < 2 * r - 2; j++)
            {
                Console.WriteLine("{0} ", massiv[j]);
            }
           
            int max = massiv[0];
            for (int j = 0; j < 2 * r - 2; j++)
            {
                if (max < massiv[j])
                    max = massiv[j];
            }
            Console.Write("Максимум среди сумм элементов диагоналей:{0} ", max);
            Console.ReadKey();
        }
    }
}
0
265 / 249 / 186
Регистрация: 28.10.2015
Сообщений: 723
31.12.2016, 05:34 11
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
using System;
 
class Program
{
    static void Main()
    {
        Random rnd = new Random();
        int[,] matrix = new int[5, 6];
        for (int i = 0; i < matrix.GetLength(0); i++)
        {
            for (int j = 0; j < matrix.GetLength(1); j++)
            {
                Console.Write(matrix[i, j] = rnd.Next(10));
                Console.Write("\t");
            }
            Console.WriteLine();
        }
        int max = Int32.MinValue;
        for (int i = 1 - matrix.GetLength(0); i < matrix.GetLength(1); i++)
        {
            int sum = 0;
            int j = i < 0 ? -i : 0;
            int k = i > 0 ? i : 0;
            while (j < matrix.GetLength(0) && k < matrix.GetLength(1))
            {
                sum += matrix[j++, k++];
            }
            Console.WriteLine(sum);
            max = Math.Max(max, sum);
        }
        Console.WriteLine(max);
    }
}
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
31.12.2016, 05:34

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь или здесь.

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

Определить произведение элементов в тех строках матрицы, которые не содержат отрицательных элементов
Дана целочисленная квадратная матрица. Определить: • произведение элементов в тех строках, которые...

Определить произведение элементов в тех строках матрицы, которые не содержат отрицательных элементов.
знаю только как заполнить матрицу Console.Write(&quot;\nматрица\n\n&quot;); ...

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


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.