Форум программистов, компьютерный форум, киберфорум
Наши страницы

Visual C++

Войти
Регистрация
Восстановить пароль
 
Dr_Shadow
0 / 0 / 0
Регистрация: 04.05.2009
Сообщений: 22
#1

Исключение N-й строки из матрицы - Visual C++

04.05.2009, 18:56. Просмотров 484. Ответов 7
Метки нет (Все метки)

Приветствую!
Нужна помощь в написании программы.
Имеется матрица nxm, нужно удалить из нее строку с максимальным элементом.
Функцию для нахождения мах элемента я написал, а вот с удалением строки не выходит
C++
1
2
3
4
5
6
7
8
void CzadachadvaDlg::sum(double** a, int n, int m, double& s)
{t=0;
k=0;
double q=a[0][0];
for(int i=0; i<n; i++)
{for(int j=0; j<m; j++)
if(a[i][j]>q) {k=i; t=j;
}
Заранее спасибо
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.05.2009, 18:56
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Исключение N-й строки из матрицы (Visual C++):

Включение и исключение строки и столбца из матрицы - Pascal
Всем привет. Нужна помощь у меня долгов блин как шелков. Еще эти лабы по паскалю. Все делают 18ю лабу я только 13. Проболел и...

умножить элемент каждой строки первой матрицы на наибольшее из значений элементов соответствующей строки второй матрицы - C++
Даны две действительные квадратные матрици порядка n. Получить новую матрицу: умножением элементов каждой строки первой матрици на...

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

Вывести на печать исходный массив в виде матрицы и средние арифметические каждой строки матрицы с указанием номера строки - Pascal
О великие знатоки паскаля, прошу у вас помощи Задача : Ввести двумерный массив 3х3. Вывести на печать исходный массив в виде матрицы и...

Динамический массив. Характеристикой строки целочисленной матрицы назовем сумму ее положительных четных элементов. Переставляя строки заданной матрицы - C++
#include &lt;iostream.h&gt; #include &lt;math.h&gt; #include &lt;string.h&gt; int kol_vo(int **a, int n, int m); int main() { int...

Заменить строки матрицы, содержащие максимальный элемент, на соответствующие строки единичной матрицы - C#
В заданной двумерной матрице замените строки, содержащие максимальный элемент, на соответствующие строки единичной матрицы.

7
Monte-Cristo
2794 / 1380 / 30
Регистрация: 07.03.2009
Сообщений: 4,446
04.05.2009, 19:40 #2
Эм.... что такое double &s? зачем он передается?
0
NickA
35 / 34 / 2
Регистрация: 28.04.2009
Сообщений: 67
04.05.2009, 19:44 #3
Вроде так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
void CzadachadvaDlg::sum(double** a, int n, int m, double& s) 
{
  t=0;
  k=0;
  double q=a[0][0];
  for(int i=0; i<n; i++)
    for(int j=0; j<m; j++)
      if(a[i][j]>q){
        k=i; 
        t=j;
      };
  for(int i=k; i<n-1; i++)
    for(int j=0; j<m; j++)
      a[i][j]=a[i+1][j];
  s=n-1; // Если s возвращает новое количество строк, но можно и в n вернуть новый размер
};
0
Monte-Cristo
2794 / 1380 / 30
Регистрация: 07.03.2009
Сообщений: 4,446
04.05.2009, 19:57 #4
вот как-то вот так сделай
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
#include <iostream>
#include <cstdlib>
#include <ctime>
using namespace std;
 
int sum(double** a, int m, int n)
{
    int maxi = 0;
    int maxj = 0;
 
    for (int i=0; i<m; i++)
        for(int j=0; j<n; j++)
            if (a[maxi][maxj] < a[i][j]) 
            {
                maxi = i;
                maxj = j;
            }
    return maxi;
}
 
double** del(double** a, int &m, int n, int del)
{
    double** z = new double*[m-1];
 
    for (int i=0; i<n; i++) z[i] = new double[n];
 
    for (int i=0; i<del; i++)
    {
        for (int j=0; j<n; j++)
            z[i][j] = a[i][j];
    }
 
    for (int i=del+1; i<m; i++)
    {
        for (int j=0; j<n; j++)
            z[i-1][j] = a[i][j];
    }
 
    m--;
 
    return z;
}
 
void print(double** a, int m, int n)
{
    for (int i=0; i<m; i++)
    {
        for (int j=0; j<n; j++)
        {
            cout.width(3);
            cout << a[i][j];
        }
        cout << endl;
    }
    cout << endl;
}
 
int main()
{
    int m = 5;
    int n = 10;
 
    srand(time(0));
 
    double** matr = new double*[m];
    for (int i=0; i<n; i++) matr[i] = new double[n];
 
    for (int i=0; i<m; i++)
        for (int j=0; j<n; j++)
            matr[i][j] = rand()%90+10;
 
    print(matr,m,n);
 
    matr = del(matr,m,n,sum(matr,m,n));
 
    print(matr,m,n);
    
    return 0;
}
0
NickA
35 / 34 / 2
Регистрация: 28.04.2009
Сообщений: 67
04.05.2009, 20:00 #5
Ответ: Исключение N-й строки из матрицы
вот как-то вот так сделай
Это вообще супер, строка исчезнет из памяти вовсе, что сказать профи есть профи.
0
Monte-Cristo
2794 / 1380 / 30
Регистрация: 07.03.2009
Сообщений: 4,446
04.05.2009, 20:07 #6
NickA, научитесь читать.
0
Dr_Shadow
0 / 0 / 0
Регистрация: 04.05.2009
Сообщений: 22
04.05.2009, 20:08  [ТС] #7
спасибо большое, буду разбираться
0
Monte-Cristo
2794 / 1380 / 30
Регистрация: 07.03.2009
Сообщений: 4,446
04.05.2009, 20:18 #8
Dr_Shadow, забыл сказать, я код не тестил, так что возможны ошибки...

Добавлено через 45 секунд
и .. желательно добавить удаление матрицы...

Добавлено через 2 минуты 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
double** del(double** a, int &m, int n, int del)
{
    double** z = new double*[m-1];
 
    for (int i=0; i<n; i++) z[i] = new double[n];
 
    for (int i=0; i<del; i++)
    {
        for (int j=0; j<n; j++)
            z[i][j] = a[i][j];
    }
 
    for (int i=del+1; i<m; i++)
    {
        for (int j=0; j<n; j++)
            z[i-1][j] = a[i][j];
    }
 
    m--;
    
    for (int i=0; i<m; i++) delete[] a[i];
    delete[] a;
    
    return z;
}
Добавлено через 38 секунд
и так:

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
int main()
{
    int m = 5;
    int n = 10;
 
    srand(time(0));
 
    double** matr = new double*[m];
    for (int i=0; i<n; i++) matr[i] = new double[n];
 
    for (int i=0; i<m; i++)
        for (int j=0; j<n; j++)
            matr[i][j] = rand()%90+10;
 
    print(matr,m,n);
 
    matr = del(matr,m,n,sum(matr,m,n));
 
    print(matr,m,n);
    
    for (int i=0; i<m; i++) delete[] matr[i];
    delete[] matr;
 
    return 0;
}
0
04.05.2009, 20:18
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.05.2009, 20:18
Привет! Вот еще темы с ответами:

Исключение строки и столбца - Pascal ABC
Задана квадратная матрица. Исключить из нее строку и столбец, на пересечении которых расположен максимальный элемент главной диагонали.

Исключение строки из метода - C#
Взять, к примеру, метод void Method1() { int i = 0; i++; MessageBox.Show(i.ToString()); } Я хочу вызвать...

Исключение символов из строки - C++
Добрый день. есть задача: Дана строка символов. Группы символов, разделенные пробелами (одним или несколькими) и не содержащие пробелы...

Включение и исключение строки и столбца - Turbo Pascal
Задана матрица размера NxN и число K(1&lt;=K&lt;=N).Столбец с максимальным по модулю элементом в K-й строке переставить с K-м столбцом. ...


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

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

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