Авторизация

Логин: Пароль:
Регистрация Забыли свой пароль?

Помогите с задачей

Страницы: 1
Помогите с задачей
Помогите, мне нужно решить задачу по информатике. И задача несложная. Но не получается. Не извлекается корень. Кто-нибудь может помочь? Буду очень
благодарен.
Задача. Вычислить расстояние между точками на плоскости.
Вот программа:

Код
program xyz;
 uses crt;
        var x1,y1,x2,y2,dx,dy:integer;
        d:real;
begin
  x2:=520;
  y2:=200;
     x1:=320;
     y1:=200;
    dx:=x2-x1;
    dy:=y2-y1;
      d:=dx*dx+dy*dy;
       d:=sqrt(d);
         writeln(d)
  readln
end.
Что значит корень не извлекается? Должен извлекаться.
Должен, но не извлекается
Выдает ошибку: Error 207: Invalid floating point operation
Я сейчас сам попробую.
Это ошибка при работе с плавающей точкой. И означает она только то, что нельзя извлекать корень из отрицательного числа.
Изменено: Андрей - 30.11.2009 22:41:34
И правда, выдает ошибку, это что – такой прикол?
Ага, прикол. Мне до завтра нужно несколько задач сделать. А я уже столько времени на этой ерунде потерял. Подскажите, в чем тут дело, плиииииз.
Изменено: Sergeiv - 30.11.2009 22:56:25
Цитата
Андрей пишет:
Это ошибка при работе с плавающей точкой. И означает она только то, что нельзя извлекать корень из отрицательного числа.


Я и не извлекал из отрицательного.
Все дело в преобразовании типов. У тебя переменная d преобразуется при вычислении выражения в тип integer, при этом старшие разряды отбрасываются, 1 попадает в знаковый разряд – вот тебе и отрицательное число.
Что же делать? Это можно как-то поправить?
Даже просто. Измени тип integer на longint – длинное целое. Или перейди в Паскаль ABC, где это реализовано по умолчанию. И все получится.
Да в PascalABC.Net это уже реализовано, там таких проблем не возникает
Изменено: Артём Кулинич - 01.12.2009 13:08:07
Спасибо!!! Получилось. Ответ – 200.
вообще, по-хорошему, лучше сразу делать проверку, отрицательно ли число
Цитата
вообще, по-хорошему, лучше сразу делать проверку, отрицательно ли число


Полностью соглашусь, проверку сразу делать надо, а то потом будешь думать в чем проблема.
Изменено: Евгений Ульяров - 17.10.2010 11:13:47
c:\linux\bin
c:\linux\etc\X11\xorg.conf
d:\home\user
Страшный сон линуксоида.
А если взять координаты тоже real? Это не поможет?
Расстояние между точками = sqrt(sqr(x2-x1)+sqr(y2-y1));
Цитата
Ольга Кабушева пишет:
А если взять координаты тоже real? Это не поможет?

Вообщето поможет - но всё же проверяй на отрицательность везде где есть извлечение из корня мой тебе совет smile:)
Цитата
mihail filatov пишет:
Расстояние между точками = sqrt(sqr(x2-x1)+sqr(y2-y1));

Сделай по моей формуле! сам так делал и все норм.
Привет всем! У меня тут одна задачка и чет не могу понять как ее решать, я в Турбо Паскале новичок, читаю самоучитель и по ходу учусь, у меня тема ша диалог с компьютером и вот не могу понять можно ли решить эту задачу как диалог с компьютером, я решил наполовину но дальше как диалог не смог. Может кто подскажеть вот задачка: Напишите программу для следующей задачи. Компьютер спрашивает названия двух планет, радиусы их орбит (в миллионах километров) и скорости движения по орбите (в миллионах километрах в сутки). Компьютер вычисляет продолжительность года на планетах и выдает результат в таком виде: продолжительность года на планете Земля - 365 суток, а на планете Марс - 12 суток.
Код
program planets;

var
firstPlanetName, secondPlanetName: string;
firstPlanetDays, secondPlanetDays:real;
firstPlanetRadius, secondPlanetRadius:real;
firstPlanetVelocity, secondPlanetVelocity:real;

function YearDuration(radius,velocity:real):real;
begin

YearDuration:=2*radius*PI/velocity;

end;

begin

write('Enter first planet name: ');
readln(firstPlanetName);
write('Enter second planet name: ');
readln(secondPlanetName);
write('Enter first planet radius: ');
readln(firstPlanetRadius);
write('Enter second planet radius: ');
readln(secondPlanetRadius);
write('Enter first planet velocity: ');
readln(firstPlanetVelocity);
write('Enter second planet velocity: ');
readln(secondPlanetVelocity);
writeln('Thank you for your patience :)');
firstPlanetDays := YearDuration(firstPlanetRadius, firstPlanetVelocity);
secondPlanetDays := YearDuration(secondPlanetRadius, secondPlanetVelocity);
writeln('продолжительность года на планете ',firstPlanetName,' - ',firstPlanetDays:4:2,' суток, а на планете ', secondPlanetName,' - ', secondPlanetDays:4:2,' суток.');

end.


не имею возможности проверить на компиляторе smile:(
Изменено: rozpants - 13.11.2010 07:11:57
rozpants, в твоей программе есть и то что я еще не проходил smile:-) например ты из всего описания дней планет сделал одну процедуру YеаrDurаtiоn?
ага
ну чтоб два раза не писать один и тот же код, делают процедуры,функции...
но тут не так много кода, так что можно было бы и без функции обойтись. это я по привычке просто smile:)
Код
program planets; 

var 
firstPlanetName, secondPlanetName: string; 
firstPlanetDays, secondPlanetDays:real; 
firstPlanetRadius, secondPlanetRadius:real; 
firstPlanetVelocity, secondPlanetVelocity:real; 

begin 

write('Enter first planet name: '); 
readln(firstPlanetName); 
write('Enter second planet name: '); 
readln(secondPlanetName); 
write('Enter first planet radius: '); 
readln(firstPlanetRadius); 
write('Enter second planet radius: '); 
readln(secondPlanetRadius); 
write('Enter first planet velocity: '); 
readln(firstPlanetVelocity); 
write('Enter second planet velocity: '); 
readln(secondPlanetVelocity); 
writeln('Thank you for your patience :)'); 
firstPlanetDays :=2*firstPlanetRadius*PI/firstPlanetVelocity;  
secondPlanetDays :=2*secondPlanetRadius*PI/secondPlanetVelocity; 
writeln('продолжительность года на планете ',firstPlanetName,' - ',firstPlanetDays:4:2,' суток, а на планете ', secondPlanetName,' - ', secondPlanetDays:4:2,' суток.'); 

end.
Изменено: rozpants - 13.11.2010 07:12:17
Страницы: 1
Читают тему (гостей: 1, пользователей: 0, из них скрытых: 0)