Ir ao conteúdo
  • Cadastre-se

VisualG Algoritmo em pseudocódigo!! resolver exercicio


Posts recomendados

Alguém pode me ajudar, consegui fazer apenas procedimentos e não consigo colocar funções. também não consegui controlar o código dos produtos

 

Você precisa desenvolver seu algoritmo em pseudocódigo e atender aos seguintes critérios:
1 – Estrutura de Registro para armazenar 100 aparelhos celulares
2 – Um menu que apresente os seguintes módulos (procedimentos / funções)
2.1 – Cadastrar Produtos
2.2 – Listar todos (Aqui liste 3 características armazenadas)
2.3 - Listar 1 produto específico (Aqui liste 3 características armazenadas)
 
Considere as seguintes regras: 
1 - Controlar o cadastro para que não haja códigos idênticos.
2 - Informar ao usuário se produto foi cadastro ou não.
3 - Informar ao usuário que o produto não foi encontrado caso ocorra.

Dicas para realizar a atividade Mapa:
1. Durante as aulas o professor irá fornecer dicas que podem ser utilizadas para a confecção das suas atividades, sendo assim, é de suma importância participar da aula ao vivo, ou assisti-las posteriormente.
2. Assistir o vídeo explicativo da atividade Mapa.
3. Não utilizar software para testar o algoritmo neste momento.
 

Link para o comentário
Compartilhar em outros sites

Como pode ver em outros tópicos é contra as regras do fórum resolver exercícios. Podemos ajudar com dicas e esclarecendo dúvidas. A primeira dica é: não tente resolver tudo de uma vez. Resolva item a item, depois que o código do primeiro item estiver funcionando passe para o próximo e assim até o final.

Link para o comentário
Compartilhar em outros sites

Em 28/05/2021 às 14:26, Simon Viegas disse:

@Igornascimento, poste seu código completo e em qual parte está com dúvidas.

 

Este é meu código funcionando, coloquei a função "SE" para controlar a repetição de código só que dá erro, e tenho dúvida de onde adiciona-la sem que dê erro. esse código eu fiz com apenas vetor, depois que prestei atenção que no enunciado pede que faça uma estrutura de registro. agora estou fazendo outro código com estrutura de registro.

 

algoritmo "ESTOQUE"
var
   descricoes  :vetor [1..1000] de caractere
   produto     :vetor [1..1000] de caractere
   codigo      :vetor [1..1000] de inteiro
   codItem,codpesq,j,acresc  :inteiro
   opc :caractere
   fimcad   :real
   
procedimento cadastro_item
inicio

   codItem <- codItem + 1
   escreval("****  Cadastro de produto  ****")
   escreval()
   escreva ("Codigo do Item: ")
   leia(codigo[coditem])
   escreva ("Produto       : ")
   leia(produto[codItem])
   escreva ("Descrição     : ")
   leia(descricoes[codItem])
   escreval()
   escreval("--------- Item Cadastrado ----------")
   escreval()
   escreval ("Código do Item: ",codigo[coditem])
   escreval ("Produto:        ",produto[coditem])
   escreval ("Descrição:      ",descricoes[coditem])
   escreval("---------------------------------------")
   escreval ("Tecle ENTER para retornar ao menu.")
   leia(opc)
fimProcedimento

procedimento listar_produtos()
var
   i :inteiro
inicio
   escreval("-------- LISTA DE PRODUTOS CADASTRADOS ----------- ")
   para i de 1 ate codItem faca
      escreval()
      escreval("Quant. Cadastrada: ",i)
      escreval("Código:    " ,codigo[i])
      escreval("Produto:    " ,produto[i])
      escreval("Descrição:  " ,descricoes[i])
      escreval("--------------------------------------------------")
   fimpara
   escreva ("Pressione ENTER para voltar ao menu")
   leia(opc)
fimProcedimento

procedimento pesquisar()
var
   i:inteiro
inicio
   escreval ("Digite o código do item que deseja pesquisar(ex: 57): ")
   leia (codpesq)
   se (codpesq = codigo[coditem]) então
      escreval("---------------------------------------")
      escreval("Código         : ",codigo[coditem])
      escreval("Produto        : ",produto[coditem])
      escreval("Descrições     : ",descricoes[coditem])
      escreval("---------------------------------------")
      escreval ("Pressione ENTER para voltar ao menu")
      leia (opc)
    senao
      se (codpesq <> codigo[coditem]) então
         escreval ("Este código ainda não foi cadastrado")
         escreval("Pressione ENTER para voltar ao menu")
         leia (opc)
      fimse
   fimse
fimprocedimento

procedimento menu()
inicio
   repita
      limpaTela
      escreval("    1 - Cadastro de Item       ")
      escreval("    2 - Pesquisar Produto      ")
      escreval("    3 - Sair                   ")
      escreval()
      escreval("    0 - Exibir Estoque     ")
      escreval()
      escreval("Você Cadastrou",codItem," Produtos")
      escreval("---------------------------------------")
      leia(opc)
      escolha (opc)
      caso "1"
         limpaTela
         cadastro_item()
      caso "2"
         limpaTela
         pesquisar()
      caso "0"
         limpaTela
         listar_produtos()

      fimEscolha
   ate opc="3"
fimProcedimento

inicio
   codItem <- 0
   menu()
FIMALGORITMO

 

Link para o comentário
Compartilhar em outros sites

  • Membro VIP

@Igornascimento, sobre a pesquisa:

 

Trecho do seu código:

 

3 horas atrás, Igornascimento disse:

procedimento pesquisar()
var
   i:inteiro
inicio
   escreval ("Digite o código do item que deseja pesquisar(ex: 57): ")
   leia (codpesq)
   se (codpesq = codigo[coditem]) entao
      escreval("---------------------------------------")
      escreval("Código         : ",codigo[coditem])
      escreval("Produto        : ",produto[coditem])
      escreval("Descrições     : ",descricoes[coditem])
      escreval("---------------------------------------")
      escreval ("Pressione ENTER para voltar ao menu")
      leia (opc)
   senao
      se (codpesq <> codigo[coditem]) entao
         escreval ("Este código ainda não foi cadastrado")
         escreval("Pressione ENTER para voltar ao menu")
         leia (opc)
      fimse
   fimse
fimprocedimento

 

 

Nesse se você está apenas comparando a pesquisa com o codItem atual, ou seja: provavelmente apontando para o último cadastro.

 

O que você precisaria fazer seria algo como.

 

- ler o código da pesquisa;

- e, para cada código ("i indo de 1 até codItem), efetuar a comparação.

 

Daí vai ajustando... sugiro utilizar o comando enquanto.

4 horas atrás, Igornascimento disse:

Esse código eu fiz com apenas vetor, depois que prestei atenção que no enunciado pede que faça uma estrutura de registro. agora estou fazendo outro código com estrutura de registro.

 

Está conseguindo fazer com registros? Qualquer dúvida é só postar.

 

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

  • Membro VIP
Em 01/06/2021 às 09:06, Igornascimento disse:

Oi Simon Viegas, mas esse é o procedimento pesquisar, o que eu falei que não consigo, é ter o controle para não repetir código do produto.

pra quando for cadastrar um novo produto, o código não seja igual a outro produto cadastrado

 

 

O pesquisar pode ser análogo ao listar...  veja:

 

Em 31/05/2021 às 11:43, Igornascimento disse:

procedimento listar_produtos()
var
   i :inteiro
inicio
   escreval("-------- LISTA DE PRODUTOS CADASTRADOS ----------- ")
   para i de 1 ate codItem faca
      escreval()
      escreval("Quant. Cadastrada: ",i)
      escreval("Código:    " ,codigo[i])
      escreval("Produto:    " ,produto[i])
      escreval("Descrição:  " ,descricoes[i])
      escreval("--------------------------------------------------")
   fimpara
   escreva ("Pressione ENTER para voltar ao menu")
   leia(opc)
fimProcedimento

 

A diferença que em vez de listar todos, você só vai listar aquele que onde o código da pesquisa for igual ao código do produto... onde estaria o código do produto?

 

Resposta:

Spoiler

em:


codigo[i]

 

É ou não é?

 

Para resolver:

Spoiler

Coloque um se dentro do para, verificando se os valores são iguais.

 

 

No aguardo.

 

Link para o comentário
Compartilhar em outros sites

Você não está entendendo o que eu estou tentando explicar, todo o meu algoritmo funciona. Único problema é que eu não consigo ter o controle de ter código de produtos repetido e no enunciado do exercício pede que tenha controle de códigos para que não tenha códigos repetidos.

 

Também não estou conseguindo fazer esse código com estrutura de registro e função.

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

  • Membro VIP
18 minutos atrás, Igornascimento disse:

Você não está entendendo o que eu estou tentando explicar, todo o meu algoritmo funciona.

 

Não, creio que o pesquisar também não funciona... tanto que até achei estava se referindo a ele...

 

 

 

21 minutos atrás, Igornascimento disse:

eu não consigo ter o controle de ter código de produtos repetido e no enunciado do exercício pede que tenha controle de códigos para que não tenha códigos repetidos.

 

Sim... entendi agora.

 

Você poderia fazer a verificação logo após ler o código lá no cadastro... a lógica para verificar se tem ou não um código cadastro seria análogo ao de pesquisar... a diferença é que, se encontrar, em vez de listar o dados no produto na tela, você poderia solicitar que ele insira outro código. Senão encontrar, não faz nada.

 

Resumindo:

- primeiro corrija o pesquisar.

- utilize, praticamente, a mesma lógica para verificar se já existe um código cadastrado.

 

Link para o comentário
Compartilhar em outros sites

Oi simon, estou sem saber o que fazer já, não entendi direito a questão da função e não consigo adicionar ela a este código, não consigo colocar controle de código digitado pelo usuário e o procedimento pesquisar só está lendo o ultimo código adicionado, o resto está funcionando certinho. 

algoritmo "AtividadeMapa"
tipo
   produto = registro
      codigo: inteiro
      item:caractere
      descricao:caractere
   fimregistro
procedimento cad_produtos()
var
   i:inteiro
inicio
   coditem <- coditem + 1
   escreval("****  Cadastro de produto  ****")
   escreval()
   escreva ("Codigo do Item: ")
   leia(cadprod.codigo[coditem])
   escreva ("Item       : ")
   leia(cadprod.item[coditem])
   escreva ("Descrição     : ")
   leia(cadprod.descricao[coditem])
   limpatela
   escreval()
   escreval("--------- Item Cadastrado ----------")
   escreval()
   escreval ("Código do Item: ",cadprod.codigo[coditem])
   escreval ("Item:        ",cadprod.item[coditem])
   escreval ("Descrição:      ",cadprod.descricao[coditem])
   escreval("---------------------------------------")
   escreval ("Tecle ENTER para retornar ao menu.")
   leia(opc)
fimProcedimento

procedimento listar_produtos()
var
   i: inteiro
inicio
   escreval("-------- LISTA DE PRODUTOS CADASTRADOS ----------- ")
   para i de 1 ate coditem faca
      escreval()
      escreval("Código:    " ,cadprod.codigo[i])
      escreval("Item:    " ,cadprod.item[i])
      escreval("Descrição:  " ,cadprod.descricao[i])
      escreval("--------------------------------------------------")
   fimpara
   escreva ("Pressione ENTER para voltar ao menu")
   leia(opc)
fimProcedimento

procedimento pesquisar_item
var
   i: inteiro
inicio
   escreval ("Digite o Código do Item que deseja pesquisar(ex: 91): ")
   leia (icod)
   se (icod = cadprod.codigo[coditem]) entao
      escreval("---------------------------------------")
      escreval("Código         : ",cadprod.codigo[coditem])
      escreval("Produto        : ",cadprod.item[coditem])
      escreval("Descrições     : ",cadprod.descricao[coditem])
      escreval("---------------------------------------")
      escreval ("Pressione ENTER para voltar ao menu")
      leia (opc)
   senao
      se (icod <> cadprod.codigo[coditem]) entao
         escreval ("Este código ainda não foi cadastrado")
         escreval ()
         escreval("Pressione ENTER para voltar ao menu")
         leia (opc)
      fimse
   fimse
fimprocedimento
var
   cadprod: vetor [1..100] de produto
   i:inteiro
   opc: caractere
   icod,coditem: inteiro
procedimento menu()
inicio
   repita
      limpaTela
      escreval("    1 - Cadastro de Item       ")
      escreval("    2 - Pesquisar Produto      ")
      escreval("    3 - Listar todos os Produtos   ")
      escreval()
      escreval("    0 - Sair     ")
      escreval()
      leia(opc)
      escolha (opc)
      caso "1"
         limpaTela
         cad_produtos()
      caso "2"
         limpaTela
         pesquisar_item()
      caso "3"
         limpaTela
         listar_produtos()

      fimEscolha
   ate opc="0"
fimProcedimento
inicio
   coditem <- 0
   menu()
fimalgoritmo

 

Link para o comentário
Compartilhar em outros sites

  • Membro VIP
2 horas atrás, Igornascimento disse:

procedimento pesquisar só está lendo o ultimo código adicionado

Sim. Eu comentei isso... veja lá na postagem 6#.

 

A pesquisa seria meio que análoga ao listar, só que só "listaria" o que o código fosse igual...

 

Para tentar ajudar, poderia ser algo como:

 

procedimento pesquisar_item
var
   i: inteiro
   cod: inteiro
inicio
   escreval("Digite o Código do Item que deseja pesquisar (ex: 91): ")
   leia(cod)

   para i de 1 ate codItem faca
      se (cod = cadprod.codigo[i]) entao
         escreval("---------------------------------------")
         escreval("Código         : ",cadprod.codigo[i])
         escreval("Produto        : ",cadprod.item[i])
         escreval("Descrições     : ",cadprod.descricao[i])
         escreval("---------------------------------------")
         escreval ("Pressione ENTER para voltar ao menu")
         leia(opc)
      fimse
   fimPara
fimProcedimento

 

Daí você vai testando e refinando...

 

 

 

Sobre:

3 horas atrás, Igornascimento disse:

não entendi direito a questão da função

 

Você fala em relação a diferença de função e procedimento? A resposta seria: são praticamente a mesma coisa! Uma função nada mais seria que um procedimento que ao mesmo tempo retorna um valor nela mesma...

 

Como assim?

 

O leia() é um procedimento, pois ela "faz algo e não retorna nada nela mesma"... Não dá para fazer algo como x = leia(). Sacou?

Já um raizQ() da vida é uma função, pois ela "faz algo e ao mesmo tempo retorna algo nela mesma". Exemplo: x = raizQ(9). Observe que a função meio que seria um procedimento e uma variável a mesmo tempo... só isso. Uma função é um procedimento que tem retorno nela mesma...

 

Para exemplificar e já tentando ajudar também, poderia fazer algo como:

 

funcao buscaPosicaoItem(cod: inteiro): inteiro
var
   i: inteiro
   resultado: inteiro
inicio

   resultado <- -1
   para i de 1 ate codItem faca
      se (cod = cadprod.codigo[i]) entao
         resultado <- i
      fimse
   fimPara

   retorne resultado
fimFuncao

 

Aí, tanto para pesquisar, tanto para verificar se já existe, poderia utilizar essa função... aí usa o retorno.. Vai retornar -1 quando não encontrar ou vai retornar a posição de onde está o código informado.... dá mesma forma, poderia ir testando e refinando... 

 

Adendo: nesse exemplo eu coloquei para receber o código já no parâmetro... mais, caso prefira, pode colocar para ler o código dentro da função, da mesma forma que já fez antes...  lembre-se: a única coisa que mudou aí seria o uso desse retorne, ou seja: você poderá pegar o valor retornar lá onde chamar essa função e usar como desejar.

 

Tente entender a base do funcionamento, daí criando a sua própria lógica.

 

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

  • Membro VIP
2 horas atrás, Igornascimento disse:

Para a função funcionar no menu eu tenho que adicionar a variável dessa função na variável global certo??

 

Não exatamente... apenas tente absorver que: uma função é exatamente* a mesma coisa que um procedimento... simplesmente o que muda é que uma função também retorna um valor nela mesma... esse valor é atribuído lá pela comando retorne...

 

Para fazer uma analogia, inverta... um procedimento nada mais é que uma função que não retorna nada nele mesmo... no resto.. ambos são idênticos!

 

Segue um exemplo de uso para o contexto:

procedimento pesquisar_item()
var
   i: inteiro
   cod: inteiro
   p: inteiro
inicio
   escreval("Digite o Código do Item que deseja pesquisar (ex: 91): ")
   leia(cod)
   p <- buscaPosicaoItem(cod)

   se (p = -1) entao
      escreval("Código não encontrado")
   senao
      escreval("---------------------------------------")
      escreval("Código         : ", cadprod.codigo[p])
      escreval("Produto        : ", cadprod.item[p])
      escreval("Descrições     : ", cadprod.descricao[p])
      escreval("---------------------------------------")
   fimSe
     
   escreval ("Pressione ENTER para voltar ao menu")
   leia(opc)
fimProcedimento

 

Não testei o código acima, mas é algo por aí... a função serviria apenas para retornar a posição desejada... Abaixo demonstro como seria sem uso da função:

procedimento pesquisar_item()
var
   i: inteiro
   cod: inteiro
   p: inteiro
inicio
   escreval("Digite o Código do Item que deseja pesquisar (ex: 91): ")
   leia(cod)

   p <- -1
   para i de 1 ate codItem faca
      se (cod = cadprod.codigo[i]) entao
         p <- i
      fimse
   fimPara

   se (p = -1) entao
      escreval("Código não encontrado")
   senao
      escreval("---------------------------------------")
      escreval("Código         : ",cadprod.codigo[p])
      escreval("Produto        : ",cadprod.item[p])
      escreval("Descrições     : ",cadprod.descricao[p])
      escreval("---------------------------------------")
   fimSe
   escreval ("Pressione ENTER para voltar ao menu")
   leia(opc)
fimProcedimento

 

Entende? Esse código acima funcionaria da mesma forma... só que ao usar uma função, possibilitaria reutilizar essa mesma característica de encontrar a posição p, da qual foi idealizada para ter a posição do item encontrado (ou o "código" -1 para identificar que não encontrou). Tudo isso é uma abstração.. uma forma de idealizar mesmo...

 

Daí, lá quando você quiser não implementar um código repetido, você poderia usar a função (ou esse trecho que o substituiu) para verificar o código.. se retornar um valor diferente de -1, é porque o código já existe, concorda? Daí você faz ler outro..

 

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

Oi, Simon. Boa noite.

Consegui fazer com registro, fiz uma função para pesquisar, só que acusa um erro que a váriavel "pesquisarprodutos()" não existe.

e também não estou conseguindo controlar os códigos dos produtos para saber se tem código de produto repetido.

O resto está tudo funcionando.

 

algoritmo "semnome"
tipo
   celular=registro
      codigo:inteiro
      item:caractere
      memo: caractere
      arm: caractere
      tela:caractere
   fimregistro

procedimento mostrar_menu()
inicio
   escreval ("1 - Cadastrar Produto")
   escreval ("2 - Pesquisar Produtos")
   escreval ("3 - Listar Produtos")
   escreval ("0 - sair")
fimprocedimento

procedimento cadastrar_produtos()
inicio
   se (qtd < 100) entao
      escreva ("Digite o código do produto: ")
      leia (cadprod[qtd+1].codigo)
      escreva ("Digite o nome do produto: ")
      leia (cadprod[qtd+1].item)
      escreva ("Memória ram: ")
      leia (cadprod[qtd+1].memo)
      escreva ("Armazenamento Interno: ")
      leia (cadprod[qtd+1].arm)
      escreva ("Tamanho da tela: ")
      leia (cadprod[qtd+1].tela)
      qtd <- qtd +1
      escreval()
      escreval ("Produto cadastrado com sucesso")
   senao
      escreva ("Limite de 100 celulares atingido")
   fimse
   escreval()
   escreval ("Tecle ENTER para retornar ao menu")
   leia (opt)
fimprocedimento

funcao pesquisarprodutos(cod:inteiro):inteiro
var
   i, resultado:inteiro
inicio
   i <- 1
   resultado <- 0
   enquanto (i <= qtd) faca
      se cadprod[i].codigo == cod) entao
         escreval ("produto: ", cod)
         escreval ("item: ", cadprod[i].item)
         escreval ("Memória RAM: ", cadprod[i].memo)
         escreval ("Armazenamento Interno: ", cadprod[i].arm)
         escreval ("Tamanho da Tela: ", cadprod[i].tela)
         retorne i
      fimse
      i <- i + 1
   fimenquanto
   escreval ("Produto não encontrado...")
   retorne -1
fimfuncao

procedimento listarprodutos()
var
   i:inteiro
inicio
   para i de 1 ate qtd passo 1 faca
      escrevaL()
      escreval ("Código: ",cadprod[i].codigo)
      escreval ("item: ", cadprod[i].item)
      escreval ("Memória RAM: ", cadprod[i].memo)
      escreval ("Armazenamento Interno: ", cadprod[i].arm)
      escreval ("Tamanho da Tela: ", cadprod[i].tela)
      escreval()
   fimpara
   escreval ("Tecle ENTER para retornar ao menu")
   leia (opt)
fimprocedimento

var
   cadprod: vetor [1..100] de celular
   i,opc,qtd:inteiro
   opt:caractere
inicio
   repita
      mostrar_menu()
      leia (opc)
      escolha (opc)
         caso 1
         limpatela()
         cadastrar_produtos()
         limpatela()
      caso 2
      limpatela()
         pesquisarproduto()
         limpatela()
      caso 3
      limpatela()
         listarprodutos()
         limpatela()
      fimescolha
   ate (opc = 0)
fimalgoritmo

 

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

  • Membro VIP

Sobre:

55 minutos atrás, Igornascimento disse:

Consegui fazer com registro

 

Do que eu lembrava, sequer funcionava use de vetores de registros no VisualG... mas parece que está funcionando bem!

 

 

 

Sobre:

55 minutos atrás, Igornascimento disse:

fiz uma função para pesquisar, só que acusa um erro que a váriavel "pesquisarprodutos()" não existe.

 

Vide:

image.png

 

Oh! Lá, o nome está diferente.

 

Outras coisas:

- se você definiu a função para receber um valor inteiro, você precisa passar esse valor, caso contrário, retire esse parâmetro;

- você declarou como função, mas não está utilizando o retorno dessa função para nada, ou seja: simplesmente utilize um procedimento em vez de função.

 

 

Sobre:

55 minutos atrás, Igornascimento disse:

e também não estou conseguindo controlar os códigos dos produtos para saber se tem código de produto repetido.

O resto está tudo funcionando.

 

Você tentou fazer isso como?

 

Link para o comentário
Compartilhar em outros sites

oi simon, bom dia, no procedimento eu consigo fazer a função de pesquisar certinho, o problema que o trabalho exige que eu use obrigatoriamente, procedimentos, funções e registros. abaixo está o que o trabalho pede. Eu estou meio que perdido, porque eu estou fazendo faculdade a 3 semanas, professor do curso não tira uma dúvida minha, e estou aprendendo mais pelo youtube do que pela faculdade. Estou grato também pela sua ajuda. se eu não conseguir resolver isso hoje, vou entregar assim mesmo.

 

Diante do exposto, você precisa desenvolver seu algoritmo em pseudocódigo e atender aos seguintes critérios:
1 – Estrutura de Registro para armazenar 100 aparelhos celulares
2 – Um menu que apresente os seguintes módulos (procedimentos / funções)
2.1 – Cadastrar Produtos
2.2 – Listar todos (Aqui liste 3 características armazenadas)
2.3 - Listar 1 produto específico (Aqui liste 3 características armazenadas)
 
Considere as seguintes regras: 
1 - Controlar o cadastro para que não haja códigos idênticos.
2 - Informar ao usuário se produto foi cadastro ou não.
3 - Informar ao usuário que o produto não foi encontrado caso ocorra.

Link para o comentário
Compartilhar em outros sites

  • Membro VIP
5 horas atrás, Igornascimento disse:

oi simon, bom dia, no procedimento eu consigo fazer a função de pesquisar certinho, o problema que o trabalho exige que eu use obrigatoriamente, procedimentos, funções e registros. abaixo está o que o trabalho pede. Eu estou meio que perdido, porque eu estou fazendo faculdade a 3 semanas, professor do curso não tira uma dúvida minha, e estou aprendendo mais pelo youtube do que pela faculdade. Estou grato também pela sua ajuda. se eu não conseguir resolver isso hoje, vou entregar assim mesmo.

 

@Igornascimento, sugiro fazer assim:

 

  1. crie uma função para localizar a posição que está o item desejado. Essa função vai OU retornar a posição onde está o item, OU algum valor que representa que não encontrou, por exemplo -1;
  2. para pesquisa, você chama essa função, passando por parâmetro o código que deseja pesquisar. Se a função não retornar -1 (ou o valor escolhido), então a função achou o item. Logo, utilize essa posição que foi retornada para acessar a posição desejada e assim exibir os dados;
  3. para não deixar repetir, é análogo, você chama essa função, passando por parâmetro o código que deseja pesquisar. Se a função não retornar -1 (ou o valor escolhido), então a função achou o item. Logo, esse código já está cadastrado, daí você pede para informar outro código. Se retornar -1 é porque esse código (tecnicamente) não existe.

 

Essa função para buscar a posição eu já informei.. segue:

 

Em 07/06/2021 às 16:22, Simon Viegas disse:


funcao buscaPosicaoItem(cod: inteiro): inteiro
var
   i: inteiro
   resultado: inteiro
inicio
   resultado <- -1
     
   para i de 1 ate codItem faca
      se (cod = cadprod.codigo[i]) entao
         resultado <- i
      fimse
   fimPara

   retorne resultado
fimFuncao

 

 

Para usar a função, segue também o exemplo dado:

 

Em 07/06/2021 às 20:56, Simon Viegas disse:

Segue um exemplo de uso para o contexto:



procedimento pesquisar_item()
var
   i: inteiro
   cod: inteiro
   p: inteiro
inicio
   escreval("Digite o Código do Item que deseja pesquisar (ex: 91): ")
   leia(cod)
   
   p <- buscaPosicaoItem(cod) //<-- aqui a função vai retornar OU a posição do item OU -1

   se (p = -1) entao //aqui verifica se não encontrou
      escreval("Código não encontrado")
   senao //aqui exibe os dados, utilizando a posição que a função retornou. Olhe o p ali no vetor
      escreval("---------------------------------------")
      escreval("Código         : ", cadprod.codigo[p])
      escreval("Produto        : ", cadprod.item[p])
      escreval("Descrições     : ", cadprod.descricao[p])
      escreval("---------------------------------------")
   fimSe
     
   escreval ("Pressione ENTER para voltar ao menu")
   leia(opc)
fimProcedimento

 

 

Obs.: nesse exemplo acima a posição dos "[]" acho que está errado (seria depois de codProd), mas tanto faz!!! O cerne é que: você vai tentar localizar o valor da posição e vai utilizar a resposta como desejar.

 

Para pesquisa, usa para posicionar o vetor para exibir os dados... para cadastrar, vai utilizar para saber se já existe ou não.

 

Qualquer dúvida é só postar.

 

ADENDO: vou deixar o fórum aberto aqui. Ao responder, aguarde também um pouco... que aí tentamos responder um ao outro mais rapidamente.

 

No aguardo.

 

 

ADENDO 2:

Só para frisar. Funções e Procedimento são exatamente* a mesma coisa!!! Não* tem diferenças entre eles!!! É apenas uma estrutura que pode ser invocada em outras partes do código... serve tanto para facilitar a repetição, por exemplo, como você precisaria localizar a posição tanto para pesquisa, tanto para evitar cadastro duplicado, ter uma função ou procedimento vai servir para reaproveitar... caso contrário, teria que "copiar a lógica em ambos as partes"... evita redundância. Tanto serve para organizar... seu programa não precisaria de funções ou procedimento, apenas fica mais organizado separar cada uma das partes em "blocos" diferentes... imagine aí como iria ficar "bagunçado" lá o menu com um mondo de código dentro de cada caso

 

A "novidade aí na função" é que está utilizando parâmetro... mas isso NÃO tem nada a ver que está utilizando função em vez de procedimento, apenas porque faz mais sentido informar qual o código que deseja por parâmetro, em vez de ler dentro da função. Poderia ser assim:

 

funcao buscaPosicaoItem(): inteiro
var
   i: inteiro
   resultado: inteiro
   cod: inteiro
inicio
   escreval("Digite o Código do Item que deseja pesquisar (ex: 91): ")
   leia(cod)

   resultado <- -1

   para i de 1 ate codItem faca
      se (cod = cadprod.codigo[i]) entao
         resultado <- i
      fimse
   fimPara

   retorne resultado
fimFuncao

 

Aí, na parte de pesquisar não precisar ler o código:

   cod: inteiro
   p: inteiro
inicio
   p <- buscaPosicaoItem() //<-- aqui a função vai retornar OU a posição do item OU -1

   se (p = -1) entao //aqui verifica se não encontrou
      escreval("Código não encontrado")

 

Por que código estaria lendo dentro da função.. isso apenas tem a ver com organização.. eu acho melhor da outra forma... a função simplesmente recebe o valor de fora. Ela fica voltada apenas no seu papel: tentar encontrar a posição. Já "ler o código", deixo isso para a parte que precisa dessa posição, sacou?

 

ADENDO 3:

Faça o código ao seu tempo... caso deseje, te ajudamos a refatorar todo o código... se puder e quiser, acho que dá tempo também... aí vai revisando cada uma das características. A medida que vai aprendendo/assimilando, todo e qualquer programa pode ir seguindo os mesmos princípios, onde cada vez mais você apenas se preocupará com as lógicas, e cada vez menos com as sintaxe da linguagem e/ou padrões de organização de estruturas

Link para o comentário
Compartilhar em outros sites

  • Membro VIP

 

1 minuto atrás, Igornascimento disse:

@Simon Viegas não entendi essa variável que o "P" recebe.

 

p <- buscaPosicaoItem(cod)

 

Funciona assim... o que um procedimento faz? A função é exatamente* a mesma coisa!! Igualzinho*...  o que muda é que as funções tem TAMBÉM a característica de retornar algo nela mesma... ela funciona como uma pseudovariável.

 

Então, ao "entender como as funções funcionam", eu idealizei que poderia criar uma para que ela retorne a posição do código que passei por parâmetro "nela mesma", logo, usei p para "copiar a resposta". Resumidamente: p vai ter OU o valor da posição onde o código está, OU p vai ter -1, que para o contexto representa que não encontrou o código.

 

 

Quando fazemos :

 

 x <- RaizQ(49)

 

Já identificamos que RaizQ() é uma função, pois se fosse procedimento, não traria nada nela mesma.

 

Essa função não vai lá e mostra na tela "A raiz de 49 é 7". Não, ela foi feita de modo que ao passar um número por parâmetro (49), ela vai lá (sei não como) calcular a raiz de 49 e retornar 7 nela mesma... logo, x vai ficar com 7.

As funções e procedimento fazem o que o programador quiser fazer... apenas essa função foi idealizada assim... "recebe um valor por parâmetro e devolve raiz quadrada desse valor nela mesma".

 

Obs.: nada impediria dessa função também escrever na tela..."A raiz de 49 é 7". Pode, se quiser... poderia também retornar qualquer valor... apenas foi definido para retornar um valor real que, para o contexto, é a raiz do valor passado no parâmetro...

 

Retornar um valor nela mesma é uma propriedade de funções... elas conseguem fazer isso. Já retornar um valor que faça sentido para nós, seria apenas uma "coincidência". Não tem que ser assim, apenas foi programado por alguém para ser assim. E podemos "reaproveitar" o uso dessa função apenas chamando ela (entra naquela questão de reaproveitação).

 

Link para o comentário
Compartilhar em outros sites

@Simon Viegas  referente ao seu ADENDO 3, é isso que está confundindo muito minha cabeça, eu já fiz de várias formas e tenho esse problema de saber se tem uma sequencia a ser seguida, eu nunca tinha feito qualquer tipo de curso ou visto algo sobre isso na vida, daí comecei a faculdade e estou zerado de informação, é tudo novo pra mim e nas aulas ao vivo da faculdade, o professor passa tudo muito rápido, não tem um acompanhamento sabe, ele joga o assunto pra gente e temos que nos virar para aprender e resolver.  o que queria entender melhor era onde encaixar a função para checar se tem código repetido. 

 

 

Link para o comentário
Compartilhar em outros sites

  • Membro VIP
22 minutos atrás, Igornascimento disse:

@Simon Viegas  referente ao seu ADENDO 3, é isso que está confundindo muito minha cabeça, eu já fiz de várias formas e tenho esse problema de saber se tem uma sequencia a ser seguida, eu nunca tinha feito qualquer tipo de curso ou visto algo sobre isso na vida, daí comecei a faculdade e estou zerado de informação, é tudo novo pra mim e nas aulas ao vivo da faculdade, o professor passa tudo muito rápido, não tem um acompanhamento sabe, ele joga o assunto pra gente e temos que nos virar para aprender e resolver.  o que queria entender melhor era onde encaixar a função para checar se tem código repetido. 

 

 

Então, é um misto retroalimentado: para saber como fazer, você precisa ter experiência; para ter experiência, você precisa ir sabendo como fazer; que para saber como fazer precisa de experiência... um ciclo infinito e paradoxal.  Daí, simplesmente vai fazendo... uma hora ficha cai.

 

Você precisaria fazer isso:

 

57 minutos atrás, Simon Viegas disse:
  • crie uma função para localizar a posição que está o item desejado. Essa função vai OU retornar a posição onde está o item, OU algum valor que representa que não encontrou, por exemplo -1;
  • para pesquisa, você chama essa função, passando por parâmetro o código que deseja pesquisar. Se a função não retornar -1 (ou o valor escolhido), então a função achou o item. Logo, utilize essa posição que foi retornada para acessar a posição desejada e assim exibir os dados;
  • para não deixar repetir, é análogo, você chama essa função, passando por parâmetro o código que deseja pesquisar. Se a função não retornar -1 (ou o valor escolhido), então a função achou o item. Logo, esse código já está cadastrado, daí você pede para informar outro código. Se retornar -1 é porque esse código (tecnicamente) não existe.

 

Uma função é um procedimento que, ao mesmo tempo, é como uma espécie de variável:
image.png

 

Repare ali que tem :inteiro. E, apenas, que dentro da função utilizam-se o comando retorne para salvar o valor que deseja que fique na função.

 

Por isso, que ao usar:

 

57 minutos atrás, Simon Viegas disse:



p <- buscaPosicaoItem(cod)

 

 

O p vai vai receber o valor que definiu lá no retorne dentro da função... aí, pelo contexto, existiu uma lógica antes, de modo que "vai ser retornar OU o valor da posição, OU -1 caso não encontre o código. Mas o papel da função é esse: "fazer algo e retornar nela mesmo um valor". Apenas estamos utilizando essa característica de retornar algo de uma forma útil para o contexto.

 

Mas relaxe... uma hora entende. Esse conceito depois visto universalmente em outras linguagens... essa base muito parecida em qualquer linguagem. O VisualG está sendo apenas um mecanismo mais amigável, sobretudo em está em Português.

 

Link para o comentário
Compartilhar em outros sites

ADENDO 3:

Faça o código ao seu tempo... caso deseje, te ajudamos a refatorar todo o código... se puder e quiser, acho que dá tempo também

 

Se poder eu agradeço, pois estou meio que perdido, eles dizem que não devemos usar leitores de código para testar o algoritmo, não sei se só escrevendo o que entendemos sem saber se vai rodar o programa vai valer o mesmo ponto

aí está o procedimento que eu fiz para o cadastro de produtos, queria saber em que linha eu adiciono a condição para analisar se o código digitado já foi cadastrado. 

 

procedimento cadastrarprodutos()
inicio
   se (qtd < 100) entao
      escreva ("Digite o código do produto: ")
      leia (cadprod[qtd+1].codigo)
      escreva ("Digite o nome do produto: ")
      leia (cadprod[qtd+1].item)
      escreva ("Memória ram: ")
      leia (cadprod[qtd+1].memo)
      escreva ("Armazenamento Interno: ")
      leia (cadprod[qtd+1].arm)
      escreva ("Tamanho da tela: ")
      leia (cadprod[qtd+1].tela)
      qtd <- qtd +1
      escreval()
      escreval ("Produto cadastrado com sucesso")
   senao
      escreva ("Limite de 100 celulares atingido")
   fimse
   escreval()
   escreval ("Tecle ENTER para retornar ao menu")
   leia (opt)
fimprocedimento

 

Link para o comentário
Compartilhar em outros sites

  • Membro VIP

Desculpe a demora... tive uma reunião de "emergência"...

 

Vamos lá:

1- Só um detalhe: inverta a atualização do código. Algo assim:
 

      qtd <- qtd +1
      escreva ("Digite o código do produto: ")
      leia (cadprod[qtd].codigo)
      escreva ("Digite o nome do produto: ")
      leia (cadprod[qtd].item)
      escreva ("Memória ram: ")
      leia (cadprod[qtd].memo)
      escreva ("Armazenamento Interno: ")
      leia (cadprod[qtd].arm)
      escreva ("Tamanho da tela: ")
      leia (cadprod[qtd].tela)

 

Muito mais simples atualizar antes e usar o atualizado.

 

 

 

2- Sobre uso de programas

3 horas atrás, Igornascimento disse:

Se poder eu agradeço, pois estou meio que perdido, eles dizem que não devemos usar leitores de código para testar o algoritmo, não sei se só escrevendo o que entendemos sem saber se vai rodar o programa vai valer o mesmo ponto

 


Rpz, eu até via essa parte... mas acho complicado, rs. Se "visualizando" os resultados já está difícil assimilar os conteúdos, sem a ferramenta, piorou...

 

Caso já tenha passado do prazo, não tem problema! Você pode ainda terminar esse programa e depois entregar (ou não)... a ideia está no aprendizado que vem no caminho... mesmo que não valha nota!
 

Sobre qual a parte. Seria algo aqui:

 

      escreva ("Digite o código do produto: ")
      leia (cadprod[qtd].codigo)

      //aqui uma estrutura de repetição que vai ficar repetindo até que o código informado não exista

      escreva ("Digite o nome do produto: ")
      leia (cadprod[qtd].item)
      escreva ("Memória ram: ")

 

 

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