Esercizio c++

di il
12 risposte

Esercizio c++

Salve...so che quando si deve chiedere un aiuto si dovrebbe postare una possibile soluzione...ma su questa traccia non riesco proprio a capire da dove iniziare a mettere mano..se qualcuno sarebbe così gentile da darmi un input iniziale ,anche solo capire il metodo da utilizzare, insomma di cosa si tratta.. potrebbe aiutarmi molto... ecco la traccia:
realizzare un programma che permetta di fornire le coordinate di un rettangolo e di un numero indefinito di poligoni. stabilire il numero di poligoni che contengono il rettangolo ,sono contenuti o lo intersecano (eventualmente numero di vertici contenuti).Grazie mille

12 Risposte

  • Re: Esercizio c++

    Bel problemino di geometria computazionale.

    Prima del software, devi sapere come risolverlo dal punto di vista geometrico.

    Ci sono un po' di problemi da risolvere:

    1) i poligoni sono convessi o anche concavi?
    2) il rettangolo e' parallelo agli assi? O inclinato in modo qualunque?

    Come si rappresenta un poligono?
    Come rappresentare un rettangolo?

    Ma puoi fare di meglio, probabilmente: non e' forese vero che un rettangolo e' un particolare tipo di poligono?

    Quindi potresti fare la figata di estendere la traccia in:

    realizzare un programma che permetta di fornire le coordinate di un POLIGONO e di un numero indefinito di poligoni. stabilire il numero di poligoni che contengono il POLIGONO ,sono contenuti o lo intersecano (eventualmente numero di vertici contenuti)

    Perche' estendere, dirai tu? C'e' un motivo molto subdolo, ma se ci pensi bene, ti risultera' anche ovvio. Aiutino: mai complicarsi la vita inutilmente (sembra un controsenso, ma non lo e').

    Manca ancora un pezzetto: ti servono i concetti base di calcolo vettoriale. In particolare:

    1) somma sottrazione tra vettori
    2) moltiplicazione di uno scalare per un vettore

    ma sopprattutto

    3) prodotto scalare
    4) prodotto vettoriale
  • Re: Esercizio c++

    Questa generalizzazione mi fa pensare ad una classe poligono per il resto
    la traccia non lo specifica ma credo lati paralleli agli assi e solo poligoni convessi...grazie : )
  • Re: Esercizio c++

    Bene, era praticamente ovvio, ti trovi nella situazione piu' facile.

    Ed ora devi trovare le risposte a tutte le altre domande.

    Siamo in 2D, ovviamente.

    1) come rappresenti un punto?
    2) come rappresenti un poligono?
    3) come fai a sapere se un punto sta' dentro/fuori/sul bordo di un poligono?

    a) che cosa e' un vettore?
    b) che cosa e' il prodtto scalare di due vettore?
    c) che cosa e' il prodotto vettoriale di due vettori?
  • Re: Esercizio c++

    Mi è sembrato strano l'utilizzo delle classi..perchè abbiamo iniziato la teoria per ora e non in c++....perciò ho chiesto appena ho potuto e la risposta è stata array in 3d ... 0.0 comunque grazie mille per la disponibilità
  • Re: Esercizio c++

    Finalmente sono risuscita a fare la lettura dei poligoni in questo modo...ma come è possibile fare la lettura di un numero indefinito di poligoni e al tempo stesso " i poligoni devono essere salvati per poi, conclusa la fase di lettura , passare a fare i tutti controlli" come faccio a salvare questi dati se non conosco neppure il numero di poligoni che verranno inseriti...è possibile in qualche modo? grazie mille!!!!!!
    #include <iostream>
    
    using namespace std;
    
    struct punto
    {
      int x;
      int y;
    };
    
    typedef punto *poligono; //definisco un tipo puntatore a punto e lo chiamo poligono
    void LetturaPunto(punto & P);
    void LetturaPoligono(poligono & A, int  nA);
    
    int main()
    {
        char scelta;
        int N;
        N=4;
        cout<<"inserisci coordinate del RETTANGOLO"<<endl;
        poligono Pol;
        LetturaPoligono(Pol, N);
        do
        {
        cout<<"inserisci il numero dei vertici di cui e' formato il poligono"<<endl;
        cin>>N;
        poligono Pol1;
        LetturaPoligono(Pol1, N);
        do
        {
        cout<<"altro poligono?(s/n)"<<endl;
        cin>>scelta;
        if(scelta!='s'&&scelta!='n')
        cout<<"errato ridigitare la scelta"<<endl;
        }while(scelta!='s'&&scelta!='n');
        }
        while(scelta=='s');
    
    }
    
    void LetturaPunto(punto & P)
    {
         cout<<"x= ";
         cin>>P.x;
         cout<<"y= ";
         cin>>P.y;
    }
    
    void LetturaPoligono(poligono & A, int  nA)
    {
         A= new punto[nA];
         for(int i=0;i<nA;i++)
         {
           cout<<"punto "<<i+1<<endl;
           LetturaPunto(A[i]);
         }
    }
  • Re: Esercizio c++

    O allochi direttamente la memoria oppure li salvi in un file.

    ciao
  • Re: Esercizio c++

    Innanzitutto grazie per la risposta devo utilizzare allocazione dinamica..però io so soltanto leggere un poligono lo salvo poi cancello e ne leggo un altro oppure un numero stabilito ..ma se i poligoni sono di numero indefinito non so come leggerli e salvarli tutti per poi utilizzarli..scusami potresti farmi un piccolo esempio grazie mille
  • Re: Esercizio c++

    Come è fatto un poligono? Quale struttura dati utilizzi per rappresentarne uno in memoria?

    Basta che costruisci una lista collegata e allochi un elemento alla volta (anche senza utilizzare strutture dati tipiche del C++).
  • Re: Esercizio c++

    Un poligono diciamo un array di punti di dimensioni pari al numero di vertici del poligono...? devo utilizzare una lista concatenata dove ogni nodo è un poligono..:S non so ;(
    grazie mille oregon
  • Re: Esercizio c++

    Se un poligono è una struttura con il numero dei vertici e l'array di coordinate dei vertici, puoi utilizzare una lista di queste strutture.
  • Re: Esercizio c++

    Per essere più chiaro, qualcosa simile a
    
    typedef struct _Pnt
    {
    	double x, y;
    } Pnt;
    
    typedef struct _Poly
    {
    	int vert;
    	Pnt *points;
    } Poly;
    
    typedef struct _PNode
    {
    	Poly pol;
    	struct _PNode *next;
    } PNode;
    
  • Re: Esercizio c++

    Grazie mille come sempre chiarissimo e gentilissimo ...ne è uscito fuori tutto ciò solo che al secondo punto del secondo poligono crasha....
    
    struct punto
    {
        int x;
        int y;
    };
    struct poligono
    {
        int N;
        punto *coordinate;
        poligono *next; 
    };
    poligono *il=NULL; //punta all inizio della lista.
    void LeggiPunto(punto *&a);
    void LeggiPoligoni(poligono * pol,int N);
    void InsInTesta(poligono *&il,poligono *nuovo);
    void InsInCoda (poligono *&il,poligono *nuovo);
    void DistruggiLista(poligono *&il);
    
    int main()
    {
        int N;
        poligono *nuovo=NULL; //puntatore alla struct poligono
        char scelta;
        do
        {
          nuovo=new poligono;
          if(nuovo!=NULL) // se e stato allocato continua.
          {
          cout<<"numero di vertici del poligono? "<<endl;
          cin>>N;
          cout<<"Leggi coordinate"<<endl;
          LeggiPoligoni(nuovo,N);
          nuovo->next=NULL;
          InsInCoda(il,nuovo);
          cout<<"inserire un nuovo poligono?(s/n)"<<endl;
          cin>>scelta;
          }
        }
        while(scelta=='s');
    DistruggiLista(il);
    }
    void InsInTesta(poligono *&il,poligono *nuovo)
    {
        nuovo->next=il;
        il=nuovo;
    }
    
    void InsInCoda (poligono *&il,poligono *nuovo)
    {
        poligono *ultimo=NULL;
         if(il==NULL)
          {
            InsInTesta(il,nuovo);
          }
          else
        {
            ultimo=il;
            while(ultimo->next!=NULL)
            {
            ultimo=ultimo->next;
            }
            ultimo->next=nuovo;//lo aggancio all ultimo nodo
        }
    }
    void DistruggiLista(poligono *&il)
    {
        poligono *tmp=il;
        while(il!=NULL)
        {
           tmp=il->next;
           delete il;
           il=tmp;
        }
    }
    void LeggiPunto(punto *&a)
    {
        cout<<"x= ";
        cin>>a->x;
        cout<<"y =";
        cin>>a->y;
        cout<<endl;
    }
    
    void LeggiPoligoni(poligono * pol,int N)
    {
        for(int i=0;i<N;i++)
        {
            punto *a=new punto;
            LeggiPunto(a);
            pol->coordinate[i].x=a->x;
            pol->coordinate[i].y=a->y;
        }
    }
    e credo che l'errore sia in queste righe:

    pol->coordinate.x=a->x;
    pol->coordinate.y=a->y;
Devi accedere o registrarti per scrivere nel forum
12 risposte