Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

[Zadatak] Klasa Tacka - koordinate tjemena pravougaonika

[es] :: C/C++ programiranje :: C/C++ za početnike :: [Zadatak] Klasa Tacka - koordinate tjemena pravougaonika

[ Pregleda: 2679 | Odgovora: 12 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

potato
BiH

Član broj: 108322
Poruke: 7
*.PPPoE-621.sa.bih.net.ba.



Profil

icon [Zadatak] Klasa Tacka - koordinate tjemena pravougaonika29.08.2006. u 00:27 - pre 215 meseci
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!

[Ovu poruku je menjao X Files dana 14.04.2009. u 19:56 GMT+1]
 
Odgovor na temu

potato
BiH

Član broj: 108322
Poruke: 7
*.PPPoE-621.sa.bih.net.ba.



Profil

icon Re: [Zadatak] Klasa Tacka - koordinate tjemena pravougaonika29.08.2006. u 01:15 - pre 215 meseci
Ako mi ovo nije tacno, moze li neko ponuditi tacan kod? Hvala!
 
Odgovor na temu

#Ninja#
Tuzla

Član broj: 28925
Poruke: 259
*.net.ba
Via: [es] mailing liste



+1 Profil

icon Re: [Zadatak] Klasa Tacka - koordinate tjemena pravougaonika29.08.2006. u 08:31 - pre 215 meseci
Gdje ti je tu OOP?
 
Odgovor na temu

potato
BiH

Član broj: 108322
Poruke: 7
*.PPPoE-357.sa.bih.net.ba.



Profil

icon Re: [Zadatak] Klasa Tacka - koordinate tjemena pravougaonika29.08.2006. u 11:14 - pre 215 meseci
Znam da nije bas OOP, ali ako neko ima drugi nacin za ovo, neka postavi.
 
Odgovor na temu

Mali Misha
Mihajlo Anđelković
NBGD

Član broj: 79396
Poruke: 379
*.ptt.yu.

ICQ: 195487525
Sajt: cpptea.com


+1 Profil

icon Re: [Zadatak] Klasa Tacka - koordinate tjemena pravougaonika29.08.2006. u 11:14 - pre 215 meseci
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..
Ipak se ++uje.
 
Odgovor na temu

djalfirevic

Član broj: 76932
Poruke: 497
*.dynamic.sbb.co.yu.



Profil

icon Re: [Zadatak] Klasa Tacka - koordinate tjemena pravougaonika29.08.2006. u 12:56 - pre 215 meseci
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...
 
Odgovor na temu

potato
BiH

Član broj: 108322
Poruke: 7
*.PPPoE-357.sa.bih.net.ba.



Profil

icon Re: [Zadatak] Klasa Tacka - koordinate tjemena pravougaonika29.08.2006. u 13:07 - pre 215 meseci
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!
 
Odgovor na temu

Filip_B
Filip Bukovski
Beograd, Blok 63

Član broj: 99812
Poruke: 49
*.adsl.sezampro.yu.



Profil

icon Re: [Zadatak] Klasa Tacka - koordinate tjemena pravougaonika30.08.2006. u 23:27 - pre 215 meseci
A kako se dokazuje da 4 tačke u ravni čine pravougaonik?
 
Odgovor na temu

itf
Zagreb

Član broj: 59794
Poruke: 993
161.53.55.*



+9 Profil

icon Re: [Zadatak] Klasa Tacka - koordinate tjemena pravougaonika31.08.2006. u 09:49 - pre 215 meseci
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;
}

 
Odgovor na temu

potato
BiH

Član broj: 108322
Poruke: 7
*.PPPoE-3412.sa.bih.net.ba.



Profil

icon Re: [Zadatak] Klasa Tacka - koordinate tjemena pravougaonika31.08.2006. u 19:54 - pre 215 meseci
Hvala puno na pomoci!!Samo da razrijesim nejasnoce, sad trebam onaj dio programa sa for petljama koji ce ispitati koje tacke cine pravougaonik?
 
Odgovor na temu

itf
Zagreb

Član broj: 59794
Poruke: 993
161.53.55.*



+9 Profil

icon Re: [Zadatak] Klasa Tacka - koordinate tjemena pravougaonika01.09.2006. u 07:46 - pre 215 meseci
Citat:
potato: Hvala puno na pomoci!!Samo da razrijesim nejasnoce, sad trebam onaj dio programa sa for petljama koji ce ispitati koje tacke cine pravougaonik?
Tako je
 
Odgovor na temu

potato
BiH

Član broj: 108322
Poruke: 7
*.PPPoE-2498.sa.bih.net.ba.



Profil

icon Re: [Zadatak] Klasa Tacka - koordinate tjemena pravougaonika05.09.2006. u 14:51 - pre 214 meseci
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!
 
Odgovor na temu

potato
BiH

Član broj: 108322
Poruke: 7
*.PPPoE-1586.sa.bih.net.ba.



Profil

icon Re: [Zadatak] Klasa Tacka - koordinate tjemena pravougaonika06.09.2006. u 14:04 - pre 214 meseci
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! :)
 
Odgovor na temu

[es] :: C/C++ programiranje :: C/C++ za početnike :: [Zadatak] Klasa Tacka - koordinate tjemena pravougaonika

[ Pregleda: 2679 | Odgovora: 12 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.