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

#371
Cita de: xuhipoint en  8 Marzo 2014, 12:54 PM

Pero si cambio la matriz a char que pasara con los numeros, porque en una cordenada especifica es donde se debe asignar el asterisco. Y gracias por responder


Como te indicó xaps ello no representa mayor problema.

Para que tengas una variante he usado la matriz "cont" como int, así tienes otra variante.

Todo está en saber "jugar" entre char y entero, sumando o restando '0' o su equivalente ascii 48. Te dejo las dos formas para que lo veas.

He aquí una muestra con la matriz donde se han introducido las minas, otra con las sumas de los que le rodean y otra en que me he permitido la licencia de "ocultar" determinadas posiciones. Vamos lo que es el juego del buscaminas:



Código (cpp) [Seleccionar]

#include <iostream>
#include <cstdlib>
#include <time.h>

using namespace std;

void imprimir (char **Matriz,int dim);
void colocar_minas (char **Matriz,int dim);
void borrar (int **M,int dim);
void borrar_char (char **M,int dim);

int main(void) {
 srand((unsigned) time(NULL));
 int dim,n;
 char ch=219;

 cout << "Introduzca la dimension de la matriz: ";
 cin >> dim;
 char **Matriz = new char *[dim];
 for (int j = 0; j < dim; j++)
   Matriz[j] = new char [dim];
 for (int i = 0; i < dim; i++)
   for (int j = 0; j < dim; j++)
     Matriz[i][j]='0';
 colocar_minas  (Matriz,dim);
 imprimir (Matriz,dim);

 for (int i = 0; i < dim; i++)
   for (int j = 0; j < dim; j++){
     n = rand() % 5 ;
     if (n<2 && Matriz[i][j]=='0')
       Matriz[i][j]=ch;
     else if (n==2 || n==3)
       Matriz[i][j]='*';
   }
 imprimir (Matriz,dim);

 borrar_char (Matriz,dim);
 return EXIT_SUCCESS;
}

void imprimir (char **Matriz,int dim) {
   for (int i = 0; i < dim; i++) {
     cout << "\t\t" ;
     for (int j = 0; j < dim; j++){
       cout << ' '  << Matriz[i][j] << ' ' ;
     }
     cout << "\n\n";
   }
   cout << "\n\n";
}


void colocar_minas (char **Matriz,int dim){
 int **cont;
 cont = new int *[dim];
 for (int j = 0; j < dim; j++)
   cont[j] = new int [dim];
 for (int i = 0; i < dim; i++)
   for (int j = 0; j < dim; j++)
     cont[i][j]=0;
 int numero,fil,col,k,l,contador=0;
 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]='1';
   cout<<"\tM["<<fil+1<<","<<col+1<<"]="<<Matriz[fil][col]<< "\n\n";
 }
 imprimir (Matriz,dim);

 for ( fil = 0 ;fil < dim; fil++) {
   for ( col = 0; col < dim; col++){
   contador=0;
     for ( k = -1; k < 2; k++) {
       for ( l = -1; l < 2; l++){
         if (fil+k < 0 || col+l < 0 || fil+k > dim-1 || col+l > dim-1)
           continue;
         else{
           contador+=(Matriz[fil+k][col+l]-'0');
         }
       }
     }
     cont[fil][col]=contador;
   }
 }
 for ( fil = 0 ;fil < dim; fil++)
   for ( col = 0; col < dim; col++)
     Matriz[fil][col]=cont[fil][col]+48;
 borrar (cont,dim);
}

void borrar_char (char **M,int dim) {
 for (int i = 0; i < dim; i++)
   delete[] M[i];
 delete[] M;
}

void borrar (int **M,int dim) {
 for (int i = 0; i < dim; i++)
   delete[] M[i];
 delete[] M;
}


Y, como ya te comentarom,  para cuando postees el código elige las etiquetas GeSHi y toma la C++ y en medio de las etiquetas Code que aparecen "pegas" tu código. Al no hacerlo de esta manera parte del código no sale correcta, especialmente las matrices.


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


#372
Programación C/C++ / Re: Recibir int seguro
8 Marzo 2014, 07:00 AM

El método que propones tiene un pero, si introduces 12as toma 12 como int.

Vero más seguro elñ siguiente código, y aunque está en C no creo que patilanz tenga problema en adaptarlo a C++:


Código (cpp) [Seleccionar]

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

int comprobar_cadena_como_numero (char numero[MAX_DIGITOS]);

int main(){

  char cadena[MAX_DIGITOS];
  do{
    printf("\nIntroduce un numero entero: ");
    scanf("%s",&cadena);
    }while (comprobar_cadena_como_numero(cadena)!=2);
    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 (!isdigit(cadena[i]))
            return 1;
    return 2;
}


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


#373
Programación C/C++ / Re: tableros
7 Marzo 2014, 23:15 PM
Cita de: yoel_alejandro en  6 Marzo 2014, 15:33 PM
...........................................................................
Y disertando contigo sobre el tema, pienso (no se si discrepo contigo) que no hay que ser tan extremista en el uso de lo básico, ¿no has considerado positivo de uso de macros, constantes y ficheros de cabecera? Hará tu programa más flexible y configurable, además tendrá la fácil posibilidad de ampliarse o modificarse. Los proyectos profesionales hacen uso de este recurso, por ejemplo los nombres que usé los tomé del fichero de cabecera de la biblioteca ncurses, y supongo que lo mismo ocurre con conio.
.................................................

Sí que lo considero positivo pero no es plan de hacer todo tan "clarito" para alguien que no postea nada de nada de código. En estos casos ofusco un poquitito la respuesta.

Y para que veas que de talibán nada de nada, ahí recojo tu guante:


Código (cpp) [Seleccionar]

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

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

#define ULCORNER 218,196,196,196    /* upper-left corner, esquina superior izquierda y tres guiones*/
#define RTEE     195,196,196,196    /*right-tee, letra 'T' apuntando hacia la derecha y tres guiones*/
#define CROSS    197,196,196,196    /* crossover, cruz grande (de mayor tamaño que el signo '+' y tres guiones) */
#define LTEE     180                /* left-tee, letra 'T' apuntando hacia la izquierda */
#define BTEE     194,196,196,196    /* bottom-tee, letra 'T' apuntando hacia abajo y tres guiones*/
#define URCORNER 191                /* upper-right corner, esquina superior derecha */
#define LLCORNER 192,196,196,196    /* lower-left corner, esquina inferior izquierda y tres guiones */
#define TTEE     193,196,196,196    /* top-tee, letra 'T' apuntando hacia arriba y tres guiones */
#define LRCORNER 217                /* lower-right corner, esquina inferior izquierda */
#define VLINE    179,32,32,32       /*vertical line, linea vertical y tres espacios*/
#define VLINE_   179                /* vertical line, linea vertical */
#define TOKEN    219                /* ficha o pieza */

int main()
{
 int i,j,cont=0;
 int a1[33]={RTEE,CROSS,CROSS,CROSS,CROSS,CROSS,CROSS,CROSS,LTEE},
     a0[33]={ULCORNER,BTEE,BTEE,BTEE,BTEE,BTEE,BTEE,BTEE,URCORNER},
     a2[33]={LLCORNER,TTEE,TTEE,TTEE,TTEE,TTEE,TTEE,TTEE,LRCORNER},
     a3[33]={VLINE,VLINE,VLINE,VLINE,VLINE,VLINE,VLINE,VLINE,VLINE_};
 for (j=0;j<33;j++)
   printf("%c",a0[j]);
 putchar ('\n');
   for (j=0;j<33;j++)
     printf("%c",a3[j]);
 for (i=0;i<7;i++){
   putchar ('\n');
   for (j=0;j<33;j++)
     printf("%c",a1[j]);
   putchar ('\n');
   for (j=0;j<33;j++){
     if (a3[j]==32 && a3[j-1]==32  && a3[j+1]==32 && (i*j==18 || i*j==36 || i*j==12)){
       cont++;
       if (cont<=3)
         printf("%c",TOKEN);
       else
         printf("%c",32);
     }
     else
       printf("%c",a3[j]);
   }
 }
 putchar ('\n');
 for (j=0;j<33;j++)
   printf("%c",a2[j]);
 return 0;
}


Un fuerte abrazo y .... estamos contigo muy cerquita, por algo aquí en Canarias conocemos a Venezuela como la octava isla.


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


#374
Sin arrays, sólo printf y un par de for menos que antes:

Código (cpp) [Seleccionar]

#include <stdio.h>

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


Y por qué no dibujar el rombo "vacio":


Código (cpp) [Seleccionar]

#include <stdio.h>

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


Y para que no falte, uno con recursividad:

Código (cpp) [Seleccionar]

#include <stdio.h>

int rellenar (int A,int a);
int main(){
 int a;
 do{
   printf("\nBase del rombo(numero impar positivo): \n");
   scanf("%d",&a);
   }while ( a <=0 || (a % 2) == 0);
   rellenar (-2*(a/2),a);
   return 0;
}

int rellenar (int A,int a){
 int j,k;
 if (A==2*(a/2)+2)
   return 1;
 k=A;
 if (A>0)
   k=-A;
 printf("%*c",-k/2+a/2,'*');
 for ( j=0;j<=2*(a/2)-1+k;j++)
   putchar('*');
 putchar ('\n');
 rellenar (A+2,a);
}


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


#375
Cita de: yoel_alejandro en  6 Marzo 2014, 16:37 PM
Bueno ..... creo que ya hemos dado una tremenda cantidad de opciones al autor del post sobre cómo resolver su problema.

Lástima que él no haya seguido escribiendo, y al final terminamos agarrándonos el tema para nosotros, jeje  :laugh:



Me quedó un mal regusto al tener que usar un array en la última versión, así que ahí va una sin un array de caracteres:

Código (cpp) [Seleccionar]

#include <stdio.h>

int main(){
 int i=0, j, a;
 do{
   printf("\nBase del rombo(numero impar positivo): \n");
   scanf("%d", &a);
   }while ( a <=0 || (a % 2) == 0);
   for ( i=2*(a/2);i>=0;i-=2){
     printf("%*c",i/2+a/2,'*');
     for ( j=0;j<=2*(a/2)-1-i;j++)
       putchar('*');
     putchar ('\n');
   }
   for ( i=1;i<2*(a/2);i+=2){
     printf("%*c",i/2+a/2+1,'*');
     for ( j=0;j<=2*(a/2)-2-i;j++)
       putchar('*');
     putchar ('\n');
   }
   return 0;
}


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




#376
¡¡¡El mío es más grande!!!


Es de cachondeo.

Pero el uso de una cadena por parte de rir3760 me ha hecho pensar una forma alternativa:parto de una cadena con un solo  asterisco en medio y a medida que bajo añado dos asteriscos por escalón, mientras en la parte inferior los voy quitando. Curioso, ¿verdad?:


Código (cpp) [Seleccionar]

#include <stdio.h>
int main(void){
 int i,n,p;
 do{
   printf("\nBase del rombo(numero impar positivo): \n");
   scanf("%d", &n);
 }while ( n <=0 || (n % 2) == 0);
 char asteriscos[n];
 for (i=0;i<n;i++)
   asteriscos[i]=' ';
 asteriscos[i]='\0';
 p=n/2;
 asteriscos[p]='*';
 for (i=1;i<p+1;i++){
   printf ("\t\t%s\n",asteriscos);
   asteriscos[p-i]=asteriscos[p+i]='*';
 }
 printf ("\t\t%s\n",asteriscos);
 for (i=0;i<=p;i++){
   asteriscos[i]=asteriscos[n-1-i]=' ';
   printf ("\t\t%s\n",asteriscos);
 }
 return 0;
}


O con un solo for:

Código (cpp) [Seleccionar]

#include <stdio.h>
int main(void){
 int i,j,n,p;
 do{
   printf("\nBase del rombo(numero impar): \n");
   scanf("%d", &n);
 }while ( n <=0 || (n % 2) == 0);
 char asteriscos[n];
 for (i=0;i<n;i++)
   asteriscos[i]=' ';
 asteriscos[i]='\0';
 p=n/2;
 asteriscos[p]='*';
 for (i=-p;i<=p;i++){
   if (i<=0){
     printf ("\t\t%s\n",asteriscos);
     if (i<0)
     asteriscos[-i-1]=asteriscos[n+i]='*';
   }
   else{
     j=-i;
     asteriscos[-j-1]=asteriscos[n+j]=' ';
     printf ("\t\t%s\n",asteriscos);
   }
 }
 return 0;
}


Aunque nada supera al printf de rir3760.

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






#377
Cita de: yoel_alejandro en  5 Marzo 2014, 21:24 PM
Sería muy interesante hacer la animación de la pelota rebotando (refrescamiento de pantalla cuadro a cuadro y con pausa entre ellos), al estilo de un videojuego  :laugh:

¿alguien se atreve?

¿Me estas llamando gallina?.

Es una broma, ¡¡¡Ehhh...!!!.

Algo rápido que esto cada vez se parece más a una competición de partidas de ajedrez contra reloj.
Insisto, rápido y hecho a bote pronto sin tan siquiera analizar en profundidad el código:

Código (cpp) [Seleccionar]

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

void imprimir (int matriu[50][50]);
void pelota (int matriu[50][50]);
void cambiartabla (int matriu[50][50]);

int main()
{
//system( "MODE 110,150");
int num;
int matriu[50][50]={
{0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0},
{0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
};

while(num!=5)
{
printf("\n");
   printf("Que acci\xa2n desea realizar:\n");
printf("\t1.- Mostrar la tabla.\n");
printf("\t2.- Tirar una bola.\n");
printf("\t3.- Tirar 20 bolas.\n");
printf("\t4.- Cambiar la tabla.\n");
printf("\t5.- Salida.\n");
scanf("%d",&num);
switch(num)
{
case 1:
       imprimir (matriu);
break;
case 2:
pelota (matriu);
break;
case 3:
printf("caso 3\n");
break;
case 4:
cambiartabla (matriu);
break;
case 5:
printf("Adios.\n");
printf("\n");
break;
default:
printf("El n\xA3mero introducido no pertenece al menos, int\x82ntelo de nuevo.\n");
}
}
return 0;
}


void imprimir (int matriu[50][50]){
int i,j;
for (i = 0; i < 50; i++){
for (j = 0; j < 50; j++){
     if(matriu[i][j]==1)
       printf("X");
     else
       printf(".");
   }
printf ("\n");
}
}

void pelota (int matriu[50][50]){

int inicio,i,j,cont=0,colum_final;
char direccion;

do{
   printf("\nIntroducir el n\xA3mero de columna por el cual desea lanzar la primera bola (1-50): ");
   scanf("%d",&inicio);
 }while(inicio>=51);
 inicio--;

 do{
   printf("\nEn caso de encontrarse con un obst\xAculo, en que direcci\xA2n\nquiere que se dirija la bola, derecha (D-d) o izquierda (I-i): ");
   scanf(" %c", &direccion);
 }while(direccion!='D' && direccion!='d' && direccion!='I' && direccion!='i');

 i=0,j=inicio,cont=2;
 matriu[i][j]=cont++;

 while(i<49){
   if (j==-1)
   matriu[i][++j]=cont++;
   else if (j==50)
 matriu[i][--j]=cont++;
   else if (matriu[i+1][j]==0)
     matriu[++i][j]=cont++;
   else if ((direccion=='D' || direccion=='d') && matriu[i][j+1]==0 )
     matriu[i][++j]=cont++;
   else if ((direccion=='D' || direccion=='d') && matriu[i][j+1]==1 )
     matriu[i][--j]=cont++;
   else if ((direccion=='I' || direccion=='i') && matriu[i][j-1]==0)
     matriu[i][--j]=cont++;
   else if ((direccion=='I' || direccion=='i') && matriu[i][j-1]==1)
     matriu[i][++j]=cont++;
 }
 colum_final=j+1;
 system ("cls");
 gotoxy (0,0);
 for(i=0;i<50;i++)
 {
    for(j=0;j<50;j++)
     {
        if(matriu[i][j]==1){
          color (191);
          gotoxy (j,i);
          printf("X");
          color (7);
        }

        else {
          color (114);
          gotoxy (j,i);
          printf(".");
          color (7);
        }
    }
    printf("\n");
 }
 gotoxy (0,0);
 for(i=0;i<50;i++)
 {
    for(j=0;j<50;j++)
     {
       if(matriu[i][j]!=1  && matriu[i][j]!=0){
          color (206);
          gotoxy (j,i);
          printf("%d",0);
          color (7);
          Sleep (750);
        }
    }
    printf("\n");
 }
 printf ("\n\t\tColumna Final= %d\n",colum_final);
}


void cambiartabla (int matriu[50][50]){

int i,j,fila,columna;
char seguir;
while(seguir!=2)
{
printf("\n");
   printf("Presiona 1 si quieres seguir cambiando valores.\n");
printf("Presiona 2 si quieres ver la tabla.\n");
scanf("%c",&seguir);
switch(seguir)
{
case '1':

do{
             printf("\nIntroducir la fila del valor que quieres cambiar (1-50): ");
             scanf("%d",&columna);
             printf("\nIntroducir la columna del valor que quieres cambiar (1-50): ");
             scanf("%d",&fila);

}while(columna>=51 && fila>=51 );
         i=columna,j=fila;
         if (matriu[i][j] == 0)
           matriu[i][j] = 1;
         break;

case '2':

         for(i=0;i<49;i++)
           for(j=0;j<48;j++)
             if (matriu[i][j]==1 && matriu[i+1][j+1]==1 && matriu[i][j+2]==1)
           puts("ERROR NO SE HA HECHO NINGUN CAMBIO");
           matriu[columna][fila] = 0;

       for(i=0;i<50;i++)
       {
          ///printf("\t\t");
           for(j=0;j<50;j++)
           {
              if(matriu[i][j]==1)
                 printf("X  ");
              else if(matriu[i][j]==0 )
                 printf(".  ");
          }
          printf("\n");
       }
       break;
     default:
printf("El n\xA3mero introducido es incorrecto.\n");

}
}
}

/***********************************************/
           /***   FUNCION COLOR   ***/
 /***********************************************/

void color (int n)
{
       SetConsoleTextAttribute(GetStdHandle (STD_OUTPUT_HANDLE), n );
}

/***********************************************/
           /***   FUNCION GOTOXY   ***/
 /***********************************************/

int gotoxy(int x, int y)
{
  COORD coord;
  HANDLE h_stdout;
  coord.X = x;
  coord.Y = y;
  if ((h_stdout = GetStdHandle(STD_OUTPUT_HANDLE)) == INVALID_HANDLE_VALUE)
     return 0;
  if (SetConsoleCursorPosition(h_stdout, coord) == 0)
     return 0;
  return 1;
}



Elegid 2=partida y ahí introducir los datos, columna de lanzamiento y desvío derecha o izquierda, a no ser que se cierre y tiende al otro lado.

El resultado, para verlo en movimiento,es  ejecutando el programa:



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


#378
Programación C/C++ / Re: tableros
5 Marzo 2014, 21:05 PM
Tienes que fijarte un poquito más, tan sólo hay que dibujar TRES del 219.




Muy bueno el uso de las macros. A mí me va más hacerlo a lo "bestia":

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

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

Código (cpp) [Seleccionar]

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

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

int main()
{
 system("color 70");
 int i,j,cont=0;
 int a1[33]={195,196,196,196,197,196,196,196,197,196,196,196,197,196,196,196,197,196,196,196,197,196,196,196,197,196,196,196,197,196,196,196,180},
     a0[33]={218,196,196,196,194,196,196,196,194,196,196,196,194,196,196,196,194,196,196,196,194,196,196,196,194,196,196,196,194,196,196,196,191},
     a2[33]={192,196,196,196,193,196,196,196,193,196,196,196,193,196,196,196,193,196,196,196,193,196,196,196,193,196,196,196,193,196,196,196,217},
     a3[33]={179,32,32,32,179,32,32,32,179,32,32,32,179,32,32,32,179,32,32,32,179,32,32,32,179,32,32,32,179,32,32,32,179};
 printf("\n\n\t218=%c  196=%c  194=%c  191=%c  179=%c  195=%c  \n\n\t197=%c  180=%c  192=%c  193=%c  217=%c  219=%c \n\n",218,196,194,191,179,195,197,180,192,193,217,219);
 for (j=0;j<33;j++)
   printf("%c",a0[j]);
 putchar ('\n');
   for (j=0;j<33;j++)
     printf("%c",a3[j]);
 for (i=0;i<7;i++){
   putchar ('\n');
   for (j=0;j<33;j++)
     printf("%c",a1[j]);
   putchar ('\n');
   for (j=0;j<33;j++){
     if (a3[j]==32 && a3[j-1]==32  && a3[j+1]==32 && (i*j==18 || i*j==36)){
       cont++;
       if (cont<=3)
         printf("%c",219);
       else
         printf("%c",32);
     }
     else
       printf("%c",a3[j]);
   }
 }
 putchar ('\n');
 for (j=0;j<33;j++)
   printf("%c",a2[j]);
 return 0;
}


Un fuerte saludo amigo yoel_alejandro, esto es lo realmente bueno, lo que yo llamo el pique sano.

Por cierto, en Windows sin problemas, al menos como yo lo tengo planteado.



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


#379
Programación C/C++ / Re: ayuda
5 Marzo 2014, 19:14 PM
Cita de: yoel_alejandro en  5 Marzo 2014, 16:57 PM
Estimados engelx y leosansan,

.........................................................................

Y me parece que ustedes han exagerado este caso con el único motivo de descalificarme. Si me quieren fuera del foro, pues díganmelo, o dirijan una petición al moderador sustentada con los delitos de que me acusan.

......................................................


En ningún momento ha sido mi intención descalificar a nadie y ahí están escritos mis post. Creo que confundes los términos ya que yo lo único que realicé son puntualizaciones a tu interpretación del problema, otra cosa es como tú te tomes mis observaciones.

Pero, como ya te comenté en otro post, pelillos a la mar.

Disfruto con algunas de tus aportaciones, especialmente si son en C puro y duro, ya que es el mundillo que en estos momentos me interesa y creo, y es una simple apreciación, que dominas muy bien ese  tema lo cual enriquece esta comunidad en general y a mí en particular, donde soy un auténtico pardillo comparados con ustedes en cuanto al conocimiento del lenguaje se refiere. Otra cosa son los "otros" conocimientos .......

Un fuerte saludo.


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


#380
Programación C/C++ / Re: tableros
5 Marzo 2014, 18:50 PM
Creo que no has entendido bien el asunto. Se trata de crear la cuadrícula no sólo con los símbolos + , - | sino usando:

Citar

       ┌   ─   ┬   ┐  │  ├   ┼   ┤   └   ┴  


y colocar en medio de la matriz tres:

Citar





Un fuerte saludo querido yoel_alejandro y como se suele decir, pelillos a la mar.

Yo, en particular, estoy muy contento con tus aportes ya que la mayoría de los expertos lo son más de C++ y a mí me interesa más el C puro y duro y creo que tus aportaciones serán muy bienvenidas..... caso aparte es rir3760 al que considero un "maestro" en el conocimiento en profundidad de C y C++.


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