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

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

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 5.00
mary1010
0 / 0 / 0
Регистрация: 17.09.2012
Сообщений: 32
22.02.2013, 01:09     Матрицы. Программа, которая удаляет столбец матрицы, содержащий максимальный ее элемент #1
Я новичок в с++...поэтому оооочень нужна Ваша помощь!!!

Необходимо написать программу, которая удаляет столбец матрицы, содержащий максимальный ее элемент. Элементы
вводятся с клавиатуры и еще нужно использовать функции.

У меня почему-то не получается вызвать функции и ошибки в DeleteColumn типа:
1.[C++ Error] Unit1.cpp(29): E2188 Expression syntax
2.[C++ Error] Unit1.cpp(46): E2451 Undefined symbol 'i'
.....
3.[C++ Warning] Unit1.cpp(71): W8004 't' is assigned a value that is never used
.....

вот собственно код:
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
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#pragma argsused
#include <iostream>
#include <math.h>
#include <conio.h>
#include <stdio.h>
#include <ctime>
//---------------------------------------------------------------------------
using namespace std;
 
int** createMatrix(int);
void fillArray(int**, int);
void printArray(int**, int);
void DeleteColumn(int** inArray,  int width);
 
 int main()
{
int** matrix;
int length = 0;
 
matrix = createMatrix(length);
 
fillArray(matrix,length);
cout << "Matrix which is filled manually:" << endl;
printArray(matrix,length);
 
DeleteColumn(int** inArray,  int width);
cout << "New matrix:" << endl;
printArray(matrix,length);
system("pause");
}
 
int** createMatrix(int width)
{
int** matrix = new int*[width];
for (int i = 0; i < width; i++)
matrix [i] = new int[width];
return matrix;
}
//------------------------
void DeleteColumn(int** inArray,  int width )
{
 //searching max
 int l = inArray[i][j] ;
 int s=0;
 int t=0;
        for(i=0;i<width;i++)
           for(j=0;j<width;j++)
                if(inArray[i][j]>l)
                {
                l=inArray[i][j];
                t=i;
                s=j;
                }
        cout<<"max element=";
        cout<<l<<endl;
 
 //deleting column of a matrix
 for (j=0; j<width; j++)
   for (i=0;i<width; i++)
        if (inArray[i][j]=l)
               {
                       for (i=0; i<width; i1++)
                            for (i1=j; i1<(width-1); i1++)
                                 inArray[i][i1]=inArray[i][i1+1];
                       i=0;
                                         
                }
 }
//-------------------------
void fillArray(int** inArray, int width)
{
        for(int i = 0; i<width; i++)
           for(int j=0; j<width; j++)
{
 
cout << "Enter cell [" << i <<"," << j << "]"<< endl;
cin >> inArray[i][j];
}
 
}
 
void printArray(int** inArray, int width)
{
        for(int i = 0; i<width; i++){
          for(int j=0; j<width; j++)
{
cout << inArray[i][j] << " ";
}
cout << endl;
        }
 
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.02.2013, 01:09     Матрицы. Программа, которая удаляет столбец матрицы, содержащий максимальный ее элемент
Посмотрите здесь:

C++ Дана матрица размера M × N. Продублировать столбец матрицы, содержащий ее минимальный элемент.
C++ Найти сумму элементов в строке содержащий максимальный элемент матрицы
Удалить столбец, содержащий максимальный элемент матрицы. C++
C++ [C++] Удалить столбец, содержащий максимальный элемент матрицы
Поменять местами столбцы матрицы: столбец, содержащий максимальный элемент матрицы, и столбец, содержащий минимальный элемент матрицы. C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
vua72
22.02.2013, 18:51     Матрицы. Программа, которая удаляет столбец матрицы, содержащий максимальный ее элемент
  #21

Не по теме:

Цитата Сообщение от mary1010 Посмотреть сообщение
- создание матрицы с заданной размерностью....я так понимаю...
части кода писали на лекции и я включила их в программу, если что-то получается не совсем корректно, то прошу извинить, я только на 1 курсе и с преподавателем не очень повезло
\
Вы знаете, тут препод конечно виноват, но за вас думать никто не будет, элементарно у вас, извините, глупости написаны.
Возьмите простую книгу для новичков, может Прата подойдет, почитайте про типы данных, переменные, массивы. Сложного ничего нет.
И еще, вы верите, что удаляете столбец из массива? Или вы пытаетесь его удалить из вывода на экран? Тут вам точно не повезло с преподавателем.

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
mary1010
0 / 0 / 0
Регистрация: 17.09.2012
Сообщений: 32
22.02.2013, 19:21  [ТС]     Матрицы. Программа, которая удаляет столбец матрицы, содержащий максимальный ее элемент #22
vua72, с функциями разобралась, работает ввод/вывод и поиск максимального элемента(я его модифицировала):
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
void findMax(int** inArray,  int width )
{
 
 int i=0, j=0;
//searching max
 
 int max = inArray[i][j] ;
        for(i=0;i<width;i++)
           for(j=0;j<width;j++)
                if(inArray[i][j]>max)
                {
                max=inArray[i][j];
                }
        cout<<"max element=";
        cout<<max<<endl;
 
  }
и по поводу удаления:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
int DeleteColumn(int** inArray,  int  width);
 {
        for(int i = 0; i < width; i++)                      //цикл по строкам
        {
          int* c = new int[width-1]; //новая матрица, в которой на 1 столбец меньше, чем в исходной
                for(int j = 0, k = 0; j < width; j++)   //цикл по столбцам
                {
                 if ( j != max[j])      //если j не равно столбцу с максимальным элементом 
                 {
                    c[k] = inArray[i][j];  //копируем элемент в новую матрицу
                    k++;                                           
                 }
                }
 int* old = inArray[i];                                      
 inArray[i] = c;
 delete[] old;
        }
}
здесь вот такая ошибка во 2 строке:[C++ Error] Unit1.cpp(62): E2040 Declaration terminated incorrectly

Добавлено через 13 минут
и еще:[C++ Error] Unit1.cpp(77): E2335 Overloaded 'max' ambiguous in this context
vua72
410 / 410 / 83
Регистрация: 28.11.2010
Сообщений: 1,158
22.02.2013, 20:47     Матрицы. Программа, которая удаляет столбец матрицы, содержащий максимальный ее элемент #23
Уберите точку с запятой в первой строке.
А где вы объявили массив max?
mary1010
0 / 0 / 0
Регистрация: 17.09.2012
Сообщений: 32
22.02.2013, 22:16  [ТС]     Матрицы. Программа, которая удаляет столбец матрицы, содержащий максимальный ее элемент #24
vua72, я думаю, что номер столбца с максимальным элементом должен возвращаться в функции findMax и попадать в DeleteColumn, как это сделать?
vua72
410 / 410 / 83
Регистрация: 28.11.2010
Сообщений: 1,158
22.02.2013, 22:38     Матрицы. Программа, которая удаляет столбец матрицы, содержащий максимальный ее элемент #25
int findMax() {
...
return col_with_max;}
mary1010
0 / 0 / 0
Регистрация: 17.09.2012
Сообщений: 32
23.02.2013, 02:06  [ТС]     Матрицы. Программа, которая удаляет столбец матрицы, содержащий максимальный ее элемент #26
vua72, самое важное для меня сейчас - это понять как из findMax ПОЛУЧИТЬ номер столбца с макс. элементом ???сам элемент известен...а дальше...
Kuzia domovenok
 Аватар для Kuzia domovenok
1883 / 1738 / 116
Регистрация: 25.03.2012
Сообщений: 5,907
Записей в блоге: 1
23.02.2013, 02:09     Матрицы. Программа, которая удаляет столбец матрицы, содержащий максимальный ее элемент #27
вернуть номер столбца, не?
что не ясно то?
пусть findMAX возвращает тип инт - номер столбца.
C++
1
2
void findMax(int** inArray,  int width )
{...
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.02.2013, 02:46     Матрицы. Программа, которая удаляет столбец матрицы, содержащий максимальный ее элемент
Еще ссылки по теме:

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

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

Или воспользуйтесь поиском по форуму:
vua72
410 / 410 / 83
Регистрация: 28.11.2010
Сообщений: 1,158
25.02.2013, 02:46     Матрицы. Программа, которая удаляет столбец матрицы, содержащий максимальный ее элемент #28
Смотрите, у вас в функции код, который вычисляет максимальное значение, вам в этот код
Цитата Сообщение от 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;
}
Yandex
Объявления
25.02.2013, 02:46     Матрицы. Программа, которая удаляет столбец матрицы, содержащий максимальный ее элемент
Ответ Создать тему
Опции темы

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