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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 31, средняя оценка - 4.74
deimos
Сообщений: n/a
#1

Двумерный массив, Нужна помощь профи - C++

26.11.2007, 00:59. Просмотров 3679. Ответов 4
Метки нет (Все метки)

Доброго времени суток!!!

Помогите доделать задачу...

Найти максимальный элемент матрицы из тех строк, которые упорядочены либо по возрастанию, либо по убыванию.

Например :

1 7 40 54 - строка упорядочена по возрастанию
3 5 1 66 - строка не упорядочена
45 30 23 4 - строка упорядочена по убыванию

вот именно из 1-ой и 3-ей строки найти максимум..... => число 54 вывести на экран.
числа- случайные.

вот код:

Код
#include "stdafx.h"
#include <iostream>
using namespace std;
#include <ctime>
#include <iomanip>
int _tmain(int argc, _TCHAR* argv[])
{
int m[20][20],a,b,max=-1,v[20][20]; 
srand ( time (NULL));
cout<<"VVedite kolichestvo strok i stolbcov:"<<endl; 
cin>>a>>b; 
cout<<endl; 
for (int i=0;i<b;i++) 
{ for (int j=0;j<a;j++)

{ 

m[i][j]=rand(); 
cout<<m[i][j]<<"\t";

}
cout<<endl;
}
Я понимаю алгоритм так:
1) Проверить на упорядоченность строки.
2)Загнать упорядоченные строки в другой массив.
3) Найти MAX.
или какой-нибудь другой способ...


Если можно помогите реализовать это через функции...

Заранее БОЛЬШОЕ Вам СПАСИБО!!!
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.11.2007, 00:59     Двумерный массив, Нужна помощь профи
Посмотрите здесь:

Двумерный массив, нужна небольшая помощь - C++
Доброго времени суток. Вопрос следующий есть функция которая выводит на экран такой двумерый массив: Сам алгоритм выглядит...

Нужна помощь (одномерный статический массив) - C++
В массиве нужно удалить элементы кратные 7. Не получается удалить со сдвигом (массив статический). И ещё добавить после каждого нечётного...

Нужна помощь по алгоритму - C++
Подскажите литературу, где можно найти алгоритм поиска всех простых циклов в графе граф задан матрицей смежности. Сам использую поиск в...

Нужна помощь Строки. - C++
Составить программу вывода последовательности символов ZYYXXX...AA..AA Y на экран.

нужна помощь с рекурсией. - C++
Ребята, кто мне может объяснить доступно рекурсию на элементарном примере? в интернетах в основном примеры с факториалом. вроде с ним...

прямоугольная матрица. нужна помощь - C++
Дана прямоугольная матрица. Найти строку с наибольшей и наименьшей суммой элементов. Вывести на печать найденные строки и суммы их элементов

Нужна небольшая помощь начинающему - C++
вот код с учебника на проверку является ли число простым.Но я не могу понять откуда берется переменная n ? до какого значения проверяется...

Нужна помощь с задачками по циклу for - C++
Здраствуйте все. Уменя вот не получаеться сделать задачки кто сможет мне помочь вот картинки сними ...

Поиск в файле... Нужна помощь... - C++
Помогите доработать код, мне необходимо было создать программу которая читатет файл 'd:\file.txt' , создает и копирует всё его содержимое в...

Нужна помощь по С++ (перевести из паскаля) - C++
Срочно нужна помощь по задаче: &quot;составить программу, которая вставляет в список L новый элемент F за каждым вхождением элемента E. На...


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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Гость
Сообщений: n/a
26.11.2007, 03:16     Двумерный массив, Нужна помощь профи #2
для начала если ты задаешь статический массив,то не нужно потом вводить кол-во строк и столбцов.и второй массив соответственно должен быть динамическим,т.к. ты не знаешь
сколько и чего там будет.дальше прежде чем выводить массив нужно в него что-то записать,т.е. правильно будет так
for (int i=0;i<20;i++)
for (int j=0;j<20;j++)
m[i][j]=rand()%100;

for (int i=0;i<20;i++)
{for (int j=0;j<20;j++)
cout<<m[i][j]<<" ";
cout<<endl;
}

потом считывай строки и проверяй на упорядоченность,потом записывай упорядоченные в новый массив и ищи в нем максимум.
когда все заработает выноси кусочки в функции.код писать тебе бессмысленно ибо много букв,а ты все равно не поймешь,пока са не напишешь
Lord_Voodoo
Супер-модератор
8584 / 2184 / 61
Регистрация: 07.03.2007
Сообщений: 10,868
Завершенные тесты: 1
26.11.2007, 10:24     Двумерный массив, Нужна помощь профи #3
ты знаешь, заполнение матрицы случайными числами приведет к тому, что необходимость в применении сведется к редким случаям, тут лучше реализовать ввод с клавы, так хоть надежнее...
а проверка на упорядоченность делается так:
Код
// проверка на убывание
int CheckMin(int* arr, int N){
  int isCorr = 1;
  for(int i = 0; i < N - 1; i++){
    if(arr[i]>arr[i + 1]) continue; else{ isCorr = 0; break; };
  }
  for(int i = N - 1; i > 0; i++){
    if(arr[i]>arr[i - 1]) continue; else break;
  }
  return isCorr;
}
// проверка на возрастание
int CheckMax(int* arr, int N){
  int isCorr = 1;
  for(int i = 0 ; i < N - 1; i++){
    if(arr[i]<arr[i + 1]) continue; else{ isCorr = 0; break;
  }
  return isCorr;
}
ну а дальше построчнно шелестишь по матрице и новую матрицу мастеришь, ну а там уже ищешь, что тебе надо
Yevgenijz
11 / 11 / 1
Регистрация: 31.03.2009
Сообщений: 69
26.05.2009, 15:59     Двумерный массив, Нужна помощь профи #4
Я понимаю алгоритм так:
1) Проверить на упорядоченность строки.
2)Загнать упорядоченные строки в другой массив.
3) Найти MAX.
или какой-нибудь другой способ...
Шаг 2 неверный.
Не нужно загонять строки в массив.
Надо их всего лишь пометить
Для этого нужно завести char массив, в котором помечать 1, если строчка упорядоченная и 0 если нет, сэкономишь и память и время выполнения, да и обдумывать такой алгоритм не труднее, чем с переписыванием из пустого в порожнее
одного массива в другой, над размерностью которого ещё надо думать.
Rififi
2359 / 1054 / 44
Регистрация: 03.05.2009
Сообщений: 2,656
26.05.2009, 16:29     Двумерный массив, Нужна помощь профи #5
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
#include <algorithm>
#include <functional>
#include <iostream>
 
template <typename T>
struct max_if_orderly : public std::unary_function<T, void>
{
    max_if_orderly() : row_(0) {}
    template <const size_t Cols>
    void operator()(const T (&arr)[Cols])
    {
        if (std::adjacent_find(arr, arr+Cols, std::greater<T>()) == arr+Cols ||
            std::adjacent_find(arr, arr+Cols, std::less<T>()) == arr+Cols)
        {
            std::cout << "Row " << row_ << " is matched. Maximum=" <<
                *std::max_element(arr, arr+Cols) << std::endl;
        }       
        row_++;
    }
    size_t row_;
};
 
template <typename T, const size_t Rows, const size_t Cols>
void product_maxes(const T (&arr)[Rows][Cols])
{
    std::for_each(arr, arr+Rows, max_if_orderly<T>());
}
 
 
int main()
{
    int arr[3][4] = {
        1, 7, 40, 54,
        3, 5, 1, 66,
        45, 30, 23, 4 };
    product_maxes(arr);
    return 0;
}
Вывод:
Row 0 is matched. Maximum=54
Row 2 is matched. Maximum=45
Опробировано на Visual Studio 2008
Yandex
Объявления
26.05.2009, 16:29     Двумерный массив, Нужна помощь профи
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru