![]() |
|
Модераторы: korob2001, ginnie |
![]()
|
|
| qw1mb0 |
|
|||
|
Непутевый студент ![]() Профиль Группа: Участник Сообщений: 79 Регистрация: 24.4.2010 Где: Севастополь Репутация: нет Всего: нет |
Добрый день уважаемые формучане
Есть задание: написать программу которая будет выполнять: Найти среднее арифметическое всех положительных чисел массива. Вывести на экран все числа массива, которые больше, чем это среднее арифметическое. Хоть убейте, но не могу додуматься как это реализовать.... Пока получилось, что то около такого бреда:
Подскажите пожалуйста другие способы решения данной задачи... |
|||
|
||||
| arto |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1495 Регистрация: 31.10.2004 Репутация: 38 Всего: 40 |
# perl -MList::Util=sum -le '$a = sum (@ARGV)/($#ARGV+1); print "Num: $a"; print join ", ", grep { $_ > $a } @ARGV' 1 2 3 4 5 6 7 8 9 10
Num: 5.5 6, 7, 8, 9, 10 # |
|||
|
||||
| ginnie |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 1287 Регистрация: 6.1.2008 Где: Москва Репутация: 38 Всего: 49 |
arto, надо "Найти среднее арифметическое всех положительных чисел массива."
-------------------- Написать код, понятный компьютеру, может каждый, но только хорошие программисты пишут код, понятный людям. (Мартин Фаулер. Рефакторинг) |
|||
|
||||
| arto |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1495 Регистрация: 31.10.2004 Репутация: 38 Всего: 40 |
неужели мне надо сделать все домашнее задание для человека?
|
|||
|
||||
| dixoNICH |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 222 Регистрация: 20.3.2011 Репутация: нет Всего: нет |
C:\Users\dixon>perl 2.pl 678910 а что вы хотели сказать 31-ой строкой кода? может быть если добавить return, то будет выглядеть адекватно. Это сообщение отредактировал(а) dixoNICH - 7.10.2011, 12:32 |
|||
|
||||
| ginnie |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 1287 Регистрация: 6.1.2008 Где: Москва Репутация: 38 Всего: 49 |
dixoNICH, а зачем надо несколько раз рассчитывать $summ/$i?
-------------------- Написать код, понятный компьютеру, может каждый, но только хорошие программисты пишут код, понятный людям. (Мартин Фаулер. Рефакторинг) |
|||
|
||||
| dixoNICH |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 222 Регистрация: 20.3.2011 Репутация: нет Всего: нет |
почему несколько? 1 раз во 2-ом цикле ведь)
|
|||
|
||||
| ginnie |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 1287 Регистрация: 6.1.2008 Где: Москва Репутация: 38 Всего: 49 |
dixoNICH, а это выражение не на каждой итерации второго цикла вычисляется (в Вашем примере 18 раз)?
-------------------- Написать код, понятный компьютеру, может каждый, но только хорошие программисты пишут код, понятный людям. (Мартин Фаулер. Рефакторинг) |
|||
|
||||
| dixoNICH |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 222 Регистрация: 20.3.2011 Репутация: нет Всего: нет |
а да)
|
|||
|
||||
| qw1mb0 |
|
|||
|
Непутевый студент ![]() Профиль Группа: Участник Сообщений: 79 Регистрация: 24.4.2010 Где: Севастополь Репутация: нет Всего: нет |
Всем спасибо за участие.
Но мои познания в перле скудны, так что додумался пока только до такого:
Что вполне меня устраивает |
|||
|
||||
| ginnie |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 1287 Регистрация: 6.1.2008 Где: Москва Репутация: 38 Всего: 49 |
qw1mb0, у меня два предложения по Вашему коду:
зачем в отдельном цикле считать сумму, если ее можно рассчитать сразу в первом цикле, где push? зачем в последнем цикле считать $sum/(scalar @a) на каждой итерации? -------------------- Написать код, понятный компьютеру, может каждый, но только хорошие программисты пишут код, понятный людям. (Мартин Фаулер. Рефакторинг) |
|||
|
||||
| qw1mb0 |
|
|||
|
Непутевый студент ![]() Профиль Группа: Участник Сообщений: 79 Регистрация: 24.4.2010 Где: Севастополь Репутация: нет Всего: нет |
ginnie, Это да... Сначала у меня $sum/(scalar @a) высчитывалось отдельно, потом просто что бы уменьшить обьем кода загнал туда.
Так как студент и программа пишется для выполнения работы. А преподаватель совсем не знает Perl, то сильно можно не гнаться за производительностью программы.. Но а так, спасибо, учту ваши комментарии и внесу эти поправки, во время оптимизации кода. |
|||
|
||||
| MakTpaxep |
|
||||||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 150 Регистрация: 25.11.2010 Репутация: нет Всего: нет |
Прикольно) А почему у меня не работает такая фигня:
Вроде из цикла выходит, а в тэг не заключает. Можно как ниже, но всё равно интересно...
Это сообщение отредактировал(а) MakTpaxep - 13.10.2011, 09:57 |
||||||
|
|||||||
| alezzz |
|
|||
![]() сплю... ![]() ![]() Профиль Группа: Участник Сообщений: 499 Регистрация: 17.8.2009 Репутация: 1 Всего: 14 |
возможно потому что next ничего не возвращает
|
|||
|
||||
| MakTpaxep |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 150 Регистрация: 25.11.2010 Репутация: нет Всего: нет |
Пора...
Пора видимо мне начинать с дебагером разбираться |
|||
|
||||
| qw1mb0 |
|
|||
|
Непутевый студент ![]() Профиль Группа: Участник Сообщений: 79 Регистрация: 24.4.2010 Где: Севастополь Репутация: нет Всего: нет |
Очередная задача по обработке одномерного массива
Задание: Преобразовать массив, умножив все положительные числа на максимальное число этого массива. Вот к чему пришел за 10 минут (варианты. как предлагали в топике выше, просьба, не предлагать, потому что уровень знания языка минимален). Как можно упростить код:
Заранее спасибо. |
|||
|
||||
| ginnie |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 1287 Регистрация: 6.1.2008 Где: Москва Репутация: 38 Всего: 49 |
qw1mb0, три вопроса по коду: зачем массив @a, зачем для каждого элемента массива @b вызывать max() и зачем для вызова max() использовать синтаксис &max?
-------------------- Написать код, понятный компьютеру, может каждый, но только хорошие программисты пишут код, понятный людям. (Мартин Фаулер. Рефакторинг) |
|||
|
||||
| MakTpaxep |
|
||||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 150 Регистрация: 25.11.2010 Репутация: нет Всего: нет |
Но так конечно круче:
Это сообщение отредактировал(а) MakTpaxep - 19.10.2011, 17:20 |
||||
|
|||||
| qw1mb0 |
|
||||
|
Непутевый студент ![]() Профиль Группа: Участник Сообщений: 79 Регистрация: 24.4.2010 Где: Севастополь Репутация: нет Всего: нет |
1 вопрос: в массив @a заносятся положительные элементы > 0. 2 вопрос:
3 вопрос: не знаю даже что ответить |
||||
|
|||||
| MakTpaxep |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 150 Регистрация: 25.11.2010 Репутация: нет Всего: нет |
Для нахождения максимального элемента массива не требуется заносить все положительные значения в другой массив. Кто вам это подсказал?)
|
|||
|
||||
| ginnie |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 1287 Регистрация: 6.1.2008 Где: Москва Репутация: 38 Всего: 49 |
qw1mb0, в perldoc perlsub написано, что вызов &max аналогичен max(@_), поэтому если нет необходимости, используйте max().
-------------------- Написать код, понятный компьютеру, может каждый, но только хорошие программисты пишут код, понятный людям. (Мартин Фаулер. Рефакторинг) |
|||
|
||||
| dixoNICH |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 222 Регистрация: 20.3.2011 Репутация: нет Всего: нет |
Это сообщение отредактировал(а) dixoNICH - 19.10.2011, 18:23 |
|||
|
||||
| ginnie |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 1287 Регистрация: 6.1.2008 Где: Москва Репутация: 38 Всего: 49 |
dixoNICH, за такой код нас училка линейкой по рукам била в школе
-------------------- Написать код, понятный компьютеру, может каждый, но только хорошие программисты пишут код, понятный людям. (Мартин Фаулер. Рефакторинг) |
|||
|
||||
| dixoNICH |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 222 Регистрация: 20.3.2011 Репутация: нет Всего: нет |
зато коротко и ясно |
|||
|
||||
| ginnie |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 1287 Регистрация: 6.1.2008 Где: Москва Репутация: 38 Всего: 49 |
По поводу краткости не спорю, а вот с ясностью беда: объясните, зачем Вы использовали grep?
-------------------- Написать код, понятный компьютеру, может каждый, но только хорошие программисты пишут код, понятный людям. (Мартин Фаулер. Рефакторинг) |
|||
|
||||
| MakTpaxep |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 150 Регистрация: 25.11.2010 Репутация: нет Всего: нет |
Можно map вместо grep и будет короче ещё на 2 символа)
|
|||
|
||||
| dixoNICH |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 222 Регистрация: 20.3.2011 Репутация: нет Всего: нет |
а что ещё надо было использовать? for? |
|||
|
||||
| ginnie |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 1287 Регистрация: 6.1.2008 Где: Москва Репутация: 38 Всего: 49 |
dixoNICH, мне кажется логичным использовать for. Когда программист вместо этого использует grep, сразу возникает затруднение с ясностью: зачем он это сделал, особенно, учитывая, что в первой части он используется в пустом контексте (void).
-------------------- Написать код, понятный компьютеру, может каждый, но только хорошие программисты пишут код, понятный людям. (Мартин Фаулер. Рефакторинг) |
|||
|
||||
| qw1mb0 |
|
|||
|
Непутевый студент ![]() Профиль Группа: Участник Сообщений: 79 Регистрация: 24.4.2010 Где: Севастополь Репутация: нет Всего: нет |
В ходе не долгих размышлений и конечно же благодаря вашим коментариям, особенно ginnie и MakTpaxep
Дошел до такого кода:
Спасибо за помощь |
|||
|
||||
![]()
|
| Правила форума "Perl" | |
|
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Perl: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |