Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.56/18: Рейтинг темы: голосов - 18, средняя оценка - 4.56
 Аватар для лизи
0 / 0 / 0
Регистрация: 14.11.2011
Сообщений: 104

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

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

Студворк — интернет-сервис помощи студентам
МОДИФИКАЦИЯ ДВУМЕРНЫХ МАССИВОВ
Дана прямоугольная матрица (NxM, где 1<=N<=10, 1<=M<=10).
Удалить строчку с максимальным количеством ненулевых элементов. Ввод, вывод и удаление реализовать в виде отдельных функций.
помогите с кодом
я просто не представляю даже с чего мне начинать=((
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
16.03.2012, 17:41
Ответы с готовыми решениями:

Двумерные массивы (матрицы)
Добрый день!!!!!! Помогите решить такую задачу: Характеристикой столбца целочисленной матрицы назовём сумму модулей его отрицательных...

Двумерные массивы матрицы
Что не так в программе помогите пожалуйста!! #include &lt;iostream&gt; #include &lt;cmath&gt; using namespace std; int main() { ...

Двумерные массивы- матрицы
Помогите, пожалуйста, разобраться и написать программу для задачи: Найти произведение матрицы А на вектор B, полученный из элементов...

24
 Аватар для лизи
0 / 0 / 0
Регистрация: 14.11.2011
Сообщений: 104
23.03.2012, 20:16  [ТС]
очень нужна помощь(
0
 Аватар для jambas92
59 / 58 / 16
Регистрация: 18.11.2010
Сообщений: 315
23.03.2012, 20:41
вот ход решение с комментариями, но для того чтобы ввести в него свой вклад, осталось переписать его в функции. Домашняя работа, она и в Африке домашняя работа.

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 / 0
Регистрация: 14.11.2011
Сообщений: 104
24.03.2012, 03:39  [ТС]
Цитата Сообщение от 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 <<
ни разу не пользовалась этим
и в учебнике и на лекции не встречала=(
0
601 / 569 / 104
Регистрация: 07.11.2010
Сообщений: 2,004
24.03.2012, 09:12
Цитата Сообщение от лизи Посмотреть сообщение
только у меня вопрос что такое cout <<
оператор вывода в поток, описывается в любом учебники по с++
0
24.03.2012, 10:56

Не по теме:

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

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

Добавлено через 8 часов 33 минуты
jambas92,
silent_1991,
тут этот код
он удаляет строчку с просто максимальной суммой
уже битый час не могу переделать программу так чтобы удаляла строчку с максимальным количесвом не нулевых эементов(
0
9 / 9 / 4
Регистрация: 10.05.2011
Сообщений: 101
24.03.2012, 22:55
В чем сложность?
Найти строчку получается? Просто нужно реализовать сдвиг на кол-во элементов в строке, ведь в памяти компилятора массив написан в одну строчку (а кол-во строк заданных при вводе соответственно уменьшить на 1). И тогда при повторном выводе строки не будет.
0
 Аватар для лизи
0 / 0 / 0
Регистрация: 14.11.2011
Сообщений: 104
24.03.2012, 23:19  [ТС]
Цитата Сообщение от 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;
}
то он удаляет все строки кроме второй

сижу меняю коды
и прихожу либо к этому либо к этому
0
9 / 9 / 4
Регистрация: 10.05.2011
Сообщений: 101
24.03.2012, 23:19
Ну вот функция удаления (при уже найденном номере строки)
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 / 0
Регистрация: 14.11.2011
Сообщений: 104
24.03.2012, 23:30  [ТС]
Raikerian, я видимо не правильно ищу строку потому подкоретирова функцию удаления под вашу все равно он вывод только вторую сторочку и трет остальные
0
9 / 9 / 4
Регистрация: 10.05.2011
Сообщений: 101
24.03.2012, 23:38
Цитата Сообщение от лизи Посмотреть сообщение
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 / 0
Регистрация: 14.11.2011
Сообщений: 104
24.03.2012, 23:43  [ТС]
Цитата Сообщение от 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)
и еще ретерн стоял в одном случае
0
9 / 9 / 4
Регистрация: 10.05.2011
Сообщений: 101
25.03.2012, 00:02
Выложите пожалуйста полный код вашей программы)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
25.03.2012, 00:02
Помогаю со студенческими работами здесь

Двумерные массивы. Подсчитать число элементов матрицы
помогите пожалуйста написать программы 2.Подсчитать число элементов матрицы Q(9x11), остаток от деления которых на пять равен единице.

Двумерные массивы 1. Характеристикой столбца целочисленной матрицы ...
подскажите пожалуста, есть задание: &quot;Характеристикой столбца целочисленной матрицы назовем сумму модулей его отрицательных нечетных...

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

Двумерные массивы. Определить, есть ли в заданных матрицах столбцы, содержащие по два отрицательных элемента
Прошу помощи в создании данной программы: Даны матрицы В (m,n) и С (n,m), заполненные случайным образом. Определить, есть ли в заданных...

C++ Двумерные массивы(матрицы),работа с элементами главной диагонали
Уважаемые коллеги, прошу помощи в решении парочки задачек,уж мозг в Си не &quot;варит&quot;,не клеится с его структурой... 1.В каждой...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Загрузка PNG-файла с альфа-каналом с помощью библиотеки SDL3_image на Android
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru