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

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

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 19.12.2011, 13:41   #1
krugolet
Пользователь
 
Регистрация: 19.12.2011
Сообщений: 11
По умолчанию Вопрос: Функция поиска максимума в массиве.

Здравствуйте!
Изучаю Си сам по книжкам и видеоурокам.
Подскажите, если сможете:
Ищу максимум в массиве с помощью функции. Ничё не получается. Думаю, что ошибка в коде функции.
вот код:
Цитата:
#include <stdio.h>
#define SIZE 10

max (int d[], int len)
{
int i=0, j=0;
while (j<len)
{
j=i+1;
if (d[i]>d[j]) j++;
else i=j;
}
return d[i];
}

void main()
{
int data [SIZE]={2,3,8,1,-3,0,2};

printf("max=%d \n", max(data,SIZE));


system("PAUSE");

return;
}
krugolet вне форума Ответить с цитированием
Старый 19.12.2011, 14:58   #2
8Observer8
Старожил
 
Аватар для 8Observer8
 
Регистрация: 02.01.2011
Сообщений: 3,323
По умолчанию

krugolet, самый лучший вариант, это по шагам проверять. Функция у вас неправильно реализована. И SIZE нужно ставить 7, если вы знаете сколько у вас элементов. Если будете с клавиатуры инициализировать массив или из файла, то выделите заведомо большой буфер (SIZE большое сделаете), и посчитаете сколько считали чисел, это количество и передадите в функцию. А то у вас получилось бы, что в массиве не 7, а 10 элементов и цикл работает до 10. А если бы у вас все числа были бы отрицательными, то максимум получился бы 0, так как остальные элементы специализировались бы нулями.

Вот так можно:
Код:
#include <stdio.h>

#define SIZE 7

int max (int d[], int len) {
    int maxval, i;

    maxval = d[0];
    for (i = 1; i < len; i++) {
        if (d[i] > maxval) {
            maxval = d[i];
        }
    }
    return maxval;
}

int main() {
    int data[SIZE] = {2, 3, 8, 1, -3 ,0, 2};

    printf("max = %d\n", max(data,SIZE));

    system("PAUSE");

    return 0;
}

Последний раз редактировалось 8Observer8; 19.12.2011 в 15:01.
8Observer8 вне форума Ответить с цитированием
Старый 19.12.2011, 17:20   #3
krugolet
Пользователь
 
Регистрация: 19.12.2011
Сообщений: 11
По умолчанию

Благодарю за ответ!
Да, вы правы насчёт SIZE но это уже с практической точки зрения, а пока я учусь реализовывать циклы. Приведенный Вами пример мне знаком, именно с него я писал "шапку" и главную функцию. Но хотелось бы попробовать различные реализации этой функции, в т. ч. через цикл while.
Скажите, приведенный пример является единственно правильной реализацие функции max? Если нет, как можно реализовать её через while и как можно поправить цикл в моём коде?
krugolet вне форума Ответить с цитированием
Старый 19.12.2011, 18:29   #4
8Observer8
Старожил
 
Аватар для 8Observer8
 
Регистрация: 02.01.2011
Сообщений: 3,323
По умолчанию

Цитата:
как можно реализовать её через while
Можно через while:
Код:
int max (int d[], int len) {
    int maxval, i;

    maxval = d[0];
    i = 1;
    while (i < len) {
        if (d[i] > maxval) {
            maxval = d[i];
        }
        i++;
    }
    return maxval;
}
С for, в данном случае, лучше, компактнее, что ли.

Цитата:
как можно поправить цикл в моём коде?
Вот так работает:
Код:
int max (int d[], int len) {
    int i=0, j=1;
    while (j<len) {
        if (d[i]>d[j]) {
            j++;
        }
        else {
            i=j;
            j=i+1;
        }
    }
    return d[i];
}
P.S. А насчёт того "единственный ли это вариант реализации", честно говоря затрудняюсь ответить. Я бы использовал for.

Последний раз редактировалось 8Observer8; 19.12.2011 в 18:36.
8Observer8 вне форума Ответить с цитированием
Старый 19.12.2011, 21:01   #5
krugolet
Пользователь
 
Регистрация: 19.12.2011
Сообщений: 11
По умолчанию

Огромное благодарю!!!
Подскажите, кто сможет, как в Dev-C++ выполнять код пошагово?
krugolet вне форума Ответить с цитированием
Старый 20.12.2011, 19:14   #6
8Observer8
Старожил
 
Аватар для 8Observer8
 
Регистрация: 02.01.2011
Сообщений: 3,323
По умолчанию

"Сервис" -> "Параметры компилятора" -> "Настройки" -> "Компоновщик" -> "Генерировать отладочную информацию" = Yes

P.S. Перед окончательным компилированием поменять обратно.
8Observer8 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Нахождение максимума в массиве AnderoN Помощь студентам 4 12.07.2011 13:24
C++ нахождение максимума в Массиве frixer Помощь студентам 4 10.03.2011 17:05
Поиск минимума/максимума в массиве gwarthy Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 6 28.01.2010 22:27
Поиск Максимума в двумерном массиве NSvirus Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 3 20.09.2009 18:04
2 максимума в массиве Arcueid1691 Общие вопросы C/C++ 4 01.06.2009 02:30