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

Неубывающая последовательность. - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 13, средняя оценка - 4.69
Bloodykeeper
This party getting crazy!
 Аватар для Bloodykeeper
78 / 74 / 1
Регистрация: 22.09.2009
Сообщений: 427
30.03.2010, 21:52     Неубывающая последовательность. #1
Написать и протестировать функцию, которая определяет, образуют ли элементы целочисленного массива неубывающую последовательность. Функция возвращает NULL, если всё в порядке, или индекс первого элемента массива, на котором условие нарушается.

Необходима эта задача, точнее как выглядит решение. Вот нашёл как она пишется на С#. Есть ли человек, который сможет мне перевести её с этого языка на Си?

C#
1
2
3
4
5
6
7
8
9
10
11
12
private int prover(int[] arr)
{
bool tf=false;
for(int i=0;i<arr.Length;i++)
{
if(arr[i]<arr[i+1])
{tf=true;}
else{break;return i+1;}
}
if(tf==true)
{return null;}
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
30.03.2010, 21:52     Неубывающая последовательность.
Посмотрите здесь:

Что такое неубывающая последовательность ? C++
Вводится последовательность из N целых чисел. Сформировать последовательность, C++
C++ C++ Вычислить число различных элементов последовательности( предположить, что последовательность неубывающая)
C++ Дана последовательность, элементы которой есть целые двузначные числа. Упорядочить последовательность по убыванию произведений цифр
Массив: Вставить в последовательность действительное число b так, чтобы последовательность осталась неубывающей. C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
M128K145
Эксперт C++
 Аватар для M128K145
8272 / 3491 / 142
Регистрация: 03.07.2009
Сообщений: 10,707
31.03.2010, 00:42     Неубывающая последовательность. #2
Поверьте, этот код, который на шарпе не рабочий и написан более чем криво.
C++
1
2
3
4
5
6
7
int prover(int* arr, int size)
{
    for(int i = 0; i < size - 1; ++i)
        if(arr[i] >= arr[i + 1])
            return i + 1;
    return -1;
}
Возвращать NULL - глупо, это может привести к большим ошибкам, логичнее возвращать отрицательное число
Bloodykeeper
This party getting crazy!
 Аватар для Bloodykeeper
78 / 74 / 1
Регистрация: 22.09.2009
Сообщений: 427
31.03.2010, 07:39  [ТС]     Неубывающая последовательность. #3
M128K145, спасибо! а для Си код такой же? и...какие переменные из этой функции использовать в основной?
M128K145
Эксперт C++
 Аватар для M128K145
8272 / 3491 / 142
Регистрация: 03.07.2009
Сообщений: 10,707
31.03.2010, 10:11     Неубывающая последовательность. #4
Bloodykeeper, никаких. Просто передаете в функцию массив и его длину, и получаете индекс
На С точно также
Bloodykeeper
This party getting crazy!
 Аватар для Bloodykeeper
78 / 74 / 1
Регистрация: 22.09.2009
Сообщений: 427
31.03.2010, 18:16  [ТС]     Неубывающая последовательность. #5
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
    int *a, i, n, k;
 
    printf("Enter n, k: ");
    scanf("%d %d", &n, &k);
 
    arr = (int *) malloc(sizeof(int) * n);
    for(i = 0; i < n; i++) {
        printf("array[%d]: ", i);
        scanf("%d", &a[i]);
    }
     prover(int* arr, int size)
............................................
 
int prover(int* arr, int size)
{
    for(int i = 0; i < size - 1; ++i)
        if(arr[i] >= arr[i + 1])
            return i + 1;
    return -1;
}
Пока что вот так вот застрял. Помогите плиз доделать.

Добавлено через 4 часа 11 минут
Актуально!
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9372 / 5422 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
31.03.2010, 18:55     Неубывающая последовательность. #6
Цитата Сообщение от M128K145 Посмотреть сообщение
Возвращать NULL - глупо, это может привести к большим ошибкам, логичнее возвращать отрицательное число
В книжках про программирование в UNIX часто такой подход наблюдал: в случае успеха функция возвращает 0, неудачи - какое-нибудь число, ошибки - -1
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
#include <stdio.h>
 
/*
    возвращает 0, если последовательность неубывающая,
    положительное число, если нет, -1 в случае ошибки
*/
int test(int * arr, int count){
    int i;
    if ( !arr || count < 2 )
        return -1;
    for ( i = 1; i < count && arr[i] >= arr[i-1]; ++i )
        ;
    return ( count - i ) ? i : 0;
}
 
int main(void){
    int arr1[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
    int arr2[] = { 1, 4, 3, 2, 5, 6, 7, 9, 8 };
    int t;
 
    if ( ( t = test(arr1, sizeof(arr1) / sizeof(*arr1)) ) < 0 ){
        fprintf(stderr, "Error!\n");
        return 1;
    }
    printf("Array #1 is %s\n", ( t ) ? "BAD" : "OK");
 
    if ( ( t = test(arr2, sizeof(arr2) / sizeof(*arr2)) ) < 0 ){
        fprintf(stderr, "Error!\n");
        return 1;
    }
    printf("Array #2 is %s\n", ( t ) ? "BAD" : "OK");
 
    return 0;
}
Yandex
Объявления
31.03.2010, 18:55     Неубывающая последовательность.
Ответ Создать тему
Опции темы

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