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

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

11.06.2009, 14:04. Просмотров 1331. Ответов 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";
 
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
11.06.2009, 14:04
Ответы с готовыми решениями:

Необходимо между каждой парой цифр поставить знак "<", ">" или "="
Дана строка, состоящая из цифр. Необходимо между каждой парой цифр поставить знак &quot;&lt;&quot;, &quot;&gt;&quot; или &quot;=&quot;....

Поменять знак " $ " на " * " к первому вхождению символа " ? "
Помогите, пожалуйста, не пойму как написать чтобы меняло знак &quot; $ &quot; на &quot; * &quot; к первому вхождения...

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

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

19
10 / 10 / 1
Регистрация: 16.05.2009
Сообщений: 30
11.06.2009, 14:12 2
У меня VS97 сожрал нечто подобное..
Попробуй передавать модуль (abs() вроде), судя по еггогу, что-то параметр ему не нравится..
Т.е. так:
C++
1
l = sqrt(abs(x + y));
З.Ы.:CyBOSSeR, VS08 что теперь, типы сама не приводит как надо? У мну только предупреждения на эту тему..
З.З.Ы.:Однако, получается, разучилась..
0
Эксперт С++
2328 / 1701 / 148
Регистрация: 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.
1
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.
спасибо огромное... помогло
и еще большее спасибо за разъяснения
0
121 / 121 / 14
Регистрация: 14.03.2009
Сообщений: 462
11.06.2009, 14:21 5
только для подсчета l нужно брать квадрат x и квадрат y, а не просто x и y
0
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 миллиона .... и т.д.
внимание вопрос
как опустить знак "-" в переменных х и у ?
0
2818 / 1628 / 252
Регистрация: 03.12.2007
Сообщений: 4,223
12.06.2009, 13:22 7
x и y тут unsigned.
Вообще, тут нет условия, что они целые, тогда лучше вообще float, тогда и проблем с приведением типов не будет.
0
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;
0
2341 / 497 / 22
Регистрация: 01.04.2009
Сообщений: 2,200
12.06.2009, 13:59 9
Цитата Сообщение от electromind Посмотреть сообщение
при введении х либо у в отрицательном значении
да мне тоже интересно, как это бесзаковая переменная может быть меньше нуля??
0
0 / 0 / 0
Регистрация: 11.06.2009
Сообщений: 55
12.06.2009, 14:13  [ТС] 10
спасибо за ответ
первые дни учебы с++
мануалы послать читать любой может.. а объяснить где я ошибаюсь - единицы
возникает вопрос: зачем вообще на этом форуме раздел "С/С++ для начинающих"
0
2341 / 497 / 22
Регистрация: 01.04.2009
Сообщений: 2,200
12.06.2009, 14:31 11
electromind,
блин... ты вообще понимаешь, что такое БЕЗЗНАКОВАЯ переменная?
это переменная, у которой НЕТ ЗНАКА!
соответственно, она ВСЕГДА положительна, ВСЕГДА больше нуля.
а ты создаешь переменные именно беззнаковые.
об этом говорит спецификация unsigned.
или ты и основы английского в школе не проходил????
а потом ты пытаешься присвоить им отрицательный значения.
и получается фигня.
0
121 / 121 / 14
Регистрация: 14.03.2009
Сообщений: 462
12.06.2009, 15:10 12
Цитата Сообщение от electromind Посмотреть сообщение
мануалы послать читать любой может.. а объяснить где я ошибаюсь - единицы
возникает вопрос: зачем вообще на этом форуме раздел "С/С++ для начинающих"
сам понял чего сказал? а давай каждый ничего делать не будет, пусть все за них другие делают, иначе для чего помощь была придумана
к тому же тебе довольно таки внято объянили где ошибка и как ее исправить, после всего этого ты еще и жалуешься
вопрос в том же духе: зачем тебе книжки если ты их не читаешь?
0
0 / 0 / 0
Регистрация: 11.06.2009
Сообщений: 55
12.06.2009, 16:50  [ТС] 13
значит я чего то не так понял в лекции...
я понял что unsigned возвращает то же значение только без знака минус
т.е. если введен -5 на выходе получим 5.
не ругайтесь... возможно у нас не совсем хорошо объясняют...
0
121 / 121 / 14
Регистрация: 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
0
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;
или есть способы проще ?
0
121 / 121 / 14
Регистрация: 14.03.2009
Сообщений: 462
12.06.2009, 18:01 16
Цитата Сообщение от electromind Посмотреть сообщение
т.е. если вводится отрицательное число, то нужно сделать проверку переменной на отрицательность и затем из этого числа вычесть такое же умноженное на 2 ?
если честно, не понял чего ты имел в виду
Цитата Сообщение от electromind Посмотреть сообщение
или есть способы проще ?
чтобы работать с отрицательными числами просто убери слово unsigned при объявлении, как в последнем своем посте
0
0 / 0 / 0
Регистрация: 11.06.2009
Сообщений: 55
12.06.2009, 18:06  [ТС] 17
мне как раз и не нужно работать с отрицательными ))
нужно если пользователь ввел отрицательное число просто опустить знак "-" и работать с положительным
т.е. если введено -5.. работать нужно с 5
0
2341 / 497 / 22
Регистрация: 01.04.2009
Сообщений: 2,200
12.06.2009, 18:12 18
Цитата Сообщение от electromind Посмотреть сообщение
мне как раз и не нужно работать с отрицательными ))
нужно если пользователь ввел отрицательное число просто опустить знак "-" и работать с положительным
т.е. если введено -5.. работать нужно с 5
объявляй БЕЗ unsigned.
а при присвоении пиши
C
1
r1 = abs(r1);
0
121 / 121 / 14
Регистрация: 14.03.2009
Сообщений: 462
12.06.2009, 18:12 19
есть функция abs() то бишь модуль
0
Эксперт С++
2328 / 1701 / 148
Регистрация: 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;
}
Тем самым у нас будет защита от ввода пользователем некорректных исходных данных, о чем он (пользователь) будет предупрежден.
Ты можешь использовать подобные конструкции везде, где есть определенные ограничения на исходные данные.
Т.е. проверяешь входные данные на соответствие ограничениям, если не соответствуют - информируешь пользователя об ограничениях и просишь повторить ввод.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
12.06.2009, 19:02

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Для каждой строки найти слова, которые не имеют ни одного из букв: "l", "k", "r", "s" i "j"
Задано символьные строки. Строка состоит из нескольких слов (наборов символов), которые разделяются...

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

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

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


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

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