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

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

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

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

11.06.2009, 14:04. Просмотров 1068. Ответов 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++
Помогите, пожалуйста, не пойму как написать чтобы меняло знак &quot; $ &quot; на &quot; * &quot; к первому вхождения символа &quot; ? &quot; . У меня меняется все не...

В зависимости от времени года "весна", "лето", "осень", "зима" определить погоду "тепло", "жарко", "холодно", "очень холодно" - C++
В зависимости от времени года &quot;весна&quot;, &quot;лето&quot;, &quot;осень&quot;, &quot;зима&quot; определить погоду &quot;тепло&quot;, &quot;жарко&quot;, &quot;холодно&quot;, &quot;очень холодно&quot;. Я так...

Как опустить строчку "Press and key to continue' вниз? - C++
// training4.1.cpp: определяет точку входа для консольного приложения. // #include &quot;stdafx.h&quot; #include &lt;iostream&gt; using...

Реализовать классы "Воин", "Пехотинец", "Винтовка", "Матрос", "Кортик" (наследование) - C++
Разработать программу с использованием наследования классов, реализующую классы: − воин; − пехотинец(винтовка); − матрос(кортик). ...

Как отключить автоматическое добавление "_" "@" "number" к имени экстернального метода? - C++
Здраствуйте! Подскажите как это делается? (вопрос в названии темы) среда : VS2013 проект компилируется в dll файл в начале...

Создать абстрактный класс "Издание" и производные классы "Книга", "Статья", "Электронный ресурс" - C++
1. Создать абстрактный класс Издание с методами, позволяющими вывести на экран информацию об издании, а также определить является ли данное...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
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++
2300 / 1670 / 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
2788 / 1602 / 145
Регистрация: 03.12.2007
Сообщений: 4,193
Завершенные тесты: 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;
или есть способы проще ?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.06.2009, 17:58
Привет! Вот еще темы с ответами:

Создать класс "Книга" с полями "название книги", "количество страниц", "год издания" - C++
Создать класс Книга поля: название книги,количество страниц,год издания методы: вычислить сколько лет книге и количество дней прошедших...

Создать класс "Вентилятор" содержащий в себе классы: "Двигатель", "Контроллер", "Пульт управления" - C++
Помогите с кодом написания задачи, не понимаю как написать классы в классе. Нужно создать класс &quot;вентилятор&quot; содержащий в себе классы:...

Определить тип данных "Запись", имеющий поля "Фамилия", "Пол", "Зарплата" - C++
определить тип данных запись имеющий поля фамилия пол зарплата. определить массив из 10 записей. в программе ввести в массив данные и...

поясните что обозначает знак "?" в этой строке - C++
for(x=x_srt;(dx&gt;0) ? x&lt;=x_end : x&gt;=x_end ;x+=dx) Добавлено через 1 минуту и заодно знак двоеточие))


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
12.06.2009, 17:58
Ответ Создать тему
Опции темы

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