powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Программирование [игнор отключен] [закрыт для гостей] / максимум без if
98 сообщений из 98, показаны все 4 страниц
максимум без if
    #38812430
andreymx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
напомните, есть ли алгоритм вычисления максимума из двух чисел без if
...
Рейтинг: 0 / 0
максимум без if
    #38812434
andreymx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
+ - * / and or xor
...
Рейтинг: 0 / 0
максимум без if
    #38812455
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Придумать-то можно, но зачем?

Псевдокод:
Код: sql
1.
2.
3.
4.
5.
6.
int max(int a, int b)
(
  t[0]=a;
  t[1]=b;
  return a[sign(sign(b-a)+1)];
}

sign можно реализовать без if, например, сдвигами и бинарными операциями.
...
Рейтинг: 0 / 0
максимум без if
    #38812456
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Поправка:
Код: sql
1.
2.
3.
4.
5.
6.
int max(int a, int b)
(
  t[0]=a;
  t[1]=b;
  return t[sign(sign(b-a)+1)];
}
...
Рейтинг: 0 / 0
максимум без if
    #38812457
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
c = a<b ? b : a;


Код: plaintext
1.
c = max(a,b);


Код: plaintext
1.
2.
3.
4.
5.
6.
c=0;
while(a>0 && b>0) {
    c++;
    a--;
    b--;
}



Ну а если Си не любишь, то можно и на SQL сделать.
Код: sql
1.
select @c = case when @a<@b then @b else @a end


Код: sql
1.
select @c = max(v) from (select v=a union select b) t
...
Рейтинг: 0 / 0
максимум без if
    #38812458
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White Owl
Код: sql
1.
case when

Да, это не if, там и буковок-то таких нету!
...
Рейтинг: 0 / 0
максимум без if
    #38812518
no56892
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andreymxнапомните, есть ли алгоритм вычисления максимума из двух чисел без if
А на брейнфаке генератор случайных чисел слабо?
...
Рейтинг: 0 / 0
максимум без if
    #38812531
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MaytonsFuckenMaximumFunction.lisp
Код: python
1.
2.
(defun maximum(x y) 
  (cond ((= x y) x) ((> x y) x) ((< x y) y)))
...
Рейтинг: 0 / 0
максимум без if
    #38812585
Фотография Яростный Меч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
(a + b + abs(a-b)) / 2
...
Рейтинг: 0 / 0
максимум без if
    #38812605
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
На самом деле все предложенные алгоритмы содержат неявный if. Если вы видите знак больше или меньше, то мы уже говорим о каком-либо условии. Казалось бы вариант предложенный Яростным мечом подходит, но и это не так. Ибо вычисление модуля подразумевает условие, кроме того, модуль не был в числе допустимых операций

andreymx + - * / and or xor

потому, ответа на поставленный вопрос никто пока не дал.
...
Рейтинг: 0 / 0
максимум без if
    #38812608
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Можно было сделать так:

Код: plaintext
1.
int t=a%b;


если а больше b то t>=1, в противном случае 0. Нужно установить t в 1, в том случае, если t>1. Это можно сделать следующим образом
Код: plaintext
1.
t=(t+2)%(t+1);


если t было равно 0, то получим 2, если больше нуля, то получим число вида , это число не является целым, потому следующей операцией будет следующая
Код: plaintext
1.
t=t%2;


Если t было равно 2, то мы получим 0, в противном случае, мы получим остаток 1. Таким образом, если a>b, то t=1, в противном случае, 0. Выражение вида
Код: plaintext
1.
int max=t*(a-b)+(1-t)(b-a);


даст вам то, что требуется.

PS
скорее всего, в реализации операции % тем или иным образом присутствует условие, но в данном случае, оно менее явное чем в остальных случаях. И тут я так-же не использовал только те операции что вы предлагали. Код не тестировал, проверьте сами
...
Рейтинг: 0 / 0
максимум без if
    #38812610
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miksoftПридумать-то можно, но зачем?

Псевдокод:
Код: sql
1.
2.
3.
4.
5.
6.
int max(int a, int b)
(
  t[0]=a;
  t[1]=b;
  return a[sign(sign(b-a)+1)];
}

sign можно реализовать без if, например, сдвигами и бинарными операциями.

тогда уже
Код: plaintext
1.
 a*sign[a-b]+b*(1-sign[a-b]);


так читабельней. Может и можно реализовать, не помню. Надеюсь автор доведёт дело до конца, и напомнит как это сделать.
Хотя тут и думать не нужно, это элементарно, вот так:
Код: plaintext
1.
2.
3.
4.
int sign(int x)
{
    return x>>31;
}


данная функция вернёт 1 если число отрицательно и 0 в противном случае, таким образом, получим следующий результирующий код
Код: plaintext
1.
2.
int a,b;
int max=sign(a-b)*b+(1-sign(a-b))*a;



В общем мысль и идея понятны, тестируйте, не проверял этот код.

PS
но опять таки, в данном коде присутствуют лишние операции
...
Рейтинг: 0 / 0
максимум без if
    #38812639
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SashaMercuryНа самом деле все предложенные алгоритмы содержат неявный if. Если вы видите знак больше или меньше, то мы уже говорим о каком-либо условии. Казалось бы вариант предложенный Яростным мечом подходит, но и это не так. Ибо вычисление модуля подразумевает условие, кроме того, модуль не был в числе допустимых операций
abs() можно реализовать так sqrt(x*x)
...
Рейтинг: 0 / 0
максимум без if
    #38812640
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima T,

покажите как вы реализуете корень :)
...
Рейтинг: 0 / 0
максимум без if
    #38812644
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Второй вариант получить множитель 1 для положительного, -1 для отрицательного, т.е. sign()
в двоичном представлении 00000001 и 11111111 соответственно, старший бит это знак для типов со знаком.
далее
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
int my_sign(int x)
{
	unsigned int u = x & 0x80000000; // берем старший бит исходного числа
	for(int i = 0; i < 31; i++) { // заполняем им все биты
		u |= (u >> 1);
	}
	return u | 1; // устанавливаем младший бит в 1 для положительных
}
...
Рейтинг: 0 / 0
максимум без if
    #38812648
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
i < 31



явный if
...
Рейтинг: 0 / 0
максимум без if
    #38812649
Фотография XDiaBLo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SashaMercuryDima T,

покажите как вы реализуете корень :)
Корень можно вычислить как-то так:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
#lang racket
(define (average x y)
  (/ (+ x y) 2))
(define tolerance 0.00000001)
(define (fixed-point f first-guess)
  (define (close-enough? v1 v2)
    (< (abs (- v1 v2)) tolerance))
  (define (try guess)
    (let ((next (f guess)))
      (if (close-enough? guess next)
          next
          (try next))))
(try first-guess))
(define (sqrt x)
  (fixed-point (lambda (y) (average y (/ x y)))
               1.0))

(sqrt 1024)

32.0
>
...
Рейтинг: 0 / 0
максимум без if
    #38812650
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SashaMercury
Код: plaintext
1.
i < 31



явный if
а так?
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
int my_sign(int x)
{
	unsigned int u = x & 0x80000000; // берем старший бит исходного числа
	// заполняем им все биты
	u |= (u / 2);
	u |= (u / 2);
	... и еще 29 раз повторить эту строчку
	return u | 1; // устанавливаем младший бит в 1 для положительных
}
...
Рейтинг: 0 / 0
максимум без if
    #38812651
Фотография XDiaBLo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andreymxнапомните, есть ли алгоритм вычисления максимума из двух чисел без if
А вообще, по идее на scheme просто
Код: sql
1.
2.
3.
(max 3 5)
5
>
...
Рейтинг: 0 / 0
максимум без if
    #38812652
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
XDiaBLoSashaMercuryDima T,

покажите как вы реализуете корень :)
Корень можно вычислить как-то так:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
#lang racket
(define (average x y)
  (/ (+ x y) 2))
(define tolerance 0.00000001)
(define (fixed-point f first-guess)
  (define (close-enough? v1 v2)
    (< (abs (- v1 v2)) tolerance))
  (define (try guess)
    (let ((next (f guess)))
      (if (close-enough? guess next)
          next
          (try next))))
(try first-guess))
(define (sqrt x)
  (fixed-point (lambda (y) (average y (/ x y)))
               1.0))

(sqrt 1024)

32.0
>



вы используете тернарный оператор, значит используете if
...
Рейтинг: 0 / 0
максимум без if
    #38812653
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima T
Код: plaintext
1.
2.
3.
	u |= (u / 2);
	u |= (u / 2);
	... и еще 29 раз повторить эту строчку



Кстати можно обойтись 8-ю строчками
...
Рейтинг: 0 / 0
максимум без if
    #38812654
Фотография XDiaBLo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SashaMercuryвы используете тернарный оператор, значит используете if
Да там и if есть самый настоящий. Но по сабжу я уже ответил
Программа:(max 5 3)
Результат: 5
...
Рейтинг: 0 / 0
максимум без if
    #38812655
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TDima T
Код: plaintext
1.
2.
3.
	u |= (u / 2);
	u |= (u / 2);
	... и еще 29 раз повторить эту строчку



Кстати можно обойтись 8-ю строчками



а чем это лучше предложенного кода ранее
SS
Код: plaintext
1.
2.
3.
4.
int sign(int x)
{
    return x>>31;
}
...
Рейтинг: 0 / 0
максимум без if
    #38812657
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
XDiaBLoSashaMercuryвы используете тернарный оператор, значит используете if
Да там и if есть самый настоящий. Но по сабжу я уже ответил
Программа:(max 5 3)
Результат: 5

а вы посмотрите как в Scheme реализована эта функция :)
...
Рейтинг: 0 / 0
максимум без if
    #38812660
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SashaMercuryа чем это лучше предложенного кода ранее
SS
Код: plaintext
1.
2.
3.
4.
int sign(int x)
{
    return x>>31;
}


Тем что я его не заметил выше :)

Только правильно так
Код: sql
1.
2.
3.
4.
int sign(int x)
{
    return (x>>31) | 1;
}
...
Рейтинг: 0 / 0
максимум без if
    #38812661
Фотография XDiaBLo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SashaMercuryXDiaBLoпропущено...

Да там и if есть самый настоящий. Но по сабжу я уже ответил
Программа:(max 5 3)
Результат: 5

а вы посмотрите как в Scheme реализована эта функция :)
Хмм, исходники компилятора чтоль поискать? Там это похоже ключевое слово, даже не из библиотек, а основы языка.
...
Рейтинг: 0 / 0
максимум без if
    #38812666
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TSashaMercuryа чем это лучше предложенного кода ранее
пропущено...

Тем что я его не заметил выше :)

Только правильно так
Код: sql
1.
2.
3.
4.
int sign(int x)
{
    return (x>>31) | 1;
}



почему так ? ведь у меня после сдвига в младшем разряде будет либо 1, либо 0
...
Рейтинг: 0 / 0
максимум без if
    #38812667
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SashaMercury
Код: plaintext
1.
    return x>>31;


Ну и битовые сдвиги не перечислены в разрешенных операциях
andreymx+ - * / and or xor
...
Рейтинг: 0 / 0
максимум без if
    #38812672
Фотография XDiaBLo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TSashaMercury
Код: plaintext
1.
    return x>>31;



Ну и битовые сдвиги не перечислены в разрешенных операциях
andreymx+ - * / and or xor
А это же не циклический сдвиг? Деление нацело сойдёт тогда.
...
Рейтинг: 0 / 0
максимум без if
    #38812673
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SashaMercuryпочему так ? ведь у меня после сдвига в младшем разряде будет либо 1, либо 0
обычно принято что sign() возвращает +1 для положительных, -1 для отрицательных и 0 для 0.
В данном случае 0 не важен, т.к. нам в итоге надо получить модуль числа, т.е.
Код: plaintext
1.
abs(x) = x * sign(x)
...
Рейтинг: 0 / 0
максимум без if
    #38812674
Фотография XDiaBLo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
XDiaBLoDima Tпропущено...

Ну и битовые сдвиги не перечислены в разрешенных операциях
пропущено...

А это же не циклический сдвиг? Деление нацело сойдёт тогда.
А мля, 31 а не 32...
...
Рейтинг: 0 / 0
максимум без if
    #38812675
Фотография XDiaBLo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
XDiaBLoXDiaBLoпропущено...

А это же не циклический сдвиг? Деление нацело сойдёт тогда.
А мля, 31 а не 32...Впрочем 2 в 31 степени же.
...
Рейтинг: 0 / 0
максимум без if
    #38812679
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
XDiaBLoА это же не циклический сдвиг? Деление нацело сойдёт тогда.
Это оказывается сдвиг с учетом знака
http://msdn.microsoft.com/ru-ru/library/vstudio/k2ay192e(v=vs.100).aspx Для заполнения позиций слева используется бит знака значения
Я не знал, если честно.
...
Рейтинг: 0 / 0
максимум без if
    #38812683
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima T, тогда надо будет результат побитово умножить на 1. Но если уж уходить от побитового сдвига, то нужно использовать ваш вариант
...
Рейтинг: 0 / 0
максимум без if
    #38812690
Фотография XDiaBLo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TXDiaBLoА это же не циклический сдвиг? Деление нацело сойдёт тогда.
Это оказывается сдвиг с учетом знака
http://msdn.microsoft.com/ru-ru/library/vstudio/k2ay192e(v=vs.100).aspx Для заполнения позиций слева используется бит знака значения
Я не знал, если честно.
Ясно, деление нацело не сойдёт.
...
Рейтинг: 0 / 0
максимум без if
    #38812692
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SashaMercuryDima T, тогда надо будет результат побитово умножить на 1.
не поможет т.к. 0&1 = 0.
Твой сдвиг дает либо 0000 либо 1111, т.е. для положительных надо дополнительно 0000 превратить в 0001, что и делает |1
...
Рейтинг: 0 / 0
максимум без if
    #38812700
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TSashaMercuryDima T, тогда надо будет результат побитово умножить на 1.
не поможет т.к. 0&1 = 0.
Твой сдвиг дает либо 0000 либо 1111, т.е. для положительных надо дополнительно 0000 превратить в 0001, что и делает |1

нет, мне это не нужно. Для положительных я буду иметь 0, для отрицательных 1. И дальше такой код
Код: plaintext
1.
2.
int t=sign(a-b);
int res=b*t+a(1-t);
...
Рейтинг: 0 / 0
максимум без if
    #38812721
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Коллеги а какова цена вопроса? Что мы хотим?

1) Оптимизировать скорость?

В этом случае нам надо искать Ассемблер для целевой конфигурации и внимательно
смотреть в нём команды, abs(x,y), sgn(x,y) или их более атомарные декомпозиции.
Далее считать такты и делать бенчмарки.

2) Перейти в другой базис?

Актуально для цифровой системотехники. Искать программно-аппаратное решение.
Можно рисовать логическую машину на вентилях AND/OR/NOT и линиях задержки.
Но это-ли спрашивал автор?

3) Перейти в другой ЯП?

Ну тут вроде примеры уже были. Большая часть - самообман. Трудно доказать
ОТСУТСТВИЕ операции IF внтри них.

4) Делать обфускацию и запутывать читателя?

Нечего добавить. Можно сколь угодно усложнять функцию abs вычисляя ее через
числовые ряды и умножения векторов и матриц. Усложнять вообще может
любой дурак.

Вы попробуйте упростить. Вобщем Генри Уоррен тычет вам свою книжку
и тихо ругается сквозь зубы.
...
Рейтинг: 0 / 0
максимум без if
    #38812735
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonЧто мы хотим?
Фигней позаниматься

Иногда полезно, я вот например узнал что >> для заполнения позиций слева использует бит знака значения.
...
Рейтинг: 0 / 0
максимум без if
    #38812737
Фотография XDiaBLo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: sql
1.
2.
3.
4.
5.
6.
7.
(define (mymax a b)
  (/ (+ a b
        (abs (- a b))
     ) 2
  )
)
(mymax 5 8)


Осталось придумать как abs без использования if сделать.
...
Рейтинг: 0 / 0
максимум без if
    #38812746
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
XDiaBLoОсталось придумать как abs без использования if сделать.
так уже придумано
Яростный Меч(a + b + abs(a-b)) / 2
Dima Tabs(x) = x * sign(x)
Dima T & SashaMercuryint sign(int x)
{
return (x>>31) | 1;
}
...
Рейтинг: 0 / 0
максимум без if
    #38812748
Фотография XDiaBLo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TXDiaBLoОсталось придумать как abs без использования if сделать.
так уже придумано
Яростный Меч(a + b + abs(a-b)) / 2
Dima Tabs(x) = x * sign(x)
Dima T & SashaMercuryint sign(int x)
{
return (x>>31) | 1;
}
Да, только я пока Scheme не так хорошо знаю, чтобы это реализовать.
...
Рейтинг: 0 / 0
максимум без if
    #38812755
Фотография XDiaBLo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ладно, сделал :)
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
(define (myabs x)
  (* x (sgn x))
)
(define (mymax a b)
  (/ (+ a b
        (myabs (- a b))
     ) 2
  )
)
(max 9 -18)
(max 1 3)
(max 8 115)
...
Рейтинг: 0 / 0
максимум без if
    #38812757
Фотография XDiaBLo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
XDiaBLoЛадно, сделал :)
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
(define (myabs x)
  (* x (sgn x))
)
(define (mymax a b)
  (/ (+ a b
        (myabs (- a b))
     ) 2
  )
)
(mymax 9 -18)
(mymax 1 3)
(mymax 8 115)


Поправил. Результат таков
автор9
3
115
...
Рейтинг: 0 / 0
максимум без if
    #38812762
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
XDiaBLoДа, только я пока Scheme не так хорошо знаю, чтобы это реализовать.
могу только подсказать как по правильному операции называются
>> "битовый арифметический сдвиг вправо"
| "побитовое сложение" или "логическое или"

может поможет нагуглить нужное
...
Рейтинг: 0 / 0
максимум без if
    #38812771
Фотография XDiaBLo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Короче вот конечная версия:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
#lang racket
(define (mysign x)
  (bitwise-ior 1 (arithmetic-shift x -31))
)
(define (myabs x)
  (* x (mysign x))
)
(define (mymax a b)
  (/ (+ a b
        (myabs (- a b))
     ) 2
  )
)
(mymax 9 -18)
(mymax 1 3)
(mymax 8 115)
...
Рейтинг: 0 / 0
максимум без if
    #38812777
Фотография XDiaBLo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Просто я взялся дочитать однажды заброшенный мной SICP, поэтому стараюсь при любой возможности практиковаться. Этим и обусловлен выбор языка.
...
Рейтинг: 0 / 0
максимум без if
    #38812930
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
XDiaBLoПросто я взялся дочитать однажды заброшенный мной SICP, поэтому стараюсь при любой возможности практиковаться. Этим и обусловлен выбор языка.
+1
Это мега-похвально.

А что такое "racket" ? Я использовал Common Lisp.
...
Рейтинг: 0 / 0
максимум без if
    #38812956
Фотография XDiaBLo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonXDiaBLoПросто я взялся дочитать однажды заброшенный мной SICP, поэтому стараюсь при любой возможности практиковаться. Этим и обусловлен выбор языка.
+1
Это мега-похвально.

А что такое "racket" ? Я использовал Common Lisp.
В среде DrRacket по умолчанию используется язык Racket, который хоть и отличается от Scheme, но пока всё компилится, я часто забываю указать "#lang scheme" вместо "#lang racket". В общем он похож на Scheme очень, пока ещё я не наткнулся на различия.

И кстати в книге же Scheme используется а не Common Lisp, я предпочёл использовать то что авторы сказали, правда не осилил компиляцию в mit-scheme, поэтому взял DrRacket, который тоже Scheme поддерживает. В нём вполне удобно.
...
Рейтинг: 0 / 0
максимум без if
    #38813221
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всегда удивляло это многообразие (defun ..) (def ..) (define ..).

Кстати Common-Lisp запретил переопределять max, поэтому я сделал maximum.
...
Рейтинг: 0 / 0
максимум без if
    #38813230
Фотография XDiaBLo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonВсегда удивляло это многообразие (defun ..) (def ..) (define ..).

Кстати Common-Lisp запретил переопределять max, поэтому я сделал maximum.
Не, ну в Scheme переопределить ничто не мешает похоже, но для уверенности я my везде добавил в название.
...
Рейтинг: 0 / 0
максимум без if
    #38813235
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кстати... Scheme написан на Scheme?
...
Рейтинг: 0 / 0
максимум без if
    #38813243
Фотография XDiaBLo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonКстати... Scheme написан на Scheme?
Никогда этого не понимал, как можно что то написать на нём же самом? Ядро ведь всё равно на чём то другом будет?
...
Рейтинг: 0 / 0
максимум без if
    #38813263
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
XDiaBLomaytonКстати... Scheme написан на Scheme?
Никогда этого не понимал, как можно что то написать на нём же самом? Ядро ведь всё равно на чём то другом будет?
Думаю да. Самый самый первый "C" скорее всего был написан на Асм-ах.
Иначе причинно следственная цепочка была-бы похерена и на земле воцарился-бы Сотона.
А так... Кернинган и Ричи..

Другое дело што Лиспы вроде-как умеют exe-шник готовить.
...
Рейтинг: 0 / 0
максимум без if
    #38813654
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonКоллеги а какова цена вопроса? Что мы хотим?

1) Оптимизировать скорость?

В этом случае нам надо искать Ассемблер для целевой конфигурации и внимательно
смотреть в нём команды, abs(x,y), sgn(x,y) или их более атомарные декомпозиции.
Далее считать такты и делать бенчмарки.
Условие задачи "без if" - это (как и всякие размотки циклов) оптимизация переходов путем сокращения количества этих самых переходов.
Довольно существенно может поднять скорость. Да и снизить тоже :)
...
Рейтинг: 0 / 0
максимум без if
    #38813655
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Правда для Лиспа вообще бесполезна :)
...
Рейтинг: 0 / 0
максимум без if
    #38813666
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonXDiaBLo Никогда этого не понимал, как можно что то написать на нём же самом? Ядро ведь всё равно на чём то другом будет?
Думаю да. Самый самый первый "C" скорее всего был написан на Асм-ах.
Компилятор асма тоже был на чем-то написан. Просто тогда уровень сложности был такой что можно было код написать в тетрадке, там же перевести в байт-код и потом забить в комп и запустить. Я с этого начинал. Компилировал ручкой на бумаге.
...
Рейтинг: 0 / 0
максимум без if
    #38813675
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У ассемблера нет компилятора.
Есть символьные ассемблеры, позволяющие использовать более-менее человеко-читабельные мнемоники вместо кодов.
...
Рейтинг: 0 / 0
максимум без if
    #38813680
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonДумаю да. Самый самый первый "C" скорее всего был написан на Асм-ах.
на подмножестве С
http://habrahabr.ru/post/180523/
...
Рейтинг: 0 / 0
максимум без if
    #38813703
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Basil A. SidorovУ ассемблера нет компилятора.
Есть символьные ассемблеры, позволяющие использовать более-менее человеко-читабельные мнемоники вместо кодов.
ИМХУ: Компилировение это не что иное как преобразование человеко-читабельного в машинно-исполняемое
...
Рейтинг: 0 / 0
максимум без if
    #38813785
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Basil A. SidorovУ ассемблера нет компилятора.
Есть символьные ассемблеры, позволяющие использовать более-менее человеко-читабельные мнемоники вместо кодов.Ошибаешься. У ассемблера компиляторы есть. Собственно говоря, без компилятора ассемблер не возможен.
Ассемблер это и есть набор мнемоник превращающий кода в человеко-читабельный текст.
...
Рейтинг: 0 / 0
максимум без if
    #38813789
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White OwlОшибаешься. У ассемблера компиляторы есть.
Не согласен

Возможно, формулировки зависят от учебного заведения.
...
Рейтинг: 0 / 0
максимум без if
    #38813803
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ИзопропилWhite OwlОшибаешься. У ассемблера компиляторы есть.
Не согласен

Возможно, формулировки зависят от учебного заведения.При чем здесь учебное заведение?
Чисто из определения ассемблера:
https://ru.wikipedia.org/wiki/Язык_ассемблера Язык ассемблера (англ. assembly language) — машинно-ориентированный язык низкого уровня с командами, обычно соответствующими командам машины, который может обеспечить дополнительные возможности вроде макрокоманд; автокод, расширенный конструкциями языков программирования высокого уровня, такими как выражения, макрокоманды, средства обеспечения модульности программ.
Может вас смущает то что "ассемблером" называют и программу которая переводит из мнемоники в машинные кода? Но эта программа по существу и есть компилятор.

В принципе можно и вручную сделать перевод из мнемоники в кода (по существу делая ручную компиляцию). Но процесс компиляции есть всегда. Правда в этом случае компилятором будет служить человек с карандашом.
...
Рейтинг: 0 / 0
максимум без if
    #38813806
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White OwlНо эта программа по существу и есть компилятор.
я привык называть эту программу ассемблером и не называю компилятором.
Так учили.
...
Рейтинг: 0 / 0
максимум без if
    #38813821
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ИзопропилWhite OwlНо эта программа по существу и есть компилятор.
я привык называть эту программу ассемблером и не называю компилятором.
Так учили.Ааа... ну да, ну да... Курица не птица, ЗАЗ 965 не автомобиль, и разные другие "не" из этой же серии :)
...
Рейтинг: 0 / 0
максимум без if
    #38813869
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ассемблер - частный случай компилятора, т.к. производит трансляцию из более высокоуровневого текстового представления кода в низкоуровневый бинарный, пригодный для запуска либо скармливания линкеру, что полностью соответствует определению компилятора.
...
Рейтинг: 0 / 0
максимум без if
    #38813894
Фотография XDiaBLo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly MoskovskyАссемблер - частный случай компилятора, т.к. производит трансляцию из более высокоуровневого текстового представления кода в низкоуровневый бинарный, пригодный для запуска либо скармливания линкеру, что полностью соответствует определению компилятора.
Как его ни назови, суть останется та же самая. У вас просто спор про определения, что в принципе обычное дело. Часто читаешь книжку по какой то теме, и там несколько разных определений одного и того же. Сколько людей, столько мнений.
...
Рейтинг: 0 / 0
максимум без if
    #38813902
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White OwlСобственно говоря, без компилятора ассемблер не возможен.debug древнего DOS содержал ассемблер.
Никаких компиляторов - достаточно прямолинейное превращение мнемоник в последовательность байт.
Ну и стандартная для (этой) программы возможность сброса участка памяти на диск, что давало com-файл.

P.S. Видел пример изощрённого bat-файла, где debug использовался, чтобы вывести строку без завершающего CRLF
...
Рейтинг: 0 / 0
максимум без if
    #38813904
Фотография XDiaBLo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Basil A. SidorovWhite OwlСобственно говоря, без компилятора ассемблер не возможен.debug древнего DOS содержал ассемблер.
Никаких компиляторов - достаточно прямолинейное превращение мнемоник в последовательность байт.
Ну и стандартная для (этой) программы возможность сброса участка памяти на диск, что давало com-файл.

P.S. Видел пример изощрённого bat-файла, где debug использовался, чтобы вывести строку без завершающего CRLF
У меня однажды давно Винда 98 не ставилась, из-за скандиска, он на что-то ругался. Удаление скандиска не помогало. Так я сделал исполняемый файл с одной командой "ret", и заменил им скандиск. Винда поставилась, и всё было нормально :) Дебаг тот я использовал чтобы вспомнить как будет "ret" в 16-ричном коде.
...
Рейтинг: 0 / 0
максимум без if
    #38813908
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Насколько мне изменяет склероз, у виндового установщика был штатный ключ, пропускающий фазу проверки диска.
...
Рейтинг: 0 / 0
максимум без if
    #38813909
Фотография XDiaBLo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Basil A. SidorovНасколько мне изменяет склероз, у виндового установщика был штатный ключ, пропускающий фазу проверки диска.
:) Может быть. Я наверное не в курсе про него был.
...
Рейтинг: 0 / 0
максимум без if
    #38813929
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мне вот другое интересно. Я провёл многие часы дни и анализируя и упрощая предикаты в if.
Метод карт Карно или диаграм Вейча. Мне нравилось сворачивать сложные проверки или
оптимизировать скорость просто меняя их порядок в expression.
...
Рейтинг: 0 / 0
максимум без if
    #38813933
Фотография XDiaBLo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonМне вот другое интересно. Я провёл многие часы дни и анализируя и упрощая предикаты в if.
Метод карт Карно или диаграм Вейча. Мне нравилось сворачивать сложные проверки или
оптимизировать скорость просто меняя их порядок в expression.
А мне раньше нравилось на ассемблере писать, ну это интересно конечно, но обычно для работы недостаточно быстро код пишется. Потому как перестал быть студентом, ассемблер забросил :(
...
Рейтинг: 0 / 0
максимум без if
    #38814109
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
XDiaBLoНикогда этого не понимал, как можно что то написать на нём же самом? Ядро ведь всё равно на чём то другом будет?
Нет, не обязательно. Первую версию надо писать на чём-то другом. А вторую версию уже можно написать на первой.
...
Рейтинг: 0 / 0
максимум без if
    #38814242
Вася Уткин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
White Owl
Код: plaintext
1.
c = a<b ? b : a;


Код: plaintext
1.
c = max(a,b);


Код: plaintext
1.
2.
3.
4.
5.
6.
c=0;
while(a>0 && b>0) {
    c++;
    a--;
    b--;
}



Ну а если Си не любишь, то можно и на SQL сделать.
Код: sql
1.
select @c = case when @a<@b then @b else @a end


Код: sql
1.
select @c = max(v) from (select v=a union select b) t


Все 3 варианта хоть и без if, но скомпилируются с условным переходом.

Если нужен без jump-ов, но c cmp, то такой вариант:
http://ideone.com/aQW2D6
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
#include <iostream>
using namespace std;

inline int func(int a, int b) {
	int ab[2] = {a, b};
	return ab[a<b];
}


int main() {
	
	cout << func(5, 4);
	
	// your code goes here
	return 0;
}
...
Рейтинг: 0 / 0
максимум без if
    #38814302
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andreymxнапомните, есть ли алгоритм вычисления максимума из двух чисел без if

вычислить разность двух чисел и поверить знак результата.
...
Рейтинг: 0 / 0
максимум без if
    #38814351
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вася Уткин,

Походу нашелся победитель с правильным решением :)
...
Рейтинг: 0 / 0
максимум без if
    #38814364
Вася Уткин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Anatoly MoskovskyВася Уткин,

Походу нашелся победитель с правильным решением :)
Я только не на 100% уверен, всегда ли по стандарту в C/C++ выражение a<b обязано быть равно 0 или 1, или может принимать и другие значения?
...
Рейтинг: 0 / 0
максимум без if
    #38814368
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White OwlМожет вас смущает то что "ассемблером" называют и программу которая переводит из мнемоники в машинные кода? Но эта программа по существу и есть компилятор.
Нет, эта программа по существу не есть компилятор. Она есть по существу транслятор. Надеюсь, разницу объяснять не надо.
...
Рейтинг: 0 / 0
максимум без if
    #38814374
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вася УткинЯ только не на 100% уверен, всегда ли по стандарту в C/C++ выражение a<b обязано быть равно 0 или 1, или может принимать и другие значения?
Да, обязано.

"a<b" имеет тип bool в С++ и _Bool в С
bool в С++ это нечисловой тип, который при приведении к числовому (в данном случае для индексации массива) принимает значения 0 или 1.
_Bool в С - это числовой тип который принимает значения 0 или 1.
...
Рейтинг: 0 / 0
максимум без if
    #38814381
Вася Уткин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Anatoly MoskovskyВася УткинЯ только не на 100% уверен, всегда ли по стандарту в C/C++ выражение a<b обязано быть равно 0 или 1, или может принимать и другие значения?
Да, обязано.

"a<b" имеет тип bool в С++ и _Bool в С
bool в С++ это нечисловой тип, который при приведении к числовому (в данном случае для индексации массива) принимает значения 0 или 1.
_Bool в С - это числовой тип который принимает значения 0 или 1.
Значит я угадал :)
Но обращение к кэшу L1 все равно будет дольше, чем переходы jg/jl, так что с практической точки зрения это мало имеет смысла. В обоих случаях в конвейере не получится внеочередное выполнение команд завязанных на результат такого сравнения - только в случае с массивом потеряем ещё несколько тактов на обмен с L1.

А других вариантов решения не знаете случайно?
...
Рейтинг: 0 / 0
максимум без if
    #38814393
Aleksandr Sharahov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вася Уткин,

ну, например, из той же серии: a + (b-a) and (ord(a>b) - 1)
...
Рейтинг: 0 / 0
максимум без if
    #38814476
Вася Уткин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Aleksandr SharahovВася Уткин,

ну, например, из той же серии: a + (b-a) and (ord(a>b) - 1)
А что такое ord? :)


Получается что-то типа:
http://ideone.com/1zCiYa
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
#include <iostream>
#include <cstdlib>
using namespace std;

inline constexpr int func(int a, int b) {
	return a + ((b-a) & ((unsigned)(a>b) - 1));
}
 

int main() {
	
	cout << func(5, 4);
	
	cout << endl << func(rand()%10, rand()%10);
	
	// your code goes here
	return 0;
}



Причем, 1-й раз в compile-time отработает, даже в C++11(не 14), а второй раз в run-time без jump-ов.
...
Рейтинг: 0 / 0
максимум без if
    #38814660
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вася Уткин,

Сорри, приз переходит к Aleksandr Sharahov :)
...
Рейтинг: 0 / 0
максимум без if
    #38814667
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly MoskovskyВася Уткин,

Походу нашелся победитель с правильным решением :)

нет, там есть сравнение, причём явное.

Anatoly Moskovsky
Сорри, приз переходит к Aleksandr Sharahov :)
а знак больше это не if разве ?


Правильно решение было у Дмитрия (Dima_T) и у меня. Только в этих двух решения не содержался явный if (и знаки больше меньше etc)
...
Рейтинг: 0 / 0
максимум без if
    #38814706
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SashaMercuryа знак больше это не if разве ?
Нет конечно. Там же нет ветвления.
...
Рейтинг: 0 / 0
максимум без if
    #38814709
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SashaMercuryнет, там есть сравнение, причём явное.

Правильно решение было у Дмитрия (Dima_T) и у меня. Только в этих двух решения не содержался явный if (и знаки больше меньше etc)
Поясню. Сравнение - это просто вычитание, а вовсе не if где требуется проверка на 0 и условный переход.
Таким образом в коде который предложил Aleksandr Sharahov есть операции "-", "+", "&".
А в вашем коде есть в разных его вариантах были операция * и даже % которые медленнее на порядки.

Если сравнивать алгоритмы по скорости выполнения (а других причин для такого идиотского условия задачи нет) то самый быстрый будет код от Aleksandr Sharahov.
...
Рейтинг: 0 / 0
максимум без if
    #38814711
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SSmiksoftПридумать-то можно, но зачем?

Псевдокод:
Код: sql
1.
2.
3.
4.
5.
6.
int max(int a, int b)
(
  t[0]=a;
  t[1]=b;
  return a[sign(sign(b-a)+1)];
}

sign можно реализовать без if, например, сдвигами и бинарными операциями.

тогда уже
Код: plaintext
1.
 a*sign[a-b]+b*(1-sign[a-b]);


так читабельней.


Чем тогда плох этот пример(приводил его намного раньше) ? Выше псевдокод и использованием нотации Айверсона, присутствующей в Си/С++ по умолчанию, вот код на С++.
Код: plaintext
1.
int max=a*(a>b)+b*(1-(a>b));
...
Рейтинг: 0 / 0
максимум без if
    #38814712
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly Moskovsky,

не знал что операция сравнения это разность.
Но тем не менее, позже был показан вариант включающий только & >> и +, без умножения и %
...
Рейтинг: 0 / 0
максимум без if
    #38814716
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SashaMercuryЧем тогда плох этот пример
Я не говорю что он плох. Я говорю что есть лучше :)
...
Рейтинг: 0 / 0
максимум без if
    #38814721
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly Moskovsky,
кстати, в этом примере, умножение смело можно заменить на побитовое умножение &

Код: plaintext
1.
2.
int t=a>b;
nt max=a&t+b&(1-t);



мне эти ord непонятны, поверю вам, лучше так лучше :)
...
Рейтинг: 0 / 0
максимум без if
    #38814736
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SashaMercuryмне эти ord непонятны, поверю вам, лучше так лучше :)
Не надо мне верить.
Я же не проверял экспериментом :)

А ord это просто приведение типа к числу.
...
Рейтинг: 0 / 0
максимум без if
    #38814751
Barlone
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Развели тут длинное обсуждение, а при этом современный компилятор сгенерирует код для такого "if(a) b=c" без условных переходов, используя conditional move
...
Рейтинг: 0 / 0
максимум без if
    #38815019
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SashaMercuryAnatoly Moskovsky,
кстати, в этом примере, умножение смело можно заменить на побитовое умножение &

Код: plaintext
1.
2.
int t=a>b;
nt max=a&t+b&(1-t);



мне эти ord непонятны, поверю вам, лучше так лучше :)
Это из Паскалей . ИМХО.

Автор некисло вбросил навоза на реактивную турбину. Он в сабже не указал язык
программирования. Перечислил какой-то сомнительный список операций (или функций)
или макросов типа and or xor.

Вот мы и крутимся то в ассемблер то в С++ то в математику.

О базисах и минимизации я уже писал. Так что добавить нечего.
...
Рейтинг: 0 / 0
максимум без if
    #39029821
Гость_11111
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Не думаю, что автору было нужно узнать максимум любых двух чисел. Наверное, было достаточно и для положительных. Потому

def f(a, b):
c = - ((a % b - a) // a)
return c * a + (1 - c) * b

Для произвольных чисел алгоритм не подойдет, но думаю двигаться нужно в этом направлении, так как такие задачки часто задают школьникам на "подумать" прежде, чем рассказать о if и т.п.

К примеру

http://informatics.mccme.ru/mod/statements/view3.php?id=2296&chapterid=2958
...
Рейтинг: 0 / 0
максимум без if
    #39288305
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly MoskovskyВася Уткин,

Сорри, приз переходит к Aleksandr Sharahov :)

Всё-таки нет. Правильных решений на этих 4х страницах практически нет(в том числе и мое первое рассуждение содержит ошибку)
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
максимум без if
    #39719150
jksfj23jk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
на Python 3.4.2
Код: python
1.
2.
3.
4.
5.
6.
a = int(input())
b = int(input())
r= a * (a // b)
rr = b * (b // a)
rrr = int((r + rr) / (a//b + b//a))
print(rrr)
...
Рейтинг: 0 / 0
максимум без if
    #39720263
Лысый дядька
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
jksfj23jkна Python 3.4.2

Код: python
1.
max = lambda x, y: (x,0,y)[(y-x)//abs(y-x)+1]
...
Рейтинг: 0 / 0
98 сообщений из 98, показаны все 4 страниц
Форумы / Программирование [игнор отключен] [закрыт для гостей] / максимум без if
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]