Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Для новичков > количество промежутков монотонности в массиве


Автор: x0mka 18.1.2010, 18:49
Надо найти количество промежутков монотонности(возрастания и спадания) в массиве.
Я пыталась написать программу, но мне сказали, что сам алгоритм  решения неправильный. Подскажите, пожайлуста, что тут не так!  
Заранее огромное спасибо!!!
Код

#include <stdio.h>
#include <math.h>
#define N 5

int number(int array[], int size);
void enter(int array[], int size);


int number(int array[], int size)
{
    int p, number, i;
    number = 1;
    if(array[0] < array[1]) 
        p = 1;
    else
        p = 0;
    for(i = 2; i < size; i++)
    {
           if((array[i] > array[i-1]) && (p == 0))
           {
             number++;
             p = 1;
             if(array[i] > array[i+1])
                 p = 0;
           }
           if((array[i] < array[i-1]) && (p == 1))
           {
              number++;
              p = 0;
              if(array[i] < array[i+1])
                  p = 1;
           }
    }
    return number;
}


void enter(int array[], int size)
{
    int i;
    puts("VVedite chisla");
    for(i = 0; i < size; i++)
        scanf("%d", &array[i]);
}


int main()
{
    int quantity, array[N];
    enter(array, N);
    quantity = number(array, N);
    printf("Kolichestvo_intervalov_monotonnosty %d\n", quantity);
    return 0;
}

Автор: bsa 18.1.2010, 18:54
странно. а по мне, так вполне рабочий алгоритм...

Автор: Luyan 18.1.2010, 19:19
Цитата(x0mka @  18.1.2010,  18:49 Найти цитируемый пост)
но мне сказали, что сам алгоритм  решения неправильный.

в принципе правильный, я заметил только одно. Если у вас последовательность из одинаковых чисел, допустим из пяти единиц, то по логике ответ должен быть 0, а у вас будет 1, хотя ни возрастания ни спадания в массиве нет. Может это они вам хотели сказать?

Автор: Loner 22.1.2010, 12:30
Можно покороче написать. Например, так
Код

int number(int arr[], int size)
{
    int res=1;
    int fl=0;
    for (int i=0; i<size-1; i++)
    {
        if (arr[i]>arr[i+1])
        {
            if (fl==-1)
                res++;
            fl=1;
        }
        if (arr[i]<arr[i+1])
        {
            if (fl==1)
                res++;
            fl=-1;
        }
    }
    return res;
}

Автор: x0mka 23.1.2010, 13:32
нет, так программа не правильно считает промежутки монотонности!!!! я уже пробовала так smile 

Автор: Loner 23.1.2010, 13:41
Приведи пример

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)