Ir ao conteúdo
  • Cadastre-se

Daniel De Marco Fucci

Membro Júnior
  • Posts

    5
  • Cadastrado em

  • Última visita

posts postados por Daniel De Marco Fucci

  1. Salve salve colegas programadores.

    Estou montando um jogo de damas em C usando matrizes, o algoritmo está quase acabado (pelo menos a versão mais simples do jogo) mas estou tendo uma dificuldade muito chata. Está tudo funcionando ok, exceto por uma coisa: quando o jogador 1 come uma peça do jogador 2, o local na matriz onde estava a peça que foi comida do jogador 1 deve ter o valor 0 atribuído, porém isso não está acontecendo e eu não consigo encontrar o erro no código. O caso contrário funciona normalmente, quando o jogador 2 come uma peça do jogador 1, o local onde estava a peça comida do jogador 1 recebe o valor 0. Será que alguém bom de olho pode dar uma ajuda? Segue o código: 

    #include <stdio.h>
    #include <stdlib.h>
    #define MAX 8
    void imprimir (int tabuleiro[MAX][MAX]);
    
    int main (){
        int tabuleiro[MAX][MAX], retorno = 0, x, y, aux1, aux2, k, z;
        int i, j;
        //zerando tabuleiro
        for (i=0; i<MAX; i++){
            for (j=0; j<MAX; j++){
                tabuleiro[i][j] = 0;
            }
        }
        //adicionando peças às posições iniciais do jogo (peças brancas)
        for (i=0; i<MAX; i++){
            for (j=0; j<3; j++){
                if ((i % 2 == 0 && j % 2 == 0) || (i % 2 == 1 && j % 2 == 1)){
                    tabuleiro[i][j] = 1;
                }
            }
        }
        //adicionando peças às posições iniciais do jogo (peças pretas)
        for (i=0; i<MAX; i++){
            for (j=5; j<MAX; j++){
                if ((i % 2 == 0 && j % 2 == 0) || (i % 2 == 1 && j % 2 == 1)){
                    tabuleiro[i][j] = 2;
                }
            }
        }
        //iniciando o jogo
        printf ("Jogo iniciado! Jogador 1 com pecas 1, jogador 2 com pecas 2\n");
        imprimir(tabuleiro);
        //laço da continuidade no jogo até que alguém vença e retorno receba "1"
        while (retorno == 0){
    
            //laço garante que a peça a ser mexida seja válida
            aux1 = 0;
            while (aux1 == 0){
                printf ("Jogador 1, informe a posicao x e y da peca a ser mexida (peca[x][y])\n");
                scanf ("%d %d", &x, &y);
                x--;
                y--;
                //condição para mexer a peça
                if (tabuleiro[x+1][y+1] != 0 && tabuleiro[x+2][y+2] != 0 && tabuleiro[x-1][y+1] != 0 && tabuleiro[x-2][y+2] != 0) {
                    printf ("Essa peca nao pode se mover!\n");
                }
                else if (tabuleiro[x][y] != 1){
                    printf ("opcao invalida\n");
                }
                else {
                    aux1 = 1;
                }
            }
    
            //laço garante que o destino da peça seja valido
            aux2 = 0;
            while (aux2 == 0){
                printf ("Jogador 1, informe a posicao x e y do destino da peca a ser movida\n");
                scanf ("%d %d", &k, &z);
                k--;
                z--;
                if ((tabuleiro [k][z] != tabuleiro[x+1][y+1]) && (tabuleiro[k][z] != tabuleiro[x-1][y+1]) && (tabuleiro[k][z] != tabuleiro[x+2][y+2]) && (tabuleiro[k][z] != tabuleiro[x-2][y+2])){
                    printf ("opcao invalida\n");
                }
                else if (z<y){
                        printf ("opcao invalida\n");
                    }
                else if (tabuleiro[k][z] == tabuleiro[x+1][y+1]) {
                    if (tabuleiro [k][z] != 0){
                        printf ("opcao invalida\n");
                    }
                    else {
                        tabuleiro[x][y] = 0;
                        tabuleiro[k][z] = 1;
                        aux2 = 1;
                    }
                }
                else if (tabuleiro[k][z] == tabuleiro[x-1][y+1]) {
                    if (tabuleiro [k][z] != 0){
                        printf ("opcao invalida\n");
                    }
                    else {
                        tabuleiro[x][y] = 0;
                        tabuleiro[k][z] = 1;
                        aux2 = 1;
                    }
                }
                else if (tabuleiro[k][z] == tabuleiro[x+2][y+2]){
                    if (tabuleiro[x+1][y+1] != 2){
                        printf ("opcao invalida\n");
                    }
                    else {
                        tabuleiro[x][y] = 0;
                        tabuleiro[k][z] = 1;
                        tabuleiro[x+1][y+1] = 0;
                        aux2 = 1;
                    }
                }
                else if (tabuleiro[k][z] == tabuleiro[x-2][y+2]){
                    if (tabuleiro[x-1][y+1] != 2){
                        printf ("opcao invalida\n");
                    }
                    else{
                        tabuleiro[x][y] = 0;
                        tabuleiro[k][z] = 1;
                        tabuleiro[x-1][y+1] = 0;
                        aux2 = 1;
                    }
                }
            }
            imprimir(tabuleiro);
            //verificando se o jogador 1 ganhou
            for (i=0; i<MAX; i++){
                if (tabuleiro[i][7] == 1){
                    retorno = 1;
                    printf ("Fim de jogo, jogador 1 venceu.\n");
                }
            }
            //garante que o jogo ainda nao acabou
            if (retorno == 0){
                //laço garante que a peça a ser mexida seja válida
                aux1 = 0;
                while (aux1 == 0){
                    printf ("Jogador 2, informe a posicao x e y da peca a ser mexida (peca[x][y])\n");
                    scanf ("%d %d", &x, &y);
                    x--;
                    y--;
                    if (tabuleiro[x-1][y-1] != 0 && tabuleiro[x-2][y-2] != 0 && tabuleiro[x+1][y-1] != 0 && tabuleiro[x+2][y-2] != 0){
                        printf ("Essa peca nao pode se mover!\n");
                    }
                    else if (tabuleiro[x][y] != 2){
                        printf ("opcao invalida\n");
                    }
                    else {
                        aux1 = 1;
                    }
                }
    
                //laço garante que o destino da peça seja valido
                aux2 = 0;
                while (aux2 == 0){
                    printf ("Jogador 2, informe a posicao x e y do destino da peca a ser movida\n");
                    scanf ("%d %d", &k, &z);
                    k--;
                    z--;
    
                    if ((tabuleiro [k][z] != tabuleiro[x-1][y-1]) && (tabuleiro[k][z] != tabuleiro[x+1][y-1]) && (tabuleiro[k][z] != tabuleiro[x-2][y-2]) && (tabuleiro[k][z] != tabuleiro[x+2][y-2])){
                        printf ("opcao invalida\n");
                    }
                    else if (z>y){
                        printf ("opcao invalida\n");
                    }
                    else if (tabuleiro[k][z] == tabuleiro[x-1][y-1]) {
                        if (tabuleiro [k][z] != 0){
                            printf ("opcao invalida\n");
                        }
                        else {
                            tabuleiro[x][y] = 0;
                            tabuleiro[k][z] = 2;
                            aux2 = 1;
                        }
                    }
                    else if (tabuleiro[k][z] == tabuleiro[x+1][y-1]) {
                        if (tabuleiro [k][z] != 0){
                            printf ("opcao invalida\n");
                        }
                        else {
                            tabuleiro[x][y] = 0;
                            tabuleiro[k][z] = 2;
                            aux2 = 1;
                        }
                    }
                    else if (tabuleiro[k][z] == tabuleiro[x-2][y-2]){
                        if (tabuleiro[x-1][y-1] != 1){
                            printf ("opcao invalida\n");
                        }
                        else {
                            tabuleiro[x][y] = 0;
                            tabuleiro[k][z] = 2;
                            tabuleiro[x-1][y-1] = 0;
                            aux2 = 1;
                        }
                    }
                    else if (tabuleiro[k][z] == tabuleiro[x+2][y-2]){
                        if (tabuleiro[x+1][y-1] != 1){
                            printf ("opcao invalida\n");
                        }
                        else{
                            tabuleiro[x][y] = 0;
                            tabuleiro[k][z] = 2;
                            tabuleiro[x+1][y-1] = 0;
                            aux2 = 1;
                        }
                    }
                }
                imprimir(tabuleiro);
                //verificando se o jogador 2 venceu.
                for (i=0; i<MAX; i++){
                    if (tabuleiro[i][0] == 2){
                        retorno = 1;
                        printf ("Fim de jogo, jogador 2 venceu.\n");
                    }
                }
            }
    
        }
    
    
    return 0;
    
    
    
    
    }
    
    void imprimir (int tabuleiro[MAX][MAX]){
        int i, j;
        for (i=0; i<MAX; i++){
            for (j=0; j<MAX; j++){
                printf (" %d ", tabuleiro[i][j]);
            }
            printf ("\n");
        }
    }

     

    • Curtir 1
  2. Boa tarde a todos!

    Na próxima aula vou falar com o professor e explicar que postei aqui o código para discutir soluções, segue o código enxugado e aprimorado:

    #include <stdlib.h>
    #include <stdio.h>
    
    
    int main () {
        int  i, j,lin,col, retorno;
        //do while garante que a matriz seja quadrada
        do {
            printf ("Digite as dimensoes da matriz:\n");
            scanf ("%d %d", &lin, &col);
        }while (lin != col);
        int matriz[lin][col], somalin[col], somacol[lin],somadiag1=0, somadiag2=0;
        //zerando vetores
        for (i=0; i<lin; i++){
            somalin[i] = 0;
            somacol[i] = 0;
        }
        printf ("Digite os elementos: \n");
        //lendo por linhas os elementos da matriz
        for (i=0; i<lin; i++){
            for (j=0; j<col; j++){
                scanf ("%d", &matriz[i][j]);
            }
        }
        //somando linhas
        for (i=0; i<lin; i++) {
            for (j=0; j<col; j++){
                somalin[i] += matriz[i][j];
    
            }
    
        }
        //somando colunas
        for (i=0; i<col; i++) {
            for (j=0; j<lin; j++){
                somacol[i] += matriz[j][i];
    
            }
        }
        //somando diagonal principal
        for (i=0; i<lin; i++) {
    
            somadiag1 += matriz[i][i];
    
        }
        //somando diagonal secundaria
        for (i=0; i<lin; i++) {
            for(j=0;j<lin;j++){
    
                if(j==(lin-1)-i){
                    somadiag2 += matriz[i][j];
                }
    
            }
    
        }
        //testando se eh quadrado magico
        retorno = 1;
        if (somadiag1 != somadiag2){
            retorno = 0;
        }
        for (i=0; i<lin; i++){
            if (somalin[i] != somacol[i]){
                retorno = 0;
            }
    
        }
        for (i=0; i<lin-1; i++){
            if (somalin[i] != somalin[i+1] || somacol[i] != somacol[i+1]){
                retorno = 0;
            }
        }
        if (somalin[0] != somadiag1){
            retorno = 0;
        }
        if (retorno == 0){
            printf ("Nao eh quadrado magico!\n");
        }
        else {
            printf ("Eh quadrado magico!\n");
        }
    
        system ("PAUSE");
        return 0;
    
    
    
    
    
    
    }

     

    • Curtir 2
  3. Pessoal, esse exercício vale nota para mim, meu professor usa um método de vasculhar o código do aluno na internet para identificar cópias, se eu postar o código aqui no site, será que ao fazer a busca ele vai apontar que é cópia? Se não for o caso eu posto aqui como ficou o resultado final, eu enxuguei bastante ele e fiz algumas modificações, mas se for o caso, vou precisar excluir o tópico! Obrigado pela compreensão

    • Curtir 3
  4. Boa tarde colegas programadores,

    Estou resolvendo um exercício de matriz , o programa deve verificar se a matriz é ou não um quadrado perfeito mágico, segue o enunciado:

     

    "Dizemos que uma matriz quadrada inteira é um quadrado mágico se a soma dos elementos de cada linha, a soma dos elementos de cada coluna e a soma dos elementos das diagonais principal e secundária são todas iguais.
    Dada uma matriz qudrada A (n) (n), verificar se A é um quadrado mágico."


    O meu código já está praticamente pronto, mas o programa sempre acusa que a matriz NÃO é quadrada, mesmo quando ela é. Segue o código:

    #include <stdlib.h>
    #include <stdio.h>
    
    
    int main () {
        int  i, j,lin,col;
        printf ("Digite as dimensoes da matriz:\n");
        scanf ("%d %d", &lin, &col);
        int matriz[lin][col], somalin[col], somacol[lin],somadiag1=0, somadiag2=0, aux=0;
        printf ("Digite os elementos: \n");
        for (i=0; i<lin; i++){
            for (j=0; j<col; j++){
                scanf ("%d", &matriz[j]);
            }
        }
    
        for (i=0; i<lin; i++) {
            for (j=0; j<col; j++){
                aux += matriz [j];
    
            }
            somalin = aux;
            aux = 0;
        }
        for (i=0; i<col; i++) {
            for (j=0; j<lin; j++){
                aux += matriz [j];
    
            }
            somacol = aux;
            aux = 0;
        }
        for (i=0; i<lin; i++) {
    
            aux += matriz ;
    
    
            somadiag1 += aux;
            aux = 0;
        }
        j = 0;
        for (i=col - 1; i<=0; i--) {
    
            aux += matriz [j];
    
    
            somadiag2 += aux;
            aux = 0;
            j++;
        }
        if (somadiag1 != somadiag2){
            printf ("Nao eh quadrado magico!\n");
            return 0;
        }
        for (i=0; i<lin; i++){
            if (somalin =! somacol){
                printf ("Nao eh quadrado magico!\n");
                return 0;
            }
        }
        if (somalin[0] != somadiag1){
            printf ("Nao eh quadrado magico!\n");
            return 0;
        }
        printf ("A matriz é um quadrado magico!\n");
    
        system ("PAUSE");
        return 0;
    
    
    } 

     

     

    Estou verificando etapa por etapa mas ainda não encontrei o erro. Alguém consegue entender o porquê de não estar funcionando corretamente? 
    Desde já agradeço a disposição, abraços
     

     

    adicionado 6 minutos depois

    Pessoal, na verdade se trata de QUADRADO MÁGICO e não "perfeito".

    • Curtir 1

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

 

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!