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 - satu

#91
Programación C/C++ / Re: Comparando cadenas
24 Enero 2012, 10:59 AM
Hola

Tienes 2 fallos:

char nombre[10][20], i, aux;

for (i=0;i<=10;i++)


1- Tienes declarado aux como char, debes declararlo como: char aux[20];
2- En el for donde introduces los nombres te sobra el = en i<=10, debe ser i<10

Saludos
#92
Programación C/C++ / Re: Problema con strcat
22 Enero 2012, 19:16 PM
Hola

Cita de: DickGumshoe en 22 Enero 2012, 17:46 PM

EDITO: Estaba intentándolo, y al declarar la variable aux, he puesto esto:

aux[60]={};

Y ahora me sale bien. ¿Será porque no le di antes un valor a aux?


El problema está aquí:

strcat(aux, nombre);


Ya que como bien sabes strcat() se utiliza para concatenar cadenas, entonces lo que hace es añadir detrás del carácter '\0' de aux lo que hay en nombre, pero al no estar inicializado aux, puede que no tenga el carácter '\0', por eso falla.

Una solución sería inicializar aux como has hecho o en lugar de concatenar, copiar para darle el primer valor:

strcpy(aux, nombre);
strcat(aux, ", nacido el ");
strcat(aux, dia);
strcat(aux, "/");
strcat(aux, mes);


Saludos
#93
Programación C/C++ / Re: Comparando cadenas
22 Enero 2012, 19:05 PM
Hola

Citar
Por lo que parece, el error está en que en gets no puedo poner

gets(nombre[i][20]);

Aunque no estoy seguro.

No puedes, si te fijas, al poner nombre[ i][20] estás accediendo a un carácter, pero en cada nombre[ i] hay un char[20], por lo tanto debes poner:

gets(nombre[i]);


Lo mismo pasa con todos los strcmp(), por eso te falla. Debes poner:

strcmp(nombre[0], aux) ||
strcmp(nombre[1], aux) ||
strcmp(nombre[2], aux) ||
etc...


Además no es recomendable el uso de gets(), utiliza mejor fgets()

Saludos
#95
Hola

Poder se puede, pero tendrías que utilizar bibliotecas que no pertenecen a C estándar, por ejemplo para gráficos y esas cosas, pero poder puedes.

Saludos
#96
Hola

Para hacer potencias con cualquier exponente puedes usar esta función:


int potencia(int base, int exp)
{
    int i, resul = 1;

    for(i = 0; i < exp; i++)
        resul *= base;

    return resul;
}


O también puedes usar la función pow() que está incluida en math.h que tiene muchas funciones matemáticas.

Saludos
#97
Hola

En C estándar CREO que no se puede, que alguien me corrija si me equivoco.

Si usas Windows puedes usar su API, para cambiar el color del texto la función que se utiliza es SetConsoleTextAttribute

Saludos
#98
Hola

Tienes razón, en las 3 primeras columnas no funciona el vertical, hice el código a ojo sin probarlo y esto es lo que pasa, pero es fácil de arreglar.

Bueno me alegro de que te haya quedado todo claro.

Saludos

Edito: también pasa lo mismo con las horizontales en las 3 filas de arriba
#99
Hola

El error que te está dando está en la llamada a la función, tú tienes finPartida(); pero debes pasarle la matriz finPartida(M);

Te pongo mi programa y así lo comparas, y si tienes alguna duda pregunta.


#include <stdio.h>

#define FILAS 8
#define COLUMNAS 8

void mostrarTablero(int m[FILAS][COLUMNAS]);
int finPartida(int m[FILAS][COLUMNAS]);

int main(void)
{
    int m[FILAS][COLUMNAS];
    int i, j, col, jugador, s = 0;
    int fila[COLUMNAS];

    for(i = 0; i < 8; i++)
    {
        for(j = 0; j < 8; j++)
            m[i][j] = 0;
        fila[i] = 7;
    }

    jugador = 1;

    do
    {
        mostrarTablero(m);

        printf("\nTurno del jugador %d\n", jugador);

        do
        {
            printf("Introduce la columna (1-8): ");
            scanf("%d", &col);
            if(fila[col-1] < 0)
            {
                col = 0;
                printf("\nEsa columna esta llena\n\n");
            }
        }
        while(col < 1 || col > 8);

        col = col-1;
        m[fila[col]][col] = jugador;
        fila[col]--;

        jugador = 3 - jugador;

        s = finPartida(m);
    }
    while(s == 0);

    mostrarTablero(m);

    printf("\n\nGANADOR EL JUGADOR %d\n\n", 3 - jugador);

    while(getchar() != '\n');
    printf("Pulsa Enter para salir...");
    getchar();
    return 0;
}


void mostrarTablero(int m[FILAS][COLUMNAS])
{
    int i, j;

    printf("\n");
    for(i = 0; i < FILAS; i++)
    {
        printf("%d - ", i+1);
        for(j = 0; j < COLUMNAS; j++)
            printf("%i  ", m[i][j]);
        printf("\n");
    }

    printf("   ");
    for(j = 0; j < COLUMNAS; j++)
        printf("___");

    printf("\n    ");
    for(j = 0; j < COLUMNAS; j++)
        printf("%i  ", j+1);
    printf("\n\n");
}


int finPartida(int m[FILAS][COLUMNAS])
{
    int i, j;
    for(i = FILAS-1; i >= 3; i--)
        for(j = COLUMNAS-1; j >= 3; j--)
            if((m[i][j] == m[i-1][j] && m[i][j] == m[i-2][j] && m[i][j] == m[i-3][j] && m[i][j] != 0) ||
               (m[i][j] == m[i][j-1] && m[i][j] == m[i][j-2] && m[i][j] == m[i][j-3] && m[i][j] != 0) ||
               (m[i][j] == m[i-1][j-1] && m[i][j] == m[i-2][j-2] && m[i][j] == m[i-3][j-3] && m[i][j] != 0))
                return 1;

    for(i = FILAS-1; i >= 3; i--)
        for(j = 0; j <= COLUMNAS-3; j++)
            if(m[i][j] == m[i-1][j+1] && m[i][j] == m[i-2][j+2] && m[i][j] == m[i-3][j+3] && m[i][j] != 0)
                return 1;

    return 0;
}


Saludos
#100
Hola

Claro, esa matriz.

Un ejemplo sería:

int finPartida(int m[FILAS][COLUMNAS])
{
    int i, j;
    for(i = FILAS-1; i >= 3; i--)
        for(j = COLUMNAS-1; j >= 3; j--)
            if((m[i][j] == m[i-1][j] && m[i][j] == m[i-2][j] && m[i][j] == m[i-3][j] && m[i][j] != 0) || /*Aqui comprobamos si hay 4 iguales en la misma fila*/
               (m[i][j] == m[i][j-1] && m[i][j] == m[i][j-2] && m[i][j] == m[i][j-3] && m[i][j] != 0) || /*Aqui comprobamos si hay 4 iguales en la misma columna*/
               (m[i][j] == m[i-1][j-1] && m[i][j] == m[i-2][j-2] && m[i][j] == m[i-3][j-3] && m[i][j] != 0)) /*Aqui comprobamos si hay 4 iguales en la diagonal principal*/
                return 1;

    for(i = FILAS-1; i >= 3; i--)
        for(j = 0; j <= COLUMNAS-3; j++)
            if(m[i][j] == m[i-1][j+1] && m[i][j] == m[i-2][j+2] && m[i][j] == m[i-3][j+3] && m[i][j] != 0) /*Aqui comprobamos si hay 4 iguales en la diagonal secundaria*/
                return 1;

    return 0;
}


Aquí debes cambiar FILAS y COLUMNAS por 8, yo lo he hecho genérico.

Entonces si devuelve 1 es que hay 4 en raya, si devuelve 0 sigue el juego. Ahora tienes que meter en el main la llamada a esta función, y dependiendo del valor de retorno se acabará el juego o no.

Me voy a poner a hacer una versión del juego utilizando lo que llevas hasta ahora, cuando lo termine lo pongo aquí.

Saludos