Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Visual C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 02.01.2013, 10:45   #1
sbnm
 
Регистрация: 02.01.2013
Сообщений: 5
По умолчанию Работа с матрицей

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

#include <iostream>
#include <conio.h>
#include <time.h>
using namespace std;

int main()
{
cout << "\n1) Введите размер матрицы\n\n";
cout << " Количество строк - ";
int n; cin >> n; cout << "\n";
cout << " Количество столбцов - ";
int m; cin >> m; cout << "\n\n";
cout << "2) Введите максимальный размер случайных чисел матрицы - ";
int max; cin >> max; cout << "\n";

int matr[n][m];

//ввод матрицы
srand(time(NULL));
for(int i=0; i<n; i++)
{
for(int j=0; j<m; j++)
{
matr[i][j] = rand()% max + 1;
}
}

//вывод матрицы на экран
for(int i=0; i<n; i++)
{
cout << endl;
cout << "\t";

for(int j=0; j<m; j++)
{
cout << matr[i][j] << " ";
}
cout << "\n";
}

//нахождение максимального повторяющегося элемента

int x,y,maxI,maxJ,i,j;
bool flag1, flag2;

for( i=0; i<n; i++)
{
for( j=0; j<m; j++)
{
x = i;
y = j + 1;
flag2 = false;

while((x<=n)&&(flag2==false))
{
while((y<=m)&&(flag2==false))
{
if(matr[i][j]==matr[x][y])
{ flag2 = true; y++;}
}
x++;
}
if((flag1==true)&&(flag2==true)&&(m atr[i][j]>matr[maxI][maxJ]))
{maxI = i; maxJ = j;}
}

if((flag1==false)&&(flag2==true))
{
maxI = i;
maxJ = j;
flag1 = true;
}

if(flag1==true)
cout << "Максимальное из чисел, встречающееся в данной матрице более одного раза - " << matr[maxI][maxJ];
else
cout << "В данной матрице нет повторяющихся элементов";
}
getch();
return 0;
}

Последний раз редактировалось sbnm; 02.01.2013 в 10:54.
sbnm вне форума Ответить с цитированием
Старый 03.01.2013, 23:44   #2
8Observer8
Старожил
 
Аватар для 8Observer8
 
Регистрация: 02.01.2011
Сообщений: 3,322
По умолчанию

Привет!

Цитата:
Сообщение от sbnm Посмотреть сообщение
нужно найти максимальное из чисел, встречающихся в заданной матрице более одного раза
А если все числа разные, что будите выводить?

Сейчас изучаю Qt C++ и решил на вашей задачке потренироваться в создании GUI.

Архив с файлами проекта приложил к данному сообщению.

Моя программка просто выводит максимальный элемент матрицы. Элементы матрицы - это случайные числа: [0 100]. Размеры матрицы от 2 до 10

При запуске появляется диалоговое окно:



Далее, вводим размеры матрицы [n x m]. Где n - число строк (от 2 до 10). m - число столбцов (от 2 до 10). И нажимаем кнопку "Make Matrix". Генерируются элементы матрицы:



Нажимаем кнопку "Find Max Element", чтобы найти максимальный элемент матрицы:



Иван

P.S. Программа не имеет защит от некорректных входных данных.
Вложения
Тип файла: zip MaxElemOfMatrix.zip (1.8 Кб, 15 просмотров)

Последний раз редактировалось 8Observer8; 03.01.2013 в 23:48.
8Observer8 вне форума Ответить с цитированием
Старый 04.01.2013, 07:10   #3
sbnm
 
Регистрация: 02.01.2013
Сообщений: 5
По умолчанию

если все числа разные, надо вывести сообщение, что повторяющихся элементов нет.
sbnm вне форума Ответить с цитированием
Старый 04.01.2013, 23:43   #4
8Observer8
Старожил
 
Аватар для 8Observer8
 
Регистрация: 02.01.2011
Сообщений: 3,322
По умолчанию

Сначала нужно создать матрицу, выделив для неё память:

Код:
    int **matrix;
    matrix = new int *[nrow];

    for (int i = 0; i < nrow; i++) {
        matrix[i] = new int [ncol];
    }
Заполнить матрицу, например, случайными числами.

Потом не забыть удалить матрицу из памяти:
Код:
    for (int i = 0; i < nrow; i++) {
        delete [] matrix[i];
    }
    delete [] matrix;
Для поиска максимального элемента (из повторяющихся) предлагаю функцию, которая через один из своих параметров вернёт флаг isRepeating. Флаг isRepeating означает, что есть повторяющиеся элементы.

Объявление функции:
Код:
    int findMaxElem(int **matrix, int nrows, int ncols, bool *isRepeating);
Реализация функции. Несколько слов о реализации. Происходит следующее:

- объект myvector типа vector заполняется элементами матрицы

- элементы объекта myvector сортируются по возрастанию

- отыскиваем пару одинаковых элементов в myvector от конца

- если найдена пара, то возвращаем флаг: isRepeating = true

- иначе возращаем: isRepeating = false


Код:
int findMaxElem(int **matrix, int nrows, int ncols, bool *isRepeating)
{
    std::vector<int> myvector;

    for (int i = 0; i < nrows; i++) {
        for (int j = 0; j < ncols; j++) {
            myvector.push_back(matrix[i][j]);
        }
    }

    std::sort(myvector.begin(), myvector.end());

    std::vector<int>::iterator it;
    int previousElem;
    *isRepeating = false;
    int max = myvector.back();
    int index;

    for (it = myvector.end(); it != myvector.begin(); --it) {
        index = std::distance(myvector.begin(), it-1);

        if (it == myvector.end()) {
            previousElem = myvector[index];
        }
        else if (previousElem == myvector[index]) {
            *isRepeating = true;
            max = myvector[index];
            break;
        }
        else {
            previousElem = myvector[index];
        }
    }

    return max;
}
Вызов функции:
Код:
    bool isRepeating;
    int max = findMaxElem(matrix, nrow, ncol, &isRepeating);

    if (isRepeating) {
        // Выводим максимальный элемент матрицы из повторяющихся элементов
    }
    else {
        // Выводим сообщение, что нет повторяющихся элементов
    }
Я изменил свою программу в соответствии с заданием данной темы:



P.S. В начале файла нужно добавить:
Код:
#include <algorithm>
#include <vector>
Вложения
Тип файла: zip MaxElemOfMatrix.zip (2.2 Кб, 11 просмотров)

Последний раз редактировалось 8Observer8; 04.01.2013 в 23:48.
8Observer8 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
работа с матрицей Дашка Шевцова Помощь студентам 2 21.06.2011 11:44
Работа с матрицей Иги Помощь студентам 2 21.01.2011 00:03
Работа с матрицей xarti Общие вопросы C/C++ 11 18.01.2011 15:31
Работа с матрицей GM402 Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 4 29.11.2010 23:22
работа с матрицей RanMa Помощь студентам 6 12.03.2010 17:05