Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 06.02.2013, 22:07   #1
Nekit9401
Пользователь
 
Аватар для Nekit9401
 
Регистрация: 11.12.2012
Сообщений: 56
Восклицание Нужно проверить правильность работы функции (Си)

Здравствуйте, мне нужна помощь что бы проверить правильность работы функции.
Условие такое: Дана последовательность (т.е. массив), нужно создать функцию считающую кол-во неубывающих подпоследовательностей
в этом массиве.

Первый раз я написал это задание не совсем правильно, потом преподаватель показал правильный вариант, вот он:
Код:
//Первый вариант
int CountSouSeq (int* A, int n)
{
	int sym=0;
	if(A[0]<=A[1])
		sym++;
	for(int i=1; i<n-1; i++)
	{ 
		if(A[i]>=A[i-1])
		{
			if(A[i]>A[i+1])
				sym++;
		}
	}
	return sym;
}
Дома я начал проверять правильность этой функции, подставлял в массив в главной функции различные варианты чисел, и вроде все сходилось, но когда я написал такой массив:
Код:
int A[]={7,6,6};
То у меня вывелся результат 0, то есть нет ни одной неубывающей подпоследовательности, что противоречит данному массиву, ведь подпоследовательность {6,6} неубывающая. Я пробовал немного изменять функцию, но потом она у меня не работала с другими массивами.
Может кто нибудь показать вариант правильно работающей функции?
Nekit9401 вне форума Ответить с цитированием
Старый 06.02.2013, 23:11   #2
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,429
По умолчанию

Код:
#include <stdio.h> 
 
int
CountSouSeq(int* A, int n)
{
    int sum = 0, mode = 0;
    for(int i = 1; i < n; ++i) {
        if (A[i] < A[i - 1]) {
            sum += mode;
        }
        mode = A[i] >= A[i - 1];
    }
    sum += mode;
    return sum;
}
 
int
main(void)
{
    int A[]={7, 6, 6, 0, 1, -1, 1};
    printf("%d", CountSouSeq(A, 7));
    return 0; 
}
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 07.02.2013, 01:59   #3
Nekit9401
Пользователь
 
Аватар для Nekit9401
 
Регистрация: 11.12.2012
Сообщений: 56
По умолчанию

А не могли бы вы объяснить принцип работы, если вам не сложно?)
Nekit9401 вне форума Ответить с цитированием
Старый 07.02.2013, 20:29   #4
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,429
По умолчанию

Код:
массив 7, 6, 6, 0, 1, -1, 1
mode      0  1  0  1   0  1
Код:
массив 7, 6, 6, 7, 8, -1, 1
mode      0  1  1  1   0  1
По mode видно - последовательность начинается с 0 и продолжается, пока mode равен 1. Как только mode равен 0, то или последовательность закончилась (прошлый mode равен 1), или последовательность и не начиналась.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проверить правильность скобок (С++) Cheat Помощь студентам 24 03.02.2013 19:34
Проверить правильность решения(ассемблер) Нина93 Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 0 26.12.2010 17:42
Проверить на правильность задачу sam5213 Паскаль, Turbo Pascal, PascalABC.NET 0 23.12.2010 18:28
TObjectList. Проверить правильность использования Roof Общие вопросы Delphi 0 05.07.2010 17:04
Нужно проверить на правильность программу Killdgedan Помощь студентам 3 26.05.2009 00:45