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

Матрицы. Программа, которая удаляет столбец матрицы, содержащий максимальный ее элемент - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Работа с DLL библиотеками http://www.cyberforum.ru/cpp-beginners/thread792159.html
Здравствуйте. Помогите, пожалуйста, переделать программу. Определите следующие функции для работы с массивом: 1) int GetValue(Pairs* p, char* name, int* var); // получить значение для заданного имени (функция должна возвратить 0 если нет такого имени и 1 в случае успеха, а значение возвращать через второй параметр функции); 2) void SetValue(Pairs* p, char* name, int value); // установить...
C++ Индекс минимального значения Дан двумерный массив, найти минимальное значение в каждой строке и его индекс. Мин нашёл, а как индекс на экран ввести? for(i=0;i<n;i++) { min=A; for(j=1;j<n;j++) { if(min>=A) { min=A; } http://www.cyberforum.ru/cpp-beginners/thread792156.html
Преобразование типов переменных C++
Осуществить преобразование типов переменных явным и неявным способом по следующим схемам: float → short int short int → int char → short int → char ---------- Кто-нибудь может помочь?
C++ SetWorldTransform и т.д
Всем доброго времени суток написал функцию но покакой-то причине она не работает,компилируется нормально но не делает то для чего создана: функция должна разворачивать изображение вокруг опорной точки Graphics::TBitmap* vRotate(int viAngle,int X,int Y,AnsiString data) //передаём угол,опорную точку и { ...
C++ Пытаюсь разобраться с темой A linked list http://www.cyberforum.ru/cpp-beginners/thread792126.html
Доброго всем дня! Пытаюсь разобраться с темой A linked list. Необходтма помошь. 1) Предположим курсор уазывает на node in a linked list (использование node опрееления с функцией принадлежашей коассу called data and link ). Какой из ниже приведённых утверждений изменит курсор таким образом, что он будет указывать на следующий node? A) cursor++; B) cursor = link( );
C++ string::npos string::npos == 4294967295 - максимально возможное количество символов в string почему npos так же == -1 std::cout << string::npos << std::endl; std::cout << (-1 == string::npos); //1 подробнее

Показать сообщение отдельно
vua72
410 / 410 / 83
Регистрация: 28.11.2010
Сообщений: 1,158
25.02.2013, 02:46     Матрицы. Программа, которая удаляет столбец матрицы, содержащий максимальный ее элемент
Смотрите, у вас в функции код, который вычисляет максимальное значение, вам в этот код
Цитата Сообщение от mary1010 Посмотреть сообщение
if(inArray[i][j]>max)
* * * * * * * * {
* * * * * * * * max=inArray[i][j];
* * * * * * * * }
нужно добавить запоминание номера столбца. Но это сработает, если у вас ОДНО максимальное значение, если нет, то лучше запомнить максимальное, создать массив, число элементов в котором равно числу столбцов, например, если в столбце есть максимум ставим 1, если нет - 0.
Затем удалить все столбцы, в которых вспомогательный массив содержит 1.
Просто сделайте еще одну функцию, которая заполнит такой массив.
ЗЫ. Я думаю, что правильней первоначальный и вспомогательный массив сделать динамическими, затем на основе вспомогательного массива (узнаем размер) создать новый, в который переписать значения из "правильных" столбцов, исходный - удалить и присвоить указатель на новый массив первоначальному.
В таком случае, вы действительно удалите столбцы.

Добавлено через 2 часа 8 минут
По нормальному нужно использовать стандартные контейнеры, ниже код в стиле С.
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
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
#include <iostream>
#include <cstdlib>
#include <ctime>
#include <iomanip>
using namespace std;
 
int ** alloc_matr(int n_row, int m_col);
int * alloc_vect(int n_elem);
void destroy_matr(int ** matr, int n_row, int m_col);
void destroy_vect(int * vect);
void input_matr(int ** matr, int n_row, int m_col);
void print_matr(int ** matr, int n_row, int m_col);
int find_max(int ** matr, int n_row, int m_col);
void del_column(int ** oldmatr, int **newmatr, int *vect, int n_row, int m_col);
int new_m(int **matr, int *vect, int n_row, int m_col);
int main() {
    int n = 4, m = 5;
    int **a = alloc_matr(n, m);
    int *v = alloc_vect(m);
    input_matr(a, n, m);
    print_matr(a, n, m);
    int mm = new_m(a, v, n, m);
    cout << "\nmm=" << mm << "\n";
    int **new_a = alloc_matr(n, mm);
    del_column(a, new_a, v, n, m);
    destroy_matr(a, n, m);
    a = new_a;
    print_matr(a, n, mm);
    destroy_matr(a, n, m);
    destroy_vect(v);
    return 0;
}
 
int ** alloc_matr(int n_row, int m_col) {
    int **matrix;
    if (n_row == 0 || m_col == 0)
        return 0;
    else {
        matrix = new int*[n_row];
        for (int i = 0; i < n_row; ++i)
            matrix[i] = new int[m_col]();
    }
    return matrix;
}
int * alloc_vect(int n_elem) {
    int *v;
    if (n_elem == 0)
        return 0;
    else
        v = new int[n_elem]();
    return v;
}
 
void destroy_matr(int ** matr, int n_row, int m_col) {
    if (!matr) {
        std::cout << "Matrix not allocated";
        exit(1);
    } else {
        for (int i = 0; i < n_row; ++i)
            delete[] matr[i];
        delete []matr;
    }
}
void destroy_vect(int * vect) {
    if (!vect) {
        std::cout << "Vector is not allocated";
        exit(1);
    } else
        delete[] vect;
}
void input_matr(int ** matr, int n_row, int m_col) {
    srand(time(0));
    for (int i = 0; i < n_row; ++i)
        for (int j = 0; j < m_col; ++j)
            matr[i][j] = rand() % 75; // cout << "\nVvod elementa"; cin >> matr[i][j]
}
void print_matr(int ** matr, int n_row, int m_col) {
    for (int i = 0; i < n_row; ++i) {
        for (int j = 0; j < m_col; ++j)
            cout << setw(4) << matr[i][j];
        cout << endl;
    }
}
void del_column(int ** oldmatr, int **newmatr, int *vect, int n_row,
        int m_col) {
    for (int j = 0, k = 0; j < m_col; ++j)
        if (vect[j])
            continue;
        else {
            for (int i = 0; i < n_row; ++i)
                newmatr[i][k] = oldmatr[i][j];
            ++k;
        }
}
 
int find_max(int ** matr, int n_row, int m_col) {
    int max = 0;
    for (int i = 0; i < n_row; ++i)
        for (int j = 0; j < m_col; ++j)
            if (max < matr[i][j])
                max = matr[i][j];
    return max;
}
 
int new_m(int **matr, int *vect, int n_row, int m_col) {
    int count_m = 0;
    int max = find_max(matr, n_row, m_col);
    cout << "\n max= " << max << "\n";
    for (int j = 0, k = 0; j < m_col; ++j, ++k) {
        for (int i = 0; i < n_row; ++i)
            if (matr[i][j] == max) {
                vect[k] = 1;
                count_m++;
                break;
            }
    }
    return m_col - count_m;
}
 
Текущее время: 04:28. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru