Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Поиск максимума в матрице(С++)

29K
02 декабря 2007 года
mouseR
9 / / 27.11.2007
Условие:
Найти максимальный среди всех элементов тех строк заданной матрицы, каторые упорядочены(либо по возростанию, либо по убыванию).

Язык - С++

Прошу прощения, что не привел свой вариант неверного решения задачи, но сегодня я уже не в состоянии(физическом(голова раскалывается)) написать данную программу.
Заранее спасибо.
320
02 декабря 2007 года
m_Valery
1.0K / / 08.01.2007
Цитата: mouseR
Условие:
Найти максимальный среди всех элементов тех строк заданной матрицы, каторые упорядочены(либо по возростанию, либо по убыванию).
...


Т.е. какие-то строки матрицы упорядочены ,а какие то нет ?
Какие требования к решению ? STL можно использовать ?

29K
02 декабря 2007 года
mouseR
9 / / 27.11.2007
Цитата: m_Valery
Т.е. какие-то строки матрицы упорядочены ,а какие то нет ?
Какие требования к решению ? STL можно использовать ?



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

320
02 декабря 2007 года
m_Valery
1.0K / / 08.01.2007
Н-да,без STL это какоое-то извращение.Ну так примерно,вроде ничего не напутал.Разберешься ? Единственное сортировку сделай сам,я не знаю как тебе надо сортировать...поэтому для сортировки строк я использовал обобщенный алгоритм sort.
Код:
#include <iostream>
#include <ctime>
#include <iomanip>
#include <algorithm>
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
    wcout.imbue(locale(".866"));
    srand(time(0));
    size_t row,col;
    do{
      wcout<<L"Введите количество строк > 0"<<endl;
      cin>>row;
    }while(row <= 0);
    do{
      wcout<<L"Введите количество столбцов > 0"<<endl;
      cin>>col;
    }while(col <= 0);
    int **mass = new int*[row];
    for(size_t i = 0;i < row;++i){
        mass = new int[col];
        for(size_t j = 0;j < col;++j)
            mass[j] = rand() % 100;
    }
    for(size_t i = 0;i < row;++i){
        for(size_t j = 0;j < col;++j){
            cout<<setw(6)<<mass[j];
        }
        cout<<"\n\n";
    }
    wcout<<L"Введите количество отсортированных строк > 0"<<endl;
    size_t n;
    do{
      cin>>n;
    }while(n <= 0);
    int *m = new int[n];
    wcout<<L"Введите их номера"<<endl;
    for(size_t i = 0;i < n;++i){
        cin>>m;
    }
    for(size_t i = 0;i < row;++i){
        for(size_t j = 0;j < n;++j){
        if(i == m[j])
          sort(&mass[0],&mass[col]);
        }
    }
    for(size_t i = 0;i < row;++i){
        for(size_t j = 0;j < col;++j){
            cout<<setw(6)<<mass[j];
        }
        cout<<"\n\n";
    }
    int **mass1 = new int*[n];
    for(size_t i = 0;i < n;++i){
        mass1 = new int[col];
        for(size_t j = 0;j < col;++j)
            mass1[j] = 0;
    }
    for(size_t i = 0;i < row;++i){
        for(size_t j = 0;j < col;++j){
            for(size_t k = 0;k < col;++k){
                if(i == m[k])
                    mass1[k][j] = mass[j];
            }
        }
    }
    cout<<endl;
    for(size_t i = 0;i < n;++i){
        for(size_t j = 0;j < col;++j)
            cout<<setw(6)<<mass1[j];
        cout<<"\n\n";
    }
    int max_ = mass[0][0];
    for(size_t i = 0;i < n;++i){
        for(size_t j = 0;j < col;++j)
            if(max_ <= mass1[j])
                max_ = mass1[j];   
    }
    wcout<<L"Искомый элемент : "<<max_<<endl;
    for(size_t i = 0;i < row;++i)
        delete[] mass;
    delete[] mass;
    delete[] m;
    for(size_t i = 0;i < n;++i)
        delete[] mass1;
    delete[] mass1;
    return 0;
}
4.7K
02 декабря 2007 года
bobik02
140 / / 11.09.2007
мне недавно задали точно такую же лабу:)
решил я так:
Код:
#include <iostream>
#include <iomanip>
#include <conio>

#define SZ 4

int ArrayOrdering(int* array, int size);

int main()
{
    int matrix[][SZ] = {
            2, 9, 7, 1,
            1, 3, 5, 8,
            5, 2, 1, 4,
            6, 4, 2, 1
    };
    int i, j;
    int ord;

    cout << "Source matrix:\n";
    for(i = 0; i < SZ; i++)
    {
        for(j = 0; j < SZ; j++)
            cout << setw(3) << matrix[j];
        cout << endl;
    }

    for(i = 0; i < SZ; i++)
    {
        ord = ArrayOrdering(matrix, SZ);
        if(ord == 1)
            cout << "\nLine " << i + 1 << ": max = " << matrix[SZ - 1] << "\t(ascending  ordering)";
        else if(ord == -1)
            cout << "\nLine " << i + 1 << ": max = " << matrix[0] << "\t(descending ordering)";
        else
            cout <<    "\nLine " << i + 1 << ": \t(not ordered)";
    }
    cout << endl << endl;

     getch();
    return 0;
}

int ArrayOrdering(int* array, int size)
{
    int i;

    for(i = 1; i < size && array >= array[i - 1]; i++);
    if(i == size)
        return 1;

    for(i = 1; i < size && array <= array[i - 1]; i++);
    if(i == size)
        return -1;

    return 0;
}

только матрицу я не делал рандомом ...

упс... извините пока я писал то не видел поста m_Valery 22:43 ...
29K
03 декабря 2007 года
mouseR
9 / / 27.11.2007
Благодарю за помощь.
программы работают.
немножко оптимизирую под свой уровень и будет просто восхитительно.
Еще раз спасибо.
4.7K
03 декабря 2007 года
bobik02
140 / / 11.09.2007
Цитата: mouseR
Благодарю за помощь.
программы работают.
немножко оптимизирую под свой уровень и будет просто восхитительно.
Еще раз спасибо.




Правила форума Студентам
:p

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог