Perdonen que vuelva a la carga, pero creo que esto no está terminado .
Antes que nada poner un caso que se me traspapelo entre tanto rombo. Es el caso de distinguir entre el borde y el interior:
Código
#include <stdio.h>
int main(){
int i=0,j,k=1,l,a=21;
/*do{
printf("\nBase del rombo(numero impar positivo): \n");
scanf("%d",&a);
}while ( a <=0 || (a % 2) == 0);*/
char A[a+4][a+4],cad[]="L E O S A N S A N";
for( i=0;i<=a+4;i++)
for( j=0;j<=a+4;j++)
A[i][j]='0';
A[0][a/2]=254;
i=1;
while(i<=a/2){
l=i;
for( j=(a/2)-i;j<=i+(a/2);j++){
if(j==(a/2)-l || j==l+(a/2))
A[i][j]=254;
else
A[i][j]='*';
}
i++;
}
k=i;
while(i>=(a/2)&& i<=a){
--k;
l=k;
for( j=(a/2)+1-k;j<(a/2)+k;j++)
if(j==(a/2)+1-l || j==(a/2)+l-1)
A[i][j]=254;
else
A[i][j]='*';
i++;
}
if(a>20){
for( i=(a/2)-8,k=0;i<(a/2)+10;i++,k++)
A[i][a+1]=cad[k];
}
for( i=0;i<a;i++){
printf("\t\t");
for( j=0;j<a+2;j++){
if(A[i][j]=='0')
printf("%c",' ');
else
printf("%c",A[i][j]);
}
putchar('\n');
}
putchar('\n');
return0;
}
¿Qué pasa con los expertos en C++?
A ver si se animan a colgar algo de código en C++.
Yo en dicho lenguaje soy un total neófito, pero por lo menos se traducir algo de C a C++. Así me salió esto:
Código
#include <iostream>
usingnamespace std;
int main()
{
int n,fila,col;
cout<<"Introduce un numero IMPAR: "<<endl;
cin>> n;
for(fila=1;fila<=n;fila++){
for(col=1;col<=n-fila;col++)
cout<<(" ");
for(col=1;col<=2*fila-1;col++)
cout<<("*");
cout<<endl;
}
for(fila=n-1;fila>=1;fila--){
for(col=1;col<=n-fila;col++)
cout<<(" ");
for(col=1;col<=2*fila-1;col++)
cout<<("*");
cout<<endl;
}
}
Pero claro, yo espero más de los expertos en C++, que haberlos hay los, todo está en que se animen con nuevas aportaciones.
Y todavía estoy a la espera que yoel_alejandro intervenga, que me dijo me iba a sorprender. No lo dejes estar mucho tiempo que se enfría el tema.
Y dedicado precisamente a yoel_alejandro al que rete en mi anterior mensaje, le dejo una versión "made in leosansan" del triángulo de Pascal, en este caso para que sea más a tono con el tema que se trata, de la pirámide de Pascal .... si ya sé que me acabo de inventar el término, pero ¿a qué queda bien? ...
¡¡¡¡ Saluditos! ..... !!!!
« Última modificación: 13 Marzo 2014, 15:22 pm por leosansan »
Vaya leosansan, siq ue le has cojido el gusto al rombo jijijijjii haber si me dejan un poco mas de tiempo libre e intento el triangulo de pascal ese, haber que sale
Huy, a mi dibujar formas en ASCII me da un dolor de cabeza... Es de los ejercicios que no puedo xD ..............................................................................
PD: El triangulo de pascal... ¿Recursivo?
¡¡¡Vamos hombre!!!, que no se trata de crear retratos o figuras complejas, además si te animas con el triángulo de Pascal, ya que tienes que crear la forma de triángulo, te será fácil dibujar la parte inferior y así ya tienes el rombo.
Hablando del triángulo de Pascal, me da igual como se obtenga,con recursión o sin ella, la idea es que la gente aporte soluciones variadas, como un reto, ni más ni menos. Ya luego podremos comenta rentre todos cual ha sido el más eficiente y cosas así.
Y para que no decaiga el tema yo aporto otro granito de arena al tema de los rombos en C++, que repito soy un pardillo total. Me cuesta horrores porque no controlo las salidas por pantalla, en C tengo los printf pero en C++ ..... sólo conozco cout, pero no sus posibilidades que me imagino tendrá, y setw. Y con este último me ha salido otro código con recursividad incluida:
Código
#include <iostream>
#include <iomanip>
usingnamespace std;
int dibuja_arriba (int a,int cont);
int dibuja_abajo (int a,int cont);
int main()
{
int cont=25,a=0;
/*cout << "Introduce un numero IMPAR: "<<endl;
cin >> a;
cout <<endl ;*/
dibuja_arriba (a,cont);
cout<<" ";
dibuja_abajo (cont-2,a+1);
return0;
}
int dibuja_arriba (int a,int cont){
if(cont<=0)
return1;
cout<<setw((cont/2)+1)<<" ";
for(int i=0;i<=a;i++)
cout<<"*";
cout<< endl;
dibuja_arriba (a+2,cont-2);
}
int dibuja_abajo (int a,int cont){
if(a<=0)
return1;
for(int i=1;i<=a;i++)
cout<<"*";
cout<< endl << setw(cont+2)<<" ";
dibuja_abajo (a-2,cont+1);
}
Tuve que hacer algún ajuste "extraño" pero sale bien la pirámide.
Pensé en hacer un circulo, pero hacer un circulo en una consola ASCII no es trivial. Para que te quedara bien habría que hacer "anti-alising" con alguna letra más redondita.
De todas formas sería más fácil usando una función matemática. ¿Te animas?.[/center]
¿Más fácil? De eso nada xD
Para empezar rompe el enfoque arriba-abajo, además para sacarla tendrías que hacer unas series de fourier muy divertidas... Y probablemente alguna casilla te salga mal ya que no es exacta y las casillas no admiten decimales.
En línea
Por favor, no me manden MP con dudas. Usen el foro, gracias.
Pero apenas en C++, ya te digo que no sé muy bien como imprimir de forma avanzada. No obstante continuo con mis aportaciones, para que vean lo que puede dar de sí este tema:
................................................... ¿Más fácil? De eso nada xD
Para empezar rompe el enfoque arriba-abajo, además para sacarla tendrías que hacer unas series de fourier muy divertidas... Y probablemente alguna casilla te salga mal ya que no es exacta y las casillas no admiten decimales.
¡No hombre!, no pensaba en ese sistema, para eso ya tengo el Mathematica y el Matlab.
Pensaba en esta idea:
Citar
f(x)=a/2 ...... 0<=x<=a/2
f(x)=-a/2 ...... -a/2<x<a
Para ello me apoyo en el uso del gotoxy, bien mediante la librería de conio, más exactamente la conio2.h:
Esta vez, en vista de que "no cabe" en la página todas las funciones que genero, de 3 a 19 o 20, las metí en un vídeo, ..... tranquilos, dura menos de un minutito:
¡¡¡¡ Saluditos! ..... !!!!
« Última modificación: 18 Marzo 2014, 14:28 pm por leosansan »
Chachi ^^. Un paso curioso sería hacerlas animadas (borrando y reescribiendola con otra posición cada x tiempo).
Yo de florituras en la pantalla, ni se me dan bien ni me gustan mucho. Por no dejar el tema a medias he hecho algo más de mi gusto: Una class Triangulo_Pascal:
Código
/** Resumen de los metodos públicos:
- Constructor(int n = 0): Genera un triangulo de pascal de tamanyo N
if(y < TAM ||(x > y))throw"Error, fuera de rango";
return Matriz[x][y];
}
int getSize()const{return TAM;}
void resize(int n)
{
if(n <0)throw"Error, tamanyo negativo";
clear();
if(n ==0){return;}
generar(n);
}
void clear()
{
if(Matriz ==NULL)return;
for(int i =0; i < TAM;i++)
delete[] Matriz[i];
delete[] Matriz;
Matriz =NULL;
TAM =0;
}
string toString()const
{
return texto;
}
operator string()
{
return toString();
}
~triangulo_pascal()
{
clear();
}
};
De la cual, podemos hacer algunas pruebas:
Código
int main()
{
triangulo_pascal mi_triangulo(5);
cout<<mi_triangulo.toString()<<endl;
mi_triangulo.resize(4);
cout<<mi_triangulo.toString()<<endl;
triangulo_pascal segundo(1);
if(mi_triangulo != segundo)
{
cout<<"Son diferentes :("<<endl<<endl;
}
cout<<(string)segundo<<endl;// otra forma de pasarlo a string es usando los casts
return0;
}
El mayor fallo que tiene es la función para pasarlo a string, que aunque siempre genera el triangulo, lo hace un poco "raro" para algunos valores de N.
« Última modificación: 16 Marzo 2014, 14:03 pm por amchacon »
En línea
Por favor, no me manden MP con dudas. Usen el foro, gracias.