Ir ao conteúdo
  • Cadastre-se
AleKing31

VisualG Algoritmo de raiz quadrada aproximada com numero inteiro

Recommended Posts

Eu fiz esse algoritmo e queria saber se esta certo ou eu teria que melhorar mais ele

3.2-Elabore um algoritmo que calcule um numero inteiro que mais se aproxima da raiz quadrada de um numero fornecido pelo usuário.

algoritmo "semnome"
var
n, raz, rap, rap2:real
c:inteiro
inicio
leia(n)
raz <- raizq(n)
//falta
c <- 0
enquanto (raz > c)faca
   c <- c + 1
   se c > raz então
      rap <- c - 1
   fimse
fimenquanto
//execesso
c <- 0
enquanto (raz > rap2)faca
   c <- c + 1
   se raz <= c então
      rap2 <- c
   fimse
fimenquanto
se(raz = c)então
   escreva(rap2)
senao
   escreval(rap, " falta ")
   escreva(rap2, " Execesso ")
fimse
fimalgoritmo

 

  • Curtir 3

Compartilhar este post


Link para o post
Compartilhar em outros sites
Em 28/02/2018 às 19:42, AleKing31 disse:

3.2-Elabore um algoritmo que calcule um numero inteiro que mais se aproxima da raiz quadrada de um numero fornecido pelo usuário.

 

O enunciado pede para retornar o número inteiro mais próximo da raiz quadrada do número que o usuário digitou.

 

Exemplo:

  1. Usuário digita 2;
  2. Você calcula a raiz de 2 e vê que é um número quebrado (1,414...);
  3. Faz um algoritmo para descobrir o qual é o número inteiro mais próximo de 1,414;
  4. Escreve na tela qual é esse número.

 

Então, está certo.

 

Como melhorar

 

Já tentou usar a função Int()?

 

Ela retorna a parte inteira de um número. Por isso, acredito que torna o algoritmo bem mais simples, se você pensar um pouquinho.

 

Escrevendo: 

val <- 3,14
result <- Int(val)
escreva("Seu número inteiro é", result)

Compila:

Seu número inteiro é 3

Aqui, você encontra um link para ler sobre essa e outras funções nativas:

 

http://www.apoioinformatica.inf.br/produtos/item/30-as-funcoes-do-visualg-versao-2-0

  • Curtir 1
  • Obrigado 1

Compartilhar este post


Link para o post
Compartilhar em outros sites
1 hora atrás, Joao_Lucaas disse:

 

O enunciado pede para retornar o número inteiro mais próximo da raiz quadrada do número que o usuário digitou.

 

Exemplo:

  1. Usuário digita 2;
  2. Você calcula a raiz de 2 e vê que é um número quebrado (1,414...);
  3. Faz um algoritmo para descobrir o qual é o número inteiro mais próximo de 1,414;
  4. Escreve na tela qual é esse número.

 

Então, está certo.

 

Como melhorar

 

Já tentou usar a função Int()?

 

Ela retorna a parte inteira de um número. Por isso, acredito que torna o algoritmo bem mais simples, se você pensar um pouquinho.

 

Escrevendo: 


val <- 3,14
result <- Int(val)
escreva("Seu número inteiro é", result)

Compila:


Seu número inteiro é 3

Aqui, você encontra um link para ler sobre essa e outras funções nativas:

 

http://www.apoioinformatica.inf.br/produtos/item/30-as-funcoes-do-visualg-versao-2-0

Não sabia dessa função e muito obrigado pela ajuda 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá.

 

@AleKing31, acho que não poderia usar a função raizq(). Em vez de "raz=c", poderia fazer "n=c*c". Entende?

 

@Joao_Lucaas, ai acho que seria uma lógica diferente, ou seja, passaria a ser algo como "retornar a parte inteira da raiz de n".

 

 

 

obs.: ambos os algoritmos tem um probleminha... vejam esse detalhe:

Em 28/02/2018 às 19:42, AleKing31 disse:

[...] um numero inteiro que mais se aproxima da raiz quadrada [...]

ou seja, o 1 está retornando duas respostas (qual a certa?) e o 2 está retornando uma, mas nem sempre dando certo... por exemplo.

 

Se n=15, o inteiro seria 4. Correto?

 

No 1, deu 3 e 4 (o enunciado pede um número);

No 2, daria 3 (não corresponde)

 

RESUMINDO:

Acho que deveria ser mais ou menos como @AleKing31 fez, apenas que não poderia usar a função raizq() e que deve dar uma única resposta. Se colocou 15, tem que me retornar 4. Se coloquei 10, tem que me retornar 3. Etc.

 

O que acham?

 

Aí, "corrigindo" esses detalhes, teria outros pontos a serem analisados.

 

 

 

 

No aguardo.

 

Compartilhar este post


Link para o post
Compartilhar em outros sites
7 minutos atrás, Simon Viegas disse:

Olá.

 

@AleKing31, acho que não poderia usar a função raizq(). Em vez de "raz=c", poderia fazer "n=c*c". Entende?

 

@Joao_Lucaas, ai acho que seria uma lógica diferente, ou seja, passaria a ser algo como "retornar a parte inteira da raiz de n".

 

 

 

obs.: ambos os algoritmos tem um probleminha... vejam esse detalhe:

ou seja, o 1 está retornando duas resposta (qual a certa?) e o 2 está retornando uma, mas nem sempre dando certo... por exemplo.

 

Se n=15, o inteiro seria 4. Correto?

 

No 1, deu 3 e 4 (o enunciado pede um número);

No 2, daria 3 (não corresponde)

 

RESUMINDO:

Acho que deveria ser mais ou menos como @AleKing31 fez, apenas que não poderia usar a função raizq() e que deve dar uma única resposta. Se colocou 15, tem que me retornar 4. Se coloquei 10, tem que me retornar 3. Etc.

 

O que acham?

 

Aí, "corrigindo" esses detalhes, teria outros ponto a serem analisados.

 

 

 

 

No aguardo.

 

Agora que vi pede mesmo um numero(to péssimo em interpretação de texto), eu fiz direito com a raizq(), vendo agora tava mesmo para fazer sem ela

Compartilhar este post


Link para o post
Compartilhar em outros sites
1 minuto atrás, AleKing31 disse:

Agora que vi pede mesmo um numero(to péssimo em interpretação de texto), eu fiz direito com a raizq(), vendo agora tava mesmo para fazer sem ela

Outra coisa, se entendi bem, o excesso seria simplesmente rap+1, ou seja, não precisaria "recalcular". Mas de qualquer forma essa parte não fará mais parte.

 

Resumindo:

1 - não use a raizq();

2 - você precisa ver uma forma de apenas exibir o número mais próximo, em vez "da parte inteira da raiz". Nem sempre o mais próximo será a parte inteira!

 

 

ADENDO

2 horas atrás, Joao_Lucaas disse:

O enunciado pede para retornar o número inteiro mais próximo da raiz quadrada do número que o usuário digitou.

Se considerar que "calcular" e "retornar" são equivalentes, o código do @Joao_Lucaas seria mais simples e objetivo. Apenas que o int() não serviria, pois este "retorna" a parte inteira, mas o enunciado pede o mais próximo, ou seja, teria que ver uma forma de arredondar o número (e não apenas remover a parte decimal).

 

 

Então, tenta ajustar o seu código e posta aqui para analisarmos.

 

No aguardo.

  • Obrigado 1

Compartilhar este post


Link para o post
Compartilhar em outros sites
 

Outra coisa, se entendi bem, o excesso seria simplesmente rap+1, ou seja, não precisaria "recalcular". Mas de qualquer forma essa parte não fará mais parte.

 

Resumindo:

1 - não use a raizq();

2 - você precisa ver uma forma de apenas exibir o número mais próximo, em vez "da parte inteira da raiz". Nem sempre o mais próximo será a parte inteira!

 

 

ADENDO

Se considerar que "calcular" e "retornar" são equivalentes, o código do @Joao_Lucaas seria mais simples e objetivo. Apenas que o int() não serviria, pois este "retorna" a parte inteira, mas o enunciado pede o mais próximo, ou seja, teria que ver uma forma de arredondar o número (e não apenas remover a parte decimal).

 

 

Então, tenta ajustar o seu código e posta aqui para analisarmos.

 

No aguardo.

 

Eu fiz aqui bem rápido com as dicas que você mim deu:

algoritmo "semnome"
var
   n, rap:real
   c:inteiro
inicio
   leia(n)
   c <- 0
   enquanto (n >= c*c)faca
      c <- c + 1
   fimenquanto
   rap <- c - 1
   escreva(rap)
fimalgoritmo

 

Compartilhar este post


Link para o post
Compartilhar em outros sites
10 horas atrás, Simon Viegas disse:

Se considerar que "calcular" e "retornar" são equivalentes, o código do @Joao_Lucaas seria mais simples e objetivo. Apenas que o int() não serviria, pois este "retorna" a parte inteira, mas o enunciado pede o mais próximo, ou seja, teria que ver uma forma de arredondar o número (e não apenas remover a parte decimal).

 

Foi exatamente isso, que eu quis sugerir para ele. O exemplo que dei sobre Int() foi só para introduzi-lo. Portanto, essa função seria só um intermediário para chegar no resultado esperado, mas com um código mais simples que primeiro.

adicionado 8 minutos depois

@AleKing31

 

Estás quase lá, cara.

 

Por enquanto, teu código está só arredondando para baixo. O exercício quer algo assim:

 

Situação X

  1. Usuário digita 3;
    1. Algoritmo calcula a raiz, que seria 1.732...;
    2. Algoritmo descobre qual é o número inteiro mais próximo de 1.732....
  2. Usuário recebe o número 2.

 

Situação Y

  1. Usuário digita 2;
    1. Algoritmo calcula a raiz, que seria 1.414...;
    2. Algoritmo descobre qual é o número inteiro mais próximo 1.414....
  2. Usuário recebe o número 1.

 

  • Curtir 2

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá.

 

@Joao_Lucaas:

 

 

Por enquanto, teu código está só arredondando para baixo. O exercício quer algo assim:

 

Situação X

  1. Usuário digita 3;
    1. Algoritmo calcula a raiz, que seria 1.732...;
    2. Algoritmo descobre qual é o número inteiro mais próximo de 1.732....
  2. Usuário recebe o número 2.

 

Situação Y

  1. Usuário digita 2;
    1. Algoritmo calcula a raiz, que seria 1.414...;
    2. Algoritmo descobre qual é o número inteiro mais próximo 1.414....
  2. Usuário recebe o número 1.

 

Pelo que eu entendi não seria assim... resumidamente ele não poderia "calcular a raiz com uma fórmula pronta" e usar o resultado como referência para "retornar a raiz arredondada"... o programa em si deverá servir para isso. Fazendo uma analogia, seria como um perito criminal utilizar uma foto do suspeito para criar um "retrato falado"... entende? A ideia seria criar uma algoritmo para calcular o número mais próximo... que é diferente de retornar o número, ou seja, o resultado será o mesmo, mas o processo seria diferente. Não é o fim que importa, mas sim o meio.

 

 

@AleKing31 , então, da forma que idealizo, seria mais ou menos assim:

- ou o número inteiro é a própria raiz do número; (ex.: 3 para 9)

- ou a raiz não é exata... para esse caso, poderia calcular o quadrado posterior e ai verificar qual está mais próximo do número original, ou seja, o quadrado do inteiro mais próximo será o que tiver a menor diferença com o número. Exemplos: n=10, 3^2=9 e 4^2=16, logo o inteiro será 3. Para n=15, 3^2=9, 4^2=16, logo o inteiro será 4.

 

Obs. 1: e se for exatamente no meio? ai dê seus pulos para pensar em como resolver, rs

Obs. 2: como não tenho certeza, nem muito menos sou o dono da verdade, sugiro fazer das duas formas... (como sugeri acima, e o algoritmo do @Joao_Lucaas). Assim treinará duas estruturas diferentes e terá duas formas supostamente válidas.

 

No aguardo.

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

@Simon Viegas Entendi, agora... :thumbsup:

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro 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 publicações 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

×