Ir ao conteúdo
  • Cadastre-se

Pascal/Delphi Como não permitir números iguais no programa


Ir à solução Resolvido por Simon Viegas,

Posts recomendados

Boa tarde amigos tudo bem? Estou precisando de ajuda em uma parte de um exercício sobre Pascal que estou fazendo, uma das partes desse exercício pede para eu cadastrar o número do carro, mas tem um porém, não pode haver dois números iguais, e eu estou com muita dificuldade em achar um jeito para fazer o programa exibir uma mensagem falando que o número já foi digitado e  fazer essa mensagem não sair até o usúario digitar um número diferente, pode parecer uma dúvida meio boba, mas estou quebrando a cabeça com isso, se alguém puder me dar uma luz agradeço, o exercício pede mais coisa, mas só preciso de ajuda nisso mesmo, o resto estou conseguindo fazer.

 

exercício: 

 

Uma empresa patrocinadora de corridas deseja ter controle preciso sobre os
participantes e os resultados, a fim de realizar adequadamente o pagamento dos
prêmios. Dessa maneira, precisa cadastrar algumas informações, conforme
apresentado a seguir:


Corrida (número da corrida, data, hora de início, código do carro vencedor)


Carro/Corrida (número da corrida, número do carro participante, hora de chegada)


Carro (número do carro, nome do carro, ano de fabricação)


Crie um programa em Pascal (utilizando registros – records) que realize as seguintes
rotinas:


• Cadastrar os carros, não permitindo dois carros com o mesmo número (deve ser
definido espaço para seis carros);

 

o que eu estou tentando fazer:

program EX1;

type
  registroCorrida = record
    num_corrida: integer;
    data_corrida: string;
    horain_corrida: string;
    codigo_vencedor: integer;
  end;

  registroCarroCorrida = record
    num_corrida: integer;
    num_carro: integer;
    hora_chegada: string;
  end;

  registroCarro = record
    num_carro: integer;
    nome_carro: string;
    ano_fab: integer;
  end;

var
  carros_cadastro: array[1..6] of registroCarro;
  i,cont: integer;

  corrida_cadastro: array[1..3] of registroCorrida;

begin
//cadastrando os carros;

for i:= 1 to 6 do
  begin
  write('Digite o número do ' ,i, 'º carro:  ');
  readln(carros_cadastro[i].num_carro);

  if (carros_cadastro[i].num_carro) = (carros_cadastro[i+1].num_carro)  then 
    begin
    cont:=cont+1;
    
    if cont > 0 then
      begin
      
      while cont <> 0 do
        begin
        writeln('Digite outro numero tonto!');
        end;
      end; 
    end; 

  write('Digite o nome do ', i, 'º carro: ');
  readln(carros_cadastro[i].nome_carro);

  write('Digite o ano de fabricaçao do ', i, 'º carro: ');
  readln(carros_cadastro[i].ano_fab);
  end;

//cadastrando as corridas;
// for i:=1 to 3 do

end.

 

  • Amei 1
Link para o comentário
Compartilhar em outros sites

  • Membro VIP
  • Solução

@Pedroso90, uma forma seria verificar se as posições anteriores ao cadastro atual já contém o número de carro. Uma forma utilizando flag:

 

{$CODEPAGE UTF8} //permitir alguns caracteres especiais em alguns compiladores 
program EX1;

type
  registroCarro = record
    num_carro: integer;
    nome_carro: string;
    ano_fab: integer;
  end;

var
  carros_cadastro: array[1..6] of registroCarro;
  i, j, cont: integer;
  repetido: boolean;

begin
//Cadastrando os carros
for i:= 1 to 6 do
  begin
    repeat
      write  ('Digite o número do ' ,i, 'º carro: ');
      readln(carros_cadastro[i].num_carro);    
      
      //Verifica se o número do carro é repetido
      repetido := FALSE;
      for j:=1 to i-1 do
        begin
        if (carros_cadastro[i].num_carro) = (carros_cadastro[j].num_carro)  then 
          begin
          repetido := TRUE;
          break;
          end;
        end;
       
      if (repetido) then
        writeln('Número de carro já cadastrado. Favor inserir um código novo')
    until not repetido;

  write  ('Digite o nome do ', i, 'º carro: ');
  readln(carros_cadastro[i].nome_carro);
  write  ('Digite o ano de fabricaçao do ', i, 'º carro: ');
  readln(carros_cadastro[i].ano_fab);
  end;  
end.


A flag seria a variável repetido..., ou seja, funcionando como uma "bandeira" que sinaliza algo, no caso que "o número do carro está repetido". O laço de repetição interno ajudando a varrer o vetor e alterando a flag se encontrar uma ocorrência. Posteriormente essa flag é usada para exibir ou não a mensagem e também verificar se vai repetir (o processo de leitura de um número e verificação de existência) ou não...

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

  • Membro VIP
3 horas atrás, Pedroso90 disse:

@Simon Viegas Muito obrigado meu amigo! Eu até tinha pensado nessa ideia de usar uma variável boolean, mas não estava conseguindo encaixar direito, sua ajuda foi muito esclarecedora, me ajudou muito! Obrigado mesmo!

 

Só para reforçar: não é o tipo da variável (boolean) que importa aqui, mas como o conceito envolvido na lógica foi utilizado. Basicamente estaria utilizando o conceito de flag..., ou seja, "alguma bandeira" que vai servir para indicar se algo ocorre ou não.

 

 

  • Obrigado 1
Link para o comentário
Compartilhar em outros sites

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

 

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!