Ir ao conteúdo

Posts recomendados

Postado

Oi, se alguém puder me ajudar, estou fazendo um algoritmo para cadastro em Visualg, meu algoritmo funciona bem, porém estou tentando incrementar ele com vetores para permitir mais de 1 cadastro.. 

Só não entendi o que estou fazendo de errado, na area das variaveis declaradas aparece até certo o cliente[rg] para cada espaço em memória, mas o mesmo nao esta acontecendo com as outras variaveis.

 

x5KKkLD.jpg

Algoritmo "semnome"
tipo
   cadastro_cliente=registro
      nome: caractere
      rg: caractere
      cpf: caractere
      cendereco: caractere
      data_nascimento: caractere
      carteira_hab: caractere
   fimregistro

Var
// Seção de Declarações das variáveis
clientes: vetor [1..10] de cadastro_cliente
codigoC, menu: inteiro
nome, rg, cpf, cendereco, data_nascimento, carteira_hab, x: caractere
inicio
codigoC <- 1
repita
       escreval ("1. Cadastrar Cliente")
       leia (menu)
       escreval ("")
       escolha menu
       caso 1
              se (codigoC <= 10) então
                 repita
                        escreval ("Digite o nome: ")
                        leia (clientes[codigoC].nome)
                        escreval ("Digite o RG: ")
                        leia (clientes[codigoC].rg)
                        escreval ("Digite o CPF: ")
                        leia (clientes[codigoC].cpf)
                        escreval ("Digite o endereço: ")
                        leia (clientes[codigoC].cendereco)
                        escreval ("Digite a data de nascimento: ")
                        leia (clientes[codigoC].data_nascimento)
                        escreval ("Digite a carteira de habilitação: ")
                        leia (clientes[codigoC].carteira_hab)
                        escreval ("")
                        se (codigoC < 1 ) então
                           codigoC <- codigoC + 1
                           escreval ("Gostaria de cadastrar outro cliente? (S/N)")
                           leia (x)
                           escreval ("")
                        senao
                           codigoC <- codigoC + 1
                           x <- "N"
                        fimse
                 ate (x = "N")
              senao
                 escreval ("Operação inválida: não é possível exceder o limite de 10 clientes cadastrados :)")
                 escreval ("")
              fimse
       caso 2
..........

 

  • Curtir 2
  • Membro VIP
Postado

Olá  @Ikkyy.

 

Pelo menos 2 pontos pontos a serem analisados:

 

1) DECLARAÇÃO DE VARIÁVEIS

9 horas atrás, Ikkyy disse:

Var
   clientes: vetor [1..10] de cadastro_cliente
   codigoC, menu: inteiro
   nome, rg, cpf, cendereco, data_nascimento, carteira_hab, x: caractere//[1]

 

[1] Parte dessas variáveis estão declaradas, mas sem uso (com exceção do x). Pois esses dados estão no registro, ou seja, você está declarando um vetor de registros com determinados dados, e está declarando esses mesmos dados em forma de variável. Resumindo: apague essa linha (deixando o x, é claro).

 

9 horas atrás, Ikkyy disse:

Só não entendi o que estou fazendo de errado, na area das variaveis declaradas aparece até certo o cliente[rg] para cada espaço em memória, mas o mesmo nao esta acontecendo com as outras variaveis.

Não aparece porque você não está utilizando elas... o código está utilizando o vetor de registro. Como sugerido, essas variáveis não deveriam existir. Veja que você usa leia (clientes[codigoC].nome), e essas variáveis extras que você declarou seriam acessadas, por exemplo, assim: leia (nome). Entende? essa variável nome não precisa existir, pois você já tem o registro, e nem muito menos está utilizando elas de alguma outra forma.

 

RESUMINDO: ao declarar um registro, não é necessário declarar as mesmas variáveis do registro no var.

 

 

 

 

2) ESTRUTURA DE SELEÇÃO

 

9 horas atrás, Ikkyy disse:

            se (codigoC < 1 ) ENTÃO //[2]
               codigoC <- codigoC + 1
               escreval ("Gostaria de cadastrar outro cliente? (S/N)")
               leia (x)
               escreval ("")

 

[2] Se codigoC começa com 1, esse se sempre resultará em falso (false), logo não se faz necessário ter um se (será uma espécie contradição. Que é a negação da tautologia, logo não necessitando de verificação, pois o resultado sempre será igual  . ). Resumidamente: ou a condição está errada; ou simplesmente apague toda essa estrutura, já que nunca será utilizada. (obs.: creio eu que seria algo como <=10, ou algo do tipo).

 

 

 

***

 

No aguardo.

  • Curtir 1
Postado

Olá @Simon Viegas,

 

Então, como eu disse meu código estava funcionando bem quando era apenas para um cadastro, tem uma estrutura abaixo do que eu coloquei ali, só tentei copiar aqui onde estou com mais dificuldade de entender o uso das matrizes/vetores.

 

Algoritmo "semnome"
tipo
   cadastro_cliente=registro
      nome: caractere
      rg: caractere
      cpf: caractere
      cendereco: caractere
      data_nascimento: caractere
      carteira_hab: caractere
   fimregistro

Var
clientes: vetor [1..10] de cadastro_cliente
codigoC, menu: inteiro
x: caractere
inicio
codigoC <- 1
repita
       escreval ("1. Cadastrar Cliente")
       leia (menu)
       escreval ("")
       escolha menu
       caso 1
              se (codigoC <= 10) então
                 repita
                        escreval ("Digite o nome: ")
                        leia (clientes[codigoC].nome)
                        escreval ("Digite o RG: ")
                        leia (clientes[codigoC].rg)
                        escreval ("Digite o CPF: ")
                        leia (clientes[codigoC].cpf)
                        escreval ("Digite o endereço: ")
                        leia (clientes[codigoC].cendereco)
                        escreval ("Digite a data de nascimento: ")
                        leia (clientes[codigoC].data_nascimento)
                        escreval ("Digite a carteira de habilitação: ")
                        leia (clientes[codigoC].carteira_hab)
                        escreval ("")
                        se (codigoC < 10 ) então
                           codigoC <- codigoC + 1
                           escreval ("Gostaria de cadastrar outro cliente? (S/N)")
                           leia (x)
                           escreval ("")
                        senao
                           codigoC <- codigoC + 1
                           x <- "N"
                        fimse
                 ate (x = "N")
              senao
                 escreval ("Operação inválida: não é possível exceder o limite de 10 clientes
cadastrados :)")
                 escreval ("")
              fimse

Se eu entendi bem, o problema estava na declaração das varíaveis, mas fazendo o sugerido por voce, limpando as variaveis declaradas sem necessidade, meu problema continua o mesmo no resultado.

 

Acredito estar fazendo errado aqui:
clientes: vetor [1..10] de cadastro_cliente
 

Vi um exemplo onde é declarado com vetor cada variavel (rg, cpf, etc)

Obrigado pela atenção até aqui.

 

sobre o <= 10, copiei errado eu acho, pois estava certo no original xD
é para respeitar o limite de 10 Cadastros.

  • Membro VIP
Postado

Olá.

 

1 hora atrás, Ikkyy disse:

Se eu entendi bem, o problema estava na declaração das varíaveis, mas fazendo o sugerido por voce, limpando as variaveis declaradas sem necessidade, meu problema continua o mesmo no resultado.

 

Acredito estar fazendo errado aqui:
clientes: vetor [1..10] de cadastro_cliente

 

Que  problema? se for em relação à "Área de variáveis...", ignore, creio que não funciona bem com registros. Tente cadastrar uns dados e depois imprimir eles.

 

Se for outra coisa, tente especificar melhor e/ou poste o código completo.

 

 

 

 

1 hora atrás, Ikkyy disse:

Acredito estar fazendo errado aqui:
clientes: vetor [1..10] de cadastro_cliente
 

Vi um exemplo onde é declarado com vetor cada variavel (rg, cpf, etc)

Se puder demonstrar o exemplo ficaria melhor... caso estiver se referindo a necessidade de declarar o itens do registro também no var, é notável que no mínimo iria aparentar uma redundância... se fosse necessário, "internamente" o compilador deveria fazer isso, já que  seria uma processo bem robótico e fixo (tudo que está no registro, precisaria está no var). Mas garanto que no seu caso não é de fato necessário declarar novas variáveis. Ao declarar aquelas variáveis, seria como está criando outras variáveis quaisquer... apenas elas tem a coincidência de ter a mesma "nomenclatura" (nome e nome, rg e rg etc)... isso é possível pois estão em escopos diferentes, ou seja, algumas linguagens aceitam (o que é coerente).

 

Para exemplificar, poder existir algo assim:

tipo
   cadastro_cliente=registro
      nome: caractere
      rg: caractere
      cpf: caractere
      cendereco: caractere
      data_nascimento: caractere
      carteira_hab: caractere
   fimregistro

   cadastro_funcionario=registro
      nome   : caractere
      cpf    : caractere
      codigo : caractere
   fimregistro

Percebe que existe nome e cpf  nos 2 registros. Não tem problema... são estruturas distintas em escopos diferentes... se não me engano isso seria uma espécie "polimorfismo" (não lembro se é isso mesmo, ou tem outro nome).

 

Não há a necessidade de "exclusividade", pois cada um tem um modo de acesso distinto. Ex.:

clientes[1].nome:="João"
funcionarios[1].nome:="Maria"

Já se tivesse um nome no var, teria também outro acesso, ex.::

 

clientes[1].nome:="João"
funcionarios[1].nome:="Maria"
nome:="Pé de Feijão"

São 3 escopos distintos...

 

 

No aguardo.

  • Obrigado 1
Postado

@Simon Viegas é de fato a "Área de variáveis..." não funciona, estava quebrando a cabeça nisso, tentando olhar por lá.

 

Fiz um teste conforme voce sugeriu, criei um menu apenas para exibir os dados dos clientes[1 ao 4] pra teste e apareceu corretamente os dados.

 

Muito obrigado pela sua ajuda, vou tentar ficar mais tempo aqui no fórum para tentar ajudar se for algo que eu já saiba e praticar também.

  • Curtir 1
  • Membro VIP
Postado

Aproveitando:

 

12 horas atrás, Ikkyy disse:

se (codigoC < 10 ) então
   codigoC <- codigoC + 1
   escreval ("Gostaria de cadastrar outro cliente? (S/N)")
   leia (x)
   escreval ("")
senao
   codigoC <- codigoC + 1
   x <- "N"
fimse

Acho que é <10 mesmo, mas no senão não tem essa incrementação no codigoC, ou é necessário reorganizar a estrutura do código... veja, se/senão é algo dicotômico, ou seja, se não for uma coisa, necessariamente será a outra. E nas duas possibilidades, você tem a mesma instrução... logo, a instrução ficou repetida (já que sempre será executada). Daí basta colocar uma vez antes do se OU depois do fimse (e retirando os que já tem, é claro).

 

Mas sugiro o seguinte: poderia começar o codigoC com 0, e logo após entrar no case 1, incrementaria em 1. Faz os pequenos ajustes necessários.

 

 

No aguardo.

  • Curtir 1
Postado

Coloquei o código no começo do código, ou seja, só vai incrementar quando entrar no registro do cliente, já que ele foi incrementado no começo, não precisa ser feito na saida em nenhum dos casos.

 

Era isso?

 

edit; codigoC <- 0 (começando do 0)

              se (codigoC <= 10) então
                 repita
                        codigoC <- codigoC + 1
                        escreval ("Digite o nome: ")
                        leia (clientes[codigoC].nome)
                        escreval ("Digite o RG: ")
                        leia (clientes[codigoC].rg)
                        escreval ("Digite o CPF: ")
                        leia (clientes[codigoC].cpf)
                        escreval ("Digite o endereço: ")
                        leia (clientes[codigoC].cendereco)
                        escreval ("Digite a data de nascimento: ")
                        leia (clientes[codigoC].data_nascimento)
                        escreval ("Digite a carteira de habilitação: ")
                        leia (clientes[codigoC].carteira_hab)
                        escreval ("")
                        se (codigoC < 10 ) então
                           escreval ("Gostaria de cadastrar outro cliente? (S/N)")
                           leia (x)
                           escreval ("")
                        senao
                            x <- "N"
                             fimse
                 ate (x = "N")

 

 

  • Curtir 1
Postado

Surgiu outra dúvida se puder me ajudar @Simon Viegas

Seguindo os mesmos moldes do outro

 

      caso 3
         se (codClass <= 10) então
            repita
               escreval ("Digite o nome da classificação: ")
               leia (classificacao[codClass].nome)
               escreval ("Digite o Valor: ")
               leia (classificacao[codClass].valor)
               escreval ("Classificação Cadastrada com Sucesso!")
               escreval ("")
               escreval ("Código do Classificação:", codClass)
               escreval ("Nome:", classificacao[codClass].nome)
               escreval ("Valor: R$ ", classificacao[codClass].valor)
               escreval ("")
               se (codAuto < 10 ) então
                  escreval ("Gostaria de cadastrar outra Classificação? (S/N)")
                  leia (x)
                  escreval ("")
               senao
                  x <- "N"
               fimse
            ate (x = "N")
         senao
            escreval ("Operação inválida: não é possível exceder o limite de 10 automóveis cadastrados :)")
            escreval ("")
         fimse
tipo
   cadastro_classificacoes=registro
      nome: caractere
      valor: inteiro
   fimregistro

Var
   classificacoes: vetor [1..10] de cadastro_classificacoes

 

Não estou conseguindo prefinir valores para os vetores 1 ao 3 desse registro.

 

classificacoes[1,1] <- "Básico"

classificacoes[1,2] <- 50

 

Acho que consegui, durante eu redigia a duvida.. 

  • Membro VIP
Postado

Olá

 

Esse vetor é do mesmo programa?

 

17 horas atrás, Ikkyy disse:

tipo
   cadastro_classificacoes=registro
      nome: caractere
      valor: inteiro
   fimregistro

Var
   classificacoes: vetor [1..10] de cadastro_classificacoes

 

 

Se for, não precisa do nome. Seria apenas o valor. A relação entre um vetor e outro será a posição. obs.: Caso a posição não fosse possível, poderia associar pelo CPF, pois este é único. Diferente do nome.

 

Se possível, poste o código completo para analisarmos.

 

 

No aguardo.

Postado

@Simon Viegas estou postando parcial, só na minha duvida mesmo, o trabalho vou entregar hoje e não queria que aparecesse outro igual e o professor anular por plágio ou algo assim.
 

  • Curtir 1
  • Membro VIP
Postado
5 minutos atrás, Ikkyy disse:

@Simon Viegas estou postando parcial, só na minha duvida mesmo, o trabalho vou entregar hoje e não queria que aparecesse outro igual e o professor anular por plágio ou algo assim.
 

Beleza.

 

 

1) ACESSO AOS DADOS

22 horas atrás, Ikkyy disse:

Não estou conseguindo prefinir valores para os vetores 1 ao 3 desse registro.

 

classificacoes[1.1] <- "Básico"

classificacoes[1.2] <- 50

 

Para acessar um dado, é da mesma forma que o outro vetor, algo como:

escreval ("Valor:", cadastro_classificacoes[codClass].valor)

A ideia é que "posição igual = mesmo usuário".

 

Lembrando que não precisa do nome, pois já está no outro vetor.

Postado

Eu ia fazer esquema pra digitar o cpf do cliente, ele buscar no registro e voltar com os dados do cliente, cruzando as informações de cada registro, mas já fiz tanto código pra esse trabalho e tenho outro pra finalizar.. tá corrido, mas tá super legal  :) aprendendo horrores.

 

Só falta essa parte que nao faz sentido o erro pra mim..


 

essa parte

 locacao[codLoca].valor_final2 <- locacao[codLoca]valor_final + locacao[codLoca]valor3

 

As0aZOp.jpg

 

  • Membro VIP
Postado
38 minutos atrás, Ikkyy disse:

locacao[codLoca].valor_final2 <- locacao[codLoca]valor_final + locacao[codLoca]valor3

Esse sintaxe usada não é válida.

 

Para acessar um campo do registro, usam-se ".". Algo como:

locacao[codLoca].valor_final2 <- locacao[codLoca].valor_final + locacao[codLoca].valor3

 

  • Obrigado 1
  • Membro VIP
Postado

ADENDO:

 

Olá @Ikkyy.

1 hora atrás, Ikkyy disse:

Eu ia fazer esquema pra digitar o cpf do cliente, ele buscar no registro e voltar com os dados do cliente, cruzando as informações de cada registro, mas já fiz tanto código pra esse trabalho e tenho outro pra finalizar.. tá corrido, mas tá super legal  :) aprendendo horrores.

 

A ideia é válida.

 

Para exemplificar:

tipo
   //tipo de dados para locação
   t_locacao = registro
      posCliente   :caractere //posição do cadastro do cliente no vetor "vetCliente"
      posAutomovel :caractere //posição do cadastro do cliente no vetor "vetAutomovel"
      diasAluguel  :caractere //quantidade de dias que o carro foi alugado
      dataDevolucao:caractere //data da devolução do carro para concessionária
   fimregistro

 

Ai, uma função localizaria a posição do cliente no vetor cliente pelo CPF, e a uma função localizaria a posição do automóvel no vetor automovel pela Placa. Algo do tipo:

posCliente:=buscaCliente(CPF)
se posCliente>0 faca
   vetLocacao[posLocacao].posCliente:=posCliente
posAutomovel:=buscaAutomovel(Placa)
se posAutomovel>0 faca
   vetLocacao[posLocacao].posAutomovel:=posAutomovel

 

Na hora que precisar dos dados do Cliente ou Automóvel, seria algo assim:

 

Se for usar um procedimento, algo como:

exibirCliente(vetLocacao[posLocacao].posCliente)

 


Ou acessando o vetor diretamente:

escreval ("Nome :",vetCliente[vetLocacao[posLocacao].posCliente].nome)
escreval ("RG   :",vetCliente[vetLocacao[posLocacao].posCliente].RG)
...

 

Idem para automóvel.

 

 

Ai depende como quer implementar... como os dados não são salvos, poderia simplesmente ter um vetor com registro apenas dos dados principais.

 

 

Veja ai... qualquer coisa é só postar.

 

No aguardo.

  • 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!