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

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

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

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

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

МОДИФИКАЦИЯ ДВУМЕРНЫХ МАССИВОВ
Дана прямоугольная матрица (NxM, где 1<=N<=10, 1<=M<=10).
Удалить строчку с максимальным количеством ненулевых элементов. Ввод, вывод и удаление реализовать в виде отдельных функций.
помогите с кодом
я просто не представляю даже с чего мне начинать=((
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.03.2012, 17:41     Удаление заданого элемента матрицы,двумерные массивы
Посмотрите здесь:
Двумерные массивы (матрицы) C++
Двумерные массивы- матрицы C++
C++ Двумерные массивы матрицы
Двумерные массивы 1. Характеристикой столбца целочисленной матрицы ... C++
C++ Двумерные динамические массивы-матрицы (выделение памяти)
C++ Двумерные массивы. Подсчитать число элементов матрицы
Двумерные массивы. Определить, есть ли в заданных матрицах столбцы, содержащие по два отрицательных элемента C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
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)
и еще ретерн стоял в одном случае
Raikerian
9 / 9 / 1
Регистрация: 10.05.2011
Сообщений: 101
25.03.2012, 00:02     Удаление заданого элемента матрицы,двумерные массивы #20
Выложите пожалуйста полный код вашей программы)
лизи
0 / 0 / 0
Регистрация: 14.11.2011
Сообщений: 104
25.03.2012, 00:05  [ТС]     Удаление заданого элемента матрицы,двумерные массивы #21
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
#include <stdio.h>
 
int output_arr(int arr[25][25],int nl, int nc) //Вывод массива на экран
{ int i,j;
 
for(i=0;i<nl;i++)
{
for(j=0;j<nc;j++)
{
printf("%d\t",arr[i][j]);
}
printf("\n");
return 0;}
 
}
int input_arr(int arr[25][25],int nl, int nc) //Ввод массива с клавиатуры
{ int i,j;
for(i=0;i<nl;i++)
{for(j=0;j<nc;j++)
{ printf("a[%d][%d]=",i+1,j+1);scanf("%d",&arr[i][j]);}
printf("\n");
} return 0;}
 
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!=i)
 //for (i=temp;i<*nl;i++) //Удаляем эту строку
 //for (j=0;j<nc;j++)
 //arr[i][j]=arr[i+1][j];
 for (  i=temp; i<nl; ++i)
                for (  j=0; j<nc; ++j)
                        arr[i][j]=arr[i+1][j];
 
 *nl--;
 //return 0;
}
 
int main()
{
int nl, nc, arr[25][25];
scanf("%d %d",&nl,&nc);
input_arr(arr,nl,nc);
del(arr, &nl, nc);
output_arr(arr,nl,nc);
return 0;
}
Raikerian
9 / 9 / 1
Регистрация: 10.05.2011
Сообщений: 101
25.03.2012, 00:20     Удаление заданого элемента матрицы,двумерные массивы #22
Исправил:
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
#include <stdio.h>
using namespace std;
void output_arr(int arr[25][25],int nl, int nc) //Вывод массива на экран
{
    int i,j;
    for(i=0;i<nl;i++)
    {
        for(j=0;j<nc;j++)
        {
            printf("%d\t",arr[i][j]);
        }
        printf("\n");
    }
}
void input_arr(int arr[25][25],int nl, int nc) //Ввод массива с клавиатуры
{
    int i,j;
    for(i=0;i<nl;i++)
    {
        for(j=0;j<nc;j++)
        {
            printf("a[%d][%d]=",i+1,j+1);scanf("%d",&arr[i][j]);}
        printf("\n");
    }
}
void del(int arr[25][25],int nl, int nc)//Удаление строки
{
    int i,j,max=0,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; //Сохраняем номер строки
        }
    }
    for (i=temp; i<nl; ++i)
        for (j=0; j<nc; ++j)
            arr[i][j]=arr[i+1][j];
}
int main()
{
    int nl, nc, arr[25][25];
    scanf("%d %d",&nl,&nc);
    input_arr(arr,nl,nc);
    del(arr, nl, nc);
    nl--;
    output_arr(arr,nl,nc);
    return 0;
}
Собственно зачем вовсе использовался указатель а затем ссылка на него? Убрал. Затем, max надо было инициализировать при объявлении (приравнять нулю).
Так же никчему использовать функции типа int, ведь нам ничего возвращать не надо (никаких значений). Изменил на void.
Ну всё вроде, проверяйте.
лизи
0 / 0 / 0
Регистрация: 14.11.2011
Сообщений: 104
25.03.2012, 00:33  [ТС]     Удаление заданого элемента матрицы,двумерные массивы #23
Raikerian, воуу,заработало,cпасибо огромное)
Raikerian
9 / 9 / 1
Регистрация: 10.05.2011
Сообщений: 101
25.03.2012, 00:40     Удаление заданого элемента матрицы,двумерные массивы #24
И еще выше не указал, nl--; я засунул в тело самой программы (функция main) т.к. все что выполняется в функциях выше (void) остается в их пределах.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.03.2012, 00:42     Удаление заданого элемента матрицы,двумерные массивы
Еще ссылки по теме:
C++ Двумерные массивы(матрицы),работа с элементами главной диагонали C++
Двумерные массивы. Четные строки матрицы сдвинуть на К элементов вправо. C++
Обработка отдельных строк (столбцов) матрицы и работа с диагоналями. Двумерные массивы C++
C++ Двумерные массивы: Расположить все элементы матрицы в строку в порядке возрастания
C++ Написать 4 функции для матриц(Создание матрицы, печать, поиск минимального элемента, удаление столбцов)

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

Или воспользуйтесь поиском по форуму:
лизи
0 / 0 / 0
Регистрация: 14.11.2011
Сообщений: 104
25.03.2012, 00:42  [ТС]     Удаление заданого элемента матрицы,двумерные массивы #25
Raikerian, я уже заметила что nl там)) спасибо огромное))
Yandex
Объявления
25.03.2012, 00:42     Удаление заданого элемента матрицы,двумерные массивы
Ответ Создать тему
Опции темы

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