Автор Тема: perl thinking  (Прочитано 3529 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Valera

  • Модератор
    • http://kartel.kiev.ua
  • Город: Киев
perl thinking
« : 05 September 2008, 17:28:01 »
интересный вопрос, сколько получиться в 1 и 2-ом случаях ?

 $i = 5;
1. $i = ++$i + ++$i;
2. $i = ++$i + ++$i + ++$i;
print $i;

ночью за старой уборной, алюминиевой ложкой гремя, девочка в платьице черном, чавкая, ела коня

Оффлайн Авэшкин

  • Член клуба
  • Видишь суслика? Нет? И я не вижу - а он ЕСТЬ!
  • Авто: Aveo T200
Re: perl thinking
« Ответ #1 : 05 September 2008, 18:58:45 »
Valera
Это ты написал то, что говорит Кенни из Саус Парка?) ugaga

По теме..очень немногие знают перл
Здесь мог бы быть юзербар)
А тут я убиваю время http://www.ereality.ru/reg184541.html

Оффлайн οlden

  • Старожил
  • ЛЕНИН. Ленин муж.
  • Авто: другое
  • Город: Kyiv
Re: perl thinking
« Ответ #2 : 05 September 2008, 19:30:02 »
Perl не знаю, но могу предположить
1. = 13 (как вариант =12)
2. = 21 (как вариант =18)
Таких як я, поміж таких як я, ще пошукати!

Оффлайн Сапожник

  • без сапог
  • Модераторы
    • Мой статус
    • О нас...
    • Aveo New Клуб
  • Авто: другое
  • Город: Киев
Re: perl thinking
« Ответ #3 : 05 September 2008, 19:52:09 »
Мой вариант: :)
1) 13
2) 27
Совесть теряют еще чаще чем кошелек, но переживают при этом куда меньше

rusta

  • Гость
Re: perl thinking
« Ответ #4 : 06 September 2008, 09:50:07 »
баян  alik

Оригинал такого задания еще есть в класике Кернигана, Ритчи

Оффлайн Valera

  • Модератор
    • http://kartel.kiev.ua
  • Город: Киев
Re: perl thinking
« Ответ #5 : 06 September 2008, 14:40:06 »
правильный ответ (в perl и С одинаковый)
1. 14
2. 22
ночью за старой уборной, алюминиевой ложкой гремя, девочка в платьице черном, чавкая, ела коня

Оффлайн Valera

  • Модератор
    • http://kartel.kiev.ua
  • Город: Киев
Re: perl thinking
« Ответ #6 : 06 September 2008, 14:46:25 »
при этом в php немного другой результат:
1. 13
2. 21
ночью за старой уборной, алюминиевой ложкой гремя, девочка в платьице черном, чавкая, ела коня

Оффлайн Gang

  • Член клуба
  • ПТН ПНХ
  • Авто: другое
  • Город: Херсон
Re: perl thinking
« Ответ #7 : 06 September 2008, 15:56:23 »
Valera
Шо, заставляют программирование вспоминать? гыгы

Оффлайн οlden

  • Старожил
  • ЛЕНИН. Ленин муж.
  • Авто: другое
  • Город: Kyiv
Re: perl thinking
« Ответ #8 : 06 September 2008, 20:13:29 »
Valera
вообще-то в С это 14 и 24 а не 14 и 22 :)
логика понятна, хотя и не сразу распознаваема
логика PHP тож понятна, но все же Ся и Перл поступают разумнее
Таких як я, поміж таких як я, ще пошукати!

Оффлайн Valera

  • Модератор
    • http://kartel.kiev.ua
  • Город: Киев
Re: perl thinking
« Ответ #9 : 07 September 2008, 11:15:48 »
οlden

прога:droid@localhost ~ $ cat a.c
#include <stdio.h>;

void main(void){
        int i = 5;
        i = ++i + ++i + ++i;
        printf("%d", i);
}

результат:
droid@localhost ~ $ ./a
22

логика у них оч. простая: perl и C - компиляторы, php - интерпретатор.
ночью за старой уборной, алюминиевой ложкой гремя, девочка в платьице черном, чавкая, ела коня

Оффлайн m@x

  • Администратор
  • Авто: другое
  • Город: East Palo Alto, СА
Re: perl thinking
« Ответ #10 : 07 September 2008, 14:09:17 »
Valera Папа, а ты только что с кем разговаривал, а?  obkur

Оффлайн ^edw@rd

  • Член клуба
  • Seat Leon 2.0 FSI, АТ, Black
  • Авто: другое
  • Город: Киев
Re: perl thinking
« Ответ #11 : 07 September 2008, 18:05:59 »
Valera
popcorn

Оффлайн οlden

  • Старожил
  • ЛЕНИН. Ленин муж.
  • Авто: другое
  • Город: Kyiv
Re: perl thinking
« Ответ #12 : 08 September 2008, 15:04:22 »
Valera
значит у Перла 22
но в сях - 24 точно
объяснить?
просто каждый (из трех) инкремент производится над содержимым одной и той же ячейки памяти
т.е. 5 -> 6 -> 7 -> 8
затем в результат суммируется 8+8+8 = 24 (по крайней мере так резонно поступает MS VisualC++)
если есть возможность - проверь в сях
почему у Перла = 22 - ХЗ, не могу объяснить, тем более при двойном инременте все было как в сях
логику 24 я тебе привел
логика 21 (php) тоже понятна - для каждого последующего инкремента берется копия содержимого ячейки памяти, хранящего переменную $i (измененную предыдущим инкрементом), а содержимое исходной ячейки остается неизменным
(
$i = ++$i + ++$i + ++$i;
интерпретируется как:
$i = $i_tmp1 + $i_tmp2 + $i_tmp3;
$i_tmp1 = $i++; //=6
$i_tmp2 = $i++;//=7
$i_tmp3 = $i++;//=8
$i = 6 + 7 +8;
)
« Последнее редактирование: 08 September 2008, 15:09:05 от οlden »
Таких як я, поміж таких як я, ще пошукати!

Оффлайн Valera

  • Модератор
    • http://kartel.kiev.ua
  • Город: Киев
Re: perl thinking
« Ответ #13 : 08 September 2008, 15:07:46 »
οlden

в С я вроде привел и мега-прогу и ее результат.

В своих рассуждениях ты прав на 100% кроме одного - команда add процессора работает с 2 операндами. 2е сложение уже будет с результатом 1го, т.е. 14+8

Возможно у разных компиляторов код (и результат) разный

ЗЫ: у мну компилятор gcc
ночью за старой уборной, алюминиевой ложкой гремя, девочка в платьице черном, чавкая, ела коня

Оффлайн οlden

  • Старожил
  • ЛЕНИН. Ленин муж.
  • Авто: другое
  • Город: Kyiv
Re: perl thinking
« Ответ #14 : 08 September 2008, 15:10:12 »
Valera
проверил в VisualC++
24

а потому нехрен программеру умничать - надо писать однозначно, пространно и не экономить на строках кода :)
Таких як я, поміж таких як я, ще пошукати!

Оффлайн Valera

  • Модератор
    • http://kartel.kiev.ua
  • Город: Киев
Re: perl thinking
« Ответ #15 : 08 September 2008, 15:15:19 »
а потому нехрен программеру умничать - надо писать однозначно, пространно и не экономить на строках кода :)

согласен на 100% beer2
ночью за старой уборной, алюминиевой ложкой гремя, девочка в платьице черном, чавкая, ела коня

Оффлайн οlden

  • Старожил
  • ЛЕНИН. Ленин муж.
  • Авто: другое
  • Город: Kyiv
Re: perl thinking
« Ответ #16 : 08 September 2008, 15:29:04 »
Valera
тем более иногда оплата может зависеть от количества строк  гыгы
Таких як я, поміж таких як я, ще пошукати!

Оффлайн Jman

  • Пользователь
  • AVEO1,6_24U
  • Город: Киев
Re: perl thinking
« Ответ #17 : 08 September 2008, 16:05:19 »
Реально должно быть:
1. 14
2. 24

Так как:
1. 7 + 7
2. 8 + 8 + 8

Потому что инкремент, записанный до переменной имеет приоритет выше чем суммирование. Поэтому перед тем как просуммировать $i между собой, эта переменная будет увеличена соответственно на 2 в первом случае и на 3 во втором.

Оффлайн οlden

  • Старожил
  • ЛЕНИН. Ленин муж.
  • Авто: другое
  • Город: Kyiv
Re: perl thinking
« Ответ #18 : 08 September 2008, 16:19:41 »
Jman
мы с Валерой уже выяснили выше, что по этому поводу у каждого компиляора али интерпретатора собственное мнение :)
Таких як я, поміж таких як я, ще пошукати!


!  Внимание! Размещение заведомо ложной информации (п.4.2(й) правил форума) будет наказываться в 2х кратном размере.