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ú

Temas - leosansan

#1
El tema está en que si declaro en main la matriz como está en la función todo va bien. Pero al intentar declararla sólo con sus dimensiones en main e intentar inicializarla desde la función no me sale.  :rolleyes:

Creo que como lo tengo en la función me estaré refiriendo al elemento 3,3 en lugar de a toda la matriz.

Código (cpp) [Seleccionar]

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

void matriz_a_inicial (int a [][3]);
int main (){
   int a[3][3];
   matriz_a_inicial (a);
   return 0;
}

void matriz_a_inicial (int  a [][3]){
   a [3][3]={{1,2,3},{4,5,6},{7,8,9}};
}


Felices Navidades y Próspero Año Nuevo.
Saluditos! ..... !!!!
#2

He tenido que crear un tema nuevo porque el autor del tema original, tan simpático él, le cambio el nombre al tema que se encuentra ahora en

http://foro.elhacker.net/programacion_cc/portafolium_set_my_name_for_the_example_yes_i_from_colombia-t390785.0.html

La verdad es que el reto era curioso, lamentablemente estaba algo indefinido, como ya comenté en otro post anterior.

Así que decidí poner yo las condiciones que faltaban:

* Rellenamos una matriz de 10x10 de manera aleatoria con números entre 1 y 1000.

* Se comienza, lo que acabará siendo un juego en modo consola, por situarnos en la casilla del número el mínimo de la matriz.

* A partir de ahí nos movemos hacia la casilla que le rodee y que contenga al mayor número, poniendo un cero en la casilla que se abandona.

* Si está rodeado de ceros el movimiento será  al máximo de los números que queden en la matriz y siempre dejando un cero en la casilla que se deja.

* Así se continúa hasta que todos los elementos sean cero.

Por ahora el movimiento lo realiza el ordenador, aunque espera un Enter para que el usuario pueda localizar la casilla. En cambio, en la próxima "entrega" el juego será más interactivo, ya que el usuario tendrá que entrar las coordenadas de la casilla a la que tiene que moverse, y en función de los intentos fallidos y el tiempo empleado se le puntuará. Y será aún con más color. Todo es cuestión de encontrar tiempo para su desarrollo. Y aún quedará el reto de controlar el ratón para mediante él seleccionar la casilla, aunque esto lleva más conocimientos de Api y/o ensamblador de los que tengo en estos momentos. Pero todo se andará.  :) y si alguien esta "curtido" en el control del ratón con las API agradecería me pasará información al respecto.

El reto en sí es hacerlo todo mediante un código simple y, lo más importante, sin usar librerías gráficas, todo en C puro y duro.

Por ahora dejo lo explicado anteriormente y para a quienes le queden dudas de cómo funciona el futuro juego, por cierto bautizado como "Matrisan", les dejo un enlace donde se ve en acción:



Código (cpp) [Seleccionar]

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

/***************  FUNCIONES  ***********/

int color (int n);
int mover (int i_mov, int j_mov, int matriz[10][10], int pendiente);
void rellenar_matriz (int i_mov, int j_mov, int matriz[10][10]);
void calculo_maximo (int matriz [10][10], int* i_max,int* j_max);

/***************  MAIN  ***********/

int main()
{
   //system("color 70");
   srand(time(NULL));
int n,matriz[10][10]={0}, i=rand()%10+1, j=0,pendiente=0, x, y,minimo=10001,i_min=0,j_min=0;

/***************  CALCULO  DEL MINIMO  ***********/

do{

x=rand()%10;
y=rand()%10;
if(matriz[x][y]==0 ){
           matriz[x][y]=i;
           if (i<minimo)
           {
               minimo=i;
               i_min=x;
               j_min=y;
           }
       i+=rand()%18+1;
       j++;
       }
}while (j<100);

/***************  IMPRESION CON COLOR  ***********/

   for(i=0;i<10;i++)
{
       putchar('\n');
for(j=0;j<10;j++)
       {
           if (i==i_min && j==j_min)
               n=228;
           else
               n=113;
           color (n);
           printf(" %d", matriz[i][j]);
           color (7);
           printf("\t");
       }
}
   color (96);
   printf("\n\nminimo = %d en la posicion ",minimo);
   color (228);
   printf(" (%d,%d) \n",i_min+1,j_min+1);
   color (7);
   matriz[i_min][j_min] = 0;
   mover (i_min, j_min, matriz,  pendiente);
   return 0;
}
int color (int n)
{
       SetConsoleTextAttribute(GetStdHandle (STD_OUTPUT_HANDLE), n );
}

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

int mover (int i_mov, int j_mov, int matriz[10][10], int pendiente)
{
   color (7);
   int n=0,i=0,j=0,maximo=0,maximo2=0,i_max=0,j_max=0,x,y;

   if (pendiente==100)
   {
       color (228);
       printf("\n\t\t\t\t\tACABO\t\t\t\t\t\n");
       color (7);
       return 1;
   }

   else
   {
       for ( i=i_mov-1; i<=i_mov+1; i++)
       {
           for ( j=j_mov-1; j<=j_mov+1; j++)
               {
                   if ( i < 0 || j < 0 || i > 9 || j > 9)
                       continue;
                   else
                   {
                       if (matriz[i][j] > maximo )
                       {
                           maximo = matriz[i][j];
                           i_max = i;
                           j_max = j;
                       }
                   }
               }
       }
  if (maximo==0)
       {
           for (x=0;x<10;x++)
               for (y=0;y<10;y++)
               {
                   if (matriz[x][y]>maximo)
                   {
                       maximo = matriz[x][y];
                       i_max = x;
                       j_max = y;
                   }
               }
       }
   }
   color (96);
   printf("\nMaximo = %d en la posicion ",maximo);
   color (228);
   printf(" (%d,%d) \n",i_max+1,j_max+1);
   color (7);
   //puts ("color");

   pendiente++;
   //rellenar_matriz ( i_mov,  j_mov,  matriz[10][10]);

   /***************  IMPRESION CON COLOR  ***********/

    for(i=0;i<10;i++)
{
       putchar('\n');
for(j=0;j<10;j++)
       {
           if (i==i_max && j==j_max)
               n=228;
           if (i==i_mov && j==j_mov)
               n=86;
           else if (matriz[i][j]==0)
               n=125;
           else
               n=113;
           color (n);
           printf(" %d ", matriz[i][j]);
           color (7);
           printf("\t");
       }
}
   //color (113);
   matriz[i_max][j_max] = 0;
   system("pause");
   system("cls");
   mover (i_max, j_max, matriz,  pendiente);
}

/***************  X  ***********/



Saluditos!. .... ..
#3
Programación C/C++ / Gama de colores.
29 Mayo 2013, 15:25 PM
Casi sin querer me he visto envuelto en una vorágine de color, todo por querer mejorar la presentación tan "sosa" de la consolita del C/C++.

Por lo pronto creo que he conseguido la gama de colores 8 bits, conformando así una paleta de 256 colores por combinación de la tabla de colores "básicos" para el fondo y los caracteres dada por la aplicación de la siguiente tabla/regla:


Citar
PARA LA CONSOLA: system ("color numero(fondo)letra(letras)")

Otra forma es coger una combinación de fondo y letra:

n=16*fondo+letra

Color fondo de consola :

0 = Negro
1 = Azul
2 = Verde
3 = Aguamarina
4 = Rojo
5 = Purpura
6 = Amarillo
7 = Blanco
8 = Gris
9 = Azul claro

Color de texto:

A=10 = Verde claro
B=11 = Aguamarina claro
C=12 = Rojo claro
D=13 = Purpura claro
E=14 = Amarillo claro
F=15 = Blanco brillante

y aplicar el resultado "n" a:
       
   SetConsoleTextAttribute(GetStdHandle (STD_OUTPUT_HANDLE), n );


Si nos fijamos bien hay 255 (16x16-1, porque empieza contando desde cero) combinaciones que se corresponden a lo indicado al principio.

Y éste es el resultado de esas combinaciones:




No salen los 256 porque no cabían en la pantalla.  :) Y el código con el cual he generado la tabla anterior:

Código (cpp) [Seleccionar]
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>

int color (int n);

int main()
{
   int n=0,matriz[10][30]={0}, i, j;
   for(i=0;i<9;i++)
{
       for(j=0;j<30 && n<256 ;j++,n++)
       {
          if (j%10==0  )
               printf ("\n");
           matriz[i][j]=n;
           color (n);
           printf("  %d  ", matriz[i][j]);
           color (7);
           printf("\t");
       }
}
   system("pause");
   return 0;
}

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


Pero, siempre tiene que haber un pero, queda lejos del sistema RGB (Red Green Blue)que usa una paleta de 256 por color que da como resultado: 256 x 256 x 256 = 16.777.216 colores distintos,  o sea 24 bits Vamos, la opción casi por defecto de colores en los monitores actuales.

Este valor se representa en hexadecimal, con lo que el rango va de 00 a FF por cada uno de ellos. El código se expresa así: #RRGGBB siendo cada uno de los valores de 2 cifras el rango de cada uno de los 3 colores, con lo que obtenemos el valor final que representa a cada color....

Dicho esto, podemos ver algunos ejemplos:

- Negro: representa la ausencia de color, por tanto su valor será: #000000
- Blanco: es la mezcla de todos los colores: #FFFFFF
- Rojo: todo el tono es del rojo, siendo los otros 2 nulos: #FF0000
- Verde: sólo aparece el verde, sin tener valor los otros 2: #00FF00
- Azul: idéntico razonamiento, pero sólo con el azul: #0000FF

Esto da como resultado un estándar, el UNIX11 dándose la  coincidencia de color de los nombres usados en Windows Presentation Foundation (WPF) ,la versión 1,0 de Microsoft .NET Framework , nombres de formularios Windows Forms, y de Microsoft Internet Explorer color.

Muestro  en la siguiente tabla los principales nombres de colores X11:




Y aquí surge mi duda/pregunta, ¿alguien puede orientarme, en el sentido de cómo acceder a toda esa gama de colores desde "código"?. Sí, ya sé que hay que buscar en las API pero es todo un mundo que estoy lejos de manejar con cierta soltura, de ahí mi petición de orientación "pero" a algo concretito, nada de páginas que yo mismo puedo encontrar googleando.

Espero les haya gustado mi modesta paleta de colores de 8 bits, quedo a la espera de poder usar la de 24 bits.

Saluditos! .... ...



P.D:Gracias a mr.blood por la defensa que hizo en otro foro de "mi/su" código del tema de matrices de 10x10, ya que el "cara" del usuario hxcbps, que no había aportado nada digno de mención, colgo el código como suyo con la esperanza de que otros le "terminaran" la tarea

Y conste que no es que me importe compartir y ayudar dentro de mis modestísimas posibilidades/conocimientos del C/C++, que no, pero una cosa es ayudar y otra colgarse medallitas ajenas. Un mínimo de cortesía/honestidad. Y si expreso esto es porque cuando entró en este foro ya venía "rebotado" de otro foro, más concretamente del Rincón del C. Nuevamente, gracias  mr.blood.
#4
Como su nombre indica, de repente el Code::Blocks al intentar compilar los códigos .cpp me suelta el siguiente error:

Citar
c:\conoci\programacion\codeblocks\mingw\bin\..\lib\gcc\mingw32\4.7.1\include\c++\cwctype|91|error: '::iswblank' has not been declared|
||=== Build finished: 1 errors, 0 warnings (0 minutes, 0 seconds) ===|


Ha sido de repente, sin haberle cambiado ninguna opción y me pasa con cualquier .cpp, sin embargo los .c los ejecuta de forma normal.

Ya he probado a desinstalar y volver a instalar y continúa el error y lo más extraño es que ha sido así de repente.

¡Helpme,please!, me veo en estos momentos con el vetusto Dev-Cpp para ejecutar los .cpp y es como volver a la edad de piedra.


Saluditos! ..... ...
#5
Programación C/C++ / LISTA DOBLE
29 Septiembre 2012, 12:30 PM
Tengo el problema en una lista doblemente enlazada que no me imprime al reves, es decir de abajo a arriba, es más se suele colgar al final. Y no pillo el fallo:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

struct lista_elementos
{
char elem[40];
struct lista_elementos *sig;
struct lista_elementos *ant;
};

typedef struct lista_elementos nodo;

void crear(nodo *registro,nodo *fin,nodo *anterior);
void mostrar_abajo(nodo *pt);
void mostrar_arriba(nodo *pt);

int main()
{
   nodo *prin,*fin;
   prin=(nodo*)malloc(sizeof(nodo));
   fin=(nodo*)malloc(sizeof(nodo));
   crear(prin,fin,NULL);
   puts("\n");
   mostrar_abajo(prin);
   puts("\n");
   mostrar_arriba(fin);
}

void crear(nodo *registro,nodo *fin,nodo *anterior)
{
   printf("Dato (Escribir LEOSANSAN para terminar): ");
   scanf(" %s",registro->elem);

   if (strcmp(registro->elem,"LEOSANSAN")==0)
           {
           registro->sig=NULL;
           registro->ant=anterior;
           fin=registro;
       }
   else
       {
           registro->sig=(nodo*)malloc(sizeof(nodo));
           registro->ant=anterior;
           crear(registro->sig,fin,registro);
       }
}

void mostrar_abajo(nodo *pt)
{
   if (pt->sig!=NULL)
       {
           printf("%s  ",pt->elem);
           mostrar_abajo(pt->sig);
       }
}
void mostrar_arriba(nodo *pt)
{
  if (pt->ant==NULL)
   printf("%s",pt->elem);
   else
       {
           printf("%s  ",pt->elem);
           mostrar_arriba(pt->ant);
       }
}

Gracias desde ahora y saludos!.
#6
Programación C/C++ / duda programita
19 Abril 2012, 19:05 PM
me deberia dar la suma de n numeros pero solo me da el ultimo?

#include <stdio.h>
main()
{
int suma,i,n,numero;
printf("Escriba cuantos numeros va a sumar: ");
scanf("%d", &n);
suma = 0; /* Valor inicial */
numero = 0;

printf("Escriba los numeros:\n ");
for (i=1; i<=n; i++)
scanf("%d", &numero);
suma += numero;

printf("Su suma es %d", suma);

}