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

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

Войти
Регистрация
Восстановить пароль
 
Actionhank
0 / 0 / 0
Регистрация: 28.08.2012
Сообщений: 3
#1

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

28.08.2012, 20:16. Просмотров 738. Ответов 13
Метки нет (Все метки)

Всем доброго времени суток, долго боролся над данной проблемой, изменял код по всячески, пробовал разные проверки на возрастание, все впустую. Программа по первому условию судит все массивы - если сначала проверять на невозрастание, то все введенные массивы она признает такими, и наоборот.
Прилагаю код и очень надеюсь на вашу помощь. Желательно указать на ошибку, а не переписывать с нуля. спасибо заранее.
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
~ Эврика! ~
1243 / 992 / 42
Регистрация: 24.07.2012
Сообщений: 2,002
28.08.2012, 20:21     Проверить, являются ли числа в массиве возрастающими? #2
Эм. Проходим по массиву слева направо. Пока array[i - 1] < array[i], ничего не делаем. Если это условие нарушается, то тут же выходим из цикла (break;). Если условие было нарушено (заведите флажок для этого), то числа не возрастающие.
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
1463 / 830 / 69
Регистрация: 26.03.2010
Сообщений: 2,830
28.08.2012, 20:35     Проверить, являются ли числа в массиве возрастающими? #4
Цитата Сообщение от Andrey.K Посмотреть сообщение
if (a == true)
C++
1
if (a)
Andrey.K
340 / 261 / 15
Регистрация: 14.11.2010
Сообщений: 480
28.08.2012, 20:46     Проверить, являются ли числа в массиве возрастающими? #5
Цитата Сообщение от neske Посмотреть сообщение
C++
1
if (a)
я подправил его код, но замечание дельное!!!
Thinker
Эксперт C++
4219 / 2193 / 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++
4219 / 2193 / 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
2537 / 1302 / 81
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
28.08.2012, 21:46     Проверить, являются ли числа в массиве возрастающими? #10
std::is_sorted
Thinker
Эксперт C++
4219 / 2193 / 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
Модератор
6482 / 4948 / 455
Регистрация: 14.02.2011
Сообщений: 16,389
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
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++
4219 / 2193 / 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     Проверить, являются ли числа в массиве возрастающими?
Ответ Создать тему
Опции темы

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