Технический форум
Вернуться   Технический форум > Программирование > Форум программистов > Delphi, Kylix and Pascal


Ответ
 
Опции темы Опции просмотра
Старый 30.06.2014, 23:28   #1 (permalink)
katusha17
Новичок
 
Регистрация: 30.06.2014
Сообщений: 5
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
Unhappy Помогите исправить арифметическое переполнение

Program VID_TRG;
var x1,y1,z1,x2,y2,z2,x3,y3,z3:byte;
d1,d2,d3:real;
f:text;
begin
assign (f,'coord.txt');
reset (f);
d1:=0; d2:=0; d3:=0;
while not eof(f) do
begin
read (f,x1,y1,z1,x2,y2,z2,x3,y3,z3);
d1:=sqrt((x2-x1)*(x2-x1)+(y2-y1)*(y2-y1)+(z2-z1)*(z2-z1));
d2:=sqrt((x3-x2)*(x3-x2)+(y3-y2)*(y3-y2)+(z3-z2)*(z3-z2));
d3:=sqrt((x1-x3)*(x1-x3)+(y1-y3)*(y1-y3)+(z1-z3)*(z1-z3));
writeln (d1:0:4,' ',d2:0:4,' ',d3:0:4);
end;
close (f);
readln;
end.

Тут идет чтение координат точек треугольника из файла и подсчет длины каждой из сторон треугольника d. Вот именно перед подсчетом длины сторон мне паскаль и выдает арифметическое переполнение.
Каким образом можно это исправить?
katusha17 вне форума   Ответить с цитированием

Старый 30.06.2014, 23:28
Helpmaster
Member
 
Аватар для Helpmaster
 
Регистрация: 08.03.2016
Сообщений: 0

Ваша тема схожа с этими, рекомендую внимательно прочитать

Помогите исправить калькулятор
Помогите исправить код. Pascal
Помогите исправить, пожалуйста
С++, массивы, среднее арифметическое и возрастание

Старый 01.07.2014, 00:49   #2 (permalink)
Gruvi
VIP user
 
Аватар для Gruvi
 
Регистрация: 10.03.2011
Сообщений: 765
Записей в дневнике: 1
Сказал(а) спасибо: 10
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 3453
По умолчанию

Потому, что тип byte является наименьшей формой целого числа, занимая 8 битов (1 байт) памяти.Он поддерживает только положительные целых числа от 0 до 255.
Gruvi вне форума   Ответить с цитированием
Старый 01.07.2014, 09:53   #3 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

Цитата:
Сообщение от Gruvi Посмотреть сообщение
Потому, что тип byte является наименьшей формой целого числа, занимая 8 битов (1 байт) памяти.Он поддерживает только положительные целых числа от 0 до 255.
Абсолютно верно! Катюша, а зачем Вам вообще целочисленный формат, если результат всё равно вещественный? Поставьте для всех (кроме файловой) переменных тип Real, да и будет Вам счастье!
Vladimir_S вне форума   Ответить с цитированием
Старый 02.07.2014, 18:03   #4 (permalink)
katusha17
Новичок
 
Регистрация: 30.06.2014
Сообщений: 5
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

спасибо большое)
katusha17 вне форума   Ответить с цитированием
Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
Ответ

Метки
паскаль, переполнение, помогите, файлы


Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Выкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.




Часовой пояс GMT +4, время: 09:22.

Powered by vBulletin® Version 6.2.5.
Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.