![]() |
Модераторы: bsa |
![]() ![]() ![]() |
|
agentjamesbolt007 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 31 Регистрация: 5.9.2012 Репутация: нет Всего: нет |
Всем привет.Помогите разобраться с программой.
Нужно написать функцию, которая принимает в качестве аргумента адрес массива и количество элементов в нем, а возвращает индекс наибольшего элемента.
Это сообщение отредактировал(а) agentjamesbolt007 - 30.10.2012, 15:35 |
|||
|
||||
digidrofosfat |
|
|||
Новичок Профиль Группа: Участник Сообщений: 7 Регистрация: 26.10.2012 Репутация: нет Всего: 1 |
P.s. Это не помогите разобраться, а напишите мне прогу Это сообщение отредактировал(а) digidrofosfat - 30.10.2012, 15:52 |
|||
|
||||
Cheloveck |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1578 Регистрация: 26.7.2008 Где: Тула Репутация: 5 Всего: 32 |
-------------------- ![]() |
|||
|
||||
baldina |
|
||||||||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3433 Регистрация: 5.12.2007 Где: Москва Репутация: 15 Всего: 101 |
Cheloveck, digidrofosfat, ваш код не работает для size = 1
agentjamesbolt007, у тебя одно задание, а делаешь нечто другое.
сначала придумаем функции имя, пусть будет maxint. теперь определим прототип функции: параметры и возвращаемое значение. он прямо вытекает из условия: возвращает индекс элемента, т.е. int, а принимает указатель и целое число
теперь думаем. чтобы определить максимальный элемент придется проверить все элементы массива, сохраняя в переменной текущее значение индекса максимального элемента. т.е. делаем цикл по всем элементам. в качестве начального возьмем значение индекса первого (нулевого) элемента массива, т.е. 0:
в этом коде есть ма-аленькая проблема: а что, если массив пустой (n=0)? в этом случае максимального элемента нет, а значит нет и его индекса. более того, мы не имеем право обращаться к array[0], т.к. это за пределами (пустого) массива. значит нужно дополнить нашу функцию проверкой и в случае пустого массива вернуть какое-то специальное значение. т.к. индексы в массиве неотрицательны, в качестве специального значения выберем отрицательное число, например -1
готово. область определения нашей функции - адрес массива и его размер - неотрицательное число. теперь функцию можно использовать:
http://codepad.org/XG2dOTGv Это сообщение отредактировал(а) baldina - 30.10.2012, 16:49 |
||||||||||
|
|||||||||||
digidrofosfat |
|
|||
Новичок Профиль Группа: Участник Сообщений: 7 Регистрация: 26.10.2012 Репутация: нет Всего: 1 |
Вообще-то мой код работает для size=1.
А проверку на наличие чего-то да не делал, но раз уж спускаться до проверок на дурака, то надо бы заодно проверить инициализирован ли вообще массив и проверку на длину делать не равную нулю а меньше 1. |
|||
|
||||
baldina |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3433 Регистрация: 5.12.2007 Где: Москва Репутация: 15 Всего: 101 |
простите. я хотел сказать для size=0 Добавлено через 1 минуту и 35 секунд это не проверка на дурака. пустой массив вполне нормальная и распространенная весчь интересно, как вы это сделаете ![]() |
|||
|
||||
borisbn |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4875 Регистрация: 6.2.2010 Где: Ростов-на-Дону Репутация: 21 Всего: 135 |
Поддерживаю вопрос. Как определить, что массив (или пусть даже указатель) неинициализирован ? Добавлено через 1 минуту и 11 секунд достаточно тип размера сделать size_t, как у Cheloveck -------------------- Женщины отличаются от программистов тем, что у них чары состоят из стрингов |
|||
|
||||
baldina |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3433 Регистрация: 5.12.2007 Где: Москва Репутация: 15 Всего: 101 |
для размера использовать size_t конечно правильно, но тогда возникнут небольшие проблемы, связанные со смешением int и unsigned потому удобнее было бы в стиле stl работать с итераторами, но в задаче говорится про индексы. Добавлено через 1 минуту и 46 секунд а уж проверку на size<1 делать не по-дейкстровски ![]() |
|||
|
||||
agentjamesbolt007 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 31 Регистрация: 5.9.2012 Репутация: нет Всего: нет |
ok, спасибо всем за подробный разбор, только забыл сказать, простите, что указатели использовать нельзя, как можно сделать без них? Я то думал к той проге, что я сделал нужно добавить небольшой цикл на проверку наибольшего элемента и все, а тут такой разбор...
|
|||
|
||||
feodorv |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2214 Регистрация: 30.7.2011 Репутация: 12 Всего: 45 |
Дас ист фантастиш ![]()
Без указателя - никак. Другое дело, что формально можно оформить функцию как
Вроде как явных указателей нет (фактически же есть). Так подойдёт? -------------------- Напильник, велосипед, грабли и костыли - основные инструменты программиста... |
||||
|
|||||
agentjamesbolt007 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 31 Регистрация: 5.9.2012 Репутация: нет Всего: нет |
||||
|
||||
![]() ![]() ![]() |
Правила форума "C/C++: Для новичков" | |
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Для новичков | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |