Модераторы: korob2001, ginnie

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Обработка одномерно массива 
V
    Опции темы
qw1mb0
Дата 6.10.2011, 14:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Непутевый студент
*


Профиль
Группа: Участник
Сообщений: 79
Регистрация: 24.4.2010
Где: Севастополь

Репутация: нет
Всего: нет



Добрый день уважаемые формучане
Есть задание: написать программу которая будет выполнять:
Найти  среднее  арифметическое  всех  положительных  чисел   массива. Вывести на экран все числа массива, которые  больше, чем это среднее арифметическое.

Хоть убейте, но не могу додуматься как это реализовать....
Пока получилось, что то около такого бреда:
Код

chomp(my @fred = <STDIN>);
foreach (@fred){
    if ($fred > 0){
        push @list,$fred;
    }
}

my @list2 = above_average();
print "\@fred is @list2\n";
sub total{
    my $sum=0;
    foreach(@_){
        $sum+=$_;
    }
    $sum;
}
sub average{
    if(@_==0){return}
    my $count = @_;
    my $sum = total(@_);
    $sum/$count;
}
sub above_average{
    my $average = average(@_);
    my @list;
    foreach my $element(@_){
        if($element>$average){
            push @list,$element;
        }
    }
    @list;
}


Подскажите пожалуйста другие способы решения данной задачи...
PM MAIL ICQ Skype   Вверх
arto
Дата 6.10.2011, 15:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 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
# 
PM MAIL ICQ   Вверх
ginnie
Дата 6.10.2011, 15:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Комодератор
Сообщений: 1287
Регистрация: 6.1.2008
Где: Москва

Репутация: 38
Всего: 49



arto, надо "Найти  среднее  арифметическое  всех  положительных  чисел   массива."


--------------------
Написать код, понятный компьютеру, может каждый, но только хорошие программисты пишут код, понятный людям. (Мартин Фаулер. Рефакторинг)
PM MAIL Skype Jabber   Вверх
arto
Дата 6.10.2011, 15:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1495
Регистрация: 31.10.2004

Репутация: 38
Всего: 40



неужели мне надо сделать все домашнее задание для человека?
PM MAIL ICQ   Вверх
dixoNICH
Дата 7.10.2011, 12:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 222
Регистрация: 20.3.2011

Репутация: нет
Всего: нет



Код

@arr=qw/1 2 3 4 5 6 7 8 9 10 -3 -4 -5 -6 -7 -8 -9 -10 /;
$_>0&&($summ+=$_)&&($i++)for@arr;
$_>$summ/$i&&print for@arr;

C:\Users\dixon>perl 2.pl
678910
а что вы хотели сказать 31-ой строкой кода? может быть если добавить return, то будет выглядеть адекватно.

Это сообщение отредактировал(а) dixoNICH - 7.10.2011, 12:32
PM MAIL   Вверх
ginnie
Дата 7.10.2011, 12:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Комодератор
Сообщений: 1287
Регистрация: 6.1.2008
Где: Москва

Репутация: 38
Всего: 49



dixoNICH, а зачем надо несколько раз рассчитывать $summ/$i?


--------------------
Написать код, понятный компьютеру, может каждый, но только хорошие программисты пишут код, понятный людям. (Мартин Фаулер. Рефакторинг)
PM MAIL Skype Jabber   Вверх
dixoNICH
Дата 7.10.2011, 20:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 222
Регистрация: 20.3.2011

Репутация: нет
Всего: нет



почему несколько? 1 раз во 2-ом цикле ведь)
PM MAIL   Вверх
ginnie
Дата 8.10.2011, 08:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Комодератор
Сообщений: 1287
Регистрация: 6.1.2008
Где: Москва

Репутация: 38
Всего: 49



dixoNICH, а это выражение не на каждой итерации второго цикла вычисляется (в Вашем примере 18 раз)?


--------------------
Написать код, понятный компьютеру, может каждый, но только хорошие программисты пишут код, понятный людям. (Мартин Фаулер. Рефакторинг)
PM MAIL Skype Jabber   Вверх
dixoNICH
Дата 8.10.2011, 09:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 222
Регистрация: 20.3.2011

Репутация: нет
Всего: нет



а да)
Код

$p=$summ/$i;
$_>$p&&print for@arr;

PM MAIL   Вверх
qw1mb0
Дата 11.10.2011, 01:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Непутевый студент
*


Профиль
Группа: Участник
Сообщений: 79
Регистрация: 24.4.2010
Где: Севастополь

Репутация: нет
Всего: нет



Всем спасибо за участие.
Но мои познания в перле скудны, так что додумался пока только до такого:
Код

@b = split (/\s/,<>);
foreach (@b){ 
    if ($_ > 0){
        push @a,$_;
    }
}
foreach (@a){ 
        $sum+=$_;
}        
foreach (@a){
    if ($_ > ($sum/(scalar @a))){
        print "$_ ";
    }
}

Что вполне меня устраивает
PM MAIL ICQ Skype   Вверх
ginnie
Дата 11.10.2011, 10:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Комодератор
Сообщений: 1287
Регистрация: 6.1.2008
Где: Москва

Репутация: 38
Всего: 49



qw1mb0, у меня два предложения по Вашему коду:
зачем в отдельном цикле считать сумму, если ее можно рассчитать сразу в первом цикле, где push?
зачем в последнем цикле считать $sum/(scalar @a) на каждой итерации?


--------------------
Написать код, понятный компьютеру, может каждый, но только хорошие программисты пишут код, понятный людям. (Мартин Фаулер. Рефакторинг)
PM MAIL Skype Jabber   Вверх
qw1mb0
Дата 11.10.2011, 15:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Непутевый студент
*


Профиль
Группа: Участник
Сообщений: 79
Регистрация: 24.4.2010
Где: Севастополь

Репутация: нет
Всего: нет



ginnie, Это да... Сначала у меня  $sum/(scalar @a) высчитывалось отдельно, потом просто что бы уменьшить обьем кода загнал туда.
Так как студент и программа пишется для выполнения работы. А преподаватель совсем не знает Perl, то сильно можно не гнаться за производительностью программы..

Но а так, спасибо, учту ваши комментарии и внесу эти поправки, во время оптимизации кода.
PM MAIL ICQ Skype   Вверх
MakTpaxep
  Дата 13.10.2011, 09:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 150
Регистрация: 25.11.2010

Репутация: нет
Всего: нет



Цитата(dixoNICH @  7.10.2011,  12:30 Найти цитируемый пост)
@arr=qw/1 2 3 4 5 6 7 8 9 10 -3 -4 -5 -6 -7 -8 -9 -10 /;
$_>0&&($summ+=$_)&&($i++)for@arr;
$_>$summ/$i&&print for@arr;

Прикольно)
А почему у меня не работает такая фигня:
Код

foreach (@data)
{
    .....
    $_="<tag>$_</tag>"&&next unless m!\t!;
    .....
}

Вроде из цикла выходит, а в тэг не заключает.
Можно как ниже, но всё равно интересно...
Код

do{$_="<tag>$_</tag>";next} unless m!\t!;


Это сообщение отредактировал(а) MakTpaxep - 13.10.2011, 09:57
PM MAIL   Вверх
alezzz
Дата 13.10.2011, 10:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


сплю...
**


Профиль
Группа: Участник
Сообщений: 499
Регистрация: 17.8.2009

Репутация: 1
Всего: 14



возможно потому что next ничего не возвращает
PM MAIL   Вверх
MakTpaxep
Дата 13.10.2011, 10:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 150
Регистрация: 25.11.2010

Репутация: нет
Всего: нет



Пора...
Пора видимо мне начинать с дебагером разбираться
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Perl"
korob2001
sharq
  • В этом разделе обсуждаются общие вопросы по языку Perl
  • Если ваш вопрос относится к системному программированию, задавайте его здесь
  • Если ваш вопрос относится к CGI программированию, задавайте его здесь
  • Интерпретатор Perl можно скачать здесь ActiveState, O'REILLY, The source for Perl
  • Справочное руководство "Установка perl-модулей", можно скачать здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Perl: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1075 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.