Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Задачи _ Задача в паскале.определить входит ли в треугольник с заданными координатами начало координат.

Автор: serg 24.11.2009 2:11

Собственно в теме написано,помогите,желательно без функций.

Автор: sheka 24.11.2009 2:18

Сумма площадей 3х треугольников, основы которых стороны заданого, а вершина - т(0;0) должна быть равной площади заданого. Почему без функций? с ними намного короче! Один раз вбили Герона и Пифагора - и все.

Автор: Unconnected 24.11.2009 2:19

Наверное, ты хотел написать > Задача в паскале.определить входит ли в треугольник с заданными координатами В начало координат.?

И я не совсем понял, а это как? Типа лежит ли одна его вершина в координате 0,0?

Автор: sheka 24.11.2009 2:23

Цитата(Unconnected @ 23.11.2009 21:19) *
И я не совсем понял, а это как?

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

Автор: serg 24.11.2009 2:26

ну без функций потомучто препод потом спросит как я это делал)а я не знаю,картинку правильно нарисовал,можешь прогу написать?а то я с паскалем не дружу(

Автор: sheka 24.11.2009 2:36

Ну до функций ты ведь знаешь? Вот и пиши. Если потом вдруг помирюсь с паскалем - напишу.

Автор: serg 24.11.2009 2:44

ну надеюс твой способ с площадями верный)постораюсь решить,спасибо.Но если сам сделаешь её напиши пожалуйста)

Автор: sheka 24.11.2009 2:46

Сделаю сразу же после того как твой вариант увижу. lol.gif

Автор: Unconnected 24.11.2009 2:50

Вот оно, воплощение извращения))

var koor:array[1..6] of integer;
i,s:byte;

function chet(x,y:integer):byte;
begin
if (x>0) and (y>0) then chet:=1;
if (x>0) and (y<0) then chet:=2;
if (x<0) and (y<0) then chet:=3;
if (x<0) and (y>0) then chet:=4;
end;

begin
writeln('Vvedite koordinati vershini #1');
readln(koor[1],koor[2]);
writeln('Vvedite koordinati vershini #2');
readln(koor[3],koor[4]);
writeln('Vvedite koordinati vershini #3');
readln(koor[5],koor[6]);
if (chet(koor[1],koor[2])<>chet(koor[3],koor[4])) and
(chet(koor[3],koor[4])<>chet(koor[5],koor[6])) and
(chet(koor[1],koor[2])<>chet(koor[5],koor[6])) then writeln('YES, of course')
else writeln('NO, it isn"t');
readln;
end.


Без функций не получилось:)

Автор: serg 24.11.2009 2:52

ух...спасибо.попробую,работает?)))

Автор: Unconnected 24.11.2009 2:53

Ну да, тут за неработающее ругают) Только по логике моей программы если сторона лежит на оси координат, то начало координат не лежит в треугольнике..

Автор: sheka 24.11.2009 2:56

Цитата(Unconnected @ 23.11.2009 21:50) *

Вот оно, воплощение извращения))
no1.gif А я не согласен! lol.gif Прикрепленное изображение
При таком варианте там намного больше условий должно быть!

Автор: Unconnected 24.11.2009 2:57

Блиииин я забыл, сейчас переделаю..

Автор: sheka 24.11.2009 2:58

Цитата(Unconnected @ 23.11.2009 21:53) *

Ну да, тут за неработающее ругают)
Исправляй пока никто не видел! rolleyes.gif

Автор: Unconnected 24.11.2009 3:11

Извращение, v.1.02

var koor:array[1..6] of integer;
i,s:byte;

function chet(x,y:integer):byte;
begin
if (x>0) and (y>0) then chet:=1;
if (x>0) and (y<0) then chet:=2;
if (x<0) and (y<0) then chet:=3;
if (x<0) and (y>0) then chet:=4;
end;

begin
writeln('Vvedite koordinati vershini #',1);
readln(koor[1],koor[2]);
writeln('Vvedite koordinati vershini #',2);
readln(koor[3],koor[4]);
writeln('Vvedite koordinati vershini #',3);
readln(koor[5],koor[6]);
if (chet(koor[1],koor[2])<>chet(koor[3],koor[4])) and
(chet(koor[3],koor[4])<>chet(koor[5],koor[6])) and
(chet(koor[1],koor[2])<>chet(koor[5],koor[6])) then writeln('YES, of course')
else
if (chet(koor[1],koor[2])+chet(koor[3],koor[4])+chet(koor[5],koor[6])=5)
or (chet(koor[1],koor[2])+chet(koor[3],koor[4])+chet(koor[5],koor[6])=7)
or (chet(koor[1],koor[2])+chet(koor[3],koor[4])+chet(koor[5],koor[6])=8)
or (chet(koor[1],koor[2])+chet(koor[3],koor[4])+chet(koor[5],koor[6])=10)
then writeln('YES, of course')
else writeln('NO,it isn"t...');
readln;
end.


Только у меня четверти расположены не как в тригонометрическом круге, а традиционно, по часовой:)

Автор: sheka 24.11.2009 3:29

or (chet(koor[1],koor[2])+chet(koor[3],koor[4])+chet(koor[5],koor[6])=7)


Эскизы прикрепленных изображений
Прикрепленное изображение

Автор: Unconnected 24.11.2009 3:30

lol.gif всё, сдаюсь, Героны рулят))

Автор: serg 24.11.2009 3:33

ну напишите хотябы через функцию но рабочуюю блин!))

Автор: sheka 24.11.2009 3:33

Цитата(Unconnected @ 23.11.2009 22:30) *

lol.gif всё, сдаюсь, Героны рулят))
Пифагоров забыл! mad.gif


Добавлено через 1 мин.
Цитата
ну напишите хотябы через функцию но рабочуюю блин!))

ну напишите хотябы не через функцию но самостоятельно блин!))

Автор: Unconnected 24.11.2009 3:58

FATALITY!

var koor:array[1..6] of integer;
i,s:byte;

function chet(x,y:integer):byte;
begin
if (x>0) and (y>0) then chet:=1;
if (x>0) and (y<0) then chet:=2;
if (x<0) and (y<0) then chet:=3;
if (x<0) and (y>0) then chet:=4;
end;

begin
writeln('Vvedite koordinati vershini #',1);
readln(koor[1],koor[2]);
writeln('Vvedite koordinati vershini #',2);
readln(koor[3],koor[4]);
writeln('Vvedite koordinati vershini #',3);
readln(koor[5],koor[6]);
if (chet(koor[1],koor[2])<>chet(koor[3],koor[4])) and
(chet(koor[3],koor[4])<>chet(koor[5],koor[6])) and
(chet(koor[1],koor[2])<>chet(koor[5],koor[6])) then writeln('YES, of course')
else
if (chet(koor[1],koor[2])+chet(koor[3],koor[4])+chet(koor[5],koor[6])=5)
or ((chet(koor[1],koor[2])+chet(koor[3],koor[4])+chet(koor[5],koor[6])=7)
and (chet(koor[1],koor[2])=1) or (chet(koor[3],koor[4])=1))
or (chet(koor[1],koor[2])+chet(koor[3],koor[4])+chet(koor[5],koor[6])=8)
or ((chet(koor[1],koor[2])+chet(koor[3],koor[4])+chet(koor[5],koor[6])=10)
and (chet(koor[1],koor[2])=4) or (chet(koor[3],koor[4])=4))
then writeln('YES, of course')
else writeln('NO,it isn"t...');
readln;
end.

Автор: serg 24.11.2009 3:58

Цитата(sheka @ 23.11.2009 23:33) *

Пифагоров забыл! mad.gif
Добавлено через 1 мин.

ну напишите хотябы не через функцию но самостоятельно блин!))

да если бы я сам мог то не писал бы сюда

Автор: sheka 24.11.2009 4:18

Цитата(Unconnected @ 23.11.2009 22:58) *

FATALITY!
А что это значит FATALITY! ?


Цитата
if (chet(koor[1],koor[2])+chet(koor[3],koor[4])+chet(koor[5],koor[6])=5)
or
Прикрепленное изображение

Автор: Lapp 24.11.2009 8:33

Что-то вы, мне кажется, тут перемудрили..
Простые решения уже не в моде? smile.gif
И тут абсолютно не нужны никакие функции.

const
n=3; {треугольник}
r=9; {диапазон чисел}

var
t: array [1..n] of record
x,y: double;
end;
i: integer;
Inside: boolean;
u,v: double;

begin
Randomize;
for i:=1 to n do with t[i] do begin
x:=Random®*2-r;
y:=Random®*2-r;
WriteLn('x',i,'=',x:2:0,' y',i,'=',y:2:0);
end;
Inside:=true;
for i:=1 to n do begin
v:=t[i].x*t[i mod n+1].y-t[i].y*t[i mod n+1].x;
if i>1 then Inside:=Inside and (u*v>1e-15);
u:=v
end;
WriteLn(Inside)
end.

Автор: serg 24.11.2009 14:01

Цитата(Lapp @ 24.11.2009 4:33) *

Что-то вы, мне кажется, тут перемудрили..
Простые решения уже не в моде? smile.gif
И тут абсолютно не нужны никакие функции.
const
n=3; {треугольник}
r=9; {диапазон чисел}

var
t: array [1..n] of record
x,y: double;
end;
i: integer;
Inside: boolean;
u,v: double;

begin
Randomize;
for i:=1 to n do with t[i] do begin
x:=Random®*2-r;
y:=Random®*2-r;
WriteLn('x',i,'=',x:2:0,' y',i,'=',y:2:0);
end;
Inside:=true;
for i:=1 to n do begin
v:=t[i].x*t[i mod n+1].y-t[i].y*t[i mod n+1].x;
if i>1 then Inside:=Inside and (u*v>1e-15);
u:=v
end;
WriteLn(Inside)
end.



Arifmethic overflow???

Автор: Lapp 24.11.2009 15:55

Цитата(serg @ 24.11.2009 10:01) *
Arifmethic overflow???

где?



Добавлено через 5 мин.
Попробуй замеить тип double на real
а при проверке сравнивай не с 1e-15, а 1e-7

Автор: volvo 24.11.2009 16:19

Цитата
где?
Здесь:
Цитата
  for i:=1 to n do with t[i] do begin
x:=Random®*2-r; { <--- }
y:=Random®*2-r; { <--- }
WriteLn('x',i,'=',x:2:0,' y',i,'=',y:2:0);
end;
как минимум. Random вернет значение типа Word, и как только 2*Random( r ) будет меньше, чем R - попытка сделать Word отрицательным приведет к RTE 215 (все вышесказанное относится к Турбо Паскаль 7). Патч:
  for i:=1 to n do with t[i] do begin
x:=Integer(Random®*2)-r; { <--- }
y:=Integer(Random®*2)-r; { <--- }
WriteLn('x',i,'=',x:2:0,' y',i,'=',y:2:0);
end;
, теперь ошибки не будет. Integer вполне способен принимать отрицательные значения.

Автор: Lapp 24.11.2009 16:30

Цитата(volvo @ 24.11.2009 12:19) *
Random вернет значение типа Word,
Спасибо, volvo. Постоянно об этом забываю. FPC расслабляет..
+1

Автор: serg 24.11.2009 17:05

теперь чтото не запускает %) что делать?((

Автор: volvo 24.11.2009 17:26

Цитата
еперь чтото не запускает %) что делать?((
Что значит "не запускает"? Может, отрабатывает и ты не успевашь результаты посмотреть? Нажми на Alt+F5 тогда, увидишь. Или перед end. добавь ReadLn - программа подождет, пока ты нажмешь на Enter и только потом закроется.

Автор: serg 24.11.2009 23:21

Цитата(volvo @ 24.11.2009 13:26) *

Что значит "не запускает"? Может, отрабатывает и ты не успевашь результаты посмотреть? Нажми на Alt+F5 тогда, увидишь. Или перед end. добавь ReadLn - программа подождет, пока ты нажмешь на Enter и только потом закроется.

я нажимаю RUN а она просто тупо не начинается

Автор: serg 24.11.2009 23:58

все щикарно,спасибо огромное вам