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

Поиск:

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


Опытный
**


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

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



> К сожалению мое учебное пособие в отсканированном виде ужастного качества с кучей ошибок. 

Вы бы лучше взяли Learning Perl (Изучаем Perl) и CamelBook, они есть в сети на русском в прекрасном качестве, и ссылки на них приводили на этом форуме не раз.
PM MAIL Jabber   Вверх
baldina
Дата 19.10.2011, 09:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата(Lisssa @  19.10.2011,  01:25 Найти цитируемый пост)
Есть в конце главы логичное задание, избавится в расчетном цикле от четных значений, чтобы разгрузить программу.
Понятно , что в самой переменной $value избавляемся от четных вариантов. Это легко.
меняем 
код Perl
1:
$value++;
  на
код Perl
1:
$value+=2; # Тоесть начиная от 1 прибавляем по 2, тем самым всегда попадая на нечетное число.
 
Так же логично избавиться от четных множителей, но тут уже в тупике   


не $value++ на  $value+=2, а $i++ на $i+=2
с множителями тож самое: $j+=2

Цитата(Lisssa @  19.10.2011,  00:30 Найти цитируемый пост)
 Просто очень похож на математическую науку.
  Соответственно возникает внутренее желание , что бы по всем параметрам был максимально преближен к ней , да бы проще было запомнить.

Полагаете, что 1..N более математично чем 0..N-1?
PM MAIL   Вверх
Lisssa
Дата 19.10.2011, 09:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата(vadiml @ 19.10.2011,  08:22)
>Вы бы лучше взяли Learning Perl (Изучаем Perl) и CamelBook, они есть в сети на русском в прекрасном качестве, и ссылки на них приводили на этом форуме не раз.

 Спасибо огромное за рекомендацию. Обязательно прочитаю, если осилю дорогу по которой уже пошла, а то еще и месяца не прошло изучения Перл, а уже помутнел разум.
 Вы его рекомендуете совсем очернить ?))) 
   В данное руководстве, я уже 4 главу читаю "списки, массивы.", очень жалко бросать ... Знаете ли не так уж легко эти главы дались.
 Это же хорошо , что ошибки в книге. Когда их исправляешь начиаешь включать голову  smile 
PM MAIL   Вверх
Lisssa
Дата 19.10.2011, 10:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата(baldina @ 19.10.2011,  09:03)
не $value++ на  $value+=2, а $i++ на $i+=2
с множителями тож самое: $j+=2

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

Определение: Простое число - это целое число , которое можно поделить только на само себя и на единицу.
 
 $vlaue - это переменная , которая проверяется на принадлежность к простому числу.
Соответствено , было бы логично не проверять четные числа, поэтому сначало присваиваем ему значение
$value = 1;
Ну а потом идем проверкой по нечетным числам инкриментируя 2-ой.
$value+=2.

Идея:
Соответственно $i и $j это множители $value. Нужо перемножить все возможные варианты от 2 до ($value-1), тоесть 
предположим цифра 7 
Если перемножить всеми возможными парами 2,3,4,5,6 , то 7 ну ни как не получим. Вот и есть смысл простого числа.
предположим цифра 6
Перемножаем 2,3,4,5.  Есть пара множителей , которые равны 6 = 2*3, сответственно число не простое.
 Ну и т.д. в хронологичной последовательности .

По поводу не четных множителей я как раз так и пробывала, но почему-то не работет. Просто во втором примере вместо $i и $j использовала $a и $b.
Переписываю этот кусок с множителями $i и $j.
Код

 OUTER: for ($i=1;($i+1)<$value;$i+=2) {
       next if $i==1;
        for ($j=$i;($j+1)<$value;$j+=2) {
       next if $j==1;
####### if ($i%2 and $j%2){# и такой вариант пробывала...
                if (($i*$j)==$value ){
                $flag=1;
                last OUTER;


 ну соответственно оператор 
next if $i==1;  # Чтобы скрипт не перемножил случайно 1 и само число. Тогда множители в этом куске программы будут всегда и она пропустит и простые числа.

>>Полагаете, что 1..N более математично чем 0..N-1? 
Не то имела ввиду, было бы более логично иметь такой знак в математическом смысле , не просто сторого меньше , а меньше или равно. 
Значит в этом смысле его просто не существует, ну и бог с ним и этого синтаксиса вполне хватает.

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


Бывалый
*


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

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



Цитата(Lisssa @ 19.10.2011,  02:30)
Второе интересное  задание в конце 3 главы - это усовершенствовать игру "Угадайка".
Нужно написать программу так , чтобы можно было играть в нее пока не угадаешь число.
Я написала два работающих варианта. Одинс помощью цикла for , а второй с помощь цикла while.
 Вот пример второго варианта , если кому понадобиться. ))

Код

#!/usr/bin/perl -w
$b=int(rand(10));
print "\n\r\r\Угадайте число от 0 до 9:\n Введите задуманное значение\n\r\r\r\r";
$flag=1;
while ($flag==1) {
chomp($a=<STDIN>);
if ($a < $b) { print "Недобор!\n"; }
elsif ($a > $b) { print "Перебор!\n"; }
elsif ($a = $b) { print "Вы угадали!\n"; $flag=0;}}

В последнем elsif должно быть $a == $b. У вас работает потому что они уже равны к этому времени, но в будущем избегайте этой новичковой ошибки))

По поводу рандома - привыкайте) По всех языках обращение в первому элеметну массива идёт по нулевому индексу. И это очень естественно)

Это сообщение отредактировал(а) MakTpaxep - 19.10.2011, 11:02
PM MAIL   Вверх
arto
Дата 19.10.2011, 11:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



# perl -MList::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
2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97 101 103 107 109 113 127 131 137 139 149 151 157 163 167 173 179 181 191 193 197 199 211 223 227 229 233 239 241 251 257 263 269 271 277 281 283 293 307 311 313 317 331 337 347 349 353 359 367 373 379 383 389 397 401 409 419 421 431 433 439 443 449 457 461 463 467 479 487 491 499 503 509 521 523 541
PM MAIL ICQ   Вверх
arto
Дата 19.10.2011, 12:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



btw, можно упростить smile
PM MAIL ICQ   Вверх
baldina
Дата 19.10.2011, 14:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата(Lisssa @  19.10.2011,  10:36 Найти цитируемый пост)
 Не , не , Вы наверно очень бегло пробежали глазами по скрипту и не поняли смысла.

да, $value++ я пропустил, замечание снимается

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


Новичок



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

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



Цитата(MakTpaxep @ 19.10.2011,  10:58)
 В последнем elsif должно быть $a == $b. У вас работает потому что они уже равны к этому времени, но в будущем избегайте этой новичковой ошибки))

- Семён Семёныч!  Ну что же это Вы  ?
- Ааааахх ! Да , точно .

 Ах ну, да точно , оператор elsif ожидает в условии встретить смысловое значение истина или лож. На самом деле хотела задать через оператор сравнения, а именно равенства "==". Блин, а засунула оператор присваивания "=". 
 Буду бороться с невнимательностью всеми силами, а то именно на этом постоянно и спотыкалась в написании.
Спасибки за исправление. smile 
PM MAIL   Вверх
Lisssa
Дата 20.10.2011, 07:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата(arto @ 19.10.2011,  11:50)
# perl -MList::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

 arto, ну да , прикольно , коротко и наверно элегантно. 
 Сейчас пока не могу осмыслить данный код в полной мере, вернусь к нему чуть позже , когда еще пару глав прочитаю. 
 По книге я еще и модули пока ставить не умею и только массивы начинаю читать.)) 
Но все равно интересно, завтра, после завтра  сравню два когда на скорость, как будет доступ к двум машинам. Отпишу сюда результаты теста.
 Как новенькой интересно , что будет быстрее, модуль или просто Перл операторы в скопе. 

Это сообщение отредактировал(а) Lisssa - 20.10.2011, 07:15
PM MAIL   Вверх
dixoNICH
Дата 20.10.2011, 10:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



зачем доступ к двум машинам для того, чтобы сравнить скорость?
PM MAIL   Вверх
arto
Дата 20.10.2011, 11:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



они побегут наперегонки.
PM MAIL ICQ   Вверх
Lisssa
Дата 21.10.2011, 07:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



 Угумс . Причем одна однаядерная с двумя гигами , а вторая четех с 4 гигами. Перловский скрипт на мощную , а скрипт с модулем на слабенькую , потом наоборот. ))) 
 Просто он не видел , как машина вичисляет простые числа . Чем дальше тем медленее, забавно на это смотреть. + Там еще у знакогмого на Си есть код, будет интересно сравнить. Хотя по вычислениям Си наверно победит, я не знаю , вот и проверю.
 Дикс ,а  какими средствами и инструментами , Вы замеряете скорость скриптов ?

Это сообщение отредактировал(а) Lisssa - 21.10.2011, 07:43
PM MAIL   Вверх
Pfailed
Дата 21.10.2011, 08:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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





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


Новичок



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

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



Цитата(Pfailed @ 21.10.2011,  08:34)
Lisssahttp://search.cpan.org/perldoc?Benchmark

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


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

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


 




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


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

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