Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Program który mając 5 punktów wyliczy te pomiędzy którymi istnieje trójkąt o największym polu

Ostatnio zmodyfikowano 2014-07-04 22:55
Autor Wiadomość
searchresult
Temat założony przez niniejszego użytkownika
Program który mając 5 punktów wyliczy te pomiędzy którymi istnieje trójkąt o największym polu
» 2014-06-29 18:29:55
Dzień dobry. Potrzebuję małego programu, który po podaniu współrzednych 5 punktów będzie mi w stanie wyliczyć, pomiędzy którymi z nich pole trójkąta jest największe. Na razie potrafiłem sobie jedynie przygotować banalny kod programu, który oblicza i podaje pole trójkąta pomiędzy 3 punktami. Po podaniu współrzędne 3 punktów program liczy długość odcinków, a następnie używając Herona oblicza pole.

Mogę to w ostateczności zrobię to ręcznie, tak żeby program tą samą drogą wyliczał pola pomiędzy odcinkami ABC BCD CDE itd. ale myślę że istnieje na to lepsza metoda. Mogę liczyć na pomoc gotowy kod, jego fragmentu bądź podpowiedzi mile widziane?

C/C++
#include <iostream>
#include <stdio.h>
#include <math.h>

int pole( float ax, float ay, float bx, float by, float cx, float cy, float * heron )
{
    float A = sqrt(( double )( bx - ax ) *( bx - ax ) +( by - ay ) *( by - ay ) );
    float B = sqrt(( double )( bx - cx ) *( bx - cx ) +( by - cy ) *( by - cy ) );
    float C = sqrt(( double )( ax - cx ) *( ax - cx ) +( ay - cy ) *( ay - cy ) );
   
    float s =( A + B + C ) / 2;
    * heron = sqrt( s *( s - A ) *( s - B ) *( s - C ) );
    return 1;
}

int main()
{
    float m1, c1, m2, c2;
    float ax, ay, bx, by, cx, cy;
    float heron;
    float angleA, angleB, angleC;
    int type = 0;
    float total = 0;
    printf( "Obliczanie pola trojkata:\n" );
    printf( "Podaj wspolrzedne wierzcholka A - X: " );
    scanf( "%f", & ax );
    printf( "Podaj wspolrzedne wierzcholka - Y: " );
    scanf( "%f", & ay );
    printf( "Podaj wspolrzedne wierzcholka - X: " );
    scanf( "%f", & bx );
    printf( "Podaj wspolrzedne wierzcholka - Y: " );
    scanf( "%f", & by );
    printf( "Podaj wspolrzedne wierzcholka - X: " );
    scanf( "%f", & cx );
    printf( "Podaj wspolrzedne wierzcholka - Y: " );
    scanf( "%f", & cy );
    pole( ax, ay, bx, by, cx, cy, & heron );
    printf( "\nPole trojkataABC: %.4f", heron );
    printf( "\n" );
}
P-112936
DejaVu
» 2014-06-29 19:34:14
Utwórz trzy zagnieżdżone pętle i niech każda pętla daje Ci jeden z wierzchołków z tablicy. Potem napisz warunek:
C/C++
if( punktA > punktB && punktB > punktC )
{
    float obliczonePole = obliczPole( wierzcholki[ punktA ], wierzcholki[ punktB ], wierzcholki[ punktC ] );
    //tu możesz wypisywać sobie na początek wierzchołki z jakich zbudowano trójkąt oraz uzyskane pole
}
A potem ustalaj czy podane pole jest większe niż poprzednio obliczone i zapisuj sobie w jakiejś zmiennej 'aktualnie najlepszy wynik -> numery wierzchołków + obliczone pole'.

Czytaj: musisz poczytać o pętlach for, o tablicach i o instrukcji warunkowej 'if'.

/edit:
Struktury też by Ci się przydały, aby kod był czytelniejszy.
P-112942
pekfos
» 2014-06-29 19:35:28
Zapisuj wartości do tablicy i użyj 3 zagnieżdżonych pętli.
P-112943
searchresult
Temat założony przez niniejszego użytkownika
» 2014-07-04 22:33:01
Dziękuję za pomoc. Korzystam z rad, ale ciągle walczę. Może chce się komuś spojrzeć co jest aktualnie nie tak:


C/C++
#include "stdafx.h"
#include <iostream>
#include <math.h>
using namespace std;

int _tmain( int argc, _TCHAR * argv[] )
{
    double x1, y1, x2, y2, x3, y3, x4, y4, x5, y5;
    double odleglosc = 0;
    double pole_trojkata = 0;
   
    cout << "Podaj wspolrzedne punktu 1 x" << endl;
    cin >> x1;
    cout << "Podaj wspolrzedne punktu 1 y";
    cin >> y1;
    cout << "Podaj wspolrzedne punktu 2 x";
    cin >> x2;
    cout << "Podaj wspolrzedne punktu 2 y";
    cin >> y2;
    cout << "Podaj wspolrzedne punktu 3 x";
    cin >> x3;
    cout << "Podaj wspolrzedne punktu 3 y";
    cin >> y3;
    cout << "Podaj wspolrzedne punktu 4 x";
    cin >> x4;
    cout << "Podaj wspolrzedne punktu 4 y";
    cin >> y4;
    cout << "Podaj wspolrzedne punktu 5 x";
    cin >> x5;
    cout << "Podaj wspolrzedne punktu 5 y";
    cin >> y5;
    double tabx[ 5 ] = { x1, x2, x3, x4, x5 };
    double taby[ 5 ] = { y1, y2, y3, y4, y5 };
   
   
   
    int index1_x = 0;
    int index1_y = 0;
    double max1 = 0;
    int max1_x = 0;
    int max1_y = 0;
    for( int i = 0; i = 4; i++ )
    {
        odleglosc = sqrt( pow( tabx[ index1_x + 1 ] - tabx[ index1_x ], 2 ) + pow( taby[ index1_y + 1 ] - taby[ index1_y ], 2 ) );
        index1_x++;
        index1_y++;
        if( odleglosc > max1 )
        {
            odleglosc = max1;
            tabx[ index1_x ] = max1_x;
            tabx[ index1_y ] = max1_y;
        }
    }
    cout << "Njwieksza Odleglosc punktu jeden do " << max1_x << " " << max1_y << "Wynosi: " << max1;
    int index2_x = 1;
    int index2_y = 1;
    double max2 = 0;
    int max2_x = 0;
    int max2_y = 0;
    for( int i = 0; i = 4; i++ )
    {
        odleglosc = sqrt( pow( tabx[ index2_x + 1 ] - tabx[ index2_x ], 2 ) + pow( taby[ index2_y + 1 ] - taby[ index2_y ], 2 ) );
        index2_x++;
        index2_y++;
        if( index2_x = 4 )
        {
            if( index2_y = 4 )
            {
                int index_x = 0;
                int index_y = 0;
                odleglosc = sqrt( pow( tabx[ index_x - 1 ] - tabx[ index_x ], 2 ) + pow( taby[ index_y - 1 ] - taby[ index_y ], 2 ) );
            }
        }
        if( odleglosc > max2 )
        {
            odleglosc = max2;
            tabx[ index2_x ] = max2_x;
            tabx[ index2_y ] = max2_y;
        }
    }
    cout << "Njwieksza Odleglosc punktu dwa do " << max2_x << " " << max2_y << "Wynosi: " << max2;
   
   
    int index3_x = 2;
    int index3_y = 2;
    double max4 = 0;
    int max4_x = 0;
    int max4_y = 0;
   
    int index4_x = 2;
    int index4_y = 2;
    double max5 = 0;
    int max5_x = 0;
    int max5_y = 0;
   
    for( int i = 0; i = 4; i++ )
    {
        odleglosc = sqrt( pow( tabx[ index3_x + 1 ] - tabx[ index3_x ], 2 ) + pow( taby[ index3_y + 1 ] - taby[ index3_y ], 2 ) );
        index3_x++;
        index3_y++;
       
        if( odleglosc > max4 )
        {
            odleglosc = max4;
            tabx[ index3_x ] = max4_x;
            tabx[ index3_y ] = max4_y;
        }
        for( int j = 0; j = 2; j++ )
        {
           
           
            odleglosc = sqrt( pow( tabx[ index4_x - 1 ] - tabx[ index4_x ], 2 ) + pow( taby[ index4_y - 1 ] - taby[ index4_y ], 2 ) );
            index4_x--;
            index4_y--;
           
            if( odleglosc > max4 )
            {
                odleglosc = max5;
                tabx[ index4_x ] = max5_x;
                tabx[ index4_y ] = max5_y;
            }
           
        }
    }
    if( max4 > max5 )
    {
        cout << "Njwieksza Odleglosc punktu trzy do " << max4_x << " " << max4_y << "Wynosi: " << max4;
    }
    else
    {
        cout << "Njwieksza Odleglosc punktu trzy do " << max5_x << " " << max5_y << "Wynosi: " << max5;
    }
   
    int index5_x = 3;
    int index5_y = 3;
    double max6 = 0;
    int max6_x = 0;
    int max6_y = 0;
    int index6_x = 3;
    int index6_y = 3;
    double max7 = 0;
    int max7_x = 0;
    int max7_y = 0;
    for( int i = 0; i = 4; i++ )
    {
        odleglosc = sqrt( pow( tabx[ index5_x + 1 ] - tabx[ index5_x ], 2 ) + pow( taby[ index5_y + 1 ] - taby[ index5_y ], 2 ) );
        index5_x++;
        index5_y++;
        if( odleglosc > max6 )
        {
            odleglosc = max6;
            tabx[ index5_x ] = max6_x;
            tabx[ index5_y ] = max6_y;
           
        }
        for( int j = 0; j = 3; j++ )
        {
           
           
            odleglosc = sqrt( pow( tabx[ index6_x - 1 ] - tabx[ index6_x ], 2 ) + pow( taby[ index6_y - 1 ] - taby[ index6_y ], 2 ) );
            index6_x--;
            index6_y--;
            if( odleglosc > max7 )
            {
                odleglosc = max7;
                tabx[ index6_x ] = max7_x;
                tabx[ index6_y ] = max7_y;
               
            }
        }
       
    }
   
    if( max6 > max7 )
    {
        cout << "Njwieksza Odleglosc punktu cztery do " << max6_x << " " << max6_y << "Wynosi: " << max6;
    }
    else
    {
        cout << "Njwieksza Odleglosc punktu cztery do " << max7_x << " " << max7_y << "Wynosi: " << max7;
    }
   
   
    int index7_x = 2;
    int index7_y = 3;
    double max8 = 0;
    int max8_x = 0;
    int max8_y = 0;
    int index8_x = 4;
    int index8_y = 4;
    double max9 = 0;
    int max9_x = 0;
    int max9_y = 0;
    for( int i = 0; i = 4; i++ )
    {
        odleglosc = sqrt( pow( tabx[ index7_x + 1 ] - tabx[ index7_x ], 2 ) + pow( taby[ index7_y + 1 ] - taby[ index7_y ], 2 ) );
        index7_x++;
        index7_y++;
        if( odleglosc > max8 )
        {
            odleglosc = max8;
            tabx[ index7_x ] = max8_x;
            tabx[ index7_y ] = max8_y;
           
        }
        for( int j = 0; j = 4; j++ )
        {
           
           
            odleglosc = sqrt( pow( tabx[ index8_x - 1 ] - tabx[ index8_x ], 2 ) + pow( taby[ index8_y - 1 ] - taby[ index8_y ], 2 ) );
            index8_x--;
            index8_y--;
            if( odleglosc > max9 )
            {
                odleglosc = max9;
                tabx[ index8_x ] = max9_x;
                tabx[ index8_y ] = max9_y;
            }
        }
       
    }
    if( max8 > max9 )
    {
        cout << "Njwieksza Odleglosc punktu cztery do " << max8_x << " " << max8_y << "Wynosi: " << max8;
    }
    else
    {
        cout << "Njwieksza Odleglosc punktu cztery do " << max9_x << " " << max9_y << "Wynosi: " << max9;
    }
    double tab_odlegosci[] = { max1, max2, max4, max5, max6, max7, max8, max9 };
    double p = 0;
    int indeks = 0;
    double max_pole = 0;
    for( int d = 0; d = 6; d++ )
    {
        p =( tab_odlegosci[ indeks ] + tab_odlegosci[ indeks + 1 ] + tab_odlegosci[ indeks + 2 ] ) / 2;
        pole_trojkata = sqrt( p *( p - tab_odlegosci[ indeks ] ) *( p - tab_odlegosci[ indeks + 1 ] ) *( p - tab_odlegosci[ indeks + 2 ] ) );
        indeks++;
        if( pole_trojkata > max_pole )
        {
            pole_trojkata = max_pole;
        }
    }
    cout << "maksymalne pole wynosi" << max_pole;
    system( "PAUSE" );
}
P-113295
Kisieland
» 2014-07-04 22:39:46
Na początek warunek we wszystkich pętlach for:
C/C++
for( int j = 0; j = 3; j++ ) //warunek nie jest spełniony w ogóle
for( int j = 0; j <= 3; j++ ) //tak 4 powtórki
for( int j = 0; j < 3; j++ ) // a tak 3
A poza tym cały ten kod poza wczytaniem danych jest dosyć chaotyczny.
P-113296
michal11
» 2014-07-04 22:55:27
Dość chaotyczny to mało powiedziane. Napisz sobie funkcję obliczającą pole trójkąta z podanych 3 pkt.
P-113297
« 1 »
  Strona 1 z 1