С Новым годом! Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.88/40: Рейтинг темы: голосов - 40, средняя оценка - 4.88
0 / 0 / 0
Регистрация: 23.12.2016
Сообщений: 15

Описать функцию Sign(X)

19.02.2017, 00:24. Показов 8033. Ответов 20
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Описать функцию Sign(X) целого типа, возвращающую для вещественного числа X следующие значения:
−1, если X < 0; 0, если X = 0; 1, если X > 0.

С помощью этой функции найти значение выражения Sign(A) + Sign(B) для данных вещественных чисел A и B.
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
19.02.2017, 00:24
Ответы с готовыми решениями:

Описать функцию Sign(X)
Описать функцию Sign(X) целого типа, возвращающую для целого числа X следующие значения: -1, если X &lt; 0; 0, если X = 0; 1, если X &gt;...

Описать функцию Sign(X)
Описать функцию Sign(X) целого типа, возвращающую для веществен-ного числа X следующие значения: –1, если X &lt; 0; 0, если X = 0; 1,...

Найдите значение выражения через функцию sign
Определите значение z=sign(x)+sign(y), где sign(a) — функция, возвращающая знак числа a, то есть (картинка) Задачу требуется решить,...

20
Диссидент
Эксперт C
 Аватар для Байт
27714 / 17332 / 3810
Регистрация: 24.12.2010
Сообщений: 38,978
19.02.2017, 00:38
XoSSe, Ну и что, неужели нет ни одной собственной мысли по этому поводу? Давайте, для начала составьте скелет программы. Инклюды, Майн, ввод числа. А дальше будем думать вместе...
0
1394 / 1023 / 325
Регистрация: 28.07.2012
Сообщений: 2,813
19.02.2017, 00:40
Первая часть:
C++
1
2
3
int Sign(double X) {
    return 0 - int(X < 0) + int(X > 0);
}
1
Диссидент
Эксперт C
 Аватар для Байт
27714 / 17332 / 3810
Регистрация: 24.12.2010
Сообщений: 38,978
19.02.2017, 01:06
Цитата Сообщение от nonedark2008 Посмотреть сообщение
Первая часть:
Красиво! Можно короче
C++
1
2
3
int Sign(double X) {
    return (X < 0) + (X > 0);
}
0
 Аватар для Lyosha12
41 / 41 / 11
Регистрация: 02.04.2016
Сообщений: 313
19.02.2017, 01:31
В контексте этой темы заинтересовался битовым представлением числа с плавающей точкой. Прочитав пару тем, определил, что для "изъятия" знака из вещественного числа нужно привести его к указателю на int, а потом разыменовать, сдвинув результат вправо на 31 бит:
C++
1
2
3
    float x = -12.5f;
    int sing = *((int*) &x) >> 31;
    cout << sing << endl;
Заинтересовал вопрос: почему при явном приведении вещественного числа к int я получаю всегда 0? В этом случае я даже не знаю что именно нужно гуглить
0
284 / 232 / 114
Регистрация: 07.09.2016
Сообщений: 584
19.02.2017, 01:52
почему при явном приведении вещественного числа к int я получаю всегда 0?
это как? тут есть ченить похожее на ваш способ приведения:
C++
1
2
3
4
5
6
7
8
9
#include <iostream>
int main()
{
    float x = -12.3;
    std::cout << "1:" << int(x) << std::endl;
    std::cout << "2:" << (int)x << std::endl;
    std::cout << "3:" << static_cast<int>(x) << std::endl;
    return 0;
}
0
 Аватар для Lyosha12
41 / 41 / 11
Регистрация: 02.04.2016
Сообщений: 313
19.02.2017, 02:49
Цитата Сообщение от DU3 Посмотреть сообщение
это как? тут есть ченить похожее на ваш способ приведения:
Это так, что сейчас ночь, а я выдаю желаемое за действительное. Извиняюсь. Ваш код работает, но делал я вот что:
C++
1
cout << (static_cast<long long unsigned int>(-4.0d)) << endl;
Именно беззнаковое число даёт ноль при таком преобразовании.

Добавлено через 2 минуты
Ведь, по идее, мантисса числа - это https://www.cyberforum.ru/cgi-bin/latex.cgi?{100}_{2}, а разряд знака - https://www.cyberforum.ru/cgi-bin/latex.cgi?{1}_{2}, так почему же выходит ноль?
0
Модератор
Эксперт С++
 Аватар для zss
13771 / 10964 / 6491
Регистрация: 18.12.2011
Сообщений: 29,241
19.02.2017, 07:36
Цитата Сообщение от Lyosha12 Посмотреть сообщение
-4.0d
Что значит буква d?
Мой компилятор (VS 2008) говорит:"Неправильный суфикс".
1
132 / 158 / 87
Регистрация: 06.04.2016
Сообщений: 992
19.02.2017, 08:34
Цитата Сообщение от Байт Посмотреть сообщение
Красиво! Можно короче
C++
1
2
3
int Sign(double X) {
* * return (X < 0) + (X > 0);
}
- Ваша программа не работает, нужно только так:
C++
1
return 0 - (X < 0) + (X > 0);
или так:
C++
1
return -(X < 0) + (X > 0);
0
Диссидент
Эксперт C
 Аватар для Байт
27714 / 17332 / 3810
Регистрация: 24.12.2010
Сообщений: 38,978
19.02.2017, 11:27
Цитата Сообщение от DemolitionMan Посмотреть сообщение
Ваша программа не работает, нужно только так:
C++
А так?
C++
1
2
3
int Sign(double X) {
  return ((X < 0) + (X > 0));
}
0
19.02.2017, 12:02

Не по теме:

Цитата Сообщение от Байт Посмотреть сообщение
А так?
Это подстраховка на случай, если приоритет у return будет выше, чем у сложения? :D

0
 Аватар для Lyosha12
41 / 41 / 11
Регистрация: 02.04.2016
Сообщений: 313
19.02.2017, 16:04
Цитата Сообщение от zss Посмотреть сообщение
Что значит буква d?
Мой компилятор (VS 2008) говорит:"Неправильный суфикс".
Видимо, это я употребил расширение компилятора MinGW, задающий литералу тип double.
C++
1
2
3
// warning: suffix for double constant is a GCC extension [enabled by default]
     cout << ((long long unsigned int)(-12.0d)) << endl;
                                        ^
В этом варианте не работает:
C++
1
cout << (static_cast<unsigned int>(-4.0f)) << endl; // 0
C++
1
cout << ((long long unsigned int)(-4.0f)) << endl; // 0
А вот так работает:
C++
1
2
    double x = -4.0;
    cout << *((unsigned long long int*)(&x)) << endl;
C++
1
2
    double x = -4.0;
    cout << ((unsigned long long int)(x)) << endl;
C++
1
2
    float x = -4.0;
    cout << ((unsigned int)(x)) << endl;
Получается, что литерал я не могу преобразовать к другому типу, а переменную - спокойно. Почему так выходит?
0
1394 / 1023 / 325
Регистрация: 28.07.2012
Сообщений: 2,813
19.02.2017, 16:10
Цитата Сообщение от Lyosha12 Посмотреть сообщение
В этом варианте не работает
А что ты ожидаешь увидеть, преобразуя отрицательное вещественное число к беззнаковому типу unsigned ...?

Добавлено через 1 минуту
Он тебе и округляет твое отрицательное вещественное число к ближашему представимому беззнаковому целому числу, т.е. к нулю.
1
 Аватар для Lyosha12
41 / 41 / 11
Регистрация: 02.04.2016
Сообщений: 313
19.02.2017, 16:27
Цитата Сообщение от nonedark2008 Посмотреть сообщение
Он тебе и округляет твое отрицательное вещественное число к ближашему представимому беззнаковому целому числу, т.е. к нулю.
Интересно. Этот момент прописан в стандарте? Если нет, то можно ли отключить это поведение?

Добавлено через 9 минут
Нашёл ответ, что моя деятельность, вообще-то, - UB, а также округление описано в стандарте
4.7 Integral conversions:
2 If the destination type is unsigned, the resulting value is the least unsigned integer congruent to the source integer (modulo 2n where n is the number of bits used to represent the unsigned type). [ Note: In a two’s complement representation, this conversion is conceptual and there is no change in the bit pattern (if there is no truncation). —end note ]
0
1394 / 1023 / 325
Регистрация: 28.07.2012
Сообщений: 2,813
19.02.2017, 16:29
Цитата Сообщение от Lyosha12 Посмотреть сообщение
Этот момент прописан в стандарте? Если нет, то можно ли отключить это поведение?
Что-то я какую-то фигню написал.
Цитата Сообщение от Lyosha12 Посмотреть сообщение
cout << (static_cast<unsigned int>(-4.0f)) << endl;
Короче, это и прочее является UB.
A prvalue of a floating point type can be converted to a prvalue of an integer type. The conversion truncates;
that is, the fractional part is discarded. The behavior is undefined if the truncated value cannot be
represented in the destination type.
Берем -4.0, отбрасываем дробную часть, получаем -4. -4 не представимо целевым беззнаковым типом - UB.
1
0 / 0 / 0
Регистрация: 23.12.2016
Сообщений: 15
20.02.2017, 14:40  [ТС]
C++ только начали проходить, функции еще не проходили, поэтому я в них вообще не разбираюсь. Вот мой код, но он, понятное дело, не работает:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <iostream>
#include <cmath>
 
using namespace std;
 
int Sign(double x)
{
    if (x < 0)
        return -1;
    else if (x = 0)
        return 0;
    else return = 1;
}
 
int main()
{
    double a, b;
    cin >> a, b;
    cout << Sign(a) + Sign(b);
 
    return 0;
}
0
Диссидент
Эксперт C
 Аватар для Байт
27714 / 17332 / 3810
Регистрация: 24.12.2010
Сообщений: 38,978
20.02.2017, 14:44
Цитата Сообщение от XoSSe Посмотреть сообщение
Вот мой код, но он, понятное дело, не работает:
А мне вот не понятно. Код производит впечатление рабочего. Что вам не нравится?
0
0 / 0 / 0
Регистрация: 23.12.2016
Сообщений: 15
20.02.2017, 14:51  [ТС]
По данному примеру: При вводе чисел -7.90 и 0.00 должно вывести -1, а выводит 0.
0
Эксперт CЭксперт С++
 Аватар для liv
5120 / 4573 / 855
Регистрация: 07.10.2015
Сообщений: 9,462
20.02.2017, 15:06
Лучший ответ Сообщение было отмечено XoSSe как решение

Решение

XoSSe, ошибки:
1) if (x == 0)
2) else return 1;
3) cin >> a >> b;
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <iostream>
#include <cmath>
 
using namespace std;
 
int Sign(double x)
{
    if (x < 0)
        return -1;
    else if (x == 0)
        return 0;
    else return 1;
}
 
int main()
{
    double a, b;
    cin >> a >> b;
    cout << Sign(a) + Sign(b);
 
    return 0;
}
1
0 / 0 / 0
Регистрация: 23.12.2016
Сообщений: 15
20.02.2017, 15:30  [ТС]
Спасибо!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
20.02.2017, 15:30
Помогаю со студенческими работами здесь

Написать функцию, которая вычисляет объем и площадь поверхности параллелепипеда, описать функцию IsSquare(K)
Здравствуйте, нужна помощь по решению двух зачад в TC++(Turbo C++); Задача 1. Написать функцию, которая вычисляет объем и площадь...

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

Описать функцию
Описать функцию TriangleP(a, h, P), находящую периметр P равнобедренного треугольника по его основанию a и высоте h, проведенной к...

Описать функцию
Помогите пожалуйста. Описать функцию, которая вычислит значение полинома в точке x Y(x)=(11*x^10)+(10*x^9)+(9*x^8)+...+2*x+1 Обратиться...

Описать функцию C++
Описать функцию: PowerA3(A), возвращающую третью степень числа A (A - вещественный параметр), С помощью этой функции найти третьи степени...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и источниками (напряжения, ЭДС и тока). Найти токи и напряжения во всех элементах. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru