Autor
|
Tema: Busqueda de valores con matrices (Leído 2,785 veces)
|
Gaby_10
Desconectado
Mensajes: 9
|
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); }
|
|
« Última modificación: 15 Febrero 2014, 06:42 am por Gaby_10 »
|
En línea
|
|
|
|
leosansan
Desconectado
Mensajes: 1.314
|
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:#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! ..... !!!! 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 :
matriz[i][j]=1+rand()%5
* Te falta el return de la función main.
*¿ Qué sentido tiene?:
if (contador==3 && j<7 ......
En lugar de usar: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: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: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 !!!! 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.
|
|
« Última modificación: 15 Febrero 2014, 16:24 pm por leosansan »
|
En línea
|
|
|
|
Gaby_10
Desconectado
Mensajes: 9
|
|
.
« Respuesta #2 en: 15 Febrero 2014, 21:22 pm » |
|
.
|
|
« Última modificación: 15 Febrero 2014, 23:07 pm por Gaby_10 »
|
En línea
|
|
|
|
Gaby_10
Desconectado
Mensajes: 9
|
viendo lo que te pase me acabo de dar cuenta que llamo mal los putnos ahora lo corrijo xD
|
|
|
En línea
|
|
|
|
Gaby_10
Desconectado
Mensajes: 9
|
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 #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; }
|
|
« Última modificación: 16 Febrero 2014, 03:47 am por Gaby_10 »
|
En línea
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
[C] Necesito ayuda con cómo pasar valores de matrices a una función...
Programación C/C++
|
niñoAtómico
|
2
|
2,839
|
15 Octubre 2013, 03:13 am
por niñoAtómico
|
|
|
Buscar valores en matrices
Programación C/C++
|
Gaby_10
|
1
|
1,789
|
15 Febrero 2014, 13:05 pm
por vangodp
|
|
|
Busqueda en matrices
Programación C/C++
|
jengley
|
1
|
1,914
|
4 Marzo 2016, 00:35 am
por abaadoon
|
|
|
Guardar valores en matrices
Programación C/C++
|
hector_suarez
|
0
|
1,306
|
28 Mayo 2018, 04:08 am
por hector_suarez
|
|
|
MATRICES: Rellenar con valores que ingresa el usuario
Programación C/C++
|
gremlin
|
1
|
2,559
|
19 Octubre 2019, 00:04 am
por K-YreX
|
|