Busqueda de valores con matrices

Iniciado por Gaby_10, 15 Febrero 2014, 06:29 AM

0 Miembros y 1 Visitante están viendo este tema.

Gaby_10

Bueno mi duda es la siguiente tengo una matriz de 9 x 9, llena de numeros aleatorios lo que no sé, es como hacer buscar tanto horizontal como vertical los valores que se repiten y cambiar los valores repetidos con valores aleatorios tomando como referencia tres valores repetidos. el programa es en dev c++


#include <stdio.h>
#define MAXFIL 9
#define MAXCOL 9


void buscarVerti(int matriz[MAXFIL][MAXCOL],int *puntos){
   int contador=1;
   int i,j;
   for (j=0;j<MAXCOL;j++){
      for (i=0;i<7;i++){
              if (matriz [i ][j]==matriz[i+1][j]){
                 contador++;      
              }
      
            else if (matriz [j] !=matriz[i+1][j]){
                  contador=1;
            }
            
            if (contador==3 && i<7 && (matriz[i+1][j]==matriz[i+2][j])){
               printf("\n\n ENCONTRO 4 CARAMELOS EN LA COLUMNA: %d  DESDE LA FILA %d A LA FILA %d \n",j+1,i,i+3);
               puntosN1=puntosN1+7;
               matriz [i ][j]=1+(rand()%5);
                 matriz[i+1][j]=1+(rand()%5);
                 matriz[i+2][j]=1+(rand()%5);
                 matriz[i+3][j]=1+(rand()%5);
               break;
              }
              
              else if (contador==3 && i<8 && (matriz[j]==matriz[i+1][j]) ){
                  printf("\n\n ENCONTRO 3 CARAMELOS EN LA COLUMNA: %d  DESDE LA FILA %d A LA FILA %d \n",j+1,i,i+2);
                  puntosN1=puntosN1+5;
                  matriz[ i] [j]=1+(rand()%5);
                 matriz[i+1][j]=1+(rand()%5);
                 matriz[i+2][j]=1+(rand()%5);
               break;
            }   
              
             
      }
   }
}


void buscarHori(int matriz[MAXFIL][MAXCOL],int *puntos){
int contador=1;
   int i,j;
   for(i=0;i<MAXFIL;i++){
      for(j=0;j<7;j++){
         if (matriz[j]== matriz[j+1])
           contador=contador+1;
           puntosN1=puntosN1;

         if (matriz[j]!=matriz[j+1])
           contador=1;
           puntosN1=puntosN1;
           
           if (contador==3 && j<7 && (matriz[j+1]==matriz[j+2])){
              printf("\n\n ENCONTRO 4 CARAMELOS DESDE LA COLUMNA: %d  HASTA LA COLUMNA %d EN LA FILA %d \n",j,j+3,i+1);
              matriz[j]=1+(rand()%5);
              matriz[j+1]=1+(rand()%5);
              matriz[j+2]=1+(rand()%5);
              matriz[j+3]=1+(rand()%5);
               puntosN1=puntosN1+7;
            break;
           }
           
           if (contador==3 && j<8 && (matriz[j]==matriz[j+1])){
              printf("\n\n ENCONTRO 3 CARAMELOS DESDE LA COLUMNA: %d  HASTA LA COLUMNA %d EN LA FILA %d \n",j,j+2,i+1);
               puntosN1=puntosN1+5;
            matriz[j]=1+(rand()%5);
              matriz[j+1]=1+(rand()%5);
              matriz[j+2]=1+(rand()%5);
            break;
           }
      }
   }
}




int main(){
int i,j;
int *puntos=0;
int matriz[MAXFIL][MAXCOL];
for (i=0;i<MAXFIL;i++){
    for(j=0;j<MAXCOL;j++){
         matriz[j]=1+rand()%5
          printf("%i",matriz[j]);
     }
printf("\n");
}
buscarCaramelosVertical (matriz,puntosN1);
buscarCaramelosHorizontal (matriz,puntosN1);
printf("Ud tiene %i puntos",puntosN1);
}

leosansan

#1
Antes que nada cuando postees 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.
Este es tu código con etiquetas:


Código (cpp) [Seleccionar]
#include <stdio.h>
#define MAXFIL 9
#define MAXCOL 9


void buscarVerti(int matriz[MAXFIL][MAXCOL],int *puntos){
int contador=1;
int i,j;
for (j=0;j<MAXCOL;j++){
for (i=0;i<7;i++){
       if (matriz [i ][j]==matriz[i+1][j]){
        contador++;
       }

else if (matriz [i][j] !=matriz[i+1][j]){
contador=1;
}

if (contador==3 && i<7 && (matriz[i+1][j]==matriz[i+2][j])){
printf("\n\n ENCONTRO 4 CARAMELOS EN LA COLUMNA: %d  DESDE LA FILA %d A LA FILA %d \n",j+1,i,i+3);
puntosN1=puntosN1+7;
matriz [i ][j]=1+(rand()%5);
            matriz[i+1][j]=1+(rand()%5);
            matriz[i+2][j]=1+(rand()%5);
            matriz[i+3][j]=1+(rand()%5);
break;
       }
       
       else if (contador==3 && i<8 && (matriz[i][j]==matriz[i+1][j]) ){
                printf("\n\n ENCONTRO 3 CARAMELOS EN LA COLUMNA: %d  DESDE LA FILA %d A LA FILA %d \n",j+1,i,i+2);
                puntosN1=puntosN1+5;
                matriz[ i] [j]=1+(rand()%5);
            matriz[i+1][j]=1+(rand()%5);
            matriz[i+2][j]=1+(rand()%5);
break;
}
       
   
}
}
}


void buscarHori(int matriz[MAXFIL][MAXCOL],int *puntos){
int contador=1;
int i,j;
for(i=0;i<MAXFIL;i++){
for(j=0;j<7;j++){
if (matriz[i][j]== matriz[i][j+1])
           contador=contador+1;
           puntosN1=puntosN1;

if (matriz[i][j]!=matriz[i][j+1])
           contador=1;
           puntosN1=puntosN1;
           
           if (contador==3 && j<7 && (matriz[i][j+1]==matriz[i][j+2])){
            printf("\n\n ENCONTRO 4 CARAMELOS DESDE LA COLUMNA: %d  HASTA LA COLUMNA %d EN LA FILA %d \n",j,j+3,i+1);
            matriz[i][j]=1+(rand()%5);
            matriz[i][j+1]=1+(rand()%5);
            matriz[i][j+2]=1+(rand()%5);
            matriz[i][j+3]=1+(rand()%5);
               puntosN1=puntosN1+7;
break;
           }
           
           if (contador==3 && j<8 && (matriz[i][j]==matriz[i][j+1])){
            printf("\n\n ENCONTRO 3 CARAMELOS DESDE LA COLUMNA: %d  HASTA LA COLUMNA %d EN LA FILA %d \n",j,j+2,i+1);
               puntosN1=puntosN1+5;
matriz[i][j]=1+(rand()%5);
            matriz[i][j+1]=1+(rand()%5);
            matriz[i][j+2]=1+(rand()%5);
break;
           }
}
}
}




int main(){
int i,j;
int *puntos=0;
int matriz[MAXFIL][MAXCOL];
for (i=0;i<MAXFIL;i++){
    for(j=0;j<MAXCOL;j++){
         matriz[i][j]=1+rand()%5
          printf("%i",matriz[i][j]);
     }
printf("\n");
}
buscarCaramelosVertical (matriz,puntosN1);
buscarCaramelosHorizontal (matriz,puntosN1);
printf("Ud tiene %i puntos",puntosN1);
}


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

:rolleyes: ;) ;) ;) :rolleyes:

P.D: Revisa y corrige un poco el código ya que ni compila.

* Para empezar falta un punto y coma en una línea de main :

Código (cpp) [Seleccionar]
matriz[i][j]=1+rand()%5

* Te falta el return de la función main.

*¿ Qué sentido tiene?:

Código (cpp) [Seleccionar]
if (contador==3 && j<7 ......

En lugar de usar:

Código (cpp) [Seleccionar]
if (contador==3 && j<MAXCOL-2



* Llamas a las funciones con unos nombres y las invocas con otros.

* Tomas como uno de los argumentos de las funciones al invocarlas a la variable puntosN1 que no tienes declarada en main, ni falta que te hace.

Más bien sería:


Código (cpp) [Seleccionar]

int main(){
 int i,j;
 int puntos=0;
 int matriz[MAXFIL][MAXCOL];
 for (i=0;i<MAXFIL;i++){
      for(j=0;j<MAXCOL;j++){
           matriz[i][j]=1+rand()%5;
            printf("%i",matriz[i][j]);
       }
 printf("\n");
 }
 buscarHori(matriz,&puntos);
 return 0;
}
....................................
void buscarHori(int matriz[MAXFIL][MAXCOL],int *puntosN1){
..........................................


Y lo mismo con la otra función.

* ¿Qué sentido tiene:


Código (cpp) [Seleccionar]
puntosN1=puntosN1;

Ya sabemos que una variable es igual a si misma.  ;)

*  etc, etc.

Vete arreglando esas cositas y vuelve a postear el avance y especifica de forma concreta qué problemas te surgen.

¡¡¡¡ Saluditos! .....Otra vez !!!!

:rolleyes: ;) ;) ;) :rolleyes:

P.d de P.D: ¿De verdad has hecho tú el código?. Si es así sólo tienes que fijarte un poquito más en lo que pones, porque lo de llamar a las funciones de forma diferente que al invocarlas me parece una pasada de error trivial. ;)

Gaby_10

.
#2
.

Gaby_10

viendo lo que te pase me acabo de dar cuenta que llamo mal los putnos ahora lo corrijo xD

Gaby_10

#4
Lo siento amigo no sabía como poner el código y lo había escrito pero aquí te lo mando como me dijiste, ya le hice las modificaciones que me acabas de decir pero no me busca bien los números repetido en horizontal  por ejemplo (1 1 2) me la cuenta y no sé si las condiciones que puse están bien, tambien no se si la condicion que tengo cuando no haya combinaciones para generar una matriz nueva esten correctas
Código (cpp) [Seleccionar]
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <time.h>
#define MAXFIL 9
#define MAXCOL 9


void buscaVerN1(int matriz[MAXFIL][MAXCOL],int*puntosn1);
void buscaHoriN1(int matriz[MAXFIL][MAXCOL],int*puntosN1);
void tablero (int matriz[MAXFIL][MAXCOL]);

void tablero (int matriz[MAXFIL][MAXCOL]){
int i,j,e;
    printf("        1       2       3       4       5       6       7       8       9 \n");
    printf("-----------------------------------------------------------------------------");
for (i=0;i<MAXFIL;i++){
printf("\n");
printf("%i -- ", i+1);
for (j=0;j<MAXCOL;j++){

if (matriz[i][j]==1)
{
e=1;
printf("\t%c",e);
}
if (matriz[i][j]==2)
{
e=2;
printf("\t%c",e);
}
if (matriz[i][j]==3)
{
e=4;
printf("\t%c",e);
}
if (matriz[i][j]==4)
{
e=5;
printf("\t%c",e);
}
if (matriz[i][j]==5)
{
e=15;
printf("\t%c",e);
}
}
printf("\n");
}
getch();
}





void buscaVerN1(int matriz[MAXFIL][MAXCOL],int*puntosN1){
printf("\n\n------------------>> BUSQUEDA VERTICAL\n\n");
int contador=1,i,j;
for(j=0;j<MAXCOL;j++)
{
contador=1;
for (i=0;i<MAXFIL;i++)
{
if (matriz[i][j]==matriz[i+1][j])
{
contador=contador+1;
}
else{
contador=1;
*puntosN1=*puntosN1;
}

if ((contador==3 && i<=MAXFIL-3) && (matriz[i+1][j]==matriz[i+2][j]))
{
printf("\n\n ENCONTRO 4 CARAMELOS EN LA COLUMNA: %d  DESDE LA FILA %d A LA FILA %d \n",j+1,i,i+3);
srand(time(NULL));
matriz[i-1][j]=1+(rand()%5);
            matriz[i][j]=1+(rand()%5);
            matriz[i+1][j]=1+(rand()%5);
            matriz[i+2][j]=1+(rand()%5);
*puntosN1=*puntosN1+7;
}
else
{
if (contador==3 && i<=MAXFIL-2)
{
printf("\n\n ENCONTRO 3 CARAMELOS EN LA COLUMNA: %d  DESDE LA FILA %d A LA FILA %d \n",j+1,i,i+2);
srand(time(NULL));
                    matriz[i-1][j]=1+(rand()%5);
            matriz[i][j]=1+(rand()%5);
            matriz[i+1][j]=1+(rand()%5);
*puntosN1=*puntosN1+5;
}
}

}
}
}


void buscaHoriN1(int matriz[MAXFIL][MAXCOL],int*puntosN1){
printf("\n\n------------------>> BUSQUEDA HORIZONTAL\n\n");
int i,j,contador=1;
for(i=0;i<MAXFIL;i++){
contador=1;
for (j=0;j<MAXCOL;j++){
if (matriz[i][j]==matriz[i][j+1])
{
contador=contador+1;
}
else{
contador=1;
*puntosN1=*puntosN1;
}

if ((contador==3 && j<=MAXCOL-3) && (matriz[i][j+1]==matriz[i][j+2]))
{
printf("\n\n ENCONTRO 4 CARAMELOS EN LA COLUMNA: %d  HASTA LA COLUMNA %d EN LA FILA %d \n",j,j+3,i+1);
srand(time(NULL));
matriz[i][j-1]=1+(rand()%5);
matriz[i][j]=1+(rand()%5);
            matriz[i][j+1]=1+(rand()%5);
            matriz[i][j+2]=1+(rand()%5);
           
*puntosN1=*puntosN1+7;
}
else
{
if (contador==3 && j<MAXCOL-2)
{
printf("\n\n ENCONTRO 3 CARAMELOS EN LA COLUMNA: %d  HASTA LA COLUMNA %d EN LA FILA %d \n",j,j+2,i+1);
srand(time(NULL));
matriz[i][j-1]=1+(rand()%5);
                    matriz[i][j]=1+(rand()%5);
            matriz[i][j+1]=1+(rand()%5);
*puntosN1=*puntosN1+5;
}
}

}
}
}





int main(){
system ("COLOR A" );
printf("\n\n==================|| INICIANDO JUEGO ||==================\n\n");
printf(":::::::::::::::::::::::DIVIERTASE:::::::::::::::::::::::\n\n");
system("pause");
system("cls");
int finalJuego=0;
int turnoN1=0;
while (finalJuego!=1){
system ("COLOR F5" );
printf("\n\n\t\t.....|| Cargando Colores ||....\n\n\n\n");
int i,j;
srand(time(NULL));
int matriz[MAXFIL][MAXCOL]={0};
for(i=0;i<MAXFIL;i++){
for(j=0;j<MAXCOL;j++){
matriz[i][j]=1+(rand()%5);
}
}
tablero matriz);
while(turnoN1!=40){
int *puntosN1=0;
int puntos=0;
int valor;  //para comapra el valor de puntaje viejo con el actual
while (turnoN1!=40){
printf("\n\n=============================================================================\n\n\n");
printf("\n\n\t\t.....|| BUSQUEDA DE COLORES ||....\n\n\n\n");
valor=puntos;
buscaVerN1(matriz,&puntos);
buscaHoriN1(matriz,&puntos);
printf("\n\n------------------>>USTED TIENE %i PUNTOS \n\n",puntos);
printf("\n\n------------------>>USTED SE ENCUENTRA EN EL TURNO %i\n\n",turnoN1+1);
turnoN1++;
printf("\n\n=============================================================================\n\n\n");
printf("\n\n\t\t.....|| BAJANDO DE COLORES ||....\n\n\n\n");
tablero (matriz);
if (valor==puntos){ //para generar valores nuevos en caso de no ahber combinaciones
printf("\n\n\t\t.....|| NO HAY COMBIANCIONES POSIBLES||....\n\n\n\n");
for(i=0;i<MAXFIL;i++){
for(j=0;j<MAXCOL;j++){
matriz[i][j]=1+(rand()%5);
}
}
tablero matriz);
}
}



}

finalJuego=0;
printf("TERMINO JUEGO")
}


return 0;


}