Novo

Forum kao aplikacija na telefonu

Dodajte forum na početni ekran i koristite ga kao aplikaciju, sa menijem na dnu ekrana.

  • 12 odgovora
  • 4.000 pregleda

Najnovija ↓

[Zadatak] Klasa Tacka - koordinate tjemena pravougaonika 29.08.2006. u 01:27 · pre 245 meseci
izmenjeno 1 put, poslednji put X Files 14.04.2009. u 19:56
  1. X Files14.04.2009. u 19:56zapis iz teksta poruke
#1
Zadatak glasi: Kooristeći principe objektnoorijentisanog programiranja rješiti zadatak:
Dato je n tacaka u ravni svojim koordinatama. Napisati program za ispitivanje da li medu zadatim tačkama postoje četiri koje predstavljaju koordinate tjemena pravougaonika.
Code:


Ja sam uradio ovako:

//#include <stdio.h>
#include <iostream>

using namespace std;

int main()
{
    int tacke_x[100];
    int tacke_y[100];
    int duzine_kordinate_x[100][3];
    int n,i,j,duzina,trenutna_duzina_x=2;
    cout << "Unesi broj tacaka: ";
    cin >> n;
    for (i=1;i<=n;i++)
    {
        cout << i <<". tacka unesi x,y ";
        cin >> tacke_x[i];
        cin >> tacke_y[i];
    }
    for (i=1;i<=n;i++)
    for (j=1;j<=n;j++)
    {
        if (tacke_y[i]==tacke_y[j])
        {
            if (tacke_x[i]!=tacke_x[j])
            if (tacke_x[i]<tacke_x[j]) 
            {
                duzina=tacke_x[j]-tacke_x[i];
                duzine_kordinate_x[trenutna_duzina_x][0]=i;//pamti jednu tacku
                duzine_kordinate_x[trenutna_duzina_x][1]=j;//pamti drugu tacku tj. indexe
                duzine_kordinate_x[trenutna_duzina_x][2]=duzina;
            } 
            else
            {
            duzina=tacke_x[i]-tacke_x[j];
            duzine_kordinate_x[trenutna_duzina_x][0]=j;// na nuli je bliza tacka
            duzine_kordinate_x[trenutna_duzina_x][1]=i;
            duzine_kordinate_x[trenutna_duzina_x][2]=duzina;
            }
            trenutna_duzina_x++;
        }
    }
    trenutna_duzina_x--;
    for (i=1;i<=trenutna_duzina_x;i++)
    for (j=2;j<=trenutna_duzina_x;j++)
    {
            
        if (duzine_kordinate_x[i][2]==duzine_kordinate_x[j][2])
        {
            if (abs(tacke_y[duzine_kordinate_x[i][0]]-tacke_y[duzine_kordinate_x[j][0]])
                ==abs(tacke_y[duzine_kordinate_x[i][1]]-tacke_y[duzine_kordinate_x[j][1]]))
            cout <<"Pravugaonik cine tacke :" <<duzine_kordinate_x[i][0]<<duzine_kordinate_x[i][1]<<duzine_kordinate_x[j][0]<< duzine_kordinate_x[j][1];
        }
    }
}    



Kad kompajlira sve je uredu, ali kad unesem sve koordinate, javi mi gresku. "Program has encountered....". Znate li sta je problem?
Hvala!
Re: [Zadatak] Klasa Tacka - koordinate tjemena pravougaonika 29.08.2006. u 12:14 · pre 245 meseci #5
Možda misli na podužu hierarhiju kojom se dolazi do i/ostream..

Preporučio bih ti da tačke malo drugačije organizuješ.

Code:
#include <iostream>
#include <vector>
// ...
using namespace std;

// ...

class point {

    int x,y;

    public:
        point(int x,int y):
            x(x),y(y)
        {}

        // ...
};

// ...

int main()
{
    vector<point> points;

    // ...
    
    return 0;
}

Potom možeš da napraviš klasu za četvrougao koja kao argumente konstruktora prima pokazivače na četri tačke (ovaj niz tačaka može biti i njena statička varijabla ili konstruktor umesto pokazivača može primati const reference pa praviti sopstvene kopije datih tačaka), i jednu bool metodu koja govori da li je reč o pravougaoniku ili ne. Ostatak su kombinatorika i geometrija/algebra..
Potpis
Ipak se ++uje.
Re: [Zadatak] Klasa Tacka - koordinate tjemena pravougaonika 29.08.2006. u 13:56 · pre 245 meseci #6
Citat:
potato: Zadatak glasi: Kooristeći principe objektnoorijentisanog programiranja rješiti zadatak:
Dato je n tacaka u ravni svojim koordinatama. Napisati program za ispitivanje da li medu zadatim tačkama postoje četiri koje predstavljaju koordinate tjemena pravougaonika.


Ja sam uradio ovako:

//#include <stdio.h>
#include <iostream>

using namespace std;

int main()
{
int tacke_x[100];
int tacke_y[100];
int duzine_kordinate_x[100][3];
int n,i,j,duzina,trenutna_duzina_x=2;
cout << "Unesi broj tacaka: ";
cin >> n;
for (i=1;i<=n;i++)
{
cout << i <<". tacka unesi x,y ";
cin >> tacke_x;
cin >> tacke_y;
}
for (i=1;i<=n;i++)
for (j=1;j<=n;j++)
{
if (tacke_y==tacke_y[j])
{
if (tacke_x!=tacke_x[j])
if (tacke_x<tacke_x[j])
{
duzina=tacke_x[j]-tacke_x;
duzine_kordinate_x[trenutna_duzina_x][0]=i;//pamti jednu tacku
duzine_kordinate_x[trenutna_duzina_x][1]=j;//pamti drugu tacku tj. indexe
duzine_kordinate_x[trenutna_duzina_x][2]=duzina;
}
else
{
duzina=tacke_x-tacke_x[j];
duzine_kordinate_x[trenutna_duzina_x][0]=j;// na nuli je bliza tacka
duzine_kordinate_x[trenutna_duzina_x][1]=i;
duzine_kordinate_x[trenutna_duzina_x][2]=duzina;
}
trenutna_duzina_x++;
}
}
trenutna_duzina_x--;
for (i=1;i<=trenutna_duzina_x;i++)
for (j=2;j<=trenutna_duzina_x;j++)
{

if (duzine_kordinate_x[2]==duzine_kordinate_x[j][2])
{
if (abs(tacke_y[duzine_kordinate_x[0]]-tacke_y[duzine_kordinate_x[j][0]])
==abs(tacke_y[duzine_kordinate_x[1]]-tacke_y[duzine_kordinate_x[j][1]]))
cout <<"Pravugaonik cine tacke :" <<duzine_kordinate_x[0]<<duzine_kordinate_x[1]<<duzine_kordinate_x[j][0]<< duzine_kordinate_x[j][1];
}
}
}



Kad kompajlira sve je uredu, ali kad unesem sve koordinate, javi mi gresku. "Program has encountered....". Znate li sta je problem?
Hvala!


Molim te postavi link ali sa [code] tagovima...
Re: [Zadatak] Klasa Tacka - koordinate tjemena pravougaonika 29.08.2006. u 14:07 · pre 245 meseci #7
Code:


#include <iostream>

using namespace std;

int main()
{
    int tacke_x[100];
    int tacke_y[100];
    int duzine_kordinate_x[100][3];
    int n,i,j,duzina,trenutna_duzina_x=2;
    cout << "Unesi broj tacaka: ";
    cin >> n;
    for (i=1;i<=n;i++)
    {
        cout << i <<". tacka unesi x,y ";
        cin >> tacke_x[i];
        cin >> tacke_y[i];
    }
    for (i=1;i<=n;i++)
    {
        
    for (j=1;j<=n;j++)
    {
        if (tacke_y[i]==tacke_y[j])
        {
            if (tacke_x[i]!=tacke_x[j])
            {
                                       if (tacke_x[i]<tacke_x[j]) 
                                       {
                                       duzina=tacke_x[j]-tacke_x[i];
                                       duzine_kordinate_x[trenutna_duzina_x][0]=i;//pamti jednu tacku
                                       duzine_kordinate_x[trenutna_duzina_x][1]=j;//pamti drugu tacku tj. indexe
                                       duzine_kordinate_x[trenutna_duzina_x][2]=duzina;
                                       } 
                                       else
                                       {
                                       duzina=tacke_x[i]-tacke_x[j];
                                       duzine_kordinate_x[trenutna_duzina_x][0]=j;// na nuli je bliza tacka
                                       duzine_kordinate_x[trenutna_duzina_x][1]=i;
                                       duzine_kordinate_x[trenutna_duzina_x][2]=duzina;
                                       }
            trenutna_duzina_x++;
        }
        }
    }
}
    trenutna_duzina_x--;
    for (i=1;i<=trenutna_duzina_x;i++)
    {
    for (j=2;j<=trenutna_duzina_x;j++)
    {
            
        if (duzine_kordinate_x[i][2]==duzine_kordinate_x[j][2])
        {
            if (abs(tacke_y[duzine_kordinate_x[i][0]]-tacke_y[duzine_kordinate_x[j][0]])
                ==abs(tacke_y[duzine_kordinate_x[i][1]]-tacke_y[duzine_kordinate_x[j][1]]))
            cout <<"Pravugaonik cine tacke :" <<duzine_kordinate_x[i][0]<<duzine_kordinate_x[i][1]<<duzine_kordinate_x[j][0]<< duzine_kordinate_x[j][1];
        }
      }
    }
}    


Al mi vrti u petlji ovaj cout. Ako ima ko kakvo drugo rjesenje, neka postavi. Jer sam blokiran skroz.
Hvala!
Re: [Zadatak] Klasa Tacka - koordinate tjemena pravougaonika 31.08.2006. u 10:49 · pre 245 meseci #9
Evo ti dobar dio zadatka. Sad ti samo nadopuni onaj dio gdje se provjerava da li koje tačke čine pravokutnik..

Code:
#include <iostream>
using namespace std;

class Tacka{
    private:  // po defaultu...
        float x, y;
    public:
        Tacka(){} // default konstruktor
        Tacka(float x, float y); // konstruktor koji prima koordinate
        friend istream& operator >>(istream &izlaz, Tacka &T);
};

Tacka::Tacka(float x, float y){
    this->x = x;
    this->y = y;
}

// preopterećenje operatora >> za učitavanje novog podatka Tacka
istream& operator >>(istream &izlaz, Tacka &T){
    izlaz >> T.x >> T.y;
    return izlaz;
}

int main(int argc, char* argv[])
{
    Tacka* T;
    int i, n;

    cout << "Unesi broj tačaka: ";
    cin >> n;

    T = new Tacka[n];
    if(T == NULL){
        cout << "Nema dovoljno memorije!";
        return -1;
    }

    for(i = 0; i < n; i++){
        cout << "Unesi koordinate točke T" << i << ": ";
        cin >> T[i];
    }

    // ovdje ubaci dio za provjeru pravokutnika...

    delete[] T;
    return 0;
}

Re: [Zadatak] Klasa Tacka - koordinate tjemena pravougaonika 05.09.2006. u 15:51 · pre 245 meseci #12
Ovako, dosao sam na ideju da uradim slijedece: Naci dijagonale pravougaonika, odnosno naci sve prave, odnosno duzine tih pravih kroz 2 tacke formulom d=sqr((x1-x2)*(x1-x2)-(y1-y2)*(y1-y2)). I kad nadjem sve prave onda ih upoređujem. Ako postoje dvije prave iste duzine, onda ispitaj da li im je tacka koja je tacno na pola ista, ako jeste onda je nadjen pravougaonik. Kao sto mi je poznato dijagonale kod pravougaonika su iste duzine i slijeku se u istoj tacki, ma koji god da je ugao izmedju njih. Napisao sam slijedeci dio koda koji se nadovezuje na ovo gore : "// ovdje ubaci dio za provjeru pravokutnika... " :
Code:

    for(l=0;i<n;l++){
                     for(j=l+1;j<n;j++)
                     {
    duzina[k]=sqrt((abs(T[i].Uzmi_x-T[j].Uzmi_x)*abs(T[i].Uzmi_x-T[j].Uzmi_x))+(abs(T[i].Uzmi_y-T[j].Uzmi_y)*abs(T[i].Uzmi_y-T[j].Uzmi_y)));
    sredina_x[k]=abs((T[i].Uzmi_x-T[j].Uzmi_x)/2);
    sredina_x[y]=abs((T[i].Uzmi_y-T[j].Uzmi_y)/2);
    k++;
}
}
for(m=0;m<k;m++){
                 for(n=m+1;n<k;n++)
{
if(duzina[m]==duzina[n])
{
if((sredina_x[m]==sredina_x[n])&&(sredina_y[m]==sredina_y[n]))
{
cout<<"Nadjen je pravougaonik!";
break;
}
}
}
}   


Napravio sam ove funkcije float Uzmi_x( float x){return x;} i Uzmi_y( float y){return y;} u sklopu klase tacka. Međutim, kad hocu da racunam duzinu, kompajler mi kaze: "invalid use of member (did you forget the '&' ? )".
Pa me zanima kako da uzmem x i y koordinate i ovako ih izracunam.
I jos jedno pitanje, mogu li nekako doznati koordinate tacaka ako sam ovako uradio taj kod?

Hvala puno!
Re: [Zadatak] Klasa Tacka - koordinate tjemena pravougaonika 06.09.2006. u 15:04 · pre 245 meseci #13
Code:

#include <iostream>
#include <math.h>
using namespace std;

class Tacka{
      public:
        Tacka(){} // default konstruktor
        Tacka(float x, float y); // konstruktor koji prima koordinate
        friend istream& operator >>(istream &izlaz, Tacka &T);
        float x, y;
};

Tacka::Tacka(float x, float y){
    this->x = x;
    this->y = y;
}

// preopterećenje operatora >> za učitavanje novog podatka Tacka
istream& operator >>(istream &izlaz, Tacka &T){
    izlaz >> T.x >> T.y;
    return izlaz;
}

int main(int argc, char* argv[])
{
    Tacka* T;
    int i, n;
    int l,j,k=0,m,a=0;
    float duzina[500],sredina_x[100],sredina_y[100];

    cout << "Unesi broj tacaka: ";
    cin >> n;

    T = new Tacka[n];
    if(T == NULL){
        cout << "Nema dovoljno memorije!";
        return -1;
    }

    for(i = 0; i < n; i++){
        cout << "Unesi koordinate tacke T" << i << ": ";
        cin >> T[i];
    }
 
    for(l=0;l<n;l++){
                     for(j=l+1;j<n;j++)
                     {
    duzina[k]=sqrt(((T[l].x-T[j].x)*(T[l].x-T[j].x))+((T[l].y-T[j].y)*(T[l].y-T[j].y)));
    cout<<duzina[k]<<" ---- \n";//cout sam stavio da probam,ok za 5 tacaka 10 duzina
    sredina_x[k]=((T[l].x+T[j].x)/2);
    sredina_y[k]=((T[l].y+T[j].y)/2);
    k++;
    
}
}
cout<<"\n K je jednako: "<<k;

for(m=0;m<k;m++){
                 for(n=m+1;n<k;n++)
                 {
if(duzina[m]==duzina[n])
                        {
                  
if((sredina_x[m]==sredina_x[n])&&(sredina_y[m]==sredina_y[n]))
                                                              {
cout<<"Nadjen je pravougaonik!\n";
break;
                                                              }
                         }
                  }
}   

    delete[] T;
    return 0;
}


Ok! Ovo radi sada!Samo me zanima ako mi moze iko pomoci da probam iskopati koordinate tacaka! :)
Prijavite se da biste odgovorili u ovoj temi.PrijavaRegistracija

Premeštanje teme