
![]() |
Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
|
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[216.73.216.207] |
![]() |
|
Сообщ.
#1
,
|
|
|
Пожалуйста, подайте идею как проверить упорядоченна ли последовательность чисел по возрастанию или убыванию.
Хочу сделать это функцией, чтобы она возвращала определенное значение, в случае упорядоченности последовательности чисел тем или иным образом. |
Сообщ.
#2
,
|
|
|
Что мешает последовательно перебрать все пары соседних чисел и их сравнить?
|
Сообщ.
#3
,
|
|
|
Проблема в том, что мне нужно проверить строчку из матрицы. Не могу сообразить, как урвать строчку в отдельную функцию.
|
Сообщ.
#4
,
|
|
|
А кусок кода, как я понимаю, секретен?
|
Сообщ.
#5
,
|
|
|
Куска кода нет. Хочу прокрутить решение в голове, и всё сразу написать.
Собственно дана матрица, и нужно выполнить определенное действие с упорядоченными строками. Я хочу вынести проверку на упорядоченность в отдельную функцию. |
![]() |
Сообщ.
#6
,
|
|
что сложного? Пробегаем коллекцию, если встречаем число, которое больше или меньше предыдущего, запоминаем. И затем каждое следующее число проверяем, соответствует ли критерию
|
Сообщ.
#7
,
|
|
|
Hsilgos
а как в отдельной функции обратиться к строке из двумерной матрицы? |
![]() |
Сообщ.
#8
,
|
|
Цитата а как в отдельной функции обратиться к строке из двумерной матрицы? А как у тебя матрицы хранятся? Добавлено В самом простом варианте функция будет выглядеть примерно вот так: ![]() ![]() enum SortedType { NoSorted, SortedAsc, SortedDesc }; template<class It> SortedType checkSorted(const It &aBegin, const It &aEnd) { SortedType type = NoSorted; if( aBegin == aEnd ) return NoSorted; It it = aBegin; It itPrev = it++; for( ; it != aEnd; ++it ) { if( NoSorted != type ) { if( (SortedAsc == type && *it < *itPrev) || (SortedDesc == type && *it > *itPrev)) return NoSorted; } else { if( *it < *itPrev ) type = SortedDesc; else if( *it > *itPrev ) type = SortedAsc; } itPrev = it; } return type; } |
Сообщ.
#9
,
|
|
|
ээ.. как то сложно всё. Матрица хранится в двумерном массиве.
Так он заполняется: ![]() ![]() const int N = 3, M = 4; int massive[N][M], i, j; for (i=0; i < N; i++) { for (j=0; j < M; j++) { printf("Введите massive[%d][%d]:\n",i,j); while (scanf("%d",&massive[i][j]) != 1) { printf("Введено некорректное значение. Повторите ввод:\n"); fflush(stdin); } } } Я на первом курсе, и мы только начали проходить массивы. Так что до классов видимо далеко ещё. |
Сообщ.
#10
,
|
|
|
И что в этом случае мешает перебирать элементы по первому (или второму) индексу и сравнивать их?
|
Сообщ.
#11
,
|
|
|
Спасибо. Такой вот код вышел:
![]() ![]() // Условие задачи: // Найти максимальный среди всех элементов тех строк заданной матрицы nXm (где n,m - константы), // которые упорядочены (либо по возрастанию, либо по убыванию) #include <stdio.h> #include <conio.h> #include <locale.h> #include <stdlib.h> void main() { setlocale(LC_ALL, ""); // объявляем массив и нужные нам переменные // i и j - флажки // sortedType - флажок, показывающий отсортированность массива // max - максимальное (искомое) значение const int N = 3, M = 3; int massive[N][M], i = 0, j = 0, sortedType = 0, max = 0; // заполняем массив for (i=0; i < N; i++) { for (j=0; j < M; j++) { printf("Введите massive[%d][%d]:\n",i,j); while (scanf("%d",&massive[i][j]) != 1) { printf("Введено некорректное значение. Повторите ввод:\n"); fflush(stdin); } } } // начинаем находить отсортированные строки for (i=0; i < N; i++) { // если строка отсортированна по возрастанию, то сравниваем max с последним элементом for (j=0, sortedType = 0; j < M-1; j++) { if (massive[i][j]>massive[i][j+1]) { sortedType=1; break; } } if ((sortedType == 0) && (massive[i][M-1] > max)) { max = massive[i][M-1]; } // если числа в строке убывают, то сравниваем max с первым for (j=0, sortedType = 0; j < M-1; j++) { if (massive[i][j]<massive[i][j+1]) { sortedType=1; break; } } if ((sortedType == 0) && (massive[i][0] > max)) { max = massive[i][0]; } } // выводим max printf("Максимальное значение элемента в упорядоченных строках = %d",max); _getch(); } Уверен, что это явно не оптимальный вариант решения данной задачи. Можно ли как-нибудь две проверки в одну уместить? |