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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Освой Самостоятельно Perl за 24 часа, Самообучение 
:(
    Опции темы
Lisssa
Дата 22.10.2011, 04:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата(arto @ 20.10.2011,  11:02)
они побегут наперегонки.

 Не получилось запустить твой скрипт (((.

  Запустили прогу на Си и на Perl данный скрипт 
Код

#!/usr/bin/perl -w
$maxprimes=100000;
$value=1;
$count=0;
print "Число 2 простое.\n";
while ( $count < $maxprimes ) {
$value+=2;
$flag=0;
OUTER: for ($a=1;$a<($value-2);$a+=2) {
    next if $a==1;
    for ($b=$a;$b<($value-2);$b+=2) {
    next if $b==1;
        if (($a*$b)==$value ){
        $flag=1;
        last OUTER;
}
    }
        } 
 if (!$flag ) {
$count++;
print "Число $value простое.\n";}}

 Все таки он заработал, я избавилась от четных множителей. Старый скрипт, который не работал (с исключенными четными множетелями) не нашла, видемо потерла. Так что не понятно, почему считал не правильно и выводились четные числа.
Си по скорости победил данный скрипт.

Арто, винды к сожалению у меня нет, чтобы проверить ... (((, да как-то мне страшно пробывать запускать перл там. Мне кажется там жутко неудобно и не понятно , ведь виндоус имеет закрытый код.
 Вот , что получилось у меня:
 
lisssa@orion:/data/school/lesson03>./0320.pl 
Unquoted string "sum" may clash with future reserved word at ./0320.pl line 2.
Number found where operator expected at ./0320.pl line 4, near ": 1 } @prim) } $n+=2 } print "@prim"' 100"
  (Might be a runaway multi-line '' string starting on line 2)
    (Missing operator before  100?)
syntax error at ./0320.pl line 2, near "-le"
Execution of ./0320.pl aborted due to compilation errors.

Вот сам скрипт
Код

#!/usr/bin/perl -w
List::Util=sum -le '@prim = qw( 2 ); $n = $prim[-1]+1; while (@prim < 
$ARGV[0]) { foreach (@prim) { push @prim, $n unless (sum map { $n%$_ ? 0 
: 1 } @prim) } $n+=2 } print "@prim"' 100


PM MAIL   Вверх
dixoNICH
Дата 22.10.2011, 16:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



вы как его запускали? то, что arto написал, засунули в файл и пытались запустить?
PM MAIL   Вверх
Lisssa
Дата 23.10.2011, 01:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата(dixoNICH @ 22.10.2011,  16:44)
вы как его запускали? то, что arto написал, засунули в файл и пытались запустить?

1)cpan>install List::Util
2) скопировала в файл(исправив шапку под юникс), как обычно chmod +x file.pl
3)./file.pl
PM MAIL   Вверх
Pfailed
Дата 23.10.2011, 08:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Lisssa, это неверно. Вам нужно прочитать perldoc perlrun

Например 
perl -MList::Util=sum -e 'print sum(1,2,3)'

это

Код

#!/usr/bin/perl
use List::Util 'sum';
print sum(1,2,3);




--------------------
PM MAIL   Вверх
Lisssa
Дата 23.10.2011, 09:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



 Спасиба за наводку.  smile 
Блин , многие ссылаются на англоязычную информацию. Если бы действительно владела английским, а не просто переводила слова , то тут бы просто даже не появилась, это же логично, как два плюс два.
 Я и так сейчас "курю"  мануалы на родном языке , а Вы предлогаете еще усугубить енто дело .  smile 
 Может , где нить есть русскоязычный ресурс ?
PM MAIL   Вверх
Pfailed
Дата 23.10.2011, 11:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Некоторая часть документации переведена на http://perl5doc.ru/


--------------------
PM MAIL   Вверх
Lisssa
Дата 24.10.2011, 04:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Спасибки за ресурс.
 Только не могу найти, то что мне надо . Что только не набирала в поиске... Пробовала и преобразовать из Windows в Unix и "конвертирование" , "формат" и т.п.
Подскажите русскую терминологию по данному вопросу, чтобы я могла перевести скрипт в понятный синтаксис под unix.
PM MAIL   Вверх
Pfailed
Дата 24.10.2011, 06:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Это не из windows в unix, а из однострочного формата в полноценный скрипт.
Опции командной строки описаны в perlrun, там это не переведено.



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


Новичок



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

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



 Спасибо , весьма благодарна . smile 
Да в моем пособии по которому сейчас изучаю - это есть в 12 уроке "Работа с командной строки."(потом вернусь)
Запустила оба скрипта. С модулем из командной строки оказался быстрее где-то в 3 раза, чем из учебного пособия , но медленнее Си.
 Сейчас в процессе изучения массивов. Изучение идет туго, думаю напишу не скоро.
Чем дальше, тем труднее  smile
Обратила внимание , что надо обязательно учить терминологию (русскоязычную) и синтаксис, без этого просто не возможно вникнуть с ходу в последующий урок.
PM MAIL   Вверх
arto
Дата 24.10.2011, 09:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



на программу на c можно взглянуть?
PM MAIL ICQ   Вверх
Lisssa
Дата 24.10.2011, 11:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата(arto @ 24.10.2011,  09:46)
на программу на c можно взглянуть?

 Да , конечно. smile 
Она на рабочем компьютере. 
Буду на работе после завтра. Ночью скину.
 Вообще синтаксис Си и PHP c виду, очень похож на Perl. Ну я конечно как новенькая смотрю.  Геометрия похожа .
PM MAIL   Вверх
Lisssa
Дата 26.10.2011, 00:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Код

#include <iostream>
using namespace std;
int main()

   int x;
   int y;
cout << "1\n";
    for(x=1; x <= 100000; x=x+2)
  {
      for(y=2; y<x; y++)
     {
        if(x%y==0) break;
        if(y==x-1)
      {
         cout << x;
         cout << " \n";
             }
                } 
                  }             
     return 0;          
                   }

PM MAIL   Вверх
Lisssa
Дата 26.10.2011, 09:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



  Переписала код по аналогичной математической схеме , как в примере на Cи

Код

#!/usr/bin/perl -w
$maxprimes=100000;
$value=1;
$count=0;
print "Число 2 простое.\n";
while ( $count < $maxprimes ) {
$value+=2;
$flag=0;
OUTER: for ($a=1;$a<($value-2);$a+=2) {
    next if $a==1;
        if (($value%$a)==0 ){
        $flag=1;
        last OUTER;
}
    }
 if (!$flag ) {
$count++;
print "Число $value простое.\n";}}

 
 Код значительно быстрее вывел результат простых чисел , чем вышестоящие скрипты на Perl, но аказался в раз 5 медленнее Си. 
А ведь у меня была сразу идея написать его в таком виде , не как в учебном пособии. Я побывала построить скрипт с данным оператором "%" )), вот только руки не с того места.
Как сразу в голове просчитать , какой код более быстрый ? По примерному представлению количества операций , который производит код ?
PM MAIL   Вверх
baldina
Дата 26.10.2011, 10:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата(Lisssa @  26.10.2011,  09:33 Найти цитируемый пост)
Как сразу в голове просчитать , какой код более быстрый ?

хороший вопрос. однозначного ответа нет, потому и говорят, что основанием для оптимизации должно являться профилирование.
однако сравнить два алгоритма можно и нужно (хотя это тоже может оказаться непростой задачей).
обычно анализ основывается на выявлении основной операции (или группы операций) алгоритма и подсчете числа операций в зависимости от размера данных.

в данном случае все довольно просто: в первом алгоритме на один внутренний цикл больше. 
если есть k вложенных циклов, каждый из которых выполняется за n шагов (с точностью до множителя), то класс эффективности алгоритма O(n^k)
таким образом первый алгоритм имеет трудоемкость O(n^3), второй O(n^2), где n это $maxprimes
вот если бы они попадали в один класс эффективности, нам пришлось бы более точный анализ проводить

Добавлено через 1 минуту и 54 секунды
Lisssa, вообще этот вопрос относится к теме "Анализ алгоритмов", который довольно широко освещен в литературе
PM MAIL   Вверх
Lisssa
Дата 4.11.2011, 06:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата(baldina @ 26.10.2011,  10:35)
Цитата(Lisssa @  26.10.2011,  09:33 Найти цитируемый пост)
Как сразу в голове просчитать , какой код более быстрый ?

потому и говорят, что основанием для оптимизации должно являться профилирование.

таким образом первый алгоритм имеет трудоемкость O(n^3), второй O(n^2), где n это $maxprimes
вот если бы они попадали в один класс эффективности, нам пришлось бы более точный анализ проводить

Добавлено @ 10:37
Lisssa, вообще этот вопрос относится к теме "Анализ алгоритмов", который довольно широко освещен в литературе

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


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

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


 




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


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

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