Ir para conteúdo
Fórum Script Brasil
  • 0

(Resolvido) Reservar Sequencia de numeros


Thiago de Paula Beserra

Pergunta

Olá pessoal.

Bom, estou com um projeto onde é dado uma matriz 3x2, aonde inicializada ela contem valor 0.

O programa deve perguntar para o usuario quantas colunas ele deseja reservar, porem quando reservado o valor é 1. Deve-se atentar que o maximo de reservas é 3, pois a matriz contem no maximo 3 colunas. Outra atencao é que a reserva deve ser sequencial.

EX: reservar 2 colunas:

Coluna 1 / Linha 1: 1;

Coluna 2 / Linha 1: 1;

As reservas não podem ser aleatórios, devem ser sequencial.

Eu tentei desenvolver algo aqui, porém estou tendo problemas nos resultados.

Ex: o usuario quer 2 reservas. O programa mostra os resultados. Mas o problema é que quando ele reserva 3 o resultado esta sendo o mesmo.

Estou kebrando a mente nisto. ta quase amanhecendo e eu aki..hehe

Segue o código:

#include <stdio.h>
#include <conio.h>

main()
{
    int m[3][2] = {0,0,0,0,0,0}, r;
    
    printf("Quantidade de Reservas: ");
    scanf("%d", &r);
    
    if (r == 2)
    {
        for (int i = 0; i <=1; i++)
            for (int j = 0; i < 2; i++)
            {
                if (m[i][i] == 0 && m[i+1][j] == 0)
                {
                    m[i][j] = 1;
                    m[i+1][j] = 1;
                    break;   
                }   
            }   
    }
    else
        if (r == 3)
        {
            for (int i = 0; i < 1; i++)
                for (int j = 0; j < 2; j++)
                {
                    if (m[i][j] == 0 && m[i+1][j] == 0 && m[i+2][j] == 0)
                    {
                        m[i][j] = 1;
                        m[i+1][j] = 1;
                        m[i+2][j] = 1;   
                        break;
                    }   
                }   
        }
       
    for (int i = 0; i < 3; i++)
        for (int j = 0; j < 2; j++)
            printf("\nColuna %d / Linha %d = %d", i, j, m[i][j]);
            
    getch();    
}

Se alguém souber aonde está o erro, peço ajuda dos amigos.

Desde já agradeço XD

Editado por Jonathan Queiroz
Link para o comentário
Compartilhar em outros sites

5 respostass a esta questão

Posts Recomendados

  • 0

Olá Thiago de Paula,

Eu resolvi utilizando um outra lógica. No lugar dos 'if's, coloquei um for. Quando estudei matriz, aprendi que o primeiro número era a linha (l) e o segundo, coluna ©, portanto, no exemplo utilizei o modelo m[l][c], com 'l' e 'c' declarado no início.

Ficou assim:

#include <stdio.h>
#include <conio.h>

void main()
{
  int m[2][3] = {0,0,0,0,0,0}, r,l,c;
  printf("Quantidade de Reservas: ");
  scanf("%d", &r);
  for(l=0;l<2;l++)
  {
    for(c=0;c<r;c++)
    {
      m[l][c] = 1;
    }
  }
  for (l=0; l<2; l++)
  for (c=0; c<3;c++)
    printf("\nLinha %d / Coluna %d = %d", l+1, c+1, m[l][c]);
  printf("\n\n\nOutra forma de mostrar:");
  for (l=0;l<2;l++)
  {
    printf("\n |");
    for (c=0;c<3;c++)
    printf(" %d |", m[l][c]);
  }
}

Era isso mesmo que você estava tentando desenvolver?

Abraço,

Link para o comentário
Compartilhar em outros sites

  • 0
Olá Thiago de Paula,

Eu resolvi utilizando um outra lógica. No lugar dos 'if's, coloquei um for. Quando estudei matriz, aprendi que o primeiro número era a linha (l) e o segundo, coluna ©, portanto, no exemplo utilizei o modelo m[l][c], com 'l' e 'c' declarado no início.

Ficou assim:

#include <stdio.h>
#include <conio.h>

void main()
{
  int m[2][3] = {0,0,0,0,0,0}, r,l,c;
  printf("Quantidade de Reservas: ");
  scanf("%d", &r);
  for(l=0;l<2;l++)
  {
    for(c=0;c<r;c++)
    {
      m[l][c] = 1;
    }
  }
  for (l=0; l<2; l++)
  for (c=0; c<3;c++)
    printf("\nLinha %d / Coluna %d = %d", l+1, c+1, m[l][c]);
  printf("\n\n\nOutra forma de mostrar:");
  for (l=0;l<2;l++)
  {
    printf("\n |");
    for (c=0;c<3;c++)
    printf(" %d |", m[l][c]);
  }
}

Era isso mesmo que você estava tentando desenvolver?

Abraço,

E ai cara..

Na verdade, o que é proposto pra mim fazer é o seguinte, se eu coloco 2 reservas, deve haver 2 espacos em uma coluna com valores 0's consecutivos. EX: 1001: Neste caso, teria como eu reservar 2 casas consecutivas de 1, uma seguida da outra.

Outro Exemplo: reservar 3: no caso uma das colunas teria que ter algo assim: 0001, ou 1000. Se por exemplo, fosse 1010, não teria como resevar 3 cadas consecutivas, pois não tem tres 0's consecutivos.

É tipo uma reserva de poltrona de um cinema cara, aonde uma pessoa leva 2 convidados e deseja sentar do lado delas, não separados.

e no exemplinho que voce fez cara, quando eu digito 1, a primeira coluna é toda preenchida, e na verdade porque tem q preecher é a coluna.

Mas valeu cara, toda ajuda é bem vinda.

Abraço

Editado por Thiago de Paula Beserra
Link para o comentário
Compartilhar em outros sites

  • 0

Thiago,

Pelo que me disse, entendi que seu código deve ser parecido com o que fiz abaixo:

#include <stdio.h>
#include <conio.h>

void main()
{
  int m[2][3] = {0,0,0,0,0,0}, r,l,c,cont,pos;
  printf("Situaçao Atual:");
  for (l=0;l<2;l++)
  {
     printf("\n |");
     for (c=0;c<3;c++)
        printf(" %d |", m[l][c]);
  }
  printf("\n\nQuantidade de Reservas: ");
  do
  {
     scanf("%d", &r);
     cont = 0;
     pos = 0;
     for(c=0;c<3;c++)
     {
        if(m[0][c]==0)
        {
          cont++; // contador lugares vagos incrementado
          if(cont==r) // se já for igual a qtd de reserva, sai do while
             break;
        }
        if(m[0][c]==1)
        {
          pos=c+1; // posiçao que o proximo for deve comecar a reservar
          cont=0; // achou 1 lugar ocupado, zera a contagem
        }
     }
     if(cont<r)
     {
        printf("não e possivel reservar %d.\n Digite outro numero: ", r);
        r=0; // força a continuar no while.
     }
  }
  while (r<=0 || r>3);
  clrscr();
  for(c=pos;c<r+pos;c++)
  {
     m[0][c] = 1;
  }
  for (l=0; l<2; l++)
     for (c=0; c<3;c++)
        printf("\nLinha %d / Coluna %d = %d", l+1, c+1, m[l][c]);
  printf("\n\n\n Situaçao Atual");
  for (l=0;l<2;l++)
  {
     printf("\n |");
     for (c=0;c<3;c++)
        printf(" %d |", m[l][c]);
  }
}

Mude os valores iniciais da matriz e faça alguns testes. Fiz como se estivesse analisando apenas a primeira linha, não sei da sua real necessidade, mas também é só adaptar.

Era isso mesmo?

Abraço,

Editado por Bruno Péterson
Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152k
    • Posts
      651,8k
×
×
  • Criar Novo...