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 - K-YreX

#841
Programación C/C++ / Re: Ayuda con programa
6 Diciembre 2018, 15:13 PM
Tu código para generar números aleatorios genera números entre [3,5). Fíjate que el límite superior tiene el intervalo abierto, por lo que los posibles resultados son {3,4}.
Para generar números entre [3,5] el código es: <3 + rand() % 5-3+1>. Si entiendes lo que hace el operador módulo <%> está claro, este te devuelve el resto de dividir <rand()> entre 2 en tu caso. Ese resto siempre va a ser {0,1}. Entonces 3+{0,1}={3,4}. En cambio si haces módulo 3, te queda 3 + {0,1,2} = {3,4,5}. Suerte.

Edit: Además la carta que robas no es <numeroAleatorio>, <numeroAleatorio> es el número de cartas que robas.
#842
Cita de: CalgaryCorpus en  5 Diciembre 2018, 19:36 PM
Parece que la logica original hay que modifcarla un poco, pues si existen 2 coliumnas iguales, pero justo las ultimas 2 que se comparan no son iguales, la funcion va a retornar 0.

Es lo que se quiere?

Es cierto, faltaría meterle la condición de que no sean iguales a uno de los <for> para que en cuanto haya dos iguales salga del todo. Fallo mío :-X Con estas correcciones ya debería funcionar. :silbar:
Edit: Ya está modificado el código original (creo que no tiene más fallos, si alguien encuentra alguno que me lo comente). Y Hackersanfe, te recomiendo que lo pienses por ti mismo, el reto está en conseguir hacerlo funcionar sin mirar la solución, mirándola es muy fácil.
#843
Tienes que ver qué índice representa a las filas y qué índice a las columnas. No vale eso de coger un código cambiarle el nombre y que haga otra cosa.
Edit: Además mira a ver cuál debería ser el tamaño de tu array auxiliar... Suerte.
#844
Programación C/C++ / Re: Ayuda con programa
4 Diciembre 2018, 21:28 PM
El nombre del archivo tiene que ir con la ruta en donde esté. Quiero decir si tu archivo se llama "baraja.txt" y está en el mismo directorio donde estás ejecutando el programa entonces su nombre es "baraja.txt".
En cambio si está en otro sitio tienes que especificar la ruta, por ejemplo si estás compilando en GNU/Linux y tienes el ejecutable y al mismo nivel una carpeta "docs/" donde está el fichero "baraja.txt" entonces el nombre del archivo sería "./docs/baraja.txt".

Edit: Prueba a hacer un programa que sólo abra un fichero y muestre su contenido así puedes ver donde está el error más fácil.
#845
Programación C/C++ / Compilar C/C++ en Windows
4 Diciembre 2018, 21:16 PM
Bueno el tema es que yo empecé a programar usando Dev C++ en Windows, pero después empecé a usar distribuciones Linux y entonces empecé a compilar mis programas con gcc y g++. Me gusta poder editar mi código con editores de texto ya sea con gedit, sublime text y no usar IDEs como Dev, NetBeans, Eclipse...

Entonces ahora estoy usando en ocasiones Windows y me gustaría saber que métodos hay para compilar programas en este sistema sin usar IDEs. Por ejemplo he leído un poco de MinGW y no sé si existen otras alternativas similares o esa es la forma más similar de compilar como en Linux. :-X
#846
Primero tienes que cambiar la declaración siguiente:

int *max=0,*fila=0,*columna=0;

No tienes que declararlos como punteros si luego los pasas a la función usando "&".

Ahora la función, por ejemplo una forma de comparar cada columna de una forma visual es la siguiente:

int compararColumnas(int matriz[FILAS][COLUMNAS]){
int iguales = 0;
int columnaAComparar[FILAS];

for(int i = 0; i < COLUMNAS-1 && !iguales; i++){
for(int j = 0; j < FILAS; j++) // copiamos la columna a comparar en columnaAComparar
columnaAComparar[j] = matriz[j][i];

for(int m = i+1; m < COLUMNAS && !iguales; m++){ // para cada columna en adelante, mientras no sean iguales...
iguales = 1; // ...suponemos que la columna m es igual a la columna i guardada en columnaAComparar
for(int n = 0; n < FILAS && iguales; n++) // recorremos la columna m mientras no lleguemos al final y sean iguales
if(matriz[n][m] != columnaAComparar[n])
iguales = 0;
}
}
return iguales;
}


También puedes ahorrarte el copiar la columna a comparar en cada iteración. Así ganas eficiencia aunque se ve peor por eso para que lo veas bien te lo dejo así y ya tú cuando lo entiendas puedes cambiarlo para no tener que usar un array auxiliar. Suerte.
#847
Especifica qué parte es la que no sabes implementar... si es desde meter los valores en la matriz o comparar dos filas o columnas...
Y si tienes algo de código hecho ponlo también en el mensaje para que lo veamos. :-X
#848
Y no te sirve ejecutar <./programa 123456>??
La otra forma no se me ocurre nada por el momento ya que no he trabajado nunca con un programa en C y un pipe del terminal. :-\
#849
Puede que alguna vez te hayas encontrado con la función <main> con el siguiente formato:

int main(int argc, char *argv[]){
}


Eso significa que <argc> contiene el número de argumentos que se han pasado al programa y <argv> contiene cadenas de caracteres con los parámetros que se han escrito al ejecutar el programa. Luego ya es adaptar tu programa según el valor de <argc>. Suerte.
#850
Cita de: CalgaryCorpus en  4 Diciembre 2018, 16:12 PM
Una precision, pues hay algo incorrecto en lo anterior, una asignacion es una expresion, y las expresiones tienen un valor. El valor de la expresion de asignacion es el valor que se asigna.

Dado esto, x = 0 tiene valor 0, no tiene valor 1 (o "siempre es cierta") como se indico en el comentario anterior.

Cierto, no lo había probado y yo pensaba que una asignación se evaluaba como cierta si la asignación se hacía con éxito (me sonaba que era así y no sé por qué). Bueno pues haciendo la asignación con otro número distinto de 0 sí se muestra lo que quería decir. :-X