Newsgroup: it.comp.lang.c++
Titolo: creare una figura

 Ciao vorrei creare un figura a 2 dimensioni immettento un valore e e
usandolo per crearla,per i primi 2 lati non ho avuto problemi ma mi sono
bloccato per quanto riguarda l'altra faccia della figura,potreste darmi
qualche suggerimento,non la soluzione su come risolverlo?
 
#include<iostream.h>
int main()
{
 int large;// larghezza oggetto
 int count=2;// contatore
 int count2=1;//contatore
 cout << "inserire larghezza:";
 cin >> large;
 while(count<=large) {
   cout << "*";
   count++;
   }
 while(count2<=large) {
   cout << "*\n";
   count2++;
 }
 return 0;
}
Grazie per la cortese attenzione.
 
--------------------------------
Inviato via 
http://arianna.libero.it/usenet/

manuel wrote:

ciao manuel,
allora, scommetto che i lati che ti creano problemi sono quello a destra e
quello in basso, questo perchè usando cout non puoi posizionare il cursore
dove ti pare. Inizia disegnando il lato superiore come hai gia' fatto, al
termine di questo usa un '\n' che ti riporta il cursore sotto il primo '*'.
a questo punto disegni un '*' seguito da tanti spazi (large-2) ed infine
un'altro '*'. Riesegui il tutto per l'altezza (large-2) e l'ultimo lato,
quello in basso lo disegni come il superiore.
#include <iostream>
int main(int argc, char** argv)
{
  int dim;
  int count = 0;
  int count2 = 0;
  cout << "dimensione? ";
  cin >> dim;
  // Lato superiore del quadrato
  cout << endl;
  for (count = 0; count < dim; count++)
    cout << "*";
  // Lati destro e sinistro del quadrato
  cout << endl;
  count = 0;
  while (count < (dim - 2))
  {
    for (count2 = 0; count2 < dim; count2++)
    {
      if ((count2 == 0) || (count2 == (dim -1)))
        cout << "*";
      else
        cout << " ";
    }
    cout << endl;
    count++;
  }
  // Lato inferiore del quadrato
  for (count = 0; count < dim; count++)
    cout << "*";
  cout << endl;
  return 0;
}
Ciao,
Gaetano


    Ti ringrazio moltissimo^_^


 Grazie per la cortese attenzione.
Opps... mi ero sbagliato e ti ho risposto in privato e non sul ng...
rimando sul ng la mia risposta...
ciao, ho scritto adesso (avevo un pò di tempo) una piccola classe per tirare
linee in modalità testo.
Sicuramente sarà piena di bug, è così di prima battuta, comunque puoi sempre
migliorarla.
E aggiungo che non c'è nessuna ottimizzazione e alcune inefficienze, però un
programmino scritto in 10 min. deve essere solo uno spunto, deve dare
un'idea... forse cercando in internet ce ne sono di molto meglio, però serve
a fare piccoli disegnini in modo testo.
Ecco un esempio.
#include <iostream>
#include <algorithm>
typedef unsigned int UINT;
using namespace std;
class text2D
{
        char** tdata;
        UINT m_x;
        UINT m_y;
        public:
        text2D(UINT y,UINT x) : m_y(y),m_x(x)
        {
                tdata=new char*[m_y+1];
                for(unsigned int j=0;j<m_y+1;++j)
                {
                        tdata[j]=new char[m_x+1];
                        fill(tdata[j],tdata[j]+m_x+1,0);
                }
        }
        void set(UINT y,UINT x)
        {
                if (x<=m_x && y<=m_y) tdata[y][x]='*';
        }
        void line(UINT y1,UINT x1,UINT y2,UINT x2)
        {
                if (x1>x2) {
                        UINT t=x2;
                        x2=x1;
                        x1=t;
                        t=y2;
                        y2=y1;
                        y1=t;
                }
                int x21=x2-x1;
                float inc=1.0/max(m_y,m_x);
                if (x21)
                {
                        float x=x1;
                        while(x<=x2)
                        {
                                float y=-((x1-x)*y2+(x-x2)*y1)/x21;
set(static_cast<UINT>(y),static_cast<UINT>(x));
                                x+=inc;
                        }
                } else
                {
                        for(UINT y=min(y1,y2);y<=max(y1,y2);++y) set(y,x1);
                }
        }
        ~text2D()
        {
                for(unsigned int j=0;j<m_y+1;++j)
                        delete [] tdata[j];
                delete [] tdata;
        }
        friend ostream& operator<<(ostream& out,const text2D& P)
        {
                for(unsigned int y=0;y<=P.m_y;++y)
                {
                        for(unsigned int x=0;x<=P.m_x;++x)
                        {
                                out << P.tdata[y][x];
                        }
                        out << endl;
                }
                return out;
        }
};
int main()
{
        text2D v(10,10);
        v.line(0,0,0,4);
        v.line(4,0,4,4);
        v.line(0,0,10,0);
        v.line(0,6,0,10);
        v.line(0,6,10,6);
        v.line(4,6,4,10);
        v.line(0,10,4,10);
        v.set(10,3);
        v.set(10,9);
        cout << v << endl;
        char c;
        cin.get(c);
        return 0;
}
ciao,
F.P.


  Grazie mille ^_^
