Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 06.12.2011, 22:45   #1
fasty
Пользователь
 
Регистрация: 09.11.2011
Сообщений: 25
Восклицание определение наибольшей площади треугольника

необходимо написать функцию, которая находит треугольник с наибольшей площадью
даны координаты точек в массиве построчно
то есть массив 2 столбца m строк, в каждой строке координата одной точки через пробел
//пример:
2 1
3 4
5 2
и т.д.

и треугольники составляются из данных координат(координаты для треугольника берутся не 1, 2, 3 строка, а выбираются из всех возможных комбинаций данных координатя)
я даже не представляю как написать эту функцию
только лишь знаю что нужно делать проверку на существование треугольника
Код:
#include <iostream.h>
//x,y,z - длины сторон треугольника
int k=1,x,y,z;
cin >> x >> y >> z;
if (x>y+z)
  k=0;
else
     if (y>x+z)
       k=0;
     else
          if (z>x+y)
            k=0;
cout << endl << k;
return k;
}
и вот прога которая находит площадь треугольника по его координатам:
Код:
#include <iostream.h>
#include <math.h>
#include <stdlib.h>
void  main ()
{   float x1,x2,x3,y1,y2,y3,k,ab,bc,ca,p;
     cout << "Vichislenie ploshadi triugolnika.";
    cout << " Vvedite koordinati" << endl;
    cout << "x1,y1" << endl;
  cin >> x1 >> y1;
    cout << "x2,y2" << endl;
    cin >> x2 >> y2;
    cout << "x3,y3"<< endl;
    cin >> x3 >> y3;
ab=sqrt((x2-x1)*(x2-x1)+(y2-y1)*(y2-y1));
bc=sqrt((x3-x2)*(x3-x2)+(y3-y2)*(y3-y2));
ca=sqrt((x1-x3)*(x1-x3)+(y1-y3)*(y1-y3));
p=(ab+bc+ca)/2 ;
k=sqrt(p*(p-ab)*(p-bc)*(p-ca));
    cout << endl << k;

system("pause");

}
помогите плиз, хотя б написать цикл, который перебирает все комбинации из 3 координат
fasty вне форума Ответить с цитированием
Старый 06.12.2011, 23:29   #2
RinatV
Пользователь
 
Регистрация: 06.07.2009
Сообщений: 27
По умолчанию

да не нужно сложных решений, делай просто перебор так чтобы последующие индексы были больше предыдущих и делай нужные вычисления
Код:
float s=0.0;
int am=-1;
int bm,cm;

for(a=0;a<m;a++)
 for(b=a+1;b<m;b++)
  for(c=b+1;c<m;c++)
   if(st(x[a],y[a],x[b],y[b],x[c],y[c])>s)
    {
      am=a;bm=b;cm=c;
    }
if(am==-1)cout<<"достойных треугольников не было\n";
else ....
где st - функция вычисления площади треугольника
RinatV вне форума Ответить с цитированием
Старый 07.12.2011, 20:07   #3
fasty
Пользователь
 
Регистрация: 09.11.2011
Сообщений: 25
Восклицание

Код:
#include <iostream.h>
#include <iomanip.h>
#include <fstream.h>
#include <stdlib.h>
#include <Windows.h>
#include <stdio.h>
#include <io.h>
#include <math.h>
void vvod();
void max(int** A,const int m,float ab,float bc,float ca);
inline int St(const int x1, const int x2, const int x3,const int y1,const int y2,const int y3);
void main(int** A, const int n, const int m,float ab,float bc,float ca)
{ system("cls");
 SetConsoleOutputCP(1251);

 vvod();
 max(A,m,ab,bc,ca);
 system("pause");

 }


 void vvod()
{const int n=2;int m=0, i=0, j=0;
ifstream f; f.open ("C://Borland/kurs.txt", ios::in);
  if (!f){cout << "Невозможно открыть файл для чтения" << endl;}  else
  {
  for (i=0;i<1;i++)
  for (j=0;j<1;j++)
  {if (f.eof()) break;f>>m ;cout << m << endl;}
   int ** A = new int * [n];
        for (int i = 0; i < m; i++)
                A [i] = new int [m];
   for (i=0;i<m;i++)
   for (j=0;j<n;j++)
   {if (f.eof()) break;f >> A[i][j];}
     cout << "Считан массив: " << endl;
        for ( i = 0; i < m ; i++)
       { for ( j = 0; j < n ; j++)
        cout << A[i][j] << " " ; cout << endl;}
   }

   }

inline int St(const int x1, const int x2, const int x3,const int y1,const int y2,const int y3)
{
float ab,bc,ca,p,k;
ab=sqrt((x2-x1)*(x2-x1)+(y2-y1)*(y2-y1));
bc=sqrt((x3-x2)*(x3-x2)+(y3-y2)*(y3-y2));
ca=sqrt((x1-x3)*(x1-x3)+(y1-y3)*(y1-y3));
p=(ab+bc+ca)/2 ;
k=sqrt(p*(p-ab)*(p-bc)*(p-ca));
return k;

}

void max(int** A,const int m,float ab,float bc,float ca)
{float s=0.0;
int am=-1;
int bm,cm,a,b,c;

for(a=0;a<m;a++)
 for(b=a+1;b<m;b++)
  for(c=b+1;c<m;c++)
   if(St( A[a][1],A[a][2],A[b][1],A[b][2],A[c][1],A[c][2])>s)
    {
      am=a;bm=b;cm=c;
    } s=St(A[am][1],A[am][2],A[bm][1],A[bm][2],A[cm][1],A[cm][2]);
if(am==-1)cout<<"достойных треугольников не было\n";
else cout << "Треугольник с наибольшей площадью" << s << endl;
}
не работает всё-равно
пишет ошибку Project raised exeption classEAccessViolation with message 'Access violation at address 00401CFF. Read of address 00000009'.
на строку
if(St(A[a][1],A[a][2],A[b][1],A[b][2],A[c][1],A[c][2])>s)

Последний раз редактировалось fasty; 07.12.2011 в 21:11.
fasty вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
НАйти ромб наибольшей площади... Altair8 Помощь студентам 12 17.03.2011 08:29
Нахождение площади треугольника, образуемого пересечением прямых valis Помощь студентам 3 03.02.2010 09:21
Определение параллелограмма с наибольшей площадью. Delphi. Absentik Помощь студентам 0 19.11.2009 17:15
Вычисление площади треугольника Nyuta555 Помощь студентам 10 07.10.2009 16:32
Определение площади многоугольника Bayazet Помощь студентам 5 17.02.2009 12:48