#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;
}
Поиск максимума в матрице(С++)
Найти максимальный среди всех элементов тех строк заданной матрицы, каторые упорядочены(либо по возростанию, либо по убыванию).
Язык - С++
Прошу прощения, что не привел свой вариант неверного решения задачи, но сегодня я уже не в состоянии(физическом(голова раскалывается)) написать данную программу.
Заранее спасибо.
Цитата: mouseR
Условие:
Найти максимальный среди всех элементов тех строк заданной матрицы, каторые упорядочены(либо по возростанию, либо по убыванию).
...
Найти максимальный среди всех элементов тех строк заданной матрицы, каторые упорядочены(либо по возростанию, либо по убыванию).
...
Т.е. какие-то строки матрицы упорядочены ,а какие то нет ?
Какие требования к решению ? STL можно использовать ?
Цитата: m_Valery
Т.е. какие-то строки матрицы упорядочены ,а какие то нет ?
Какие требования к решению ? STL можно использовать ?
Какие требования к решению ? STL можно использовать ?
Как я понял из вышеупомянутого условия сперва нужно упорядочить некоторые, возможно все, строки. А после вычислять среди них максимальный элемент.Т.к. при задании рандомом матрицы наврятли строки будут хоть как то упорядочены.
требования к решению: простота и ясность.
STL использавать увы нельзя.
Н-да,без STL это какоое-то извращение.Ну так примерно,вроде ничего не напутал.Разберешься ? Единственное сортировку сделай сам,я не знаю как тебе надо сортировать...поэтому для сортировки строк я использовал обобщенный алгоритм sort.
решил я так:
Код:
#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;
}
#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 ...
программы работают.
немножко оптимизирую под свой уровень и будет просто восхитительно.
Еще раз спасибо.
Цитата: mouseR
Благодарю за помощь.
программы работают.
немножко оптимизирую под свой уровень и будет просто восхитительно.
Еще раз спасибо.
программы работают.
немножко оптимизирую под свой уровень и будет просто восхитительно.
Еще раз спасибо.