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

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

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 18, средняя оценка - 4.67
TBIKC
web dev
 Аватар для TBIKC
104 / 91 / 1
Регистрация: 23.09.2010
Сообщений: 738
07.10.2011, 13:59     Найти максимальный среди всех элементов тех строк заданной матрицы, которые упорядочены #1
Доброго времени суток, у меня есть задача ( практика,паскаль, процедуры ) так вот я не могу решить задачу
Помогите пожалуйста составить алгоритм, и написать программу (C++, разберусь ибо осилив функции, приступил к изучению массивов, только как можно проще и понятнее)

Найти максимальный среди всех элементов тех строк заданной матрицы, которые упорядочены (либо по возрастанию, либо по убыванию)
В основной программе обеспечить ввод всех данных, обращение к функции (подпрограмме) и вывод результата.
В функции(под программе) описать саму функцию.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.10.2011, 13:59     Найти максимальный среди всех элементов тех строк заданной матрицы, которые упорядочены
Посмотрите здесь:

C++ Найти сумму элементов тех строк матрицы, которые хотя бы один отрицательный элементсодержат
C++ Дана матрица размера N×M. Найти максимальный среди элементов тех строк|столбцов, которые упорядочены либо по возрастанию
C++ Файл: Для заданной в файле матрицы A (n на m) определить количество строк, которые упорядочены по возрастанию
C++ Среди тех строк целочисленной матрицы, которые содержат только нечетные элементы, найти строку с максимальной суммой модулей элементов
Массивы. Найти максимальный элемент среди всех элементов тех строк заданной матрицы, которые упорядочены C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
OstapBender
 Аватар для OstapBender
581 / 519 / 35
Регистрация: 22.03.2011
Сообщений: 1,585
07.10.2011, 14:45     Найти максимальный среди всех элементов тех строк заданной матрицы, которые упорядочены #2
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
bool is_sorted(int * arr, int n, int& max) {
 
    bool sorted=true;
 
    for (int i=1; i<n ; i++) {
        if (arr[i]<arr[i-1]) {
            sorted=false;
            break;
        }
    }
 
    if (sorted) {
        max = arr[n-1];
        return true;
    }
    
    for (int i=1; i<n ; i++) {
        if (arr[i]>arr[i-1]) {
            max=0;
            return false;
        }
    }
 
    max=arr[0];
    return true;
 
}
это среди 1 строки.
co6ak
Кошковед
 Аватар для co6ak
402 / 495 / 29
Регистрация: 12.04.2010
Сообщений: 1,392
07.10.2011, 14:59     Найти максимальный среди всех элементов тех строк заданной матрицы, которые упорядочены #3
вот довольно топорный вариант проверки )))
только сама функция проверки на упорядоченность + вывод строки


логика: 2 флага проверки. Max->Min и Min->Max соответственно.
Упорядоченной считается строка, в которой флаг равен количеству столбцов. не важно какой из 2 счетчиков. при выполнении условия - вывод результата
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
void check ( int ** matr, int ROW, int COLUMN )
{
    for ( int i = 0; i < ROW; i ++ )
    {
        unsigned short int flagMinMax = 0;
        unsigned short int flagMaxMin = 0;
        for ( int j = 0; j < COLUMN - 1; j ++ )
        {
            if ( matr[i][j] < matr [i][j + 1] ) // check sort MIN->MAX            
            {
                flagMinMax ++;
            }
            else flagMaxMin ++;
        }
        if ( ( flagMaxMin == COLUMN  ) || (  flagMinMax == COLUMN ) ) {
            int max = matr[i][0];
            for ( int k = 0; k < COLUMN; k ++ )
                if ( max < matr[i][k] ) max = matr[i][k];
            std::cout << "Max = " << max << "\n";
        }
                             
    }
}
-=ЮрА=-
Заблокирован
Автор FAQ
07.10.2011, 15:45     Найти максимальный среди всех элементов тех строк заданной матрицы, которые упорядочены #4
TBIKC, всё же отмечу что вот это
Цитата Сообщение от OstapBender Посмотреть сообщение
if (arr[i]<arr[i-1])
ни есть полный критерий отсортированности, в любом случае в реальных условиях в матрицах могут идти одинаковые элементы например такая строка
1 2 2 3 является сортированной!
При этом 3 2 2 1 тоже сортированная,
только порядок элементов по убыванию, ниже код на С++ с моим взглядом на решение данной задачи
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
#include <iostream>
#include <conio.h>
using namespace std;
 
//Проверяет отсортирована ли строка row
bool isSorted(long n, long * row);
//Возвращает макс элемент строки
long GetMax(long n, long * row);
 
int main()
{
    long i,j,m,n,val, maxv;
    long ** arr;//Пусть будет массив с длинными целыми
    bool bSorted = false;//Флаг сигнализирующий есть ли 
    //в массиве хоть 1-на сортированная строка     
    do
    {
        //Вводим строки и столбцы матрицы
        std::cout<<"Rows in matrix : ";std::cin>>m;
        std::cout<<"Cols in matrix : ";std::cin>>n;
 
        arr = new long*[m];//Память под указатели на строки матрицы
        for(i = 0; i < m; i++)
        {
            arr[i] = new long[n];//Память под элементы строки
            for(j = 0; j < n;  j++)
            {
                std::cout<<"arr["<<i + 1<<"]["<<j + 1<<"] = ";
                std::cin>>arr[i][j];//Вводим эл-ты массива
            }
        }
        //Теперь отыскиваем отсортированную строку
        //конечно если такие строки есть
 
        //я решил сэкономить на коде и попутно ищу
        //первый максимальный элемент сортированных строк
        //как только строка isSorted в maxv уже
        //будет первый макс элемент отсортированных строк
        //при этом поиск последующих строк уже буду вести 
        //с i-ой строки - вобщем удобно
        while(0 < (i--) )
        {
            if((bSorted = isSorted(n, arr[i])))
            {
                maxv = GetMax(n, arr[i]);
                break;
            }
        }
        if(!bSorted)
            //Если сортированных строк в массиве нет bSorted = false
            //выводим соответсвующее уведомление
            std::cout<<"Input array not contain sorted rows!\r\n";
        else
        {
            //Завершаем пробор массива
            while(0 < (i--))
            {
                if(isSorted(n, arr[i]))//Работаем только с сортированными строками
                if(maxv < (val = GetMax(n, arr[i])))
                    maxv = val;
            }
            std::cout<<"Max value in sorted rows : "<<maxv<<"\r\n";
        }
        std::cout<<"Press Y for new input\r\n";
    }//Если нажали Y можем повторить алгоритм для новй матрицы
    while(toupper(getch()) == 'Y');
    return 0;
}
 
bool isSorted(long n, long * row)
{
    bool bRet = true;//полагаем вначале ччто строка отсортирована
    long i; 
    //Ну а теперь сравниваем элементы строки row
    //Проверяем сортированность по возрастанию
    for(i = 0; i < n - 1 && bRet; i++)
    {
        if(row[i] > row[i + 1])
            bRet = false;
    }
    //если строка не отсортирована по возрастанию
    //проверим отсортирована ли она по убsванию
    if(!bRet)
    {
        bRet = true;
        for(i = n - 1; 0 <= i && bRet; i--)
        {
            if(row[i] < row[n - i - 1])
                bRet = false;
        }
    }
    return bRet;
}
 
long GetMax(long n, long * row)
{
    long ret = row[0];
    for(long i = 1; i < n; i++)
    {
        if(ret < row[i])
            ret = row[i];
    }
    return ret;
}
Миниатюры
Найти максимальный среди всех элементов тех строк заданной матрицы, которые упорядочены  
Вложения
Тип файла: rar SortedArr.exe.rar (45.2 Кб, 38 просмотров)
OstapBender
 Аватар для OstapBender
581 / 519 / 35
Регистрация: 22.03.2011
Сообщений: 1,585
07.10.2011, 16:15     Найти максимальный среди всех элементов тех строк заданной матрицы, которые упорядочены #5
в моей программе всё правильно работает.
только не проверяется если массив состоит из 1 символа.
-=ЮрА=-
Заблокирован
Автор FAQ
07.10.2011, 16:55     Найти максимальный среди всех элементов тех строк заданной матрицы, которые упорядочены #6
Цитата Сообщение от OstapBender Посмотреть сообщение
в моей программе всё правильно работает.
только не проверяется если массив состоит из 1 символа.
- вставил вашу функцию в свой код
Ваша функция в моей программе
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
#include <iostream>
#include <conio.h>
using namespace std;
 
bool isSorted(long * arr, int n, long& max);
 
int main()
{
    long i,j,m,n,val, maxv;
    long ** arr;//Пусть будет массив с длинными целыми
    bool bSorted = false;//Флаг сигнализирующий есть ли 
    //в массиве хоть 1-на сортированная строка     
    do
    {
        //Вводим строки и столбцы матрицы
        std::cout<<"Rows in matrix : ";std::cin>>m;
        std::cout<<"Cols in matrix : ";std::cin>>n;
 
        arr = new long*[m];//Память под указатели на строки матрицы
        for(i = 0; i < m; i++)
        {
            arr[i] = new long[n];//Память под элементы строки
            for(j = 0; j < n;  j++)
            {
                std::cout<<"arr["<<i + 1<<"]["<<j + 1<<"] = ";
                std::cin>>arr[i][j];//Вводим эл-ты массива
            }
        }
        //Теперь отыскиваем отсортированную строку
        //конечно если такие строки есть
 
        //я решил сэкономить на коде и попутно ищу
        //первый максимальный элемент сортированных строк
        //как только строка isSorted в maxv уже
        //будет первый макс элемент отсортированных строк
        //при этом поиск последующих строк уже буду вести 
        //с i-ой строки - вобщем удобно
        while(0 < (i--) )
        {
            if((bSorted = isSorted(arr[i],n,maxv)))
                break;
        }
        if(!bSorted)
            //Если сортированных строк в массиве нет bSorted = false
            //выводим соответсвующее уведомление
            std::cout<<"Input array not contain sorted rows!\r\n";
        else
        {
            //Завершаем пробор массива
            while(0 < (i--))
            {
                if(isSorted(arr[i],n,val))//Работаем только с сортированными строками
                if(maxv < val)
                    maxv = val;
            }
            std::cout<<"Max value in sorted rows : "<<maxv<<"\r\n";
        }
        std::cout<<"Press Y for new input\r\n";
    }//Если нажали Y можем повторить алгоритм для новй матрицы
    while(toupper(getch()) == 'Y');
    return 0;
}
 
bool isSorted(long * arr, int n, long& max) {
 
        bool sorted=true;
        int i;
        for (i=1; i<n ; i++) {
                if (arr[i]<arr[i-1]) {
                        sorted=false;
                        break;
                }
        }
 
        if (sorted) {
                max = arr[n-1];
                return true;
        }
        
        for (i=1; i<n ; i++) {
                if (arr[i]>arr[i-1]) {
                        max=0;
                        return false;
                }
        }
 
        max=arr[0];
        return true;
 
}

Ниже скрин работы, как видите не очень то правильно работает

Не по теме:

Если есть желание проверьте ваш алгоритм на такой ввод сами

Миниатюры
Найти максимальный среди всех элементов тех строк заданной матрицы, которые упорядочены  
OstapBender
 Аватар для OstapBender
581 / 519 / 35
Регистрация: 22.03.2011
Сообщений: 1,585
07.10.2011, 17:38     Найти максимальный среди всех элементов тех строк заданной матрицы, которые упорядочены #7
и в чём проблема?
2 строчки "1 1" и "2 0"
они обе сортированы.
максимальное значение = 2
-=ЮрА=-
07.10.2011, 18:58
  #8

Не по теме:

Цитата Сообщение от OstapBender Посмотреть сообщение
в чём проблема?
2 строчки "1 1" и "2 0"
они обе сортированы.
максимальное значение = 2
- я разобрался, простите за замечание!

OstapBender
 Аватар для OstapBender
581 / 519 / 35
Регистрация: 22.03.2011
Сообщений: 1,585
07.10.2011, 20:18     Найти максимальный среди всех элементов тех строк заданной матрицы, которые упорядочены #9
-=ЮрА=-, да нет проблем!
Aragourn
3 / 3 / 0
Регистрация: 18.02.2013
Сообщений: 15
23.02.2013, 16:47     Найти максимальный среди всех элементов тех строк заданной матрицы, которые упорядочены #10
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
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
#include <locale.h>
#include <time.h>
int main()
{
 long i, j, n, k = 0, k1 = 0, max, m;
 srand((unsigned)time(NULL));
 setlocale(LC_ALL, "rus");
 printf("Ââåäèòå n ГЁ m: ");
 scanf("%d%d",&n,&m);
 printf("\n");
 
 long **a = (long**)calloc(n,sizeof(long*));
 
for(i = 0; i < n; i++)
*(a + i)=(long*)calloc(n,sizeof(long));
 
 
for(i = 0; i < n; i++)
    for(j = 0 ; j < n; j++)
    scanf("%d", &*(*(a + i) + j));
    
for(i = 0; i < n; i++)    
    printf((i == 0)?"%6d":"%5d", i);
    
printf("\n\n");         
            
 for(i = 0; i < n; i++)
 {printf("%2d", i);
    for(j = 0 ; j < n; j++)
    {
        printf("%4d ",*(*(a + i) + j));
    }
    printf("\n");
 }
printf("\nÐåçóëüòГ*ГІ: \n\n");
 
max = -RAND_MAX;
 
 for(i = 0; i < n; i++, k = k1 = 0)
      {
       for(j = 0; j < m - 1; j++)
           {
          if(*(*(a + i) + j) <= *(*(a + i) + j + 1))
           k++;
          else
           if(*(*(a + i) + j) >= *(*(a + i) + j + 1))
            k1++;
              
                         } 
if((k == m - 1) || (k1 == m - 1))
for(i = 0; i < n; i++)
    for(j = 0; j < m; j++)
       if(*(*(a + i) + j) > max)
           max = *(*(a + i) + j);
                           
} 
                  
printf((max != -RAND_MAX)?("%4d\n\n"):("Г’Г*ГЄГЁГҐ ñòðîê Г*ГҐГІ!"), max);
    
 
for(i = 0; i < n; i++)
      free(*(a + i));
free(a);        
system("pause");
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.10.2016, 23:39     Найти максимальный среди всех элементов тех строк заданной матрицы, которые упорядочены
Еще ссылки по теме:

Найти максимальный элемент среди всех элементов тех строк заданной матрицы А (4,4), которые упорядочены по возрастанию C++
Дан файл целых чисел которые упорядочены по убыванию. Среди этих чисел найти те что больше среднего арифметического суммы всех элементов C++
C++ Найти среди строк заданной целочисленной матрицы D строку с максимальным произведением элементов

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

Или воспользуйтесь поиском по форуму:
Apollo1222
1 / 1 / 0
Регистрация: 10.10.2016
Сообщений: 40
12.10.2016, 23:39     Найти максимальный среди всех элементов тех строк заданной матрицы, которые упорядочены #11
кто может помочь нарисовать блок-схему?
Yandex
Объявления
12.10.2016, 23:39     Найти максимальный среди всех элементов тех строк заданной матрицы, которые упорядочены
Ответ Создать тему
Опции темы

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