Ir ao conteúdo

Posts recomendados

Postado

O programa só está funcionado na primeira iteração. Alguém sabe porque só está funcionando na primeira e nas posteriores não?

 

#include<stdio.h>


int ChecarVaga(char sala[8][10], int x, int y){

int i = y - 1;
int j = x - 1;
int maxi = y + 1;
int maxj = x + 1;

if(i < 0) i = 0;
if(maxi > 7) maxi = 7;

for(i=i; i <= maxi; i++){
  j = x - 1;
  maxj = x + 1;
if(j < 0) j = 0;
if(maxj > 7) maxj = 7;

for(j=j; j <= maxj; j++){
  if(sala[i][j] == 'P'){
    return 0;
    }
  }
}
return 1;
}

// Transforma a Letra em numero
int Converte(char letra)
{
  int numero;

  if (letra == 'a' || letra == 'A')
    numero = 0;
  if (letra == 'b' || letra == 'B')
    numero = 1;
  if (letra == 'c' || letra == 'C')
    numero = 2;
  if (letra == 'd' || letra == 'D')
    numero = 3;
  if (letra == 'e' || letra == 'E')
    numero = 4;
  if (letra == 'f' || letra == 'F')
    numero = 5;
  if (letra == 'g' || letra == 'G')
    numero = 6;
  if (letra == 'h' || letra == 'H')
    numero = 7;
  return numero;
}

int main(){

  char letra;
  char sala[8][10] = {
    '@','@','@','@','@','@','@','@','@','@',
    '@','@','@','@','@','@','@','@','@','@',
    ' ','@','@','@','@','@','@','@','@',' ',
    ' ','@','@','@','@','@','@','@','@',' ',
    ' ',' ','@','@','@','@','@','@',' ',' ',
    ' ',' ','@','@','@','@','@','@',' ',' ',
    ' ',' ',' ','@','@','@','@',' ',' ',' ',
    ' ',' ',' ',' ','@','@',' ',' ',' ',' ',
};


int x, y,i,j,lotado=0,ok;
int npessoas = 0;


while((!lotado) && (npessoas < 10)){
  printf("     0  1  2  3  4  5  6  7  8  9\n");
  //Impressão da matriz
  for(i = 0; i < 8; i++){
    printf("%3c", 65+i);          //printf("%3c", 72-i)
    for(j = 0; j < 10; j++){
    printf("%3c", sala[i][j]);
  }
  puts("");
}


printf("\nDigite uma coordenada (x,y): ");
scanf("%c,%d", &letra, &y);
x = Converte(letra);

ok = ChecarVaga(sala,x,y);

if(ok == 0){
  printf("Por favor escolha uma localizacao segura\n");
}
else{
  sala[x][y] = 'P';
  npessoas++;
}

ok = 0;

//Checar se esta lotado
for(i = 0; i < 8; i++){
  for(j =0; j < 10; j++){
    ok = ChecarVaga(sala, j, i);
    if(ok){
     break; //sai do loop pois tem vaga disponivel
    }
  }
}

if(!ok){
  lotado = 1;
  printf("Lotacao maxima alcancada!\n");

  }
}

for(i=0; i < 8; i++){
  printf("%3c", 65+i);          //printf("%3c", 72-i)
  for(j=0; j < 10; j++){
    printf("%3c", sala[i][j]);
  }
  puts("");
}



  printf("     0  1  2  3  4  5  6  7\n");


  return 0;
}

 

  • Curtir 1
Postado

Poste o enunciado e o que está tentando fazer.

  • Explique o que esperava como resultado
  • Teste SEMPRE o retorno de scanf(). Qual o propósito de seguir se não ler?
  • main() deve ser a primeira função de seu programa
  • declare as variáveis de controle DENTRO do loop

 

  • Curtir 1
Postado

Converte()

 

int Converte(char letra)
{
  int numero;

  if (letra == 'a' || letra == 'A')
    numero = 0;
  if (letra == 'b' || letra == 'B')
    numero = 1;
  if (letra == 'c' || letra == 'C')
    numero = 2;
  if (letra == 'd' || letra == 'D')
    numero = 3;
  if (letra == 'e' || letra == 'E')
    numero = 4;
  if (letra == 'f' || letra == 'F')
    numero = 5;
  if (letra == 'g' || letra == 'G')
    numero = 6;
  if (letra == 'h' || letra == 'H')
    numero = 7;
  return numero;
}

 

retorna o que para Converte('X')? 

 

Não se sabe. O programa não inicializou numero. E se a letra for 'a' por exemplo vai comparar com TODAS as outras a toa porque também não tem else ou return nos if.

 

Prefira o simples:
 

int Converte(char letra)
{
    if (letra >= 'a') &&(letra <= 'h') return letra - 'a';
    if (letra >= 'A') &&(letra <= 'H') return letra - 'A';
    return -1;
}

 

Quanto a 

 

  char sala[8][10] = {
    '@','@','@','@','@','@','@','@','@','@',
    '@','@','@','@','@','@','@','@','@','@',
    ' ','@','@','@','@','@','@','@','@',' ',
    ' ','@','@','@','@','@','@','@','@',' ',
    ' ',' ','@','@','@','@','@','@',' ',' ',
    ' ',' ','@','@','@','@','@','@',' ',' ',
    ' ',' ',' ','@','@','@','@',' ',' ',' ',
    ' ',' ',' ',' ','@','@',' ',' ',' ',' ',
};

 

Talvez prefira:

 

    char sala[8][11] =
    {//0123456789
      "@@@@@@@@@@", // a
      "@@@@@@@@@@",
      " @@@@@@@@ ",
      " @@@@@@@@ ",
      "  @@@@@@  ",
      "  @@@@@@  ",
      "   @@@@   ",
      "    @@    " // h
    };

 

porque é mais fácil de escrever e de alterar, em troca de uns poucos bytes

  • Curtir 2

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