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

#361
Me quito el sombreo "maestro", pequeño saltamontes se descubre ante ti.

...Y no, no estoy por la labor de aprender comandos y más comandos tipo MS.DOS. Como te dije, ya pasé por esa etapa y, al fin y al cabo, seguimos teniendo la consola en Windows. Pero no dejo de reconocer que es más rápido el sistema de comandos, una vez que te aprendes los cientos de órdenes posibles ......

Por cierto, ¿por qué usar pastebin y no colgarlo directamente?. Así permanece por los tiempos de los tiempos. Ya sé que es un pelín largo, al menos para mi gusto, pero tampoco tanto.

Un fuerte abrazo campeón.





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


#362
Programación C/C++ / Re: Recibir int seguro
9 Marzo 2014, 18:15 PM

Lo de un número fijo era por lo de las tarjetas de crédito y cosas así. Como en este código, sencillo pero muy funcional ... y sólo admite un número determinado de caracteres, si son menos  espera hasta que se complete y no da opción de más:

Código (cpp) [Seleccionar]

/*Crear un programa que pida al usuario su contraseña (numérica).
Deberá terminar cuando introduzca como contraseña el número
5879, pero
volvérsela a pedir teniendo cuatro intentos.*/
#include <stdio.h>
#include <stdlib.h>

int main( void )
{
    char clave [5];
    int i,clave_num,intentos=0,DIGITOS=4;
    do
    {
        printf ("\n\n\n\Presione una tecla para continuar: ");
        fflush (stdout);
        getch ();
        system ("cls");
        fflush (stdout);
        printf ("\n\n\n   INTRODUZCA LA CLAVE  entera (cuatro digitos) \n\n\n");
        printf ("Teclea la clave (1122 par salir) y presione enter para salir: ");
        fflush (stdout);
        for (i=0;i<DIGITOS;i++){
            clave [i] =getch();
            printf("*");
            fflush (stdout);
        }
    clave [4] ='\0';
    printf ("\n\n\t\t\tLA CLAVE INTRODUCIDA ES :%s",clave );
    fflush (stdout);
    printf ("\n\n\t\t\tLA CLAVE EN ASCII es  : ");
    fflush (stdout);
    for (i=0;i<4;i++){
                printf ("%d - ",clave[i] );
                fflush (stdout);
            }

    intentos++;
    clave_num = atoi (clave);
    printf ("%d \n",clave_num);
    if (intentos==3){
            printf ("\n\n\t\tMe quedo con la tarjeta,,AGURRRRRRRRRRR\n\n");
            exit (0) ;
        }
    }
    while (clave_num!=5879);
    printf ("\n\n\n\HASTA OTRA OCASION\n\n\n");
    return 0;
}


Como ves hay más formas de limitar el número de caracteres que los expuestos anteriormente. Este en particular el anterior "me llena", nada de tener que limpiar buffer ni cosas por el estilo.

Y perdón por el uso de getch() pero en el estándar de C no hay ninguna función similar, a no ser que se recurra a getchar() pero con una rápida limpieza de pantalla y aún así se pierden los otros datos impresos.

A mí personalmente el que fgets "meta" un retorno de carro en las cadenas me da un no sé qué .......

Y por cierto, aunque es otro tema, te he echado de menos en el hilo de los rombos. Está bastante animado y creo que aún no se ha acabado. Yo al menos me guardo un as en la manga .... y en C++ para variar.[/size]

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


#363
Cita de: yoel_alejandro en  9 Marzo 2014, 17:28 PM
Acepto el reto, jeje (claro, en un nuevo post) ...
[/b]

Pues a por él, pero eso sí en forma de triángulo isósceles. La forma clásica, vamos.

Ya que te lanzo el guante te dejo que elijas "armas", es decir que empieces el tema cuando te "sientas preparado". ..... es broma, ¿ehh..?.


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



#364
Cita de: yoel_alejandro en  6 Marzo 2014, 16:38 PM
COOL !!!!!!!!!!!
...................................................
Leo, se me ocurre que una forma de ampliar el programa, sería habilitar las teclas de flecha, para uno poder conducir la pelota por en medio de los obstáculos, algo como mini-pinball. Me ofrecería a hacer algo de esa parte, puesto que ya tú ya hiciste lo primero, jeje (complementarnos en vez de competir) ....


¡¡¡Eso es hacer trampas!!!

Desde que encuentre un hueco me pongo a ello. Lo que pasa es que las API de Windows son muy .... muy ...oscuras.

Podía haber usado conio2.h, que tengo instalada y en alguna que otra ocasión uso,  para el color y el gotoxy ......pero paso de regresar al pasado.

Perdona que no ponga nada en Linux pero ya pase por el MS-DOS y paso de dar ni un pasito atrás, con perdón para sus seguidores.


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


#365

Vamos, con matrices.

Ahí va una con el borde:




Código (cpp) [Seleccionar]

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

int main(){
  int i=0,j,k=1,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]='*';
    i=1;
    while (i<=a/2){
      A[i][(a/2)-i]=A[i][i+(a/2)]='*';
      i++;
    }
    k=i;
    while (i>=(a/2)+1 && i<=a){
      k--;
      A[i][(a/2)+1-k]=A[i][(a/2)+k-1]='*';
      i++;
    }
    if (a>20){
      for ( i=(a/2)-8,k=0;i<(a/2)+10;i++,k++)
        A[i][22]=cad[k];
    }

    putchar ('\n');
    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');
    }
    return 0;
}


Y por qué no en positivo y negativo:


Código (cpp) [Seleccionar]

#include <stdio.h>

int main(){
  int i=0,j,k=1,a=21;
  /*do{
    printf("\nBase del rombo(numero impar positivo): \n");
    scanf("%d",&a);
    }while ( a <=0 || (a % 2) == 0);*/
    char A[a+1][a+1];
    for ( i=0;i<=a;i++)
      for ( j=0;j<=a;j++)
        A[i][j]='0';
    A[0][a/2]='*';
    i=1;
    while (i<=a/2){
      for ( j=(a/2)-i;j<=i+(a/2);j++){
        A[i][j]='*';
      }
      i++;
    }
    k=i;
    while (i>=(a/2) && i<=a){
      --k;
      for ( j=(a/2)+1-k;j<(a/2)+k;j++)
        A[i][j]='*';
      i++;
    }
    /** EN POSITIVO **/
    for ( i=0;i<=a;i++){
      printf("\t\t");
      for ( j=0;j<a;j++){
         if (A[i][j]=='0')
            printf("%c",' ');
          else
            printf("%c",A[i][j]);
      }
      putchar ('\n');
    }
    putchar ('\n');
    /** EN NEGATIVO **/
    for ( i=0;i<=a;i++){
      printf("\t\t");
      for ( j=0;j<a;j++){
         if (A[i][j]=='0')
            printf("%c",'*');
          else
            printf("%c",' ');
      }
      putchar ('\n');
    }
    return 0;
}


He preferido hacer dos códigos en lugar de uno con funciones para los posibles seguidores de este tema .... y paso de traslaciones, empiezo a estar saturado de tanto rombo. ¿Alguien se anima a empezar un nuevo tema con el triángulo de Pascal o Tartaglia?

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


#366

Tienes mal la introducción de los puntos.Tienes que"captar" las coordenadas a y b donde colocas las bombas, no darle valor a M[a] ya que sabes que es '*'.

Algo parecido a lo que te propuse en mi código:


Código (cpp) [Seleccionar]

................
cout << "\nIntroduzca numero de minas (numero):";
  cin >> numero;
  for (int i = 0; i < numero; i++){
    cout << "\nColocando la mina : "<<i+1<<endl;
    do{
      cout << "Introduzca fila (1-numero): ";
      cin >> fil;
    }while(fil<1 || fil>dim);
    fil=fil-1;

    do{
      cout << "Introduzca columna (1-numero): ";
      cin >> col;
    }while(col<1 || col>dim);
    col=col-1;
    Matriz[fil][col]='*';
    cout<<"\tM["<<fil+1<<","<<col+1<<"]="<<Matriz[fil][col]<< "\n\n";
...............................................


donde fil=a y col=b. Ya sabes que Matriz[fil][col]='*'.



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



#367
Programación C/C++ / Re: Recibir int seguro
8 Marzo 2014, 19:16 PM
Cita de: yoel_alejandro en  8 Marzo 2014, 18:19 PM
Claro, el "desbordamiento de buffer" es un problema típico en la programación, y que por supuesto debemos evitar.

Para C (en C++ el tamaño del arreglo se ajusta automáticamente) una solución sería usar fgets
...................................

Tiene una pequeñita pega el "rollo" de código que empleas:

* Si introduces 12 te lo da como bueno y ¿no era de tres dígitos el número a introducir?.

* Si introduces 123456 te da como bueno el 123 y ¿no es posible que se hallan equivocado al introducir los tres primeros dígitos?.

Reconozco que mi propuesta no es tan completa y compleja como la que propone ivancea96 pero sirve para estos casos de "andar por casa" y para hacerlo todo a "pelo" calculo hasta la longitud con mi propia función, más que nada por variar ya que antes utilice isdigit:


Código (cpp) [Seleccionar]

#include <stdio.h>
#include <stdlib.h>
#define MAX_DIGITOS  100

int comprobar_cadena_como_numero (char numero[MAX_DIGITOS]);
int longitud_cadena (char cadena[MAX_DIGITOS]);
/****************************************************/
int main(){

  char cadena[MAX_DIGITOS];
  do{
    printf("\nIntroduce un numero entero de cinco digitos: ");
    scanf("%s",&cadena);
    while (getchar()!='\n');
    }while (comprobar_cadena_como_numero(cadena)!=2 || longitud_cadena(cadena) !=5);
    printf("\nentero: %d\n",atoi (cadena));
    return EXIT_SUCCESS;
}
/****************************************************/
int comprobar_cadena_como_numero (char cadena[MAX_DIGITOS]){
    int i;
    for (i=0;cadena[i];i++)
       if (cadena[i]<'0' || cadena[i]>'9')
            return 1;
    return 2;
}

/****************************************************/
int longitud_cadena (char cadena[MAX_DIGITOS]){
    int i;
    for (i=0;cadena[i];i++);
    return i;
}
/****************************************************/


Ya sé que tiene una pequeña pega pero este código sólo admite cindo dígitos, ni uno más ni uno menos.

Y todo esto es para pasar el tiempo y compartir conocimientos. Yo sigo aprendiendo de todos ustedes. Gracias.


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


#368
Programación C/C++ / Re: tableros
8 Marzo 2014, 18:46 PM
Cita de: yoel_alejandro en  8 Marzo 2014, 17:08 PM
Interesante la simplificación de leosansan, ventajas del trabajo en equipo
.................................................
Ahora otra vez leo, me parece interesante tu simplificación del código, pero explícamente la aritmética usada de 12, 18, 36, etc ..... No entiendo esas fórmulas, y creo que también hubiera sido bueno comentariar esa explicación en el programa, los demás no somos adivinos jejejeje (broma)


¿Es una coña,no?.

Por si acaso simple cuestión de mates ,,,,sólo te contaré que se corresponden con posiciones centrales de los espacios en blanco, ni a la derecha ni a la izquierda de las paredes laterales, centrados ..... haz números ..... siempre que a mi no se me haya ido el baifo !!!. No olvides que se trataba de no hacerle la tarea al que inicio el tema, así que algo de oscurantismo es inevitable.


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



.
#369
Programación C/C++ / Re: Recibir int seguro
8 Marzo 2014, 16:00 PM
Cita de: patilanz en  8 Marzo 2014, 15:19 PM
Gracias ahora consegui hacer lo.
.......................................................
Pero una pregunta. El código de c que utiliza char[] no daría error si se introduce un valor mayor que el size?
Muchas gracias

¿Y quién es el animalito que al pedirle un entero introduce más de 100 dígitos?.

Claro que haberlos "haylos" pero todo sería cuestión de hacer una limpieza adicional del buffer.


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


#370
Cita de: dmacias en  7 Marzo 2014, 22:57 PM

Vaya, si que os entreteneis con esto jajajajaja.
...............................................................

Gracias a todos por ponerme tantos ejemplos, asi tengo donde elegir y comparar las lógicas de cada uno.

Un saludo

Pues si que ha sido entretenido.

Y aunque do-while me lo piso, no me resisto a poner el caso con memset. Es ligeramente diferente al suyo ya que no uso recurrencia y es ligeramente más cortito:


Código (cpp) [Seleccionar]

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

int main(void){
  int i,j,a;
  do{
    printf("\nBase del rombo(numero impar positivo): \n");
    scanf("%d",&a);
    }while ( a <=0 || (a % 2) == 0);
  char *str = malloc(2*a+1);
  for (i = -a/2; i <= a/2; i++){
    j=i;
  if (i>0)
    j=-i;
    memset (str,' ',(a/2)-j);/** relleno izquierda con espacios **/
    memset (str+(a/2)-j, '*',2*((a/2)+j)+1); /** relleno derecha con asteriscos **/
    printf ("%s\n",str);
    memset (str,0,2*a+1);/** hago nula la cadena para volver a usarla **/
  }
  free(str);
  return EXIT_SUCCESS;
}


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