Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - leosansan

#311
Programación C/C++ / Re: Ayuda con programa
15 Marzo 2014, 19:54 PM
Y porfi, la próxima vez elige en GeSHi las etiquetas de C++ para que el código salga coloreado y sea más fácil de visualizar.

¡¡¡¡ Saluditos! ..... !!!!


#312
Programación C/C++ / Re: Ayuda con programa
15 Marzo 2014, 14:43 PM
Cita de: amchacon en 15 Marzo 2014, 12:14 PM
Que manía tienen los profesores de mezclar C y C++.
....................................

Por no hablar de librerías innecesarias con el uso de funciones no recomendadas:

Código (cpp) [Seleccionar]

..............
#include <conio.h> <== No aconsejable por no ser estándar
#include <stdio.h> <== Sobraría usando cin.getline
...........................
gets(frase); <== No aconsejable, en su lugar, por ejemplo, usaría la que sigue
cin.getline(frase, 100, '\n');
.....................
getch(); <== No aconsejable por no ser estándar



¡¡¡¡ Saluditos! ..... !!!!


#313
Cita de: amchacon en 14 Marzo 2014, 22:58 PM

Bueno que no se diga, dibujare señales cuadradas.


Pero ese no era el tema, estábamos hablando de pirámides.

Pero bueno, para que no se diga, sin array, strings ni funciones. Solamente con el misero pero potente printf y mucha imaginación:


A mi ni me caben más en la pantalla:

Código (cpp) [Seleccionar]

#include <stdio.h>

int main(){
  int i,j,k,l=0,cont=0,cont1=0,tam,MAX=40;
  for (tam=3;tam<=15;tam++){
    cont=cont1=0;
    for (i=0,j=0;i<MAX-1;i++,j++){
      putchar('*');
      if (j==tam-1)
        printf ("%*c", tam-2, ' ');
       if (i%tam==0){
         cont++;
         j=0;
       }
    }
    putchar ('\n');
    for (k=0;k<tam;k++){
      for (i=0,j=0;i<2*MAX/tam-1;i++,j++){
        if (cont1==cont-1)
          break;
        if (j==0)
          printf ("%*c", tam, '*');
        else
            printf ("%*c", tam-1, '*');
        if (k==tam-1  && i<(2*MAX/tam-1)/2+1){
          cont1++;
          for (l=0;l<tam-1;l++){
            putchar('*');
          }
        }
        if (i%(tam+1)==0)
          j=0;
      }
      putchar ('\n');
    }
  putchar ('\n');
  }
return 0;
}


De todas formas sería más fácil usando una función matemática. ¿Te animas?.

¡¡¡¡ Saluditos! ..... !!!!


#314
Programación C/C++ / Re: tableros
15 Marzo 2014, 10:10 AM

La idea es buena pero ..... sólo me serviría para las líneas superior e inferior ya que las intermedias las tengo que procesar como caracteres para el tema del color.

¿Encuentras tu bandera?.




He modificado el código para que , además del color, se ajuste el tamaño de la consola al dibujo:



Código (cpp) [Seleccionar]

/*****************************/

#include <stdio.h>
#include <windows.h>
#include <time.h>
#include <stdlib.h>

int main()
{
  srand((unsigned) time(NULL));
  int i,j,dim,dim_plus;
  char tamanyo_consola[80];
  printf("\nDimensi\xA2n del Tablero: ");
  fflush (stdout);
  scanf("%d",&dim);
  printf ("\n\n");
  dim_plus=dim*4+1;
  int a0[dim_plus],a1[dim_plus],a2[dim_plus],a3[dim_plus];
  /** linea superior **/
  for (j=0;j<dim_plus;j++){
    if (j==0 )
      a0[j]=218;
    else if (j==dim_plus-1)
      a0[j]=191;
    else if ((j)%4==0 && j<dim_plus-1)
      a0[j]=194;
    else
      a0[j]=196;
  }
  /** linea inferior **/
  for (j=0;j<dim_plus;j++){
    if (j==0 )
      a2[j]=192;
    else if (j==dim_plus-1)
      a2[j]=217;
    else if ((j)%4==0 && j<dim_plus-1)
      a2[j]=193;
    else
      a2[j]=196;
  }
  /** salto de linea...  **/
  /** y dibujo intermedias y laterales  **/
  for (j=0;j<dim_plus;j++){
    if (j==0)
      a1[j]=195;
    else if (j==dim_plus-1)
      a1[j]=180;
    else if ((j)%4==0 && j<dim_plus-1)
      a1[j]=197;
    else
      a1[j]=196;
  }
  /** linea lateral **/
  for (j=0;j<dim_plus;j++){
    if (j==0 )
      a3[j]=179;
    else if (j==dim_plus-1)
      a3[j]=179;
    else if ((j)%4==0 && j<dim_plus-1)
      a3[j]=179;
    else
      a3[j]=219;
  }
  /** imprimimos **/
  sprintf(tamanyo_consola, "MODE %d,%d", dim_plus+1,2*dim+1);
  system(tamanyo_consola);
         /** linea superior **/
  for (j=0;j<dim_plus;j++){
    color (6);
    printf("%c",a0[j]);
  }

  putchar ('\n');
  for (j=0;j<dim_plus;j++){
      if ((a3[j]==219) ){
        color (80+rand() % (249-80));
        printf("%c",32);
      }
      else{
        color (6);
        printf("%c",a3[j]);
      }
    }

  /** salto de linea...  **/
  /** y dibujo intermedias y laterales  **/
  for (i=0;i<dim-1;i++){
    putchar ('\n');
    for (j=0;j<dim_plus;j++){
      color (6);
      printf("%c",a1[j]);
      color (7);
    }
    putchar ('\n');
    /** linea lateral **/
    for (j=0;j<dim_plus;j++){
      if ((a3[j]==219) ){
        color (80+rand() % (249-80));
        printf("%c",32);
        color (7);
      }
      else{
        color (6);
        printf("%c",a3[j]);
      }
    }

    }
  putchar ('\n');
   /** linea inferior **/
   for (j=0;j<dim_plus;j++){
    color (6);
    printf("%c",a2[j]);
  }
  system ("pause>null");
  return 0;
}
 
void color (int n)
{
        SetConsoleTextAttribute(GetStdHandle (STD_OUTPUT_HANDLE), n );
}


¡¡¡¡ Saluditos! ..... !!!!


#315
Muchos thanks por la información.

¡¡¡¡ Saluditos! ..... !!!!


#316
Cita de: amchacon en 14 Marzo 2014, 01:39 AM

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 (cpp) [Seleccionar]

#include <iostream>
#include <iomanip>
using namespace 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);
    return 0;
}

int dibuja_arriba (int a,int cont){
    if (cont<=0)
      return 1;
    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)
      return 1;
    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.

¡¡¡¡ Saluditos! ..... !!!!



#317
Cita de: amchacon en 11 Marzo 2014, 12:44 PM
Yo por comodidad, uso un plugin que viene en el codeblocks. Así no tengo que estar abriendo un programa cada vez.
...................................
.

¿Me podrías informar sobres ese plugin?

¡¡¡¡ Saluditos! ..... !!!!


#318
Programación C/C++ / Re: tableros
14 Marzo 2014, 17:13 PM
Cita de: amchacon en 14 Marzo 2014, 01:03 AM
La eficiencia es buena, como mucho se puede mejorar creandote un vector fila y ir imprimiendo filas del tirón.

Aparte de eso. El código podría ser más claro. Y sobre todo más genérico (para cualquier tamaño del tablero).

Ah, y los pegotes se puede resolver pintandolos al reves (primero el pegote y despues el cuadrado).


Estimado amigo Maikel Angelo creo que he logrado lo que pedias, ya sabes que tus deseos son como órdenes para mi: eficiente, clarito, genérico y sin pegotes .... y además "cortito", como me gustan a mi los códigos.

He aquí unas salidas de muestra:








Código (cpp) [Seleccionar]

/*****************************/
/*

a0=linea superior
a1=lineas intermedias
a2=linea inferior
a3=lineas laterales


  218=┌  196=─  194=┬  191=┐  179=│  195=├

  197=┼  180=┤  192=└  193=┴  217=┘  219=█

*/
/*****************************/
#include <stdio.h>

int main()
{
 int i,j,dim,dim_plus;
 printf("\nDimensi\xA2n del Tablero: ");
 fflush (stdout);
 scanf("%d",&dim);
 printf ("\n\n");
 dim_plus=dim*4+1;
 int a0[dim_plus],a1[dim_plus],a2[dim_plus],a3[dim_plus];
 /** linea superior **/
 for (j=0;j<dim_plus;j++){
   if (j==0 )
     a0[j]=218;
   else if (j==dim_plus-1)
     a0[j]=191;
   else if ((j)%4==0 && j<dim_plus-1)
     a0[j]=194;
   else
     a0[j]=196;
 }
 /** linea inferior **/
 for (j=0;j<dim_plus;j++){
   if (j==0 )
     a2[j]=192;
   else if (j==dim_plus-1)
     a2[j]=217;
   else if ((j)%4==0 && j<dim_plus-1)
     a2[j]=193;
   else
     a2[j]=196;
 }
 /** salto de linea...  **/
 /** y dibujo intermedias y laterales  **/
 for (j=0;j<dim_plus;j++){
   if (j==0 )
     a1[j]=195;
   else if (j==dim_plus-1)
     a1[j]=180;
   else if ((j)%4==0 && j<dim_plus-1)
     a1[j]=197;
   else
     a1[j]=196;
 }
 /** linea lateral **/
 for (j=0;j<dim_plus;j++){
   if (j==0 )
     a3[j]=179;
   else if (j==dim_plus-1)
     a3[j]=179;
   else if ((j)%4==0 && j<dim_plus-1)
     a3[j]=179;
   else
     a3[j]=219;
 }
  /** imprimimos **/
 for (j=0;j<dim_plus;j++)
   printf("%c",a0[j]);
 putchar ('\n');
 for (j=0;j<dim_plus;j++)
   printf("%c",a3[j]);
 for (i=0;i<dim-1;i++){
   putchar ('\n');
   for (j=0;j<dim_plus;j++)
     printf("%c",a1[j]);
   putchar ('\n');
   for (j=0;j<dim_plus;j++)
     printf("%c",a3[j]);
 }
 putchar ('\n');
 for (j=0;j<dim_plus;j++)
   printf("%c",a2[j]);
 return 0;
}


Dejo en el comienzo del código las equivalencias entre números y símbolos del tablero al que ya sólo me queda ponerle algo de colorido. Pero como bien sabes, eso no es problema para mi. Por cierto, en la página web salen símbolos raros para las equivalencias entre números y símbolos pero si le dan a citar pueden copiar desde ahí el código correctamente.

Y al amig@ JonaLamper disculparme por no revisarle el código, sencillamente me pareció más fácil hacerlo nuevo.


¡¡¡¡ Saluditos! ..... !!!!



#319

Una pequeña observación: no guardas el código entero en ninguna parte.

Esto lo puedes solventar usando el mismo array letra con las letras y los números.

Otra cosita: el código puede considerarse débil, en el sentido de que van letras seguidas de números. Podrías hacerlo más fuerte entremezclando los números con las letras como te indico a continuación:


Código (cpp) [Seleccionar]

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main(){
    srand((unsigned) time(NULL));
    int a, j, k=0, f=0,cont=0;
    char c[] = {"abcdefghijklmnopqrstuvwxys0123456789"};
    char letra[11],codigo[11];
    for(j=0; j < 11; j++)
      codigo[j]='A';
    do{
      printf("==========================\n== Generador de codigos ==\n==========================\n\n* Ingrese 1 si quiere generar un codigo\n");
      scanf("%d", &a);
      if (a != 1)
        printf("Necesitas ingresar el numero 1 para generar un codigo\n");
    }while(a != 1);
    for(j=0; j < 5; j++) {
      k = rand() % 26;
      letra[j] = c[k];
    }
    for(j=5; j < 10; j++){
      f = 26 + rand() % 10;
      letra[j] = c[f];
    }
    letra[j]='\0';
    printf("%s\n", letra);
    ///printf("%d   %s\n", j,letra);
    for (j=0;j<10;j++){
    j=0;
    do{
      k=rand ()%10;
      if (codigo[j]=='A' && letra[k]!='A'){
        codigo[j]=letra[k];
        letra[k]='A';
        j++;
      }
      }while (j<10);
      codigo[10]='\0';
    }
    printf("%s\n", codigo);
    return 0;
}


También puedes hacerlo aún más fuerte usando más caracteres en el array letra, como /*/#@, etc.

¡¡¡¡ Saluditos! ..... !!!!


#320
Cita de: rir3760 en 14 Marzo 2014, 02:32 AM
Si encuentras eso realmente molesto abre un tema sobre ello en el foro Sugerencias y dudas sobre el Foro

Un saludo

No es propiamente molesto sino más bien irritado,.

Creo que no cuesta tanto informar de alguna manera de las "peculiaridades" del procesador de texto que usamos, como el hecho de que [ i ], sin el espacio en blanco, no aparece porque se usa como indicativo de las letras en cursivas.

Fue un calentón momentáneo por la surprise!.


¡¡¡¡ Saluditos! ..... !!!!