Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.67
electromind
0 / 0 / 0
Регистрация: 11.06.2009
Сообщений: 55
#1

как опустить знак "-"? - C++

11.06.2009, 14:04. Просмотров 1038. Ответов 19
Метки нет (Все метки)

первые дни учебы с++ задали задачу
пользователь вводит 2 значения радиусов и координаты х и y.
нужно определить принадлежит ли данная точка данной области (между большим и меньшими кругами)
само решение написал... геометрически я понимаю как его решить...но компилятор (MS VS 2008) ругается на
C++
1
l=sqrt(x+y);
error C2668: 'sqrt' : ambiguous call to overloaded function
подскажите направление решения данной проблемы
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 <math.h>
using namespace std;
void main ()
{
float r1,r2,l;
unsigned int x,y;
cout<<"Vvedite radius bol'shego kruga - ";
cin>>r1;
cout<<"\nVvedite radius men'shego kruga - ";
cin>>r2;
cout<<"\nVvedite koordinatu X - ";
cin>>x;
cout<<"\nVvedite koordinatu Y - ";
cin>>y;
l=sqrt(x+y);
if (l>r1||l<r2)
    cout<<"Tochka c koordinatami X-"<<x<<" Y-"<<y<<" ne prenadlezhit zadannoy oblasti\n";
else
    cout<<"Tochka c koordinatami X-"<<x<<" Y-"<<y<<" prenadlezhit zadannoy oblasti\n";
 
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.06.2009, 14:04     как опустить знак "-"?
Посмотрите здесь:

Описать структуру "знак зодиака" C++
C++ Ввести из клавиатуры два числа, знак операции между ними и вывести результат, к нажатию "?".
C++ поясните что обозначает знак "?" в этой строке
C++ Совсем пустяковая проблема в функции - говорит что пропущен знак ";"
Что означает знак " -> " в с++ C++
Переписать текстовый файл удалив строчку в которой стоит знак "?" C++
Что означает знак двойного двоеточия "::"? C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
BullDogoff
10 / 10 / 1
Регистрация: 16.05.2009
Сообщений: 30
11.06.2009, 14:12     как опустить знак "-"? #2
У меня VS97 сожрал нечто подобное..
Попробуй передавать модуль (abs() вроде), судя по еггогу, что-то параметр ему не нравится..
Т.е. так:
C++
1
l = sqrt(abs(x + y));
З.Ы.:CyBOSSeR, VS08 что теперь, типы сама не приводит как надо? У мну только предупреждения на эту тему..
З.З.Ы.:Однако, получается, разучилась..
CyBOSSeR
Эксперт C++
2299 / 1669 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
11.06.2009, 14:13     как опустить знак "-"? #3
Вместо:
C++
1
l=sqrt(x+y);
напиши:
C++
1
l=sqrt((double)x+(double)y);
или
C++
1
l=sqrt((double)(x+y));
Дело в том, что функция sqrt, ожидает вещественное число, т.е. float или double, а ты ей пытаешься всучить unsigned int. Для того чтобы все заработало нужно привести переменную типа unsigned int к типу double или float.
Оператор
C++
1
(double)x
как раз таки преобразует unsigned int к double.
electromind
0 / 0 / 0
Регистрация: 11.06.2009
Сообщений: 55
11.06.2009, 14:18  [ТС]     как опустить знак "-"? #4
Цитата Сообщение от CyBOSSeR Посмотреть сообщение
Вместо:
C++
1
l=sqrt(x+y);
напиши:
C++
1
l=sqrt((double)x+(double)y);
или
C++
1
l=sqrt((double)(x+y));
Дело в том, что функция sqrt, ожидает вещественное число, т.е. float или double, а ты ей пытаешься всучить unsigned int. Для того чтобы все заработало нужно привести переменную типа int к типу double или float.
Оператор
C++
1
(double)x
как раз таки преобразует int к double.
спасибо огромное... помогло
и еще большее спасибо за разъяснения
EnzoMatrix
120 / 120 / 5
Регистрация: 14.03.2009
Сообщений: 462
11.06.2009, 14:21     как опустить знак "-"? #5
только для подсчета l нужно брать квадрат x и квадрат y, а не просто x и y
electromind
0 / 0 / 0
Регистрация: 11.06.2009
Сообщений: 55
12.06.2009, 13:06  [ТС]     как опустить знак "-"? #6
Цитата Сообщение от CartmanRules Посмотреть сообщение
только для подсчета l нужно брать квадрат x и квадрат y, а не просто x и y
тоже вариант )) спасибо за подсказку.. упустил

Добавлено через 22 часа 38 минут 40 секунд
Цитата Сообщение от CartmanRules Посмотреть сообщение
только для подсчета l нужно брать квадрат x и квадрат y, а не просто x и y
попытался взять в квадрат х и у и столкнулся с проблемой
при введении х либо у в отрицательном значении (например: -5) переменная х получает значение 4 миллиона .... и т.д.
внимание вопрос
как опустить знак "-" в переменных х и у ?
Somebody
2779 / 1593 / 142
Регистрация: 03.12.2007
Сообщений: 4,175
Завершенные тесты: 1
12.06.2009, 13:22     как опустить знак "-"? #7
x и y тут unsigned.
Вообще, тут нет условия, что они целые, тогда лучше вообще float, тогда и проблем с приведением типов не будет.
electromind
0 / 0 / 0
Регистрация: 11.06.2009
Сообщений: 55
12.06.2009, 13:33  [ТС]     как опустить знак "-"? #8
C++
1
2
3
4
float x;
cout<<"\nVvedite koordinatu X - ";
cin>>x;
cout<<(unsigned float)x;
при введении х "-5" cout выводит на экран значение переменной х 4миллиона с копейками
и так же при объявлениии
C++
1
unsigned float x;
Patch
2276 / 491 / 11
Регистрация: 01.04.2009
Сообщений: 2,178
12.06.2009, 13:59     как опустить знак "-"? #9
Цитата Сообщение от electromind Посмотреть сообщение
при введении х либо у в отрицательном значении
да мне тоже интересно, как это бесзаковая переменная может быть меньше нуля??
electromind
0 / 0 / 0
Регистрация: 11.06.2009
Сообщений: 55
12.06.2009, 14:13  [ТС]     как опустить знак "-"? #10
спасибо за ответ
первые дни учебы с++
мануалы послать читать любой может.. а объяснить где я ошибаюсь - единицы
возникает вопрос: зачем вообще на этом форуме раздел "С/С++ для начинающих"
Patch
2276 / 491 / 11
Регистрация: 01.04.2009
Сообщений: 2,178
12.06.2009, 14:31     как опустить знак "-"? #11
electromind,
блин... ты вообще понимаешь, что такое БЕЗЗНАКОВАЯ переменная?
это переменная, у которой НЕТ ЗНАКА!
соответственно, она ВСЕГДА положительна, ВСЕГДА больше нуля.
а ты создаешь переменные именно беззнаковые.
об этом говорит спецификация unsigned.
или ты и основы английского в школе не проходил????
а потом ты пытаешься присвоить им отрицательный значения.
и получается фигня.
EnzoMatrix
120 / 120 / 5
Регистрация: 14.03.2009
Сообщений: 462
12.06.2009, 15:10     как опустить знак "-"? #12
Цитата Сообщение от electromind Посмотреть сообщение
мануалы послать читать любой может.. а объяснить где я ошибаюсь - единицы
возникает вопрос: зачем вообще на этом форуме раздел "С/С++ для начинающих"
сам понял чего сказал? а давай каждый ничего делать не будет, пусть все за них другие делают, иначе для чего помощь была придумана
к тому же тебе довольно таки внято объянили где ошибка и как ее исправить, после всего этого ты еще и жалуешься
вопрос в том же духе: зачем тебе книжки если ты их не читаешь?
electromind
0 / 0 / 0
Регистрация: 11.06.2009
Сообщений: 55
12.06.2009, 16:50  [ТС]     как опустить знак "-"? #13
значит я чего то не так понял в лекции...
я понял что unsigned возвращает то же значение только без знака минус
т.е. если введен -5 на выходе получим 5.
не ругайтесь... возможно у нас не совсем хорошо объясняют...
EnzoMatrix
120 / 120 / 5
Регистрация: 14.03.2009
Сообщений: 462
12.06.2009, 16:56     как опустить знак "-"? #14
Цитата Сообщение от electromind Посмотреть сообщение
я понял что unsigned возвращает то же значение только без знака минус
т.е. если введен -5 на выходе получим 5.
не совсем, если введено -5 то будет выдано 65536-5, т.е. 65531
переменные типа unsigned int принимают значения от 0 до 65535 , если же ты вводишь отрицательное число то оно не попадает в этот промежуток
при переполнении число идет по кругу , т.е. 65535+1=0 и наоборот, в случае с -5 можно записать как 0-5
electromind
0 / 0 / 0
Регистрация: 11.06.2009
Сообщений: 55
12.06.2009, 17:58  [ТС]     как опустить знак "-"? #15
т.е. если вводится отрицательное число, то нужно сделать проверку переменной на отрицательность и затем из этого числа вычесть такое же умноженное на 2 ?
C++
1
2
3
int x=-20,y;
if (x<0)
y=x-x*2;
или есть способы проще ?
EnzoMatrix
120 / 120 / 5
Регистрация: 14.03.2009
Сообщений: 462
12.06.2009, 18:01     как опустить знак "-"? #16
Цитата Сообщение от electromind Посмотреть сообщение
т.е. если вводится отрицательное число, то нужно сделать проверку переменной на отрицательность и затем из этого числа вычесть такое же умноженное на 2 ?
если честно, не понял чего ты имел в виду
Цитата Сообщение от electromind Посмотреть сообщение
или есть способы проще ?
чтобы работать с отрицательными числами просто убери слово unsigned при объявлении, как в последнем своем посте
electromind
0 / 0 / 0
Регистрация: 11.06.2009
Сообщений: 55
12.06.2009, 18:06  [ТС]     как опустить знак "-"? #17
мне как раз и не нужно работать с отрицательными ))
нужно если пользователь ввел отрицательное число просто опустить знак "-" и работать с положительным
т.е. если введено -5.. работать нужно с 5
Patch
2276 / 491 / 11
Регистрация: 01.04.2009
Сообщений: 2,178
12.06.2009, 18:12     как опустить знак "-"? #18
Цитата Сообщение от electromind Посмотреть сообщение
мне как раз и не нужно работать с отрицательными ))
нужно если пользователь ввел отрицательное число просто опустить знак "-" и работать с положительным
т.е. если введено -5.. работать нужно с 5
объявляй БЕЗ unsigned.
а при присвоении пиши
C
1
r1 = abs(r1);
EnzoMatrix
120 / 120 / 5
Регистрация: 14.03.2009
Сообщений: 462
12.06.2009, 18:12     как опустить знак "-"? #19
есть функция abs() то бишь модуль
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.06.2009, 19:02     как опустить знак "-"?
Еще ссылки по теме:

C++ Написать функцию поиска человека по заданному полю структуры "Знак Зодиака" (найти и исправить ошибки в коде)
C++ Как опустить строчку "Press and key to continue' вниз?
C++ При экспорте кода в PDF русский текст заменяется на знак "?"
Реализовать поиск по заданному полю в массиве объектов типа "Знак зодиака" C++

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

Или воспользуйтесь поиском по форуму:
CyBOSSeR
Эксперт C++
2299 / 1669 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
12.06.2009, 19:02     как опустить знак "-"? #20
Если есть ораничение, что пользователь может вводить только положительные координаты x и y, то можно сделать так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
int x = 0;
int y = 0;
 
cout << "x = ";
cin >> x;
 
while(x < 0){
  cout << "x не может быть меньше нуля. Повторите ввод: ";
  cin >> x;
}
 
cout << "y = ";
cin >> y;
 
while(y < 0){
  cout << "y не может быть меньше нуля. Повторите ввод: ";
  cin >> y;
}
Тем самым у нас будет защита от ввода пользователем некорректных исходных данных, о чем он (пользователь) будет предупрежден.
Ты можешь использовать подобные конструкции везде, где есть определенные ограничения на исходные данные.
Т.е. проверяешь входные данные на соответствие ограничениям, если не соответствуют - информируешь пользователя об ограничениях и просишь повторить ввод.
Yandex
Объявления
12.06.2009, 19:02     как опустить знак "-"?
Ответ Создать тему
Опции темы

Текущее время: 12:22. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru