Ir ao conteúdo
  • Cadastre-se

VisualG organização algoritmo


Posts recomendados

Eu fiz um algoritmo no visual g, porém, o meu professor me disse que eu deveria organizar ele para que ficasse mais fácil quando for passar para Android. Não entendi muito bem e o questionei várias vezes sem sucesso. Ele me disse que na entrada só poderia ter ler e escreva e na saída não poderia existir se então. Fiquei confuso e agradeceria se alguém puder me ajudar. O algoritmo é esse: 

algoritmo "sem nome"
// Função :
// Autor :
// Data : 29/08/2017
// Seção de Declarações
var
d,op,cm,am,qtd,qtd1,qtd2,qtd3,qtd4,qtd5:real
inicio
// Entradas
escreval("Escolha uma das opções de tijolo")
escreval("Tijolo 6 furos de dimensões 9x14x19 -> OPÇÃO 1")
escreval("Tijolo 8 furos de dimensões 9x19x24 -> OPÇÃO 2")
escreval("Tijolo 12 furos de dimensões 14x19x29 -> OPÇÃO 3")
leia (op)
escreval("Agora escolha a forma de colocação do tijolo")
escreval("1/2 vez (Tijolos em pé) -> OPÇÃO 1")
escreval("1 vez (Tijolos deitados) -> OPÇÃO 2")
leia (d)
escreval("Informe o comprimento desejado do muro em metros a ser construído")
leia (cm)
escreval("Informe a altura desejada do muro em metros a ser construído")
leia (am)
// Processamento
qtd<-(cm * am)/(0.2394)
qtd1<-(cm * am)/(0.4104)
qtd2<-(cm * am)/(0.7714)
qtd3<-((cm * am)/(0.2394)) * 2
qtd4<-((cm * am)/(0.4104)) * 2
qtd5<-((cm * am)/(0.7714)) * 2
// Saidas
se (op = 1) e (d = 1) então
escreval("Você precisará de:",qtd," tijolos para constuir o muro")
escreval("Para não faltar, compre:",1.1 * qtd+1:2:0, " tijolos ")
escreval("Você precisará também de:",qtd/250+1:2:0," saco(s) de cimento")
escreval("O custo médio é de: R$" ,(qtd * 0.35) + 35 * (qtd/250)+1:5:2, "  ")
fimse
se (op = 2) e (d = 1) então
escreval("Você precisará de:",qtd1," tijolos para constuir o muro")
escreval("Para não faltar, compre:",1.1 * qtd1+1:2:0, " tijolos ")
escreval("Você precisará também de:",qtd1/250+1:2:0," saco(s) de cimento")
escreval("O custo médio é de: R$" ,(qtd1 * 0.50) + 35 * (qtd1/250)+1:5:2, "  ")
fimse
se (op = 3) e (d = 1) então
escreval("Você precisará de:",qtd2," tijolos para constuir o muro")
escreval("Para não faltar, compre:",1.1 * qtd2+1:2:0, " tijolos ")
escreval("Você precisará também de:",qtd2/250+1:2:0," saco(s) de cimento")
escreval("O custo médio é de: R$" ,(qtd2 * 0.80) + 35 * (qtd2/250)+1:5:2, "  ")
fimse
se (op = 1) e (d = 2) então
escreval("Você precisará de:",qtd3," tijolos para constuir o muro")
escreval("Para não faltar, compre:",1.1 * qtd3+1:2:0, " tijolos ")
escreval("Você precisará também de:",qtd3/250+1:2:0," saco(s) de cimento")
escreval("O custo médio é de: R$" ,(qtd3 * 0.35) + 35 * (qtd3/250)+1:5:2, "  ")
fimse
se (op = 2) e (d = 2) então
escreval("Você precisará de:",qtd4," tijolos para constuir o muro")
escreval("Para não faltar, compre:",1.1 * qtd4+1:2:0, " tijolos ")
escreval("Você precisará também de:",qtd4/250+1:2:0," saco(s) de cimento")
escreval("O custo médio é de: R$" ,(qtd4 * 0.50) + 35 * (qtd4/250)+1:5:2, "  ")
fimse
se (op = 3) e (d = 2) então
escreval("Você precisará de:",qtd5," tijolos para constuir o muro")
escreval("Para não faltar, compre:",1.1 * qtd5+1:2:0, " tijolos ")
escreval("Você precisará também de:",qtd5/250+1:2:0," saco(s) de cimento")
escreval("O custo médio é de: R$" ,(qtd5 * 0.80) + 35 * (qtd5/250)+1:2:0, "  ")
fimse
fimalgoritmo 

 

Link para o comentário
Compartilhar em outros sites

  • Membro VIP

Olá @vinifla81.

 

2 horas atrás, vinifla81 disse:

Ele me disse que na entrada só poderia ter ler e escreva e na saída não poderia existir se então. Fiquei confuso e agradeceria se alguém puder me ajudar. O algoritmo é esse: 

 

Não entendi muito bem.. mas você está efetuando cálculos sem necessidade e repetindo várias vezes o mesmo trecho de algoritmo.

 

Veja:

// Processamento
qtd<-(cm * am)/(0.2394)
qtd1<-(cm * am)/(0.4104)
qtd2<-(cm * am)/(0.7714)
qtd3<-((cm * am)/(0.2394)) * 2
qtd4<-((cm * am)/(0.4104)) * 2
qtd5<-((cm * am)/(0.7714)) * 2

O resultado da quantidade é uma só... o que muda são os parâmetros, ou seja, de acordo com as resposta do usuário, você calculará a quantidade. Nesse caso acima, você está pré-calculando todas as possibilidades para usar uma delas quando conveniente... todas as outras contas foram feitas em vão.

 

Se tomássemos a sua linha de raciocínio dos seus se, cada uma dessas contas deveria está apenas dentro do seu respectivo se, ou seja, só faria a conta que é necessária quando o se "fosse aceito".

 

Algo como:

se (op = 1) e (d = 1) então
   qtd<-(cm * am)/(0.2394)
   escreval("Você precisará de:",qtd," tijolos para constuir o muro")
   escreval("Para não faltar, compre:",1.1 * qtd+1:2:0, " tijolos ")
   escreval("Você precisará também de:",qtd/250+1:2:0," saco(s) de cimento")
   escreval("O custo médio é de: R$" ,(qtd * 0.35) + 35 * (qtd/250)+1:5:2, "  ")
fimse

 

Entretanto, é notável que tanto essa conta do qtd, quanto a exibição do resultado, estão repetidos... está reescrevendo (praticamente) a mesma coisa em cada se!

 

O que muda de um cálculo do qtd para o outro? só aquele número fracionado e um multiplicador (por 2 ou não).

 

Então, ao comentar:

2 horas atrás, vinifla81 disse:

[...] saída não poderia existir se então.

pode está se referindo que essas respostas não precisam estar em cada um dos se. Os se só precisam servi para "selecionar" o quê é diferente.. que no caso é esse número quebrado lá (que eu não sei para que serve - obs.: não é relevante)

 

A resposta poderia ficar algo do tipo:

 qtd <- ((cm*am)/(valor_de_alguma_coisa))*multiplicador
 escreval("Você precisará de:",qtd," tijolos para construir o muro")
 escreval("Para não faltar, compre:",1.1 * qtd+1:2:0, " tijolos ")
 escreval("Você precisará também de:",qtd/250+1:2:0," saco(s) de cimento")
 escreval("O custo médio é de: R$" ,(qtd * outro_valor_de_alguma_coisa) + 35 * (qtd/250)+1:5:2, "  ")


Dentro dos se, você só verifica esse "valor_de_alguma_coisa", o multiplicador (que será 1 ou 2) e o outro_valor_de_algum_coisa.

 

A ideia seria mais ou menos essa.

 

Por favor, tente corrigir e poste seu código atual (lembrar de usar a tag CODE, botão <>).

 

No aguardo.

Link para o comentário
Compartilhar em outros sites

Fiz algumas modificações, não sei se melhorou.

algoritmo "Tijolando 2.0"
// Função :
// Autor :
// Data : 29/08/2017
// Seção de Declarações
var
d,op,cm,am,qtd,area1,area2,area3:real
inicio
// Entradas
escreval("Escolha uma das opções de tijolo")
escreval("Tijolo 6 furos de dimensões 9x14x19 -> OPÇÃO 1")
escreval("Tijolo 8 furos de dimensões 9x19x24 -> OPÇÃO 2")
escreval("Tijolo 12 furos de dimensões 14x19x29 -> OPÇÃO 3")
leia (op)
escreval("Agora escolha a forma de colocação do tijolo")
escreval("1/2 vez (Tijolos em pé) -> OPÇÃO 1")
escreval("1 vez (Tijolos deitados) -> OPÇÃO 2")
leia (d)
escreval("Informe o comprimento desejado do muro em metros a ser construído")
leia (cm)
escreval("Informe a altura desejada do muro em metros a ser construído")
leia (am)
// Processamento
qtd<-(cm * am)
area1<-0.0266
area2<-0.0456
area3<-0.0551
// Saidas
se (op = 1) e (d = 1) então
escreval("Você precisará de:",qtd/area1," tijolos para constuir o muro")
escreval("Para não faltar, compre:",1.1 * qtd/area1+1:2:0, " tijolos ")
escreval("Você precisará também de:",(qtd/area1)/250+1:2:0," saco(s) de cimento")
escreval("O custo médio é de: R$" ,((qtd/area1) * 0.35) + 35 * ((qtd/area1)/250)+1:5:2, "  ")
fimse
se (op = 2) e (d = 1) então
escreval("Você precisará de:",qtd/area2," tijolos para constuir o muro")
escreval("Para não faltar, compre:",1.1 * qtd/area2+1:2:0, " tijolos ")
escreval("Você precisará também de:",(qtd/area2)/250+1:2:0," saco(s) de cimento")
escreval("O custo médio é de: R$" ,((qtd/area2) * 0.50) + 35 * ((qtd/area2)/250)+1:5:2, "  ")
fimse
se (op = 3) e (d = 1) então
escreval("Você precisará de:",qtd/area3," tijolos para constuir o muro")
escreval("Para não faltar, compre:",1.1 * qtd/area3+1:2:0, " tijolos ")
escreval("Você precisará também de:",(qtd/area3)/250+1:2:0," saco(s) de cimento")
escreval("O custo médio é de: R$" ,((qtd/area3) * 0.80) + 35 * ((qtd/area3)/250)+1:5:2, "  ")
fimse
se (op = 1) e (d = 2) então
escreval("Você precisará de:",(qtd/area1)*2 ," tijolos para constuir o muro")
escreval("Para não faltar, compre:",1.1 * (qtd/area1)*2 +1:2:0, " tijolos ")
escreval("Você precisará também de:",((qtd/area1)*2)/250+1:2:0," saco(s) de cimento")
escreval("O custo médio é de: R$" ,(((qtd/area1)*2) * 0.35) + 35 * (((qtd/area1)*2)/250)+1:5:2, "  ")
fimse
se (op = 2) e (d = 2) então
escreval("Você precisará de:",(qtd/area2)*2," tijolos para constuir o muro")
escreval("Para não faltar, compre:",1.1 * (qtd/area2)*2 +1:2:0, " tijolos ")
escreval("Você precisará também de:",((qtd/area2)*2)/250+1:2:0," saco(s) de cimento")
escreval("O custo médio é de: R$" ,(((qtd/area2)*2) * 0.50) + 35 * (((qtd/area2)*2)/250)+1:5:2, "  ")
fimse
se (op = 3) e (d = 2) então
escreval("Você precisará de:",(qtd/area3)*2," tijolos para constuir o muro")
escreval("Para não faltar, compre:",1.1 * (qtd/area3)*2 +1:2:0, " tijolos ")
escreval("Você precisará também de:",((qtd/area3)*2)/250+1:2:0," saco(s) de cimento")
escreval("O custo médio é de: R$" ,(((qtd/area3)*2) * 0.80) + 35 * (((qtd/area3)*2)/250)+1:5:2, "  ")
fimse
fimalgoritmo

 

Link para o comentário
Compartilhar em outros sites

  • Membro VIP

Seu código está estruturalmente igual ao anterior... e o que eu proponho é uma mudança para evitar as repetições...

 

Por favor, dê uma relida na minha postagem anterior, caso não tenha entendido alguma parte, favor sinalizar.

 

 

 

No aguardo.

 


 

adicionado 12 minutos depois

Adendo:
Veja que o conteúdo desses 2 se são praticamente iguais...

31 minutos atrás, vinifla81 disse:

se (op = 1) e (d = 1) então
escreval("Você precisará de:",qtd/area1," tijolos para constuir o muro")
escreval("Para não faltar, compre:",1.1 * qtd/area1+1:2:0, " tijolos ")
escreval("Você precisará também de:",(qtd/area1)/250+1:2:0," saco(s) de cimento")
escreval("O custo médio é de: R$" ,((qtd/area1) * 0.35) + 35 * ((qtd/area1)/250)+1:5:2, "  ")
fimse
se (op = 2) e (d = 1) então
escreval("Você precisará de:",qtd/area2," tijolos para constuir o muro")
escreval("Para não faltar, compre:",1.1 * qtd/area2+1:2:0, " tijolos ")
escreval("Você precisará também de:",(qtd/area2)/250+1:2:0," saco(s) de cimento")
escreval("O custo médio é de: R$" ,((qtd/area2) * 0.50) + 35 * ((qtd/area2)/250)+1:5:2, "  ")
fimse

 

 

Você precisa deixar esse trecho de "exibição de resultado" no final, uma única vez... e as partes que são variáveis, serem selecionadas nos se.

Link para o comentário
Compartilhar em outros sites

  • Membro VIP

Olá.

 

13 horas atrás, vinifla81 disse:

Eu sou bem amador em programação e não estou entendendo isso da repetição. Se puder me dar uma ajuda eu agradeço


É normal... a proposta é que justamente vá aprendendo a interpretar as orientações, assim como é necessário interpretar os requisitos do problema, ou seja, aquilo que está sendo pedido... 

 

Eu posso, por exemplo, não está explicando bem (no sentido de transmitir minhas propostas), faz parte! A ideia é que tente absorver pelo que está sendo passado... interagir... saber coletar as informações... saber se expressar para demonstrar o quê não está entendendo etc... :)

 

 

Vamos lá:

Vou tentar criar uma análise. obs.: nesse momento não estou me preocupando com o resultado, as fórmulas ou qualquer coisa relacionada ao problema em si, mas apenas a estruturas das etapas.

 

 

No seu código já tem umas separação das etapas..

 

 

Em "// Entradas", você coleta os dados que dependem do usuário. OK. Após com essas leituras (teoricamente) já terá tudo que você precisa para retornar uma resposta ao usuário.

 

 

Em "// Processamento" você está pré-calculando o que você chamou de area, que antes estava também pre-calculando o que chamou de qtd, ou seja, o que comentei lá na primeira postagem, ainda se manteve:

 

20 horas atrás, Simon Viegas disse:

mas você está efetuando cálculos sem necessidade e repetindo várias vezes o mesmo trecho de algoritmo.

 

que complemento:

20 horas atrás, Simon Viegas disse:

Se tomássemos a sua linha de raciocínio dos seus se, cada uma dessas contas deveria está apenas dentro do seu respectivo se, ou seja, só faria a conta que é necessária quando o se "fosse aceito".

 

Veja, não estou afirmando que essa deveria ser única forma que poderia ser feita, mas que seria uma sugestão que poderia ser avaliada por você... No seu novo código, você apenas fez algumas "melhorias", mas meio que não levou em consideração a sugestão em si, ou seja, a sugestão meio que foi ignorada (no bom sentido da palavra)... ou por não ter entendido, ou por não ter percebido, ou por ser apenas ignorado mesmo...

 

Ainda nessa questão do "pré-cálculo", nesse ponto entra a observação que poderia evitar essa conta desnecessária, pois você só vai utilizar uma das areas (ou dos "qtd"s), logo as outras seriam feitas sem necessidade (trabalho extra). Como cada condição utiliza uma fórmula diferente, essa conta poderia ficar dentro do seu respectivo se.

 

Algo como:

obs.: vou usar o código do qtd, pois ao adaptar para areas, eu teria que fazer outras resolvas...

...
escreval("Informe o comprimento desejado do muro em metros a ser construído")
leia (cm)
escreval("Informe a altura desejada do muro em metros a ser construído")
leia (am)

// Saidas
se (op = 1) e (d = 1) então
   qtd<-(cm * am)/(0.2394)
   escreval("Você precisará de:",qtd," tijolos para constuir o muro")
   escreval("Para não faltar, compre:",1.1 * qtd+1:2:0, " tijolos ")
   escreval("Você precisará também de:",qtd/250+1:2:0," saco(s) de cimento")
   escreval("O custo médio é de: R$" ,(qtd * 0.35) + 35 * (qtd/250)+1:5:2, "  ")
fimse

se (op = 2) e (d = 1) então
   qtd1<-(cm * am)/(0.4104)
   escreval("Você precisará de:",qtd1," tijolos para constuir o muro")
   escreval("Para não faltar, compre:",1.1 * qtd1+1:2:0, " tijolos ")
   escreval("Você precisará também de:",qtd1/250+1:2:0," saco(s) de cimento")
   escreval("O custo médio é de: R$" ,(qtd1 * 0.50) + 35 * (qtd1/250)+1:5:2, "  ")
fimse

se (op = 3) e (d = 1) então
   qtd2<-(cm * am)/(0.7714)
   escreval("Você precisará de:",qtd2," tijolos para constuir o muro")
   escreval("Para não faltar, compre:",1.1 * qtd2+1:2:0, " tijolos ")
   escreval("Você precisará também de:",qtd2/250+1:2:0," saco(s) de cimento")
   escreval("O custo médio é de: R$" ,(qtd2 * 0.80) + 35 * (qtd2/250)+1:5:2, "  ")
fimse

se (op = 1) e (d = 2) então
   qtd3<-((cm * am)/(0.2394)) * 2
   escreval("Você precisará de:",qtd3," tijolos para constuir o muro")
   escreval("Para não faltar, compre:",1.1 * qtd3+1:2:0, " tijolos ")
   escreval("Você precisará também de:",qtd3/250+1:2:0," saco(s) de cimento")
   escreval("O custo médio é de: R$" ,(qtd3 * 0.35) + 35 * (qtd3/250)+1:5:2, "  ")
fimse

se (op = 2) e (d = 2) então
   qtd4<-((cm * am)/(0.4104)) * 2
   escreval("Você precisará de:",qtd4," tijolos para constuir o muro")
   escreval("Para não faltar, compre:",1.1 * qtd4+1:2:0, " tijolos ")
   escreval("Você precisará também de:",qtd4/250+1:2:0," saco(s) de cimento")
   escreval("O custo médio é de: R$" ,(qtd4 * 0.50) + 35 * (qtd4/250)+1:5:2, "  ")
fimse

se (op = 3) e (d = 2) então
   qtd5<-((cm * am)/(0.7714)) * 2
   escreval("Você precisará de:",qtd5," tijolos para constuir o muro")
   escreval("Para não faltar, compre:",1.1 * qtd5+1:2:0, " tijolos ")
   escreval("Você precisará também de:",qtd5/250+1:2:0," saco(s) de cimento")
   escreval("O custo médio é de: R$" ,(qtd5 * 0.80) + 35 * (qtd5/250)+1:2:0, "  ")
fimse
fimalgoritmo

Percebe a diferença?

 

Pronto. Com as alterações acima, resolveria o "problema" do "pré-cálculo". Mas ainda tem a questão da repetição de código, como visto abaixo.

 

 

 

 

Em // Saidas você exibe os resultados. Nela você exibe os resultados de acordo com as opções. Aqui está um outro problema, que provavelmente é o citado pelo professor:

 

23 horas atrás, vinifla81 disse:

Ele me disse que na entrada só poderia ter ler e escreva e na saída não poderia existir se então

 

Ou seja, você está exibindo EM CADA UM DOS SE as 4 respostas necessárias, sendo que ajustando alguns respectivos pequenos detalhes. Mas acontece que essas estruturas dos resultados são iguais para todas as possibilidades, mudando apenas algumas variáveis, logo, você está repetindo praticamente o mesmo código em cada se. Possivelmente foi o que ele tava tentando te repassar... dizer que a saída em si não precisa de se, já é uma única resposta.. e que os se deveriam servi apenas para "selecionar" o que vai para essa resposta no final.

 

Seria como deixar os se na etapa de processamento, e deixar apenas os 4 escreval() na saída.

 

Algo como:

 

A "saída", como postado na outra postagem, poderia ser basicamente assim:

20 horas atrás, Simon Viegas disse:

 escreval("Você precisará de:",qtd," tijolos para construir o muro")
 escreval("Para não faltar, compre:",1.1 * qtd+1:2:0, " tijolos ")
 escreval("Você precisará também de:",qtd/250+1:2:0," saco(s) de cimento")
 escreval("O custo médio é de: R$" ,(qtd * outro_valor_de_alguma_coisa) + 35 * (qtd/250)+1:5:2, "  ")

 

E no "processamentos" ficaria algo assim:

// Processamento
se (op = 1) e (d = 1) ENTÃO
   valor_de_alguma_coisa <- 0.2394
   multiplicador <- 1
fimSe
se (op = 2) e (d = 1) ENTÃO
   valor_de_alguma_coisa <- 0.4104
   multiplicador <- 1
fimSe
...




area <- (cm * am)
qtd  <- (area/valor_de_alguma_coisa) * multiplicador

 

No aguardo.

 

 

 

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