Ir ao conteúdo

Posts recomendados

Postado

Faça um programa na linguagem de programação C. Seu programa deve apresentar um tabuleiro de sudoku, e permitir que o usuário jogue nesse tabuleiro. O tabuleiro inicial deve ser lido de um arquivo, que contém 81 números entre 0 e 9, que são os valores de cada posição do tabuleiro. O valor 0 é usado para representar uma casa vazia. Caso o arquivo não exista, deve inicializar com um tabuleiro default (que pode ser vazio).

O programa deve ter um laço principal que consiste em:

apresenta o tabuleiro – caso o tabuleiro esteja completo e correto (fim do jogo), esse fato deve ser informado;

lê uma tecla do usuário. Essa tecla pode ser:

um dígito entre 1 e 9 – representa o início de uma jogada, descrita abaixo;

a letra ‘g’ – grava o estado atual do jogo; o programa pede o nome de um arquivo e grava o tabuleiro nesse arquivo;

a letra ‘l’ – ler um jogo salvo anteriormente; o programa pede o nome do arquivo e substitui o tabuleiro pelo conteúdo dessa arquivo (caso consiga ler o arquivo);

a letra ‘s’ – o usuário pede para sair do jogo; o programa pede confirmação.

volta à apresentação do tabuleiro

Uma jogada consiste em o usuário digitar 3 números: a linha, a coluna e o valor a colocar nessa posição. O programa deve avisar o usuário (e não aceitar a jogada), se algum desses valores for inválido (não tiver entre 1 e 9), se a posição escolhida não estiver vazia, ou se essa jogada levar a uma situação inválida do tabuleiro (pelas regras do sudoku).

Após cada jogada válida, o tabuleiro deve ser gravado no arquivo que foi lido no início do programa. Dessa forma, sempre que o programa começa, o usuário volta à mesma situação em que estava na última vez que jogou

 

eu comecei a fazer esse código só que meu professor não explicou como faz o resto, alguem me ajuda por favor

int main()
{
    FILE *arq;
    arq= fopen("jogo","a");
    if (arq==NULL){
        printf("não foi possivel abrir");
        return 1;
    }
    int i,j,m[9][9];
    for(i=0; i<9; i++){
        for(j=0; j<9; j++){
           
               fprintf(arq,"  ");
        
        }
        fprintf(arq,"\n");
    }
    
    for(i=0; i<9; i++){
        for(j=0; j<9; j++){
            scanf("%d",&m[i][j]);
            if(m[i][j]>=10 || m[i][j]==0 ){
                printf("digite só números entre 1 e 9");
            }
        }
    }

    fclose(arq);


    return 0;
}

.

  • Curtir 1
Postado
8 horas atrás, phinky88 disse:

eu comecei a fazer esse código só que meu professor não explicou como faz o resto, alguem me ajuda por favor

 

o "resto" é escrever um programa que permita jogar como está no enunciado...

Siga os dados. E não escreva uma única linha sem um propósito.


1.

 

8 horas atrás, phinky88 disse:

Seu programa deve apresentar um tabuleiro de sudoku, e permitir que o usuário jogue nesse tabuleiro. O tabuleiro inicial deve ser lido de um arquivo, que contém 81 números entre 0 e 9, que são os valores de cada posição do tabuleiro

 

E aí você abre o arquivo em modo "a", append, para acrescentar dados. Não faz sentido. Precisa LER o tabuleiro, claro.

 

    FILE *arq;
    arq= fopen("jogo","a");

 

Qual a razão?

 

2.
 

8 horas atrás, phinky88 disse:

O programa deve ter um laço principal que consiste em:

apresenta o tabuleiro – caso o tabuleiro esteja completo e correto (fim do jogo), esse fato deve ser informado;

lê uma tecla do usuário. Essa tecla pode ser:

um dígito entre 1 e 9 – representa o início de uma jogada, descrita abaixo;

a letra ‘g’ – grava o estado atual do jogo; o programa pede o nome de um arquivo e grava o tabuleiro nesse arquivo;

a letra ‘l’ – ler um jogo salvo anteriormente; o programa pede o nome do arquivo e substitui o tabuleiro pelo conteúdo dessa arquivo (caso consiga ler o arquivo);

a letra ‘s’ – o usuário pede para sair do jogo; o programa pede confirmação.

volta à apresentação do tabuleiro

Uma jogada consiste em o usuário digitar 3 números: a linha, a coluna e o valor a colocar nessa posição. O programa deve avisar o usuário (e não aceitar a jogada), se algum desses valores for inválido (não tiver entre 1 e 9), se a posição escolhida não estiver vazia, ou se essa jogada levar a uma situação inválida do tabuleiro (pelas regras do sudoku).

 

Essa é a mecânica do jogo. Um simples loop. Então faça isso. O simples. Leia o tabuleiro no início, claro. Mostre o tabuleiro na tela, leia as jogadas, grave o tabuleiro a cada jogada para poder reiniciar o jogo se o cara sair.

 

3.
 

8 horas atrás, phinky88 disse:

Após cada jogada válida, o tabuleiro deve ser gravado no arquivo que foi lido no início do programa. Dessa forma, sempre que o programa começa, o usuário volta à mesma situação em que estava na última vez que jogou

 

Faz sentido não? Se cair a força pro exemplo o cara pode reiniciar o jogo de onde parou. Só que você não programou isso...

 

De volta ao seu programa:

 

    int i,j,m[9][9];
    for(i=0; i<9; i++){
        for(j=0; j<9; j++){
           
               fprintf(arq,"  ");
        
        }
        fprintf(arq,"\n");
    }

 

NUNCA declare variáveis de controle do loop, esses i e j, FORA do loop. Não é esperto. Levou décadas para colocarem isso na linguagem, só que foi colocado afinal. Nos anos 80. Faz tempo. Declare as variáveis no for. Sempre.

 

E qual o propósito de gravar espaços em branco no arquivo?
 

   for(i=0; i<9; i++){
        for(j=0; j<9; j++){
            scanf("%d",&m[i][j]);
            if(m[i][j]>=10 || m[i][j]==0 ){
                printf("digite só números entre 1 e 9");
            }
        }
    }

 

Que pretende ao ler nada menos que 81 posições do tabuleiro DO TECLADO?

  • Acha mesmo que alguém vai per paciência de fazer isso A CADA JOGADA? Digitar 81 posíções?
  • Notou que você sequer disse, a cada leitura, que posição é para o infeliz digitar? Ele vai ter que marcar um papel as 81?
  • Notou que não testou o retorno de scanf()? Qual o propósito de continuar o loop se não conseguiu ler nada para uma certa posição? Se errar na segunda quando tempo vai demorar depois de ler as 79 para o jogador ter um ataque de fúria ao descobrir que o programa não leu nada direito?
  • Curtir 1

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

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

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!