Форум программистов, компьютерный форум, киберфорум
Наши страницы
C# для начинающих
Войти
Регистрация
Восстановить пароль
 
VPanda17
0 / 0 / 0
Регистрация: 27.10.2016
Сообщений: 12
#1

Из заданной матрицы удалить строку и столбец, в которых находится первый элемент, равный нулю - C#

27.10.2016, 07:01. Просмотров 482. Ответов 5
Метки нет (Все метки)

И полученную матрицу уплотнить.
http://www.cyberforum.ru/csharp-beginners/thread375809.html
Вот что получилось, но не работает, никак не могу закончить:
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
static void Main(string[] args)
        {
            int i, j;
            int row = 0;
            bool yslovie = true;
            Console.WriteLine("Введите количество столбцов");
            int n = Convert.ToInt32(Console.ReadLine());
            Console.WriteLine("Введите количество строк");
            int m = Convert.ToInt32(Console.ReadLine());
            int[,] massiv = new int[m, n]; //объявляем массив
            Random rnd = new Random(); //функция рандом
            for (i = 0; i < m; i++)
            {
                for (j = 0; j < n; j++)
                {
                    massiv[i, j] = rnd.Next(0, 2); //с помощью рандома присваиваем элементы заданный диапазон
                    Console.Write(massiv[i, j] + "\t");
                    if (massiv[i, j] == row)
                    {
                        yslovie = true;
                    }
                }
                Console.WriteLine();
            }
 
            int[,] matrix = new int[m - 1, n];
            if (yslovie == true)
            {
                for (i = 0; i < matrix.GetLength(0); i++)
                {
                    if (i != row)
                    {
                        for (j = 0; j < matrix.GetLength(1); j++)
                        {
                            matrix[i, j] = massiv[i, j];
                            continue;
                        }
                    }
                    else
                    {
                        for (j = 0; j < matrix.GetLength(1); j++)
                        {
                            matrix[row, j] = massiv[i + 1, j];
                            continue;
                        }
                        row++;
                    }
                }
            }
 
 
 
 
            Console.WriteLine("Массив:"); // выводим массив
 
            for (i = 0; i < m; i++)
            {
                for (j = 0; j < n; j++)
                {
                    Console.Write(matrix[i, j] + "\t");
                }
                Console.WriteLine();
            }
 
            Console.ReadKey();
        }
        }
    }
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.10.2016, 07:01
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Из заданной матрицы удалить строку и столбец, в которых находится первый элемент, равный нулю (C#):

Удалить из матрицы первую строку, в которой встречается элемент, равный нулю
1.Удалить из двумерного массива типa double ПЕРВУЮ строку, в которой...

Удалить столбец в котором находится первый четный отрицательный элемент
Дан двумерный массив размером 5 * 8, заполненный случайным образом. Удалить...

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

Поменять местами строку и столбец, в которых находится минимальный элемент
Условие задачи: Дан двумерный массив размером 5 * 5, заполненный случайным...

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

5
OTT
68 / 68 / 42
Регистрация: 30.09.2014
Сообщений: 342
Завершенные тесты: 4
27.10.2016, 10:20 #2
ну во первых чтоб ошибка не вылетала надо когда выводишь выводить до n(m)-1 , у вас жеж итоговая будет 4 на 4

C#
1
2
3
4
5
6
7
8
9
10
 Console.WriteLine("Массив:"); // выводим массив
 
            for (i = 0; i < m-1; i++)
            {
                for (j = 0; j < n-1; j++)
                {
                    Console.Write(matrix[i, j] + "\t");
                }
                Console.WriteLine();
            }

и еще мне непонятно зачем вы делаете
continue; - в вашем случае оно не меняет ни чего)

Добавлено через 5 минут
ну и создавать надо int[,] matrix = new int[m - 1, n-1];

Добавлено через 1 минуту
ну и надо учесть случай что нуля не будет
0
FourthDimension
25 / 25 / 23
Регистрация: 06.10.2016
Сообщений: 74
27.10.2016, 10:21 #3
1. У Вас в выводе итогового массива ошибка. Нужно как то так выводить:
Кликните здесь для просмотра всего текста
C#
1
2
3
4
5
6
7
8
9
10
            Console.WriteLine("Массив:"); // выводим массив
 
            for (i = 0; i < matrix.GetLength(0); i++)
            {
                for (j = 0; j < matrix.GetLength(1); j++)
                {
                    Console.Write(matrix[i, j] + "\t");
                }
                Console.WriteLine();
            }

2. Вы пока удаляете только строку
3. Логика удаления не понятна.
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
            for (i = 0; i < m; i++)
            {
                for (j = 0; j < n; j++)
                {
                    massiv[i, j] = rnd.Next(0, 2); //с помощью рандома присваиваем элементы заданный диапазон
                    Console.Write(massiv[i, j] + "\t");
                    if (massiv[i, j] == row)
                    {
                        yslovie = true;
                    }
                }
                Console.WriteLine();
            }
Вы где-то индекс первого нулевого элемента запомнили? Нет. Почему же отрезается первая попавшаяся строка?
далее по коду:
C#
1
2
            int[,] matrix = new int[m - 1, n];
            if (yslovie == true)
0
OTT
68 / 68 / 42
Регистрация: 30.09.2014
Сообщений: 342
Завершенные тесты: 4
27.10.2016, 10:31 #4
я предлогая так делать

1) найти индексы нуля

C#
1
2
3
4
5
6
7
8
9
                for (i = massiv.GetLength(0)-1; i >=0 ; i--)
                    for (j = massiv.GetLength(1)-1; j >=0; j--)
                            if (massiv[i,j] == 0)
                            {
                                indexI = i;
                                indexJ = j;
 
 
                            }


а потом вывести туже матрицу без этой строки и этого столбца


C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
            Console.WriteLine("Массив:"); // выводим массив
 
            for (i = 0; i < m; i++)
            {
                if (i == indexI)
                    continue;
                for (j = 0; j < n; j++)
                {
                    if (j == indexJ)
                        continue;
                    Console.Write(massiv[i, j] + "\t");
                }
                Console.WriteLine();
            }
0
FourthDimension
25 / 25 / 23
Регистрация: 06.10.2016
Сообщений: 74
27.10.2016, 10:45 #5
Лучший ответ Сообщение было отмечено VPanda17 как решение

Решение

примерно так должно быть
Кликните здесь для просмотра всего текста
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
using System;
 
namespace ConsoleApplication11
{
    class Program
    {
        static void Main(string[] args)
        {
            int i, j;
            int row = 0;
            //bool yslovie = true;
            bool yslovie = false;
            Console.WriteLine("Введите количество столбцов");
            int n = Convert.ToInt32(Console.ReadLine());
            Console.WriteLine("Введите количество строк");
            int m = Convert.ToInt32(Console.ReadLine());
            int[,] massiv = new int[m, n]; //объявляем массив
            Random rnd = new Random(); //функция рандом
            //->правки
            int[,] matrix = new int[m-1,n-1];
            int x = 0;
            int y = 0;
            //<- правки
            for (i = 0; i < m; i++)
            {
                for (j = 0; j < n; j++)
                {
                    massiv[i, j] = rnd.Next(0, 5); //с помощью рандома присваиваем элементы заданный диапазон
                    Console.Write(massiv[i, j] + "\t");
                    //if (massiv[i, j] == row)
                    if (massiv[i, j] == row & !yslovie)//избегаем переопределение первого найденного
                    {
                        yslovie = true;
                        x = i;
                        y = j;
                    }
                }
                Console.WriteLine();
            }
 
            //int[,] matrix = new int[m - 1, n];
            if (yslovie == true)
            {
                for (i = 0; i < matrix.GetLength(0); i++)
                {
                    //if (i != row)
                    //{
                    //    for (j = 0; j < matrix.GetLength(1); j++)
                    //    {
                    //        matrix[i, j] = massiv[i, j];
                    //        continue;
                    //    }
                    //}
                    //else
                    //{
                    //    for (j = 0; j < matrix.GetLength(1); j++)
                    //    {
                    //        matrix[row, j] = massiv[i + 1, j];
                    //        continue;
                    //    }
                    //    row++;
                    //}
                    if (i < x)//x -удаляемая строка
                    {
                        for (j = 0; j < matrix.GetLength(1); j++)
                            if (j < y)//y -удаляемый столбец
                                matrix[i, j] = massiv[i, j];
                            else
                                matrix[i, j] = massiv[i, j+1]; ;
                    }
                    else
                    {
                        for (j = 0; j < matrix.GetLength(1); j++)
                            if (j < y)
                                matrix[i, j] = massiv[i+1, j];
                            else
                                matrix[i, j] = massiv[i+1, j + 1]; 
                    }
                }
            }
            Console.WriteLine("Массив:"); // выводим массив
 
            for (i = 0; i < matrix.GetLength(0); i++)
            {
                for (j = 0; j < matrix.GetLength(1); j++)
                {
                    Console.Write(matrix[i, j] + "\t");
                }
                Console.WriteLine();
            }
 
            Console.ReadKey();
        }
    }
}


Добавлено через 3 минуты
OTT, а для чего искать индексы 0, если их легко получить сразу при создании первой матрицы?
1
VPanda17
0 / 0 / 0
Регистрация: 27.10.2016
Сообщений: 12
30.10.2016, 19:25  [ТС] #6
спасибо огромное за ответы) но вот в чем вопрос, проверять мы должны только первую строку и столбец, есть ли в них ноль, если в них нет, а в середке где то есть, то переписываем такую, какая есть, без изменений

Добавлено через 15 минут
нужно чтобы проверял только первую строку и столбец
0
30.10.2016, 19:25
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.10.2016, 19:25
Привет! Вот еще темы с решениями:

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

Найти наименьший элемент матрицы и записать нули в ту строку и столбец, где он находится
Помогите написать код Найти наименьший элемент матрицы X (m x n) и записать...

Удалить строки матрицы, в которых первый элемент совпадает с последним
Дан двумерный массив размером 6 * 6, заполненный случайным образом. Удалить...

Найти максимальный элемент и удалить строку и столбец матрицы, на пересечении
Помогите, кто силен, сделать данную задачу, я ни как не могу сделать матрицы +...


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

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

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