Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 5.00
лизи
0 / 0 / 0
Регистрация: 14.11.2011
Сообщений: 104
#1

Удаление заданого элемента матрицы,двумерные массивы - C++

16.03.2012, 17:41. Просмотров 1253. Ответов 24
Метки нет (Все метки)

МОДИФИКАЦИЯ ДВУМЕРНЫХ МАССИВОВ
Дана прямоугольная матрица (NxM, где 1<=N<=10, 1<=M<=10).
Удалить строчку с максимальным количеством ненулевых элементов. Ввод, вывод и удаление реализовать в виде отдельных функций.
помогите с кодом
я просто не представляю даже с чего мне начинать=((
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.03.2012, 17:41     Удаление заданого элемента матрицы,двумерные массивы
Посмотрите здесь:

Двумерные массивы (матрицы) C++
Двумерные массивы 1. Характеристикой столбца целочисленной матрицы ... C++
Двумерные массивы- матрицы C++
C++ Двумерные массивы(матрицы),работа с элементами главной диагонали C++
Двумерные массивы. Четные строки матрицы сдвинуть на К элементов вправо. C++
C++ Двумерные массивы: Расположить все элементы матрицы в строку в порядке возрастания
C++ Написать 4 функции для матриц(Создание матрицы, печать, поиск минимального элемента, удаление столбцов)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
лизи
0 / 0 / 0
Регистрация: 14.11.2011
Сообщений: 104
23.03.2012, 20:16  [ТС]     Удаление заданого элемента матрицы,двумерные массивы #2
очень нужна помощь(
jambas92
58 / 57 / 3
Регистрация: 18.11.2010
Сообщений: 315
23.03.2012, 20:41     Удаление заданого элемента матрицы,двумерные массивы #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
#include <iostream>
using namespace std;
int main()
{
    const int n = 10; // initializing of our const line number
    const int m = 10; // initializing of our const row number
    int count[n]; // counting number which larger than 0
    int mas[n][m]; // two dimensional array
    int min = -1; // variable for find the maximum line
    int temp; // temporary variable
 
    cout << "Enter two dimensional array 10x10\n";
 
    for (int i=0; i<n; i++) // there are we get default value for our counting
    {
        count[i] = 0;
    }
 
    for (int i=0; i<n; i++) // there are we get the value for two dimensional array
    {
        for (int j=0; j<m; j++)
        {
            cin >> mas[i][j];
        }
    }
 
    for (int i=0; i<n; i++) // there are we counting the sum of every line in two dimensional array
    {
        for (int j=0; j<m; j++)
        {
            if (mas[i][j] > 0)
            {
                count[i] = count[i] + mas[i][j];
            }
        }
    }
 
    for (int i=0; i<n; i++) // there are we looking for the lmaximum line 
    {
        if (count[i] > min)
        {
            min = count[i];
            temp = i; //and save it in temporary variable
        }
    }
 
    // that's all
 
    for (int i=0; i<temp; i++) 
    {
        for (int j=0; j<m; j++)
        {
            cout << mas[i][j] << "\t";
        }
        cout << "\n";
    }
 
    for (int i=temp+1; i<n; i++)
    {
        for (int j=0; j<m; j++)
        {
            cout << mas[i][j] << "\t";
        }
        cout << "\n";
    }
}
лизи
0 / 0 / 0
Регистрация: 14.11.2011
Сообщений: 104
24.03.2012, 03:39  [ТС]     Удаление заданого элемента матрицы,двумерные массивы #4
Цитата Сообщение от jambas92 Посмотреть сообщение
вот ход решение с комментариями, но для того чтобы ввести в него свой вклад, осталось переписать его в функции. Домашняя работа, она и в Африке домашняя работа.

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
#include <iostream>
using namespace std;
int main()
{
    const int n = 10; // initializing of our const line number
    const int m = 10; // initializing of our const row number
    int count[n]; // counting number which larger than 0
    int mas[n][m]; // two dimensional array
    int min = -1; // variable for find the maximum line
    int temp; // temporary variable
 
    cout << "Enter two dimensional array 10x10\n";
 
    for (int i=0; i<n; i++) // there are we get default value for our counting
    {
        count[i] = 0;
    }
 
    for (int i=0; i<n; i++) // there are we get the value for two dimensional array
    {
        for (int j=0; j<m; j++)
        {
            cin >> mas[i][j];
        }
    }
 
    for (int i=0; i<n; i++) // there are we counting the sum of every line in two dimensional array
    {
        for (int j=0; j<m; j++)
        {
            if (mas[i][j] > 0)
            {
                count[i] = count[i] + mas[i][j];
            }
        }
    }
 
    for (int i=0; i<n; i++) // there are we looking for the lmaximum line 
    {
        if (count[i] > min)
        {
            min = count[i];
            temp = i; //and save it in temporary variable
        }
    }
 
    // that's all
 
    for (int i=0; i<temp; i++) 
    {
        for (int j=0; j<m; j++)
        {
            cout << mas[i][j] << "\t";
        }
        cout << "\n";
    }
 
    for (int i=temp+1; i<n; i++)
    {
        for (int j=0; j<m; j++)
        {
            cout << mas[i][j] << "\t";
        }
        cout << "\n";
    }
}
ну с функциями я разберусь)
спасибо большое)
только у меня вопрос что такое cout <<
ни разу не пользовалась этим
и в учебнике и на лекции не встречала=(
panicwassano
591 / 559 / 20
Регистрация: 07.11.2010
Сообщений: 2,004
24.03.2012, 09:12     Удаление заданого элемента матрицы,двумерные массивы #5
Цитата Сообщение от лизи Посмотреть сообщение
только у меня вопрос что такое cout <<
оператор вывода в поток, описывается в любом учебники по с++
silent_1991
24.03.2012, 10:56
  #6

Не по теме:

panicwassano, строго говоря, библиотечный объект cout типа ostream и перегруженный оператор сдвига влево для него. Оператора вывода как такового в С++ нет.

лизи
0 / 0 / 0
Регистрация: 14.11.2011
Сообщений: 104
24.03.2012, 12:56  [ТС]     Удаление заданого элемента матрицы,двумерные массивы #7
silent_1991, вот в чем дело это си++
а в си получается мне подойдет ptintf??
silent_1991
Эксперт С++
4952 / 3028 / 149
Регистрация: 11.11.2009
Сообщений: 7,026
Завершенные тесты: 1
24.03.2012, 12:56     Удаление заданого элемента матрицы,двумерные массивы #8
лизи, нет.
лизи
0 / 0 / 0
Регистрация: 14.11.2011
Сообщений: 104
24.03.2012, 13:13  [ТС]     Удаление заданого элемента матрицы,двумерные массивы #9
silent_1991, я просто не совсем понимаю что такое перегруженный оператор сдвига
silent_1991
Эксперт С++
4952 / 3028 / 149
Регистрация: 11.11.2009
Сообщений: 7,026
Завершенные тесты: 1
24.03.2012, 13:15     Удаление заданого элемента матрицы,двумерные массивы #10
лизи, не заморачивайтесь особо. Конструкция вида cout << something; позволяет вывести something на экран, если, конечно, возможно это something вывести вообще.
лизи
0 / 0 / 0
Регистрация: 14.11.2011
Сообщений: 104
24.03.2012, 13:18  [ТС]     Удаление заданого элемента матрицы,двумерные массивы #11
silent_1991, а почему тогда вместо него нельзя использовать printf? он же тоже выводит на экран?
silent_1991
Эксперт С++
4952 / 3028 / 149
Регистрация: 11.11.2009
Сообщений: 7,026
Завершенные тесты: 1
24.03.2012, 13:35     Удаление заданого элемента матрицы,двумерные массивы #12
лизи, мне кажется, или вы отредактировали сообщение 7 уже после моего ответа? Ответ "нет" был на вопрос "можно ли cout использовать в Си?" Либо я ошибся, либо первоначальный ваш вопрос был таким. Во всяком случае, в Си можно и даже нужно использовать printf для тех же целей.
лизи
0 / 0 / 0
Регистрация: 14.11.2011
Сообщений: 104
24.03.2012, 22:27  [ТС]     Удаление заданого элемента матрицы,двумерные массивы #13
silent_1991, я редактировала сообщение можно ли использовать в си,но тогда еще не было ответа,cпасибо)))

Добавлено через 8 часов 33 минуты
jambas92,
silent_1991,
тут этот код
он удаляет строчку с просто максимальной суммой
уже битый час не могу переделать программу так чтобы удаляла строчку с максимальным количесвом не нулевых эементов(
Raikerian
9 / 9 / 1
Регистрация: 10.05.2011
Сообщений: 101
24.03.2012, 22:55     Удаление заданого элемента матрицы,двумерные массивы #14
В чем сложность?
Найти строчку получается? Просто нужно реализовать сдвиг на кол-во элементов в строке, ведь в памяти компилятора массив написан в одну строчку (а кол-во строк заданных при вводе соответственно уменьшить на 1). И тогда при повторном выводе строки не будет.
лизи
0 / 0 / 0
Регистрация: 14.11.2011
Сообщений: 104
24.03.2012, 23:19  [ТС]     Удаление заданого элемента матрицы,двумерные массивы #15
Цитата Сообщение от Raikerian Посмотреть сообщение
В чем сложность?
Найти строчку получается? Просто нужно реализовать сдвиг на кол-во элементов в строке, ведь в памяти компилятора массив написан в одну строчку (а кол-во строк заданных при вводе соответственно уменьшить на 1). И тогда при повторном выводе строки не будет.
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
void del(int arr[25][25],int *nl, int nc)//Удаление строки
{int i,j,max,temp,count[25];
 
for(i=0;i<*nl;i++)
count[i]=0;
 
for ( i=0; i<*nl; i++)
{
for ( j=0; j<nc; j++)
{
if (arr[i][j] != 0)
{
count[i] = count[i] + 1;
}
}
}
 
for ( i=0; i<*nl; i++) // Ищем строку с максимальным элементом
{
if (count[i] > max)
{
max = count[i];
temp = i; //Сохраняем номер строки
}
}
 
if (*nl-1!=i)
for (i=temp;i<*nl-1;i++) //Удаляем эту строку
for (j=0;j<nc;j++)
arr[i][j]=arr[i+1][j];
--*nl;
}
вот так выглядет мой код
в этом случае он просто удаляет первую строчку

а если код выглядит вот так
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
int del(int arr[25][25],int *nl, int nc)//Удаление строки
{int i,j,max,temp,count[25];
 
for(i=0;i<*nl;i++)
count[i]=0;
 
for ( i=0; i<*nl; i++)
{
for ( j=0; j<nc; j++)
{
if (arr[i][j] != 0)
{
count[i] = count[i] + 1;
}
}
}
 
for ( i=0; i<*nl; i++) // Ищем строку с максимальным элементом
{
if (count[i] > max)
{
max = count[i];
temp = i; //Сохраняем номер строки
 
}
}
 
 if (*nl-1!=i)
 for (i=temp;i<*nl-1;i++) //Удаляем эту строку
 for (j=0;j<nc;j++)
 arr[i][j]=arr[i+1][j];
 *nl--; return 0;
}
то он удаляет все строки кроме второй

сижу меняю коды
и прихожу либо к этому либо к этому
Raikerian
9 / 9 / 1
Регистрация: 10.05.2011
Сообщений: 101
24.03.2012, 23:19     Удаление заданого элемента матрицы,двумерные массивы #16
Ну вот функция удаления (при уже найденном номере строки)
C++
1
2
3
4
5
6
void delete_m (int A[100][100], int num, int N, int M)
{
    for (int i=num; i<N; ++i)
        for (int j=0; j<M; ++j)
            A[i][j]=A[i+1][j];
}
передаются значения delete_m(имя_массива, номер_удаляемой_строки, N, M). По алгоритму мы заменяем элементы текущей строки на элементы следующей по циклу.
При выводе (или до вывода в теле самой программы) у N следует отнять 1 так как теперь последняя строка пустая.
лизи
0 / 0 / 0
Регистрация: 14.11.2011
Сообщений: 104
24.03.2012, 23:30  [ТС]     Удаление заданого элемента матрицы,двумерные массивы #17
Raikerian, я видимо не правильно ищу строку потому подкоретирова функцию удаления под вашу все равно он вывод только вторую сторочку и трет остальные
Raikerian
9 / 9 / 1
Регистрация: 10.05.2011
Сообщений: 101
24.03.2012, 23:38     Удаление заданого элемента матрицы,двумерные массивы #18
Цитата Сообщение от лизи Посмотреть сообщение
Raikerian, я видимо не правильно ищу строку потому подкоретирова функцию удаления под вашу все равно он вывод только вторую сторочку и трет остальные
Попробую написать так, может легче будет подкорректировать:
C++
1
2
3
for (int i=НОМЕР_УДАЛЯЕМОЙ СТРОКИ; i<N; ++i)
                for (int j=0; j<M; ++j)
                        A[i][j]=A[i+1][j];
N и M строки и столбцы соответственно при инициализации массива.
Тоесть если у вас temp ваш номер то:

C++
1
2
3
for (int i=temp; i<N; ++i)
                for (int j=0; j<M; ++j)
                        A[i][j]=A[i+1][j];
Ну и соответственно в теле программы после инициализации функции выставьте N--;

Эта и вся функция удаления. Алгоритм должен быть рабочим и удалять только нужную строку. Попробуйте любую цифру вместо temp поставить и посмотреть удалит ли эту строку компилятор.
Кстати следует учитывать что строки и столбцы в массивах с 0 нумеруются же, поэтому если в коде удалять строчку 2 то удалится 3-я строка.
лизи
0 / 0 / 0
Регистрация: 14.11.2011
Сообщений: 104
24.03.2012, 23:43  [ТС]     Удаление заданого элемента матрицы,двумерные массивы #19
Цитата Сообщение от Raikerian Посмотреть сообщение
Код C++
1
2
3
for (int i=temp; i<N; ++i)
* * * * * * * * for (int j=0; j<M; ++j)
* * * * * * * * * * * * A[i][j]=A[i+1][j];
Ну и соответственно в теле программы после инициализации функции выставьте N--;
ну вот у меня так удаление строчки и прописано
единсвенная разница у меня было улсовие
C
1
if (*nl-1!=i)
и еще ретерн стоял в одном случае
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.03.2012, 00:02     Удаление заданого элемента матрицы,двумерные массивы
Еще ссылки по теме:

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

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

Или воспользуйтесь поиском по форуму:
Raikerian
9 / 9 / 1
Регистрация: 10.05.2011
Сообщений: 101
25.03.2012, 00:02     Удаление заданого элемента матрицы,двумерные массивы #20
Выложите пожалуйста полный код вашей программы)
Yandex
Объявления
25.03.2012, 00:02     Удаление заданого элемента матрицы,двумерные массивы
Ответ Создать тему
Опции темы

Текущее время: 11:16. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru