powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Здачка для школьника
25 сообщений из 76, страница 1 из 4
Здачка для школьника
    #36829296
Фотография Hett
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вводят действительное число х. Надо получить целое: если число положительное ответ 1, если 0 то 0, а если отрицательное то -1.
Без операторов условия и циклов.

Весь моск уже сломал (
...
Рейтинг: 0 / 0
Здачка для школьника
    #36829321
fd00ch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hett, юзай оператор case или функцию Sign в Delphi :-)
...
Рейтинг: 0 / 0
Здачка для школьника
    #36829330
fd00ch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вот еще :-)

function GetSign(Value: Integer): Integer;
begin
try
Result:=Value div Abs(-Value)
except
Result:=0
end
end;
...
Рейтинг: 0 / 0
Здачка для школьника
    #36829333
Фотография Hett
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хитро. )
...
Рейтинг: 0 / 0
Здачка для школьника
    #36829334
fd00ch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hett, минус внутри Abs() не забудь убрать, чтобы не заметили что на этом форуме код взял )))
...
Рейтинг: 0 / 0
Здачка для школьника
    #36829346
junior  idiot
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Язык-то какой? Компилятор какой? Условия бы доопределить. Во многих языках это тривиально (тупо встроенной функцией), в некоторых чуть сложнее.
Но если для школьника, то конечно подразумевается знание внутреннего представления чисел.
Вот на Си, например:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
int foo(double x) {
	union {
		double x;
		unsigned long long l;
	} u;
	u.x = x;
	unsigned long long sign = (u.l & ((unsigned long long) 1  <<  63 )) >>  63 ;
	u.l &= ~((unsigned long long) 1  <<  63 );
	unsigned long long not_empty = ((-u.l) & ((unsigned long long) 1  <<  63 )) >>  63 ;
	return not_empty * (not_empty -  2  * sign);
}
...
Рейтинг: 0 / 0
Здачка для школьника
    #36829362
junior  idiot
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Чего-то я перемудрил, всё, в общем, попроще выглядит.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
int foo(double x) {
	union {
		double x;
		unsigned long long l;
	} u;
	u.x = x;
	char sign = u.l >>  63 ;
	char not_empty = (-((u.l <<  1 ) >>  1 )) >>  63 ;
	return not_empty * (not_empty -  2  * sign);
}
...
Рейтинг: 0 / 0
Здачка для школьника
    #36829415
junior  idiot
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А вот так можно извратиться на сишарпе.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
        private static int sign(double x)
        {
            Dictionary<string, int> d = new Dictionary<string, int>();
            d["NaN"] =  0 ;
            d["1"] =  1 ;
            d["-1"] = - 1 ;
            return d[(x / Math.Abs(x)).ToString()];
        }
...
Рейтинг: 0 / 0
Здачка для школьника
    #36829608
an0nym
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hett,

псевдокод
Код: plaintext
out = array(- 1 ,  0 ,  1 )[(int)(in >=  0 ) + (int)(in >  0 )]

Смысл думаю понятен.
...
Рейтинг: 0 / 0
Здачка для школьника
    #36829611
Фотография Яростный Меч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ещё псевдоговнокод:

Код: plaintext
1.
floor(abs( 1 +x)/(abs(x)+ 1 )) - floor(abs( 1 -x)/(abs(x)+ 1 ))

floor - округление до целого в меньшую сторону, floor(2.1) = floor(2.8) = 2
...
Рейтинг: 0 / 0
Здачка для школьника
    #36829621
an0nym
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
an0nymHett,

псевдокод
Код: plaintext
out = array(- 1 ,  0 ,  1 )[(int)(in >=  0 ) + (int)(in >  0 )]

Смысл думаю понятен.
Даже проще.

Код: plaintext
out = (int)(in >=  0 ) + (int)(in >  0 ) - 1 ;
...
Рейтинг: 0 / 0
Здачка для школьника
    #36829691
Фотография eNose
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[не активирован]
[не одобрен]
round(x/abs(x))
...
Рейтинг: 0 / 0
Здачка для школьника
    #36829692
Фотография eNose
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[не активирован]
[не одобрен]
eNoseround(x/abs(x)) хотя нет, с нулем проблемы :)
...
Рейтинг: 0 / 0
Здачка для школьника
    #36829705
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
По первым двум символам введённым с клавиатуры уже можно дать ответ. Но автора ограничили отсутствием операторов условий и поэтому единственно верным решением здесь будет математическое определение сигнума (SGN) как написали в 3 посте, или жонглирование битами в целом (или вещественном) числе что само по себе неконцептуально.
...
Рейтинг: 0 / 0
Здачка для школьника
    #36829798
aradzabov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
eNoseeNoseround(x/abs(x)) хотя нет, с нулем проблемы :)

ЛОЛ, добавь try catch в исключении принт 0 :)

если учесть что у нас школьник то вариант будет самым правильным, т.к. наш школьник математику знает и учит скорей всего примитивные операторы бейсика
...
Рейтинг: 0 / 0
Здачка для школьника
    #36829922
Фотография eNose
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[не активирован]
[не одобрен]
aradzaboveNoseeNoseround(x/abs(x)) хотя нет, с нулем проблемы :)

ЛОЛ, добавь try catch в исключении принт 0 :) это есть не во всех языках. а в условии язык не указан.
с try catch будет неуниверсально.
...
Рейтинг: 0 / 0
Здачка для школьника
    #36829990
Нелояльный
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Еще вариант:
Код: plaintext
1.
2.
3.
function Sign(AValue: Extended): Integer;
begin
  Result := Ceil(Tanh(AValue) *  0 . 5 ) + Floor(Tanh(AValue) *  0 . 5 );
end;
P.S. Если на больших числах выскакивает ошибка, претензии надо предъявлять к компилятору (гипертангенс определен на всей области действительных чисел).
...
Рейтинг: 0 / 0
Здачка для школьника
    #36830251
eee-pc
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
#include <iostream>

__int64 h(double tt)
{
	__int64 t = *(__int64*)&tt;
	__int64 a = (t>> 63 )&__int64( 1 );
	__int64 e = (t>> 52 )&__int64(0x7FF);
	__int64 m = (t>> 0  )&__int64(0x000FFFFFFFFFFFFF);

	__int64 b = -e*m;			// -val(tt!= 0 ) or  0 (tt== 0 )
	__int64 c = (b>> 63 );		// - 1 (tt!= 0 ) or  0 (tt== 0 )

	__int64 d = (a<< 63 )>> 62 ;	// - 2 (tt< 0 ) or  0 (tt>= 0 )
	
	__int64 r = (d+ 1 )*c;

	return r;
}

#define SHOW(A) std::cerr << A << '\t' << h(A) << std::endl;
void main()
{
	SHOW(- 2 . 2 );
	SHOW( 0 );
	SHOW( 2 . 3 );
}
...
Рейтинг: 0 / 0
Здачка для школьника
    #36830254
eee-pc
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
an0nym
Код: plaintext
out = (int)(in >=  0 ) + (int)(in >  0 ) - 1 ;

формально, in>=0 - условие, причем не все языки трактуют истину как 1, например некоторые трактуют -1 как true... а некоторые - вообще не знают как переводить bool в int...
...
Рейтинг: 0 / 0
Здачка для школьника
    #36830459
eee-pc
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
eee-pc
Код: plaintext
1.
	__int64 b = -e*m;			// -val(tt!= 0 ) or  0 (tt== 0 )

эту строчку надо рассматривать под разными углами: надо пару тестовых запусков, но мне влом.
например, возможен следующий вариант:
Код: plaintext
1.
	__int64 b = -(e*m|m);			// -val(tt!= 0 ) or  0 (tt== 0 )

в любом случае "-b" будет положительной, неравной нулую при ненулевом входном аргументе
...
Рейтинг: 0 / 0
Здачка для школьника
    #36830721
hellium
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
#!perl -w
sub foo {
  - ($_[ 0 ] =~ /^-/);
}
print foo( 1 . 2 ), ' ', foo( 0 ), ' ', foo(- 3 . 45 ), "\n";
Код: plaintext
0 0 -1
...
Рейтинг: 0 / 0
Здачка для школьника
    #36830746
Фотография eNose
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[не активирован]
[не одобрен]
Код: plaintext
1.
2.
3.
4.
5.
select 
DECODE
(
  SUBSTR(TO_CHAR(x),  1 ,  1 ), '0',  0 , '-', - 1 ,  1 
)
from dual

работает :)
...
Рейтинг: 0 / 0
Здачка для школьника
    #36830827
hellium
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hellium
Код: plaintext
1.
2.
3.
4.
#!perl -w
sub foo {
  - ($_[ 0 ] =~ /^-/);
}
print foo( 1 . 2 ), ' ', foo( 0 ), ' ', foo(- 3 . 45 ), "\n";
Код: plaintext
0 0 -1
упс, облажался. не заметил, что для положительных нужно 1.
тогда так:
Код: plaintext
1.
2.
3.
4.
#!perl -w
sub foo {
  ($_[ 0 ] >  0 ) || - ($_[ 0 ] <  0 );
}
print foo( 1 . 2 ), ' ', foo( 0 ), ' ', foo(- 3 . 45 ), "\n";
Код: plaintext
1 0 -1
...
Рейтинг: 0 / 0
Здачка для школьника
    #36831062
Берлuнгер
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hellium
Код: plaintext
1.
2.
3.
4.
#!perl -w
sub foo {
  - ($_[ 0 ] =~ /^-/);
}
print foo( 1 . 2 ), ' ', foo( 0 ), ' ', foo(- 3 . 45 ), "\n";
Код: plaintext
0 0 -1

низачот - есть условие
...
Рейтинг: 0 / 0
Здачка для школьника
    #36831065
Берлuнгер
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
eNose
Код: plaintext
1.
2.
3.
4.
5.
select 
DECODE
(
  SUBSTR(TO_CHAR(x),  1 ,  1 ), '0',  0 , '-', - 1 ,  1 
)
from dual

работает :)
низачот. есть оператор выбора (условие)
...
Рейтинг: 0 / 0
25 сообщений из 76, страница 1 из 4
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Здачка для школьника
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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