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

> Внимание!

1. Пользуйтесь тегами кода. - [code] ... [/code]
2. Точно указывайте язык, название и версию компилятора (интерпретатора).
3. Название темы должно быть информативным. В описании темы указываем язык!!!

> Нахождение максимального угла, C++
-ZoLToN-
сообщение 15.12.2006 17:11
Сообщение #1


Гость






Здравствуйте! Помогите пожалуйста решить следующую задачу:
Реализовать набор подпрограмм для выполнения следующих операций над векторами: а) сложение; б) вычитание; в) скалярное умножение векторов; г) умножение вектора на число; д) нахождение длины вектора.
1) Дан массив A – массив векторов. Отсортировать его в порядке убывания длин векторов.
2) С помощью датчика случайных чисел сгенерировать 2N целых чисел. N пар этих чисел задают N точек координатной плоскости. Вывести номера тройки точек, которые являются координатами вершин треугольника с наибольшим углом.
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
-ZoLToN-
сообщение 22.12.2006 19:34
Сообщение #2


Гость






Наколбасил следующее:
#include <iostream.h>
#include <conio.h>
#include <math.h>
#include <stdlib.h>
int sloj(int x1,int y1,int x2,int y2,int pr)
// Функция сложения векторов! Сделал через признак выдачи (Int pr),
// т.к. не знаю как вернуть массив из функции!
{
int c[2];
c[1]=x1+x2;
c[2]=y1+y2;
if (pr==0)
{
return c[1];
}
else
{
return c[2];
}
}
int vich(int x1,int y1,int x2,int y2,int pr) // Вычитание!
{
int c[2];
c[1]=x1-x2;
c[2]=y1-y2;
if (pr==0)
{
return c[1];
}
else
{
return c[2];
}
}

int numum(int x1,int y1,int x2, int y2,int nu,int pr) // Умножение на число!
{
int c[2];
c[1]=(x2-x1)*nu;
c[2]=(y2-y1)*nu;
if (pr==0)
{
return c[1];
}
else
{
return c[2];
}
}

double dlin(int x1,int y1)
// Длина вектора! Взят тип double т.к. функции cos и acos требуют этот тип!
{
int a,b,c;
a=pow(x1,2);
b=pow(y1,2);
c=sqrt(a+b);
return c;
}

double skal(int x1,int y1,int x2,int y2) // Скалярное произведение! Аналогично!
{
int sk;
sk=x1*x2+y1*y2;
return sk;
}


void main ()
{
int n,i,j;
double a[10][2],tx,ty,t1,t2,t3,t4,t5,t6,tmax;
clrscr();
cout << "Enter number of pair points (max 10): ";
cin >> n;
tmax=(-2);
for (i=0;i<n;i++)
{
a[i][0]=(rand() % 20);
a[i][1]=(rand() % 20);
}
for (i=0;i<=n;i++) /* Вот тут главный затуп.
{
for (j=0;j<=n;j++) */
{
if (j<>i&i+1)
{
t1=a[i+1][1]-a[i][1]; // Вычисляем координаты вектора 1
t2=a[i+1][2]-a[i][2]; // Аналогично!
t3=a[j][1]-a[i+1][1];// Координаты второго!
t4=a[j][2]-a[j][2];
t5=skal(t1,t2,t3,t4)/dlin(t1,t2)*dlin(t3,t4);
// Ну тут ясно... Скалярное произведение в координатах делим
// на произв. модулей. Получаем косинус.
t6=acos(t5); // Берем арккосинус.
if (t6>tmax)
{
/* И тут! Надо сохранить координаты 3х точек*/
}
}
}
}
}

Вся проблема возникла в порядке обхода. Я придумал идею, в коде реализовать не могу =(.
Например есть пять точек, по две координаты у каждой.
Шаг 1:Мы берем первую точку (пусть i)
Шаг 2:Берем i+1 точку.
Шаг 3:Считаем координаты вектора из этих точек.
Шаг 4: Берем одну точку из оставшихся (пусть j). (Нужно наверное выражение с if).
Шаг 5: Считаем координаты вектора из точек i+1 и j.
Шаг 6: Считаем угол.
Шаг 7: Шаги 1-6 повторяем для всех точек, оставшихся после взятия точек i и i+1.
Шаг 8: За i берем точку i+1 и повторяем сначала!

Никак в коде этот алгоритм не могу сделать. Помогите кто чем может =) Заранее спасибо.
 К началу страницы 
+ Ответить 

Сообщений в этой теме
-ZoLToN-   Нахождение максимального угла   15.12.2006 17:11
мисс_граффити   в чем проблема? что пробовал делать?   18.12.2006 22:24
Гость   Основная проблема состоит именно в алгоритме поиск...   20.12.2006 16:57
мисс_граффити   а какие данные и как ты пытаешься передать? судя п...   20.12.2006 20:58
-ZoLToN-   Наколбасил следующее: #include <iostream.h> ...   22.12.2006 19:34
-ZoLToN-   Без аккаунта нельзя редактировать посты! Одну ...   22.12.2006 19:38
volvo   У тебя в заголовке темы написан язык С++? Значит, ...   22.12.2006 19:47
мисс_граффити   как вариант: void sloj(int x1,int y1,int x2,int y...   22.12.2006 20:12
-ZoLToN-   У тебя в заголовке темы написан язык С++? Значит,...   22.12.2006 20:27
volvo   Чем решение trminator-а не устраивает? (или ты реш...   22.12.2006 20:38
-ZoLToN-   Спасибо за помощь!   22.12.2006 21:20
-ZoLToN-   Никак не могу выловить ошибку в программе. Floatin...   24.12.2006 10:01
-ZoLToN-   Подскажите пожалуйста если кто видит ошибку.   24.12.2006 10:02
volvo   Добавь строку: if (dlin(t1,t2) == 0) { ...   24.12.2006 10:14
-ZoLToN-   А есть какие-нибудь идеи как это исправить?   24.12.2006 10:45
мисс_граффити   по смыслу: если вектор вырождается в точку, чем ра...   24.12.2006 14:34


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

 



- Текстовая версия 28.07.2025 13:30
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"