IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

 
 Ответить  Открыть новую тему 
> Помогите исправить программку
сообщение
Сообщение #1





Группа: Пользователи
Сообщений: 5
Пол: Мужской
Реальное имя: Кирик

Репутация: -  0  +


Програма нахождения максимальной площади по заданым точкам
program dom2;
var
m,i,j,k,l,q,w,e,r,p:integer;
x,y:array[1..100] of real;
o:array[1..2,1..4] of real;
s,s1,a,b,c,d,f,g,h:real;
pri,prim:boolean;
x1,x2,x3,x4,y1,y2,y3,y4:real;
begin
writeln('nahogdenie iz tochek, chtobi ploshadb paralelogram');
writeln('s vershinami v etih tochkah bil MAX');
repeat
writeln('vvedite kolichestvo tochek');
read(m);
if (m<4) or (m>100) then
writeln('nevernoe chislo');
until (m>=4) and (m<=100);
i:=0;
repeat
i:=i+1;
p:=0;
writeln('Vvedite to4ki',I,'tochka');
readln(x[i],y[i]);
if i>1 then
begin
j:=0;
repeat
j:=j+1;
if (x[i]=x[j]) and (y[i]=y[j]) then
begin
writeln ('takaia tochka est');
p:=1;
end;
until (p=1) or (j=i-1);
end;
i:=i-p;
until i=m;
p:=0;
s1:=0;
s:=0;
for i:=1 to m-3 do
for j:= i+1 to m-2 do
for k:=j+1 to m-1 do
for l:= k+1 to m do
if (x[l]-x[i])*(y[j]-y[i])<>(y[l]-y[i])*(x[j]-x[i]) then
begin


pri:=true;


a:=sqrt(sqr(x[i]-x[j])+sqr(y[i]-y[j]));
b:=sqrt(sqr(x[j]-x[k])+sqr(y[j]-y[k]));
c:=sqrt(sqr(x[k]-x[l])+sqr(y[k]-y[l]));
d:=sqrt(sqr(x[l]-x[i])+sqr(y[l]-y[i]));
f:=sqrt(sqr(x[i]-x[k])+sqr(y[i]-y[k]));
g:=sqrt(sqr(x[j]-x[l])+sqr(y[j]-y[l]));
h:=sqrt(sqr(y[j]-y[i]));
if (a=c) and (b=d) then
begin
prim:=true;
s1:=a*h;
if s1>s then
begin
s:=s1;
q:=i;
w:=j;
e:=k;
r:=l;
end;
end;
end;
x1:=x[q];
x2:=x[w];
x3:=x[e];
x4:=x[r];
y1:=y[q];
y2:=y[w];
y3:=y[e];
y4:=y[r];



if (pri) and (prim) then
begin
Writeln('Parallelogramm imeet MAX S');

writeln('T',Q,',',X[Q]:4:1,y[q]:4:1);
writeln('T',W,',',X[W]:4:1,y[W]:4:1);
writeln('T',E,',',X[E]:4:1,y[E]:4:1);
writeln('T',R,',',X[R]:4:1,y[R]:4:1);
end;
if (pri=false) and (prim=false) then
writeln('paralelogramma net');
end.


М
С тегами лучше выглядит, правда?
volvo

 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Профи
****

Группа: Пользователи
Сообщений: 705
Пол: Мужской

Репутация: -  20  +


Цитата(stager @ 9.01.2007 0:15) *

if (x[l]-x[i])*(y[j]-y[i])<>(y[l]-y[i])*(x[j]-x[i]) then
if (a=c) and (b=d) then

Вещественные числа нельзя сравнивать через = и <>. Можно только так:
Код
if (abs(a-c)<e)then
, где е-необходимая точность.
ps Странно, что до сих пор этого нет в faq.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Гуру
*****

Группа: Пользователи
Сообщений: 1 117
Пол: Мужской
Реальное имя: Богдан

Репутация: -  11  +


А какая ошибка? У меня компилируется.
Цитата
Вещественные числа нельзя сравнивать через = и <>.

blink.gif Честно?


--------------------
Лао-Цзы :
Знать много и не выставлять себя знающим есть нравственная высота. Знать мало и выставлять себя знающим есть болезнь. Только понимая эту болезнь, мы можем избавиться от нее.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Профи
****

Группа: Пользователи
Сообщений: 660
Пол: Мужской
Реальное имя: Михаил

Репутация: -  11  +


Цитата(Bokul @ 9.01.2007 1:22) *
blink.gif Честно?
Как ты думаешь, что выдаст эта программа?
var r :real;
begin
r:=7/pi;
r:=r*pi;
writeln( r );
end.

Я запускал на TP7.0 и получил ответ 6.99999999999272E+0000
И это нормально! Вещественные числа нельзя сравнивать так, как это делают с целыми. Всегда работая с ними необходимо понить про ошибки округления (их накопление) и точность вычисления.
2Malice good.gif

Сообщение отредактировано: hiv -


--------------------
Никогда не жадничай. Свои проблемы с любовью дари людям!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


Профи
****

Группа: Пользователи
Сообщений: 705
Пол: Мужской

Репутация: -  20  +


Цитата(Bokul @ 9.01.2007 1:22) *

blink.gif Честно?

yes2.gif
var x:real;
begin
x:=0.1;
if x=0.1 then writeln ('Bokul rulez!') else
writeln ('Malice rulez!');
end.

Вот хороший пример, показательный. У hiv посложнее.. У меня, правда, чуть другой аспект затрагивается, но суть таже.

Сообщение отредактировано: Malice -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6





Группа: Пользователи
Сообщений: 5
Пол: Мужской
Реальное имя: Кирик

Репутация: -  0  +


не понял что такое e,
я так понял берём разность по модулю и всё это меньше какого то числа т.е если взять число чуть больше 0 то будет что надо?
и ещё если мы берём 4 точки и задаём прямую линию он пишет что паралелограмма нет а если больше точек то он его находит. Как это исправить?

Сообщение отредактировано: stager -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #7


Профи
****

Группа: Пользователи
Сообщений: 705
Пол: Мужской

Репутация: -  20  +


Цитата(stager @ 9.01.2007 17:38) *

не понял что такое e wacko.gif

е- в смысле точность, например 0.00001.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #8





Группа: Пользователи
Сообщений: 5
Пол: Мужской
Реальное имя: Кирик

Репутация: -  0  +


Всем большое спасибо теперь всё работает! good.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #9


Гуру
*****

Группа: Пользователи
Сообщений: 1 117
Пол: Мужской
Реальное имя: Богдан

Репутация: -  11  +


Цитата
Как ты думаешь, что выдаст эта программа?

Прикрепленное изображение


--------------------
Лао-Цзы :
Знать много и не выставлять себя знающим есть нравственная высота. Знать мало и выставлять себя знающим есть болезнь. Только понимая эту болезнь, мы можем избавиться от нее.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #10


Гость






Bokul, раздел не про 32-битные компиляторы... В FPC Real - сопроцессорный тип, а не эмуляция, приведенная программа с типом Single/Double даже в TP уже будет выводить семерку...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #11


Гуру
*****

Группа: Пользователи
Сообщений: 1 117
Пол: Мужской
Реальное имя: Богдан

Репутация: -  11  +


Почему тогда программа Malice-а дала неверный результат?


--------------------
Лао-Цзы :
Знать много и не выставлять себя знающим есть нравственная высота. Знать мало и выставлять себя знающим есть болезнь. Только понимая эту болезнь, мы можем избавиться от нее.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #12


Гость






Цитата(Malice @ 9.01.2007 11:17)
У меня, правда, чуть другой аспект затрагивается

Поэтому и дала такой результат... Кстати, вопрос-то был в том, что нельзя сравнивать вещественные числа, так что ориентируйся именно на программу Malice yes2.gif
 К началу страницы 
+ Ответить 
сообщение
Сообщение #13


Профи
****

Группа: Пользователи
Сообщений: 705
Пол: Мужской

Репутация: -  20  +


Цитата(Bokul @ 10.01.2007 1:32) *

Почему тогда программа Malice-а дала неверный результат?

Почему не верный ? Красиво получилось.. smile.gif
В моем примере даже 2 аспекта:
1. погрешность накапливается не только в выражениях, существует еще погрешность представления числа. Поэтому 0.1 в real - это 1.00..023E-1.
2. При включенном сопроцессоре в паскале все константные вещественные числа считаются сопроцессором, т.е. приводятся к типу Extended (при выключенном - к Real), а 0.1 в extended представляется без погрешности..
Исходя из того, что сопроцессор у тебя наверняка включен и real(0.1)!=extended(0.1) - получаем такой результат.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #14


просто человек
******

Группа: Пользователи
Сообщений: 3 641
Пол: Женский
Реальное имя: Юлия

Репутация: -  55  +


чтобы не обидно было:
Прикрепленное изображение

...никак не пытаюсь отрицать все сказанное выше.


--------------------
Все содержимое данного сообщения (кроме цитат) является моим личным скромным мнением и на статус истины в высшей инстанции не претендует.
На вопросы по программированию, физике, математике и т.д. в аське и личке не отвечаю. Даже "один-единственный раз" в виде исключения!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #15


Гость






Юля, скрин настроек компилятора заодно - в студию... Если так:
Прикрепленное изображение
, то "Bokul rulez!", а если
Прикрепленное изображение
, то "Malice rulez!"
 К началу страницы 
+ Ответить 
сообщение
Сообщение #16


просто человек
******

Группа: Пользователи
Сообщений: 3 641
Пол: Женский
Реальное имя: Юлия

Репутация: -  55  +


smile.gif
ну, как бы то ни было, это оффтоп.
было так:
Прикрепленное изображение

но мой пример со всеми комбинациями значений выделенных настроек выдает равенство smile.gif)

Сообщение отредактировано: мисс_граффити -


--------------------
Все содержимое данного сообщения (кроме цитат) является моим личным скромным мнением и на статус истины в высшей инстанции не претендует.
На вопросы по программированию, физике, математике и т.д. в аське и личке не отвечаю. Даже "один-единственный раз" в виде исключения!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #17


Профи
****

Группа: Пользователи
Сообщений: 705
Пол: Мужской

Репутация: -  20  +


Это нормально, у тебя же не 0.1 smile.gif Скажем так, погрешность при представлении вещественного числа _вероятна_.
И чтоб до конца быть политкорректным выведем правило:
Использование = и <> с вещественными числами не рекомендуется, т.к. не гарантирует правильность работы программы и допускаяется на свой страх и риск.
rolleyes.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #18


просто человек
******

Группа: Пользователи
Сообщений: 3 641
Пол: Женский
Реальное имя: Юлия

Репутация: -  55  +


я же не спорю smile.gif
понятно, что от числа зависит (0.5=2^-1... мантиссы, выделенной под real, а тем более под extended, хватит с огромным запасом)
я просто вторую неделю пытаюсь выучить вычмат... и после n-ного перечитывания первой лекции занудность стала ярко выраженной.


--------------------
Все содержимое данного сообщения (кроме цитат) является моим личным скромным мнением и на статус истины в высшей инстанции не претендует.
На вопросы по программированию, физике, математике и т.д. в аське и личке не отвечаю. Даже "один-единственный раз" в виде исключения!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 23.12.2024 20:54
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name