Ascii

di il
13 risposte

Ascii

Ragazzi sto perdendo la testa per questo programma... Sto facendo un progetto per scuola nel quale dato il nome della forma geometrica e la dimensione, mando in output nella console la rispettiva forma in caratteri ASCII, del tipo: A nel caso del triangolo...
AA
A A
AAAA
Sono riuscito a fare tranquillamente il quadrato, il triangolo ed il rombo ma per il cerchio di sto sbattendo la testa da GIORNI.. se a qualcuno è capitato di fare una cosa simile e vuole darmi un consiglio gliene sarei veramente grato.. Vi allego il mio codice con tutte le altre forme.. quella del cerchio è in forma di commento. Qualunque consiglio o parere mi farebbe davvero comodo a questo punto non sò più dove sbattere la testa.

#include <iostream>
using namespace std;


[code]/*char cerchio(int d){

int a=(d/2);

int n=0;
for (int x=0; x<d; x++){

for(int i=0; i<d; i++){
if(?){
	cout<<"**";
}else {
	
	if(?){
	cout<<"*";
	
	}
}													
  } cout<<endl;     
if(?){
  a--;
  
} else{

 if(a<d/2){
  n=1;
  a++;
  
}
}
}

cout<<endl;
	
return 0;

}
*/

13 Risposte

  • Re: Ascii

    Prova ad usare i valori approssimati ottenuti dalle funzioni seno e coseno (sin e cos)
  • Re: Ascii

    oregon ha scritto:


    Prova ad usare i valori approssimati ottenuti dalle funzioni seno e coseno (sin e cos)
    Hey ciao Oregon, ci sto pensando su, dici che posso utilizzare i valori di sin e cos anche se l' output lo sto mandando nella console..
    Mi dici qualcosa in più?
    Grazie veramente, per l' interessamento.
  • Re: Ascii

    Per la console puoi usare solo il coseno per posizionare il carattere (o i caratteri) su ogni linea.

    Considera un quarto di circonferenza che va da pi/2 a pi e calcola un certo numero di punti tramite il coseno, magari con una formula che scali e trasli il valore, ad esempio 10+10*cos(x).
  • Re: Ascii

    .
  • Re: Ascii

    Io ho fatto questa funzione che mi disegna un rombo perfetto di grandezza d.. Ora devo cercare di "arrotondare i bordi" e renderlo a forma di cerchio.. devo azzeccare la condizione dell' if, cosa ne pensi?

    char cerchio(int d){
    if (d%2==0)
    d++;
    
    int a=(d/2);
    int b=(d/2);
    int n=0;
    for (int x=0; x<d; x++){
    
    for(int i=0; i<d; i++){
    if(i==a||i==b){
    	cout<<"*";
    }else {
    	cout<<" ";
    	
          }
        } cout<<endl;     
    if(a>0&&b<d&&n==0){
      a--;
      b++;
    } else{
    
     if(a<d/2&&b>d/2){
      n=1;
      a++;
      b--;
    }
    }
    }
    
    cout<<endl;
    	
    return 0;
    }
    
    
    
  • Re: Ascii

    Non tenti neanche ad usare il cos o attendi che ti proponga io il codice?
  • Re: Ascii

    oregon ha scritto:


    Non tenti neanche ad usare il cos o attendi che ti proponga io il codice?
    Sto provando.. Ma 10 è una costante? Perché la dimensione del cerchio varia dalla grandezza di d, e poi con X intendi il contatore del primo for?
    e questa formula dove la dovrei mettere?
    Scusa per tutte queste domande ma è la prima volta che mi occupo di queste cose.
    #include <iostream>
    #include <cmath> 
    
    using namespace std;
    
    int main(){
    int d;
    cin>>d;
    
    if (d%2==0)
    d++;
    
    int a=(d/2);
    int b=(d/2);
    int n=0;
    for (int x=0; x<d; x++){
    
    for(int i=0; i<d; i++){
    if(i==a||i==b){
    	cout<<"*";
    }else {
    	cout<<" ";
    	
          }
        } cout<<endl;     
    if(a>0&&b<d&&n==0){
      a--;
      b++;
    } else{
    
     if(a<d/2&&b>d/2){
      n=1;
      a++;
      b--;
    }
    }
    }
    
    cout<<endl;
    	
    return 0;
    }
    
    
  • Re: Ascii

    Sì, è un esempio ... devi adattare tu ... il problema è che con dei caratteri (e con la proporzione altezza/larghezza di questi caratteri) non potrai ottenere che una approssimazione ...

    Ad esempio
    
    #define _USE_MATH_DEFINES
    
    #include <iostream>
    #include <cmath>
    
    using namespace std;
    
    int main()
    {
    	double ang, step = M_PI / 14;
    	int s;
    
    	for (ang = M_PI / 2; ang < M_PI; ang += step)
    	{
    		int v = (int)(18 + 16 * cos(ang));
    
    		for (s = 0; s < v - 1; s++)
    			cout << " ";
    
    		cout << "*" ;
    
    		int vprec = 2 * (18 - v);
    		for (s = 0; s < vprec; s++)
    			cout << " ";
    
    		cout << "*" << endl;
    	}
    
    	for (ang = M_PI; ang >= M_PI/2; ang -= step)
    	{
    		int v = (int)(18 + 16 * cos(ang));
    
    		for (s = 0; s < v - 1; s++)
    			cout << " ";
    
    		cout << "*";
    
    		int vprec = 2 * (18 - v);
    		for (s = 0; s < vprec; s++)
    			cout << " ";
    
    		cout << "*" << endl;
    	}
    
    	return 0;
    }
    
  • Re: Ascii

    oregon ha scritto:


    Sì, è un esempio ... devi adattare tu ... il problema è che con dei caratteri (e con la proporzione altezza/larghezza di questi caratteri) non potrai ottenere che una approssimazione ...

    Ad esempio
    
    #define _USE_MATH_DEFINES
    
    #include <iostream>
    #include <cmath>
    
    using namespace std;
    
    int main()
    {
    	double ang, step = M_PI / 14;
    	int s;
    
    	for (ang = M_PI / 2; ang < M_PI; ang += step)
    	{
    		int v = (int)(18 + 16 * cos(ang));
    
    		for (s = 0; s < v - 1; s++)
    			cout << " ";
    
    		cout << "*" ;
    
    		int vprec = 2 * (18 - v);
    		for (s = 0; s < vprec; s++)
    			cout << " ";
    
    		cout << "*" << endl;
    	}
    
    	for (ang = M_PI; ang >= M_PI/2; ang -= step)
    	{
    		int v = (int)(18 + 16 * cos(ang));
    
    		for (s = 0; s < v - 1; s++)
    			cout << " ";
    
    		cout << "*";
    
    		int vprec = 2 * (18 - v);
    		for (s = 0; s < vprec; s++)
    			cout << " ";
    
    		cout << "*" << endl;
    	}
    
    	return 0;
    }
    
    wow ok.. era molto più complicato di quello che pensavo. Posso chiederti perchè le variabili v e vprec le dichiari due volte?
    e secondo te posso rendere la dimensione del cerchio variabile dato un input, ovviamente mantenendo questi rapposti?
  • Re: Ascii

    Puoi dichiararle una sola volta.

    Per le dimensioni, devi lavorare sulle costanti ...
  • Re: Ascii

    Ho optato per creare una variabile y la quale viene moltiplicata per i valori costanti che hai messo te, solamente che in questo modo aumenta solo la larghezza del cerchio..Per l'altezza hai un idea da suggerirmi?


    #define _USE_MATH_DEFINES
    
    #include <iostream>
    #include <cmath>
    
    using namespace std;
    
    int main(){
    int y;
    cin>>y;	
    	
       double ang, step = M_PI / 14;
       int s;
      
       for (ang = M_PI / 2; ang < M_PI; ang += step)
       {
          int v = (int)(18*y + 16*y * cos(ang));
    
          for (s = 0; s < v - 1; s++)
             cout << " ";
    
          cout << "*" ;
    
          int vprec = 2 * (18*y - v);
          for (s = 0; s < vprec; s++)
             cout << " ";
    
          cout << "*" << endl;
       }
    
       for (ang = M_PI; ang >= M_PI/2; ang -= step)
       {
          int v = (int)(18*y + 16*y * cos(ang));
    
          for (s = 0; s < v - 1; s++)
             cout << " ";
    
          cout << "*";
    
          int vprec = 2 * (18*y - v);
          for (s = 0; s < vprec; s++)
             cout << " ";
    
          cout << "*" << endl;
       }
    
       return 0;
    }
  • Re: Ascii

    L'altezza è gestibile dal denominatore di

    M_PI / 14
  • Re: Ascii

    oregon ha scritto:


    L'altezza è gestibile dal denominatore di

    M_PI / 14
    Okay si, finalmente ho capito bene come funziona tutto il codice che mi hai scritto.. perfetto.
    Grazie mille oregon, non è la prima volta che mi dai una mano, te ne sono veramente riconoscente.
    Alla prossima
Devi accedere o registrarti per scrivere nel forum
13 risposte