Ir ao conteúdo
  • Cadastre-se

Daniel De Marco Fucci

Membro Júnior
  • Posts

    5
  • Cadastrado em

  • Última visita

Reputação

8
  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"); } }
  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; }
  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
  4. Pessoal, achei o erro. Era um sinal ">" onde deveria ser "<" em uma das estruturas de teste no final. Obrigado a todos pelas respostas!
  5. 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".

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!