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

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

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

 
 Ответить  Открыть новую тему 
> Датчик случайных чисел, треугольник ..., Последняя моя задачка :)
сообщение
Сообщение #1


Пионер
**

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

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


Задача: С помощью датчика случайных чисел сгенерировать 2N целых чисел. Вывести номера тройки точек, которые являются координатами вершины треугольника с наибольшем углом.
~~~
В модуле сделать, операцию над векторами:
* сложения
* вычитания
* скалярного умножения векторов
* умножения вектора на число
* нахождения длинны вектора
сделать тип:
type vector = record
x,y: real;
end;
-----------------------------------------------------------

ну вот осталась всего лиш одна задачкa что бы закончить дела с tp7 smile.gif

я попытался сделать типа так:

Program ex_1375;

uses crt;

var i,j,k,n:integer;

ab,bc,ac:real;

a,b,c,aa,bb,cc:real;

maxi,maxj,maxk:integer;

max,m:real;

mas:array[1..100,1..2] of integer;

Begin
randomize;
clrscr;

write('Kollichestvo tochek (max=100) : ');
readln(n);

for i:=1 to n do
begin
mas[i,1]:=random(50)+10;
mas[i,2]:=random(50)+10;
end;

writeln;
writeln('Masiv :');
writeln;

for i:=1 to n do
begin
write(mas[i,1],' ; ');
writeln(mas[i,2]);
end;

readln;
max:=0;

for i:=1 to n-2 do
for j:=(i+1) to n-1 do
for k:=(j+1) to n do

begin
ab:=sqrt(sqr(mas[i,1]-mas[j,1])+sqr(mas[i,2]-mas[j,2]));
bc:=sqrt(sqr(mas[j,1]-mas[k,1])+sqr(mas[j,2]-mas[k,2]));
ac:=sqrt(sqr(mas[i,1]-mas[k,1])+sqr(mas[i,2]-mas[k,2]));
a:=((bc*bc+ac*ac-ab*ab)/(2*bc*ac));
b:=(ab*ab+ac*ac-bc*bc)/(2*ab*ac);
aa:=arctan(sqrt(1-a*a)/a)*180/pi;

if a<0 then aa:=aa+180;
bb:=arctan(sqrt(1-b*b)/b)*180/pi;

if b<0 then bb:=bb+180;
cc:=180-aa-bb;
m:=aa;
if bb>m then m:=bb;
if cc>m then m:=cc;
if max<m then
begin
max:=m;
maxi:=i;
maxj:=j;
maxk:=k;
end;
end;

write('Nomera tochek v masive : ');
writeln(maxi,' ; ',maxj,' ; ',maxk);
writeln;

writeln('Naibolshiy ygol v treygolnik s vershinami :');
writeln('A[',mas[maxi,1],';',mas[maxi,2],']');
writeln('B[',mas[maxj,1],';',mas[maxj,2],']');
writeln('C[',mas[maxk,1],';',mas[maxk,2],']');
writeln('Ygol raven ',max:5:2,' gradysov');

writeln;
write('Dlya vihoda nagmite knopky ...');
readln;
end.



Но я не уверен что єто правильноsad.gif и еще єто дело ж надо в модуль как то реализоавть,
но общем завал wacko.gif

Как с этим жить?

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


--------------------
Каждый человек , которого я знаю встречаю, превосходит меня в какой нить области, и я готов у него этому учится:)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Гость






Димас, ничего не находишь общего:
Операции над векторами

?
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Пионер
**

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

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


Цитата(volvo @ 11.09.2007 16:47) *

Димас, ничего не находишь общего:
Операции над векторами

?


нахожу smile.gif, но разобратся видно не судьба mega_chok.gif


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


Пионер
**

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

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


volvo сделайте пожалуйста мне эту задачку smile.gif ... ?
а я Вам деньги заплачу , и на форум тоже перечислю wmz, за то что терпели меня неудачника norespect.gif

Просто это последняя задача которую надо сдать, что бы закрыть долги...


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


Гость






Димас, я не понимаю, куда тут пристроить работу с векторами, но вот такой вариант имеет право на существование:

uses vector;

function max(a, b: real): real;
begin
max := a;
if b > a then max := b;
end;

function max_angle(const a, b, c: tpoint): real;

function ArcCos(x: real): real;
begin
if Abs(x) < 10E-3 then ArcCos := Pi/2
else ArcCos := ArcTan(Sqrt(1 - Sqr(x)) / x) + Pi * Byte(x < 0)
end;

function get_len(a, b, c: tpoint): real;
begin
get_len :=
ArcCos(
( sqr(VLength(b, c)) + sqr(VLength(a, c)) - sqr(VLength(a, b)) )
/
(2 * VLength(b, c) * sqr(VLength(a, c)))
);
end;

begin
max_angle :=
max(
get_len(a, b, c),
max(
get_len(b, a, c),
get_len(c, a, b)
)
);
end;

const
max_n = 20;

var
n: integer;
i, j, k,
ix_i, ix_j, ix_k: integer;
arr: array[1 .. max_n] of tpoint;
maximal, angle: real;

begin
randomize;
write('n = '); readln(n);
for i := 1 to n do
with arr[i] do begin
X := random(9) + 1; Y := random(9) + 1;
writeln('#', i:2, arr[i].X:6:2, arr[i].Y:6:2)
end;


maximal := 0;
for i := 1 to n - 2 do
for j := i + 1 to n - 1 do
for k := j + 1 to n do begin

{}
writeln(i:3, j:3, k:3);

angle := max_angle(arr[i], arr[j], arr[k]);
if angle > maximal then begin
ix_i := i; ix_j := j; ix_k := k;
maximal := angle;
end;
{}

end;

writeln('points: arr[', ix_i:3, ix_j:3, ix_k:3,
'] = ', maximal:5:2, ' rad.');
end.



где в модуле vector.pas только одна процедура:

unit vector;

interface

type
tpoint = record
X, Y: real;
end;

function VLength(a, b: tpoint): real;

implementation

function VLength(a, b: tpoint): real;
begin
VLength := Sqrt(sqr(a.X - b.X) + sqr(a.Y - b.Y));
end;

end.

 К началу страницы 
+ Ответить 

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

 





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