Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 01.05.2011, 03:27   #1
IGOMERL
Пользователь
 
Регистрация: 15.03.2011
Сообщений: 25
По умолчанию Растояние между двумя окружностями

Имею код:

Код:
Program circle;
uses crt;
var x1,y1,r1,r2,x2,y2: integer;
s:real;
begin 
writeln ('вводим данные об окружностях');
readln (x1);
readln (y1);
readln (r1);
readln (x2);
readln (y2);
readln (r2);
{чтобы найти расстояние между окружностями используем формулу:
корень квадратный из квадрата х2-х1 пибавить квадрат у2-у1}
s:=sqrt(sqr(x2-x1)+sqr(y2-y1));

writeln ('x1=',x1);

writeln ('y1=',y1);

writeln ('x2=',x2);

writeln ('y2=',y2);

writeln ('S=',S:3:2);
readln;
end.
вот в последней строчке выдаёт ошибку... по сути sqr(x2-x1) при любый значениях х2-х1 должно быть положительным числом... т.к. любое число в квадрате положительное ...
у меня иногда выходит отрицательные...

Пример:
x1:=200;
y1:=100;
x2:=400;
y2:=100;
s получается равным 159,8 хотя растояние между центрами окружностей 200

Но если мы задаём
x1:=250;
y1:=100;
x2:=350;
y2:=100
то s = 100 программа считает правильно...
помогите с кодом...



________
Код нужно оформлять по правилам:
тегом [CODE]..[/СODE] (это кнопочка с решёточкой #)
Не забывайте об этом!
Модератор.

Последний раз редактировалось Serge_Bliznykov; 01.05.2011 в 08:15.
IGOMERL вне форума Ответить с цитированием
Старый 01.05.2011, 07:46   #2
_-Re@l-_
C++, Java
Старожил
 
Аватар для _-Re@l-_
 
Регистрация: 10.04.2010
Сообщений: 2,665
По умолчанию

А вам что именно нужно? Расстояние между центрами окружностей или между окружностями?

И ещё. Зачем вы вводите радиус, если вы его не используете?

P.S. Если между центрами, то вот рабочий код:
Код:
uses crt;
var
   x1,y1,x2,y2:Real;
   S:Real;
begin
     readln(x1);
     readln(x2);
     readln(y1);
     readln(y2);
     s:=Sqrt(Sqr(x2-x1)+Sqr(y2-y1));
     writeln(s:0:3);
     readln;
end.

Последний раз редактировалось _-Re@l-_; 01.05.2011 в 07:53.
_-Re@l-_ вне форума Ответить с цитированием
Старый 01.05.2011, 08:35   #3
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

IGOMERL
у Вас всё написано верно.

Ошибка возникает из-за взятых Вами типов данных.
у Вас x1,x2,y1,y2 - integer.
Это значит, что они могут хранить значения от -32768 до 32767
x2=400 x1=200 x2-x1 = 200
200^2 = 40000 - Паскаль банально не может записать полученное число в тип Integer, возникает переполнение.
Бороться с этим явлением возможно или принудительно приводить типы данных в выражении к нужному типу (вещественному, например). Или, банально поступить так, как предложил _-Re@l-_ - сделать переменные типа REAL (или Double или Extended)

p.s. ну и зачем Вы вводите r1 и r2 ?!
да и при вводе весьма полезно давать пользователю подсказки,
например: WriteLn('Введите X1, Y1, R1 :');
Serge_Bliznykov вне форума Ответить с цитированием
Старый 01.05.2011, 10:40   #4
IGOMERL
Пользователь
 
Регистрация: 15.03.2011
Сообщений: 25
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
IGOMERL
у Вас всё написано верно.

Ошибка возникает из-за взятых Вами типов данных.
у Вас x1,x2,y1,y2 - integer.
Это значит, что они могут хранить значения от -32768 до 32767
x2=400 x1=200 x2-x1 = 200
200^2 = 40000 - Паскаль банально не может записать полученное число в тип Integer, возникает переполнение.
Бороться с этим явлением возможно или принудительно приводить типы данных в выражении к нужному типу (вещественному, например). Или, банально поступить так, как предложил _-Re@l-_ - сделать переменные типа REAL (или Double или Extended)

p.s. ну и зачем Вы вводите r1 и r2 ?!
да и при вводе весьма полезно давать пользователю подсказки,
например: WriteLn('Введите X1, Y1, R1 :');
Да спасибо разобрался. . . Если честно программа делает совсем другое... нахождение расстояния это один из этапов
IGOMERL вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Связь между двумя DBGrid WALL БД в Delphi 3 05.11.2010 15:47
время между двумя интервалами tbeca@mail.ru Общие вопросы Delphi 2 29.01.2010 23:11
Разница между двумя datetimepicker Droid Общие вопросы Delphi 3 24.09.2009 23:20
Связь между двумя ОС Яр|/||< (^_^) Общие вопросы Delphi 8 06.07.2009 20:45
Связь между двумя таблицами. megaten Microsoft Office Access 5 17.05.2009 14:17