Имя: Пароль:
1C
1С v8
В 7.7 ошибка, а в 8.2 работает "А = Б = С;"
0 Stagor
 
01.02.12
10:34
"А = Б = С;" в 1С это a=b==c; в с++
1 Stagor
 
01.02.12
10:35
так, вот, можно ли в 1С присвоить сразу А=Б=С=Д; или нет?
2 Maxus43
 
01.02.12
10:35
какой вопрос то?
3 Maxus43
 
01.02.12
10:36
присвоить? эта штука вернёт истину или ложь же в 1с, если Б = С тогда А = истина будет
4 Reset
 
01.02.12
10:39
(1) Нельзя, описанная конструкция работает так, как ты описал в (0).
5 Reaper_1c
 
01.02.12
10:40
И чо? Ну нет в угребищных клюшках булевого типа...
6 Stagor
 
01.02.12
10:40
а что тогда означает эта конструкция?
А=Б=С=Д;
7 Maxus43
 
01.02.12
10:41
(6) есди БСД равны то Истина
8 mikecool
 
01.02.12
10:41
а истина если б истина и сравнение с и д истина
9 mikecool
 
01.02.12
10:41
(7) а не справа налево идет?
10 Stagor
 
01.02.12
10:42
>    Б=0;С=0;Д=0;
>    А=Б=С=Д;
>    Сообщить(А);

Ложь
11 Maxus43
 
01.02.12
10:43
странно
12 Reaper_1c
 
01.02.12
10:43
Если б равна с а в д лежит истина тогда истина иначе ложь
13 Reaper_1c
 
01.02.12
10:44
1Сники...
14 Stagor
 
01.02.12
10:45
Т.е. мне не понятно, как разбирается интерпретатором эта конструкция?
> Б=0;С=0;Д=0;
> А=Б=С=Д;
15 Stagor
 
01.02.12
10:53
У кого свежая мысль по (14)?
16 Reaper_1c
 
01.02.12
10:54
Первое вхождение "=" в данном случае - оператор присваивания. Остальные - бинарные операторы сравнения.
17 Азат
 
01.02.12
10:54
(5) а ты жертва 1986, но никто же тебя за это угребищным не называет...
18 Stagor
 
01.02.12
10:55
(16) т.е. в А=Б=С=Д;
это А = (Б=С)=Д?
почему тогда А= ложь?
19 Zapal
 
01.02.12
10:56
(15) сделай Б=Истина
А тоже должно выдать Истина
20 Reaper_1c
 
01.02.12
10:57
(18) а я кому (12) писал?
21 Reaper_1c
 
01.02.12
10:58
(17) Так прально, я ж булевый тип понимаю.
22 Азат
 
01.02.12
10:59
(21) зато других элементарных вещей не понимаешь...
23 Reset
 
01.02.12
11:00
(14)
> Б=0;С=0;Д=0;
> А=Б=С=Д;

1. (C==Д)? результат1 ->Истина
2. (Б=Результат1) ? Результат2->Ложь (Б=0,Результат1=Истина)
3. В А заносится (присваивание) результат выражения, т.е. Результат.
Итого А=Ложь.
24 ptiz
 
01.02.12
11:01
(15) 1С видит строку:
А=Б=С=Д;

В ней после "А" идет символ "="  - это оператор присваивания.
Всё что справа - вычисляется как логическое выражение и возвращает тип - Булево.
Результат вычисления присваивается переменной А.
25 Reset
 
01.02.12
11:02
(23) читатть "3. В А заносится (присваивание) результат выражения, т.е. Результат2. "
26 anddro
 
01.02.12
11:07
(15) проверь выражения
"10"="10"=Истина
"10"=Истина="10"
вопросы отпадут
27 Stagor
 
01.02.12
11:58
А=Истина;Б=0;С=0;
   Если А=Б=С Тогда
       Сообщить("Ок");
   КонецЕсли;
28 Stagor
 
01.02.12
11:58
ок
29 aleks-id
 
01.02.12
12:02
Б=0;С=0;Д=иСТИНА;
А=Б=С=Д;
30 Reset
 
01.02.12
12:03
(27) Что непонятно?
31 Stagor
 
01.02.12
12:10
(30) Уже все понятно!
32 Stagor
 
01.02.12
12:11
странно только, что "Если А=Б=С Тогда"
сравнение происходит с последнего А=(Б=С), а не (А=Б)=С
33 Reset
 
01.02.12
12:12
Справа налево.
34 Aleksey
 
01.02.12
12:12
(10) А что ты ждал? Неопределенно не равно 0 все правильно
35 Reset
 
01.02.12
12:15
(33) (32) Точнее, операторы выбираются слева направо; Значение А (левый операнд первого оператора =) требуется сравнить с выражением, стоящим после "=" (правым операндом); соответвеснно, вычисляется это выражение ("Б=С"), и затем сравнивается с левым операндом (А).
36 Reset
 
01.02.12
12:17
(34) Там нет Неопределено
37 Reset
 
01.02.12
12:18
(36) Точнее, оно сначала есть в переменной А, но это не имеет значение, т.к. в А безусловно присвается булево
38 Reset
 
01.02.12
12:18
*не имеет значениЯ (=похрен)
39 IamAlexy
 
01.02.12
12:25
вот чтобы мозги не рушить, нормальный человек условия пропишет.. ЕСЛИ и тд...

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

хня = ?(a=b,?(c=d,?(t=h,f ,2 ) ,?(f=5, 1,2 ) ) ,?(f, 3,3 ) );
40 Steel_Wheel
 
01.02.12
12:27
(14) Первый символ равенства интерпретируется как присваивание, остальные, как сравнение
41 ковер
 
01.02.12
12:32
(39) краткость сестра таланта. зачем раздувать код, если можно лаконичнее описать теже действия
42 Asmody
 
01.02.12
12:35
(39) нормальная конструкция. раскидай её только по строкам, а то через неделю уже сам охренеешь от такого условия
43 Asmody
 
01.02.12
12:36
(42)+ я в 7.7 часто использовал, ибо там нет "ленивого" вычисления условий
44 aleks-id
 
01.02.12
12:41
разберем классическое А=Б=С=Д
первый раз "=" интерпретируется как присваивание.
второй и следующие разы "=" интерпретируется как сравнение.
поехали по шагам при Б=0;С=0;Д=0;
первый шаг:
(Б=С) (результат - булево, запишем его как Х)
второй шаг:
(Х=Д) (Х - булево, Д - число, ясен пень они не будут равны)
третий шаг:
А= результат сравнения из второго шага. будет всегда ложь.

как то так...
45 Stagor
 
01.02.12
15:08
Б=0;С=6;Д=Ложь;
А=Б=С=Д;
Сообщить(А);


Истина


точно слева направо!
46 Stagor
 
01.02.12
15:08
(43) В 8.2 Ленивые вычисления параметров?