Ir ao conteúdo

Posts recomendados

Postado

E ai rapaziada, beleza? Então, tô com um exercício da faculdade que não tô conseguindo progredir em certas partes dele. O exercício é o seguinte: Crie uma matriz (tela de cinema) que receba uma coordenada no formato, 1° a letra da posição da cadeira(eixo y) seguido pelo numero da cadeira(eixo x). Ao receber as posições da cadeira desejada devesse colocar o caractere 'P' na posição desejada se a posição ao lado (direita e esquerda) e em cima e em baixo estiverem vazias (devido ao distanciamento social), se a posição digitada tiver as cadeiras vizinhas vazias divise reserva essa cadeira com o caractere 'P' e colocar na sua vizinhança o caractere '#' para simbolizar as cadeiras que não podem ser usadas. As partes que eu estou com problema são:

1° Colocar o '#' nas posições vizinhas

2° Minha matriz feita até agora está nesse formato mostrado ao usuário                       0  1  2  3  4  5  6  7

 7   -  -   -   -   -  -   -   -                                                                                                A     -  -   -   -   -  -   -   -   
  6  -  -   -   -   -  -   -   -                                                                                                B     -  -   -   -   #  -   -   -   
  5  -  -   -   -   -  -   -   -                                                                                                C        -   -   #  P  #   -     
  4  -  -   -   -   P  -   -   -                                                                                                D        -   -   -  #  -   -     
  3  -  -   -   -   -  -   -   -               e o exercício pede que fique nesse formato ->        E             -   -   -  -      
  2  -  -   -   -   -  -   -   -                                                                                                F             -   -   -  -      
  1  -  -   -   -   -  -   -   -                                                                                                G                 -   -    
  0  -  -   -   -   -  -   -   -                                                                                               
     0  1  2  3  4  5  6  7

   exemplo com coordenada(4,4)                                                                               exemplo com coordenada(C,4)

 

a matriz que eu fiz ate agora esta recebem os valores em dois números inteiros (x,y) mas o exercício pede que digitemos uma letra seguido de um numero para reserva a vaga (se essa for uma posição segura) e preencher em seu vizinhos com '#' para indicar cadeiras que não podem ser usadas. Então em resumo, o que eu tenho que fazer é 1° receber coordenadas (Letra/numero), 2° modificar a matriz para aparecer no formato que pede, e 3° colocar '#' nas vizinhanças.

 

código até agora:

 

#include<stdio.h>


int ChecarVaga(char sala[8][8], 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;
}



int main(){

  char sala[8][8] = {
    '-','-','-','-','-','-','-','-',
    '-','-','-','-','-','-','-','-',
    '-','-','-','-','-','-','-','-',
    '-','-','-','-','-','-','-','-',
    '-','-','-','-','-','-','-','-',
    '-','-','-','-','-','-','-','-',
    '-','-','-','-','-','-','-','-',
    '-','-','-','-','-','-','-','-',
};


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


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

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

y = 7 - y;
ok = ChecarVaga(sala,x,y);

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

ok = 0;

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

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

  }
}

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



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


  return 0;
}

 

  • Curtir 1
Postado

@Emerson2156547384729849 (que nome de usuário é isso rs), como você dividiu as dúvidas, fica mais tranquilo:

 

1 hora atrás, Emerson2156547384729849 disse:

1° receber coordenadas (Letra/numero)

 

Aqui, só mudar mesmo a sua entrada, e converter de letra para o número que ela representa. Pode ser assim, por exemplo:

 

#include <ctype.h>
...

//scanf("%d,%d", &x, &y);
int ch;
scanf("%c,%d", &ch, &y);
x = toupper(ch) - 'A'; // remove o valor de 'A', ou seja, digitou 'A' fica 0, 'B' 1 e por aí vai.

 

1 hora atrás, Emerson2156547384729849 disse:

2° modificar a matriz para aparecer no formato que pede

 

Também não será complicado, basta usar outro caractere que não esteja usando, por exemplo o espaço mesmo (' '):

 

  char sala[8][8] = {
    '-','-','-','-','-','-','-','-',
    '-','-','-','-','-','-','-','-',
    '-','-','-','-','-','-','-','-',
    '-','-','-','-','-','-','-','-',
    '-','-','-','-','-','-','-','-',
    '-','-','-','-','-','-','-','-',
    '-','-','-','-','-','-','-','-',
    ' ',' ',' ','-','-',' ',' ',' '
  }; // só mudei a última linha, mas a ideia e por aí
  // lembre-se de levar em conta como o ' ' como um lugar que não pode se sentar nas suas funções

 

1 hora atrás, Emerson2156547384729849 disse:

3° colocar '#' nas vizinhanças.

 

Aqui, recomendo montar 2 funções, uma pra sentar e outra pra reservar, algo assim:

 

void sentar(char sala[8][8], int x, int y) {
  if (x >= 0 && x <= 8 && y >= 0 && y <= 8) {
    if (sala[y][x] == '-') {
      // marca a posição desejada e reservar ao redor
      sala[y][x] = 'P';
      reservar(sala, x-1, y);
      reservar(sala, x+1, y);
      reservar(sala, x, y-1);
      reservar(sala, x, y+1);
    }
  }
}

void reservar(char sala[8][8], int x, int y) {
  // se está dentro da sala
  if (x >= 0 && x <= 8 && y >= 0 && y <= 8) {
    // e tem cadeira
    if (sala[y][x] != ' ') {
      // reserva para distanciamento
      sala[y][x] = '#';
    }
  }
}

 

Ficaria também interessante você usar uma função separada só para verificar se está lotado, e essa checarVaga daria pra simplificar bastante.

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