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

Проверить, являются ли числа в массиве возрастающими? - C++

Войти
Регистрация
Восстановить пароль
 
Actionhank
0 / 0 / 0
Регистрация: 28.08.2012
Сообщений: 3
28.08.2012, 20:16     Проверить, являются ли числа в массиве возрастающими? #1
Всем доброго времени суток, долго боролся над данной проблемой, изменял код по всячески, пробовал разные проверки на возрастание, все впустую. Программа по первому условию судит все массивы - если сначала проверять на невозрастание, то все введенные массивы она признает такими, и наоборот.
Прилагаю код и очень надеюсь на вашу помощь. Желательно указать на ошибку, а не переписывать с нуля. спасибо заранее.
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <iostream>
using namespace std;
const int size = 5;
int main()
{
bool a;
int mas[size];
for (int i = 0; i < size; i++)
cin >> mas[i];
for (int i = 0; i < size; i++)
if (mas[i] <= mas[i+1])
a = true;
else 
a = false;
if (a == true)
cout << "true" << endl;
else
cout << "false" << endl;
system ("PAUSE >> null");
    }
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.08.2012, 20:16     Проверить, являются ли числа в массиве возрастающими?
Посмотрите здесь:

C++ Проверить, являются ли данные числа С и D соответственно квадратом и кубом числа А
Проверить есть ли в массиве одинаковые числа C++
C++ Проверить, являются ли данные три числа взаимно простыми
C++ Проверить, являются ли числа простыми
C++ Проверить, чередуются ли в массиве положительные и отрицательные числа.
C++ Определить являются ли цифры, из которых состоит число, возрастающими
C++ Проверить утверждение "результатами вычислений по формуле х^2+х+17, при 0 <=х <= 15, являются простые числа"
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
OhMyGodSoLong
~ Эврика! ~
 Аватар для OhMyGodSoLong
1238 / 987 / 42
Регистрация: 24.07.2012
Сообщений: 2,002
28.08.2012, 20:21     Проверить, являются ли числа в массиве возрастающими? #2
Эм. Проходим по массиву слева направо. Пока array[i - 1] < array[i], ничего не делаем. Если это условие нарушается, то тут же выходим из цикла (break;). Если условие было нарушено (заведите флажок для этого), то числа не возрастающие.
Andrey.K
 Аватар для Andrey.K
340 / 261 / 15
Регистрация: 14.11.2010
Сообщений: 480
28.08.2012, 20:21     Проверить, являются ли числа в массиве возрастающими? #3
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <iostream>
using namespace std;
const int size = 5;
int main()
{
    bool a=true;
    int mas[size];
    for (int i = 0; i < size; i++)
        cin >> mas[i];
    for (int i = 0; i < size-1; i++)
        if (mas[i] > mas[i+1])
            { a=false; break; }
    if (a == true)
        cout << "true" << endl;
    else
        cout << "false" << endl;
    system ("pause");
    return 0;
}
neske
1427 / 794 / 57
Регистрация: 26.03.2010
Сообщений: 2,735
28.08.2012, 20:35     Проверить, являются ли числа в массиве возрастающими? #4
Цитата Сообщение от Andrey.K Посмотреть сообщение
if (a == true)
C++
1
if (a)
Andrey.K
 Аватар для Andrey.K
340 / 261 / 15
Регистрация: 14.11.2010
Сообщений: 480
28.08.2012, 20:46     Проверить, являются ли числа в массиве возрастающими? #5
Цитата Сообщение от neske Посмотреть сообщение
C++
1
if (a)
я подправил его код, но замечание дельное!!!
Thinker
Эксперт C++
 Аватар для Thinker
4216 / 2190 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
28.08.2012, 21:27     Проверить, являются ли числа в массиве возрастающими? #6
можно компактнее записать:
C
1
2
3
4
5
6
int check(int *a, int *end)
{
   return a < end ? (*(a-1) <= *a && check(a+1, end)) : 1;
}
 
check(a+1, a+N);
Actionhank
0 / 0 / 0
Регистрация: 28.08.2012
Сообщений: 3
28.08.2012, 21:28  [ТС]     Проверить, являются ли числа в массиве возрастающими? #7
большое спасибо за участие и оперативный ответ, я правда еще должен посравнивать коды, что бы все понять, однако сразу бросилась в глаза функция
return 0;
понятно, что эта функция возвращает какой-то ноль, но я новичек и не очень понял ее суть...
я не очень понял, где мой код давал слабину, однако, что бы он заработал, достаточно было всего лишь проверять на непоследовательность и вписать брейк. все же немного прояснилась ситуация. еще раз спасибо, добра всем.
Thinker
Эксперт C++
 Аватар для Thinker
4216 / 2190 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
28.08.2012, 21:40     Проверить, являются ли числа в массиве возрастающими? #8
Цитата Сообщение от Actionhank Посмотреть сообщение
я не очень понял, где мой код давал слабину
Ваш код, по сути, проверял утверждение:
верно ли, что a[size-1] <= a[size],
при этом в массиве нет элемента с индексом size. Вот и все, что делал ваш код. То есть вы сравниваете только одну пару элементов, а информация о предыдущих парах у вас теряется. Можно так сделать:

C
1
2
3
for(i = 1; i < size && a[i-1] <= a[i]; ++i)
   ;
puts(i >= size ? "yes" : "no");
Actionhank
0 / 0 / 0
Регистрация: 28.08.2012
Сообщений: 3
28.08.2012, 21:45  [ТС]     Проверить, являются ли числа в массиве возрастающими? #9
Цитата Сообщение от Thinker Посмотреть сообщение
Ваш код, по сути, проверял утверждение:
верно ли, что a[size-1] <= a[size],
при этом в массиве нет элемента с индексом size. Вот и все, что делал ваш код. То есть вы сравниваете только одну пару элементов, а информация о предыдущих парах у вас теряется. Можно так сделать:

C
1
2
3
for(i = 1; i < size && a[i-1] <= a[i]; i++)
   ;
puts(i >= size ? "yes" : "no");
значит, если бы я не использовал сайз, а массив был бы с фиксированным числом элементов, то проблемы бы не возникло?
soon
 Аватар для soon
2536 / 1301 / 81
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
28.08.2012, 21:46     Проверить, являются ли числа в массиве возрастающими? #10
std::is_sorted
Thinker
Эксперт C++
 Аватар для Thinker
4216 / 2190 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
28.08.2012, 21:48     Проверить, являются ли числа в массиве возрастающими? #11
Цитата Сообщение от Actionhank Посмотреть сообщение
значит, если бы я не использовал сайз, а массив был бы с фиксированным числом элементов, то проблемы бы не возникло?
Да нет, вы не так поняли. На примере.
2 1 3
Сначала вы сравнили 2 и 1 (2 > 1, то есть условие не выполнено и пора бы остановиться), но вы идете дальше и сравниваете 1 и 3 и т.д., забывая при этом, что 2>1 и массив не упорядочен по возрастанию.
ValeryS
Модератор
6413 / 4879 / 448
Регистрация: 14.02.2011
Сообщений: 16,180
28.08.2012, 21:59     Проверить, являются ли числа в массиве возрастающими? #12
Цитата Сообщение от Andrey.K Посмотреть сообщение
if (mas[i] > mas[i+1])
{ a=false; break; }
пропускает одно условие если (mas[i] == mas[i+1])
а это уже не возрастание
или так
C++
1
if (mas[i] >= mas[i+1])
или так
C++
1
if (!(mas[i] < mas[i+1]))
Leonman
 Аватар для Leonman
15 / 15 / 0
Регистрация: 17.06.2012
Сообщений: 266
29.08.2012, 11:49     Проверить, являются ли числа в массиве возрастающими? #13
Thinker, А где строчка a[size-1] <= a[size]?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.08.2012, 12:34     Проверить, являются ли числа в массиве возрастающими?
Еще ссылки по теме:

C++ Проверить, являются ли три введенных числа последовательными элементами арифметической прогрессии
Проверить, монотонно ли растут числа в массиве C++
Дана последовательность вещественных чисел, определить, являются ли они возрастающими по величине дробной част C++
C++ Найти в массиве числа, которые являются квадратами простых
C++ Проверить, являются ли числа взаимно простыми, с помощью цикла for и оператора ветвления if

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

Или воспользуйтесь поиском по форуму:
Thinker
Эксперт C++
 Аватар для Thinker
4216 / 2190 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
29.08.2012, 12:34     Проверить, являются ли числа в массиве возрастающими? #14
Цитата Сообщение от Leonman Посмотреть сообщение
Thinker, А где строчка a[size-1] <= a[size]?
В коде ТС
C++
1
2
3
4
5
for (int i = 0; i < size; i++)
   if (mas[i] <= mas[i+1]) 
      a = true;
   else 
      a = false;
посмотрите что будет на последнем шаге итерации. Именно последний шаг и будет результатом всего алгоритма. Поэтому этот цикл эквивалентен условию

C++
1
2
3
4
   if (mas[size-1] <= mas[size]) 
      a = true;
   else 
      a = false;
Yandex
Объявления
29.08.2012, 12:34     Проверить, являются ли числа в массиве возрастающими?
Ответ Создать тему
Опции темы

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