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

Определить номер координатной четверти, в которой находится данная точка

12.09.2017, 17:39. Показов 11957. Ответов 19
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Даны координаты точки, не лежащей на координатных осях OX и OY. Определить номер координатной четверти, в которой находится данная точка.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
12.09.2017, 17:39
Ответы с готовыми решениями:

Определить номер координатной четверти, в которой находится данная точка
Даны координаты точки, не лежащей на координатных осях OX и OY. Определить номер координатной четверти, в которой находится данная ...

Определить номер четверти координатной плоскости, в которой находится точка с заданными координатами
Определить номер четверти координатной плоскости, в которой находится точка с координатами (x, y), x * y ≠ 0 Создать программу с...

Функция определяющая номер координатной четверти в которой находится точка
Приветствую всех! Нужна помощь с заданием. Необходимо описать функцию Quarter(x, y) целого типа, определяющую номер координатной...

19
58 / 62 / 34
Регистрация: 14.03.2014
Сообщений: 933
12.09.2017, 19:15
оулф,
Формулировку задания дольше набирать чем код.
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>
 
int main()
{
    using std::cin;
    using std::cout;
    int x, y;
    cin >> x >> y;
    if (x > 0 && y > 0)
        cout << "I";
    else if (x < 0 && y > 0)
        cout << "II";
    else if (x < 0 && y < 0)
        cout << "III";
    else if (x > 0 && y < 0)
        cout << "IV";
    else
        cout << "unknow";
 
    system("pause");
    return 0;
}
1
Диссидент
Эксперт C
 Аватар для Байт
27714 / 17332 / 3810
Регистрация: 24.12.2010
Сообщений: 38,978
12.09.2017, 22:29
Senarist, лень - не самый главный ваш порок
C++
1
2
3
4
chet = 0;
if (x <0) chet += 1
if (y < 0)  chet += 2;
    cout << "Tochka legit v chetverti @ << chet+1;
2
 Аватар для COKPOWEHEU
4079 / 2677 / 432
Регистрация: 09.09.2017
Сообщений: 11,888
13.09.2017, 09:11
Добавим немного битовой магии
C++
1
res = (x<0) | ((y<0)<<1)+1;
C++
1
2
int32_t x, y;
res = ((uint32_t)x>>31) | (((uint32_t)y>>30) & 2)+1;
И через честное вычисление угла
C++
1
2
3
float angle = atan2( y, x );
if( angle < 0 )angle += M_PI;
angle = (angle / 2*M_PI) + 1;
0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
12923 / 6792 / 1818
Регистрация: 18.10.2014
Сообщений: 17,187
13.09.2017, 09:49
Табличный подход

C++
1
2
3
4
5
6
7
8
9
10
inline int sign(int v) { return (v > 0) - (v < 0); }
 
const int Q[3][3] = 
{
  2, 0, 1,
  0, 0, 0,
  3, 0, 4 
};
 
int q = Q[sign(-y) + 1][sign(x) + 1];
позволит вам легко и непринужденно (и, главное, наглядно) управлять поведением алгорима. Особенно в пограничных ситуациях - когда точка лежит на оси или в начале координат.
1
34 / 36 / 17
Регистрация: 16.04.2017
Сообщений: 478
Записей в блоге: 4
13.09.2017, 10:59
COKPOWEHEU, через угол-это мощно.
0
677 / 479 / 216
Регистрация: 06.09.2013
Сообщений: 1,312
13.09.2017, 12:42
TheCalligrapher, так можно проще вроде
C++
1
2
3
4
5
6
const int Q[2][2] =
{
  3, 2,
  4, 1
};
int q = Q[x > 0][y > 0];
А понял, у вас там оси обрабатываются
0
 Аватар для COKPOWEHEU
4079 / 2677 / 432
Регистрация: 09.09.2017
Сообщений: 11,888
13.09.2017, 12:57
woldemas, этот код делает тоже самое, что первый тут. И обладает тем же самым недостатком: значением TRUE считается не только 0x01, но и любое другое ненулевое число. Так что теоретически на каком-то экзотическом компиляторе оба эти варианта могут выдать непонятно что.
0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
12923 / 6792 / 1818
Регистрация: 18.10.2014
Сообщений: 17,187
13.09.2017, 17:29
Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
И обладает тем же самым недостатком: значением TRUE считается не только 0x01, но и любое другое ненулевое число. Так что теоретически на каком-то экзотическом компиляторе оба эти варианта могут выдать непонятно что.
Значение true в арифметическом контексте всегда дает число 1. Никаких вариантов. Данный код в этом плане соврешенно безопасен и "непонятно что" выдать не может.
0
 Аватар для COKPOWEHEU
4079 / 2677 / 432
Регистрация: 09.09.2017
Сообщений: 11,888
13.09.2017, 23:03
Не понял что имеется в виду под "в арифметическом контексте".
1 - true
2 - true
10 - true
-7 - true
Что мешает реализовать сравнение как-то так (с обработкой ошибок не мудрил - этот код только для примера)
Code
1
int32_t less(int32_t a, int32_t b){return ((a-b)&(1<<31));}
разумеется, спрятав подобную извращенную логику в недра компилятора а то и железа. Тогда возвращаемое значение будет 0 либо 2`147`483`648 - и все равно корректно восприниматься логическими операторами.
0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
12923 / 6792 / 1818
Регистрация: 18.10.2014
Сообщений: 17,187
14.09.2017, 00:05
Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
Не понял что имеется в виду под "в арифметическом контексте".
Имеется в виду: в контексте, где булевский тип явно или неявно преобразуется к арифметическому типу (к int, например). В таких контекстах true всегда дает 1, а false всегда дает 0.

Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
1 - true
2 - true
10 - true
-7 - true
Во-первых, 1, 2, -7 и т.д.- это не true. Это значения типа int, которые при преобразовании к типу bool дадут в результате true.

Во-вторых, в рассматриваемых примерах, т.е. в контексте операторов [] или -, преобразование производится в противоположном направлении: от булевского значения к целочисленному значению, т.е. от bool к int. При преобразовании в эту строну значение true всегда гарантированно даст 1. Никакой неоднозначности здесь нет.

Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
Что мешает реализовать сравнение как-то так (с обработкой ошибок не мудрил - этот код только для примера)
C++
1
int32_t less(int32_t a, int32_t b){return ((a-b)&(1<<31));}
Например то, в отсутствие некоей специальной насущной необходимости, никакого смысла в этой неудобоваримой каше из битовых операций нет. (Да еще и со знаковыми типами... Вот где неоднозначность.)

Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
и все равно корректно восприниматься логическими операторами
Логическими? А логические-то тут при чем? Что-то я пока не видел использования логических операторов ни в одном из приведенных примеров.
0
 Аватар для COKPOWEHEU
4079 / 2677 / 432
Регистрация: 09.09.2017
Сообщений: 11,888
14.09.2017, 00:19
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
Имеется в виду: в контексте, где булевский тип явно или неявно преобразуется к арифметическому
Это если он считается булевским. Сколько я помню, тип bool ввели недавно, до этого его с успехом заменяли целочисленные типы, так что приведения может и не быть.
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
Во-первых, 1, 2, -7 и т.д.- это не true. Это значения типа int, которые при преобразовании к типу bool дадут в результате true.
Не уверен что в логических операторах (if, while, &&, || и т.п.), а уж тем более в побитовых, используется приведение типов - они интерпретируют целые числа самостоятельно.
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
никакого смысла в этой неудобоваримой каше из битовых операций нет.
это ведь всего лишь пример - мало ли как будет удобнее реализовать подобное на хоть какой-то архитектуре. Не стоит воспринимать его буквально.
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
Что-то я пока не видел использования логических операторов ни в одном из приведенных примеров.
В первых, не-извращенских, примерах было использование if'а - чем не логический оператор?
0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
12923 / 6792 / 1818
Регистрация: 18.10.2014
Сообщений: 17,187
14.09.2017, 00:41
Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
Это если он считается булевским. Сколько я помню, тип bool ввели недавно, до этого его с успехом заменяли целочисленные типы, так что приведения может и не быть.
Это как это??? Тип bool в языке С++ существует с начала времен, как и правила его поведения. Никто его "недавно" не вводил.

Но даже в языке С, где встроенный тип _Bool появился лишь относительно "недавно" (в 1999), все операторы с условно "булевским" результатом всегда гарантированно возвращают 1 в качестве значения "истина". То есть (5 > 3) + (10 < 20) всегда гарантированно даст 2 и в С++, и в С. Без вариантов.

Так что никаких проблем такого рода в вышеприведенных примерах нет (даже если рассматривать их с точки зрения классического С).

Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
Не уверен что в логических операторах (if, while, &&, || и т.п.), а уж тем более в побитовых, используется приведение типов - они интерпретируют целые числа самостоятельно.
Во-первых, я - уверен. В языке С++, согласно его спецификации, операнды логических операторов &&, || всегда неявно приводятся к типу bool. Операнды if, while и т.п. (которые, кстати, никакие не "операторы", а statements; "инструкции" их иногда называют, чтобы не путать с операторами) тоже неявно приводят свои условия к типу bool. Это требование стандарта языка.

Побитовые операторы не являются логическими. Поэтому зачем вы их упомянули в этом контексте - мне не ясно.

Во-вторых, а какая разница? Где в вышеприведенных примерах вы усмотрели зависимость поведения кода от того, происходит ли приведение к bool или "они интерпретируют целые числа самостоятельно"? Покажите пальцем, где именно поведение может разниться.

Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
В первых, не-извращенских, примерах было использование if'а - чем не логический оператор?
Я привык операторами называть именно операторы (т.е. operators), а не statements, типа if.

Но не суть. Пусть даже речь идет об if. Вы утверждали, что в моем примере кода (который, кстати, не содержит if), так и в каком-то другом примере кода содержится зависимость от особенностей конкретной реализации (компилятора и т.п.). Так где конкретно вы усмотрели такую зависимость? Пусть даже и через if. Покажите, где.
0
 Аватар для COKPOWEHEU
4079 / 2677 / 432
Регистрация: 09.09.2017
Сообщений: 11,888
14.09.2017, 09:01
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
Это как это??? Тип bool в языке С++ существует с начала времен, как и правила его поведения. Никто его "недавно" не вводил.
Но даже в языке С, где встроенный тип _Bool появился лишь относительно "недавно" (в 1999), все операторы с условно "булевским" результатом всегда гарантированно возвращают 1 в качестве значения "истина". То есть (5 > 3) + (10 < 20) всегда гарантированно даст 2 и в С++, и в С. Без вариантов.
Так что никаких проблем такого рода в вышеприведенных примерах нет (даже если рассматривать их с точки зрения классического С).
Хорошо-хорошо, уговорили. Пусть будет явное приведение. Но я все равно буду стараться обходиться без подобных извращений. Пусть код будет на пару команд длиннее и дольше, зато понятный любому, переносимый и в чьем поведении я уверен.
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
Но не суть. Пусть даже речь идет об if. Вы утверждали, что в моем примере кода (который, кстати, не содержит if), так и в каком-то другом примере кода содержится зависимость от особенностей конкретной реализации (компилятора и т.п.). Так где конкретно вы усмотрели такую зависимость? Пусть даже и через if. Покажите, где.
Это был пример когда совершенно корректное представление булевских значений, рабочее для применения по назначению (if, while, ||, ...) сломает логику наших примеров.
0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
12923 / 6792 / 1818
Регистрация: 18.10.2014
Сообщений: 17,187
14.09.2017, 10:13
Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
Хорошо-хорошо, уговорили. Пусть будет явное приведение. Но я все равно буду стараться обходиться без подобных извращений. Пусть код будет на пару команд длиннее и дольше, зато понятный любому, переносимый и в чьем поведении я уверен.
Код вида (x > 0) - (x < 0) для вычисления функции sign должен быть мгновено понятен любому С или С++ программисту. Это - базовые знания. Не говоря уже о том, что это идиома. Никаких извращений в нем нет даже отдаленно.

Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
Это был пример когда совершенно корректное представление булевских значений, рабочее для применения по назначению (if, while, ||, ...) сломает логику наших примеров.
И? Где же этот пример? Покажите нам его.

Меня такой пример интересует хотя бы в плане того, что я знаю, что в языке С++ не существует способов увидеть внутреннее представление булевских значений, кроме прямой переинтерпретации сырой памяти. Без этого булевские значения в арифметических контекстах всегда будут выступать как 0 или 1, независимо от использованного внутреннего представления.

Однако разглядывания сырой памяти у нас тут пока не было. Но вы продолжаете утверждать, что пример с зависимостью от представления был. Я заинтригован. Процитируйте этот пример и покажите, где в нем есть такая зависимость.
0
 Аватар для COKPOWEHEU
4079 / 2677 / 432
Регистрация: 09.09.2017
Сообщений: 11,888
14.09.2017, 12:57
Цитата Сообщение от woldemas Посмотреть сообщение
int q = Q[x > 0][y > 0];
Если операции сравнения выдают не 0/1 а число во всем диапазоне, обращение будет не к 0-3 элементу а неизвестно куда.
0
34 / 36 / 17
Регистрация: 16.04.2017
Сообщений: 478
Записей в блоге: 4
14.09.2017, 13:12
COKPOWEHEU, тебе TheCalligrapher уже написал:
true=1,false=0-других вариантов нет
from the C++ standard (§4.7/4): "If the source type is bool, the value false is converted to zero and the value true is converted to one."
0
 Аватар для COKPOWEHEU
4079 / 2677 / 432
Регистрация: 09.09.2017
Сообщений: 11,888
14.09.2017, 15:46
Повторюсь:
Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
Хорошо-хорошо, уговорили. Пусть будет явное приведение. Но я все равно буду стараться обходиться без подобных извращений. Пусть код будет на пару команд длиннее и дольше, зато понятный любому, переносимый и в чьем поведении я уверен.
0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
12923 / 6792 / 1818
Регистрация: 18.10.2014
Сообщений: 17,187
14.09.2017, 17:23
Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
Если операции сравнения выдают не 0/1 а число во всем диапазоне, обращение будет не к 0-3 элементу а неизвестно куда.
Операции сравнения не могут выдавать "не 0/1 а число во всем диапазоне".

В языке С++ операции сравнения выдают false или true, которые внутри оператора [] будут неявно преобразованы к целочисленному типу и гарантированно дадут 0 или 1.

В языке С операции сравнения сразу гарантированно выдают 0 или 1.

Так что никакой неоднозначности тут нет и быть не может.
0
1472 / 827 / 140
Регистрация: 12.10.2013
Сообщений: 5,456
15.09.2017, 13:12
Цитата Сообщение от оулф Посмотреть сообщение
Определить номер координатной четверти
Изначальная цель получать угол отрезка от 0 до 2 пи?
π - atan2(y(A),-x(A))

Добавлено через 15 секунд
Цитата Сообщение от оулф Посмотреть сообщение
Определить номер координатной четверти
Изначальная цель получать угол отрезка от 0 до 2 пи?
π - atan2(y(A),-x(A))
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
15.09.2017, 13:12
Помогаю со студенческими работами здесь

if геометрия (Переменной К присвоить номер четверти, в которой находится точка с коэффициентами x,y)
Переменной К присвоить номер четверти, в которой находится точка с коэффициентами x,y (х,у не равны нулю )

В какой координатной четверти плоскости находится точка.
1)определить в какой четверти координатной плоскости находится точка.

Определить номер координатной четверти, в которой находится данная точка
Даны координаты точки, не лежащей на координатных осях ох и оу. Определить номер координатной четверти, в которой находится данная точка.

Ветвление. Определить номер координатной четверти, в которой находится данная точка
Даны координаты точки, не лежащей на координатных осях OX и OY. Определить номер координатной четверти, в которой находится данная точка.

Вывести номер координатной четверти, в которой находится данная точка
Даны вещественные координаты точки, не лежащей на координатных осях OX и OY. Вывести номер координатной четверти, в которой находится...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru