Ir ao conteúdo

Posts recomendados

Postado

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

  • Membro VIP
Postado

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.

 

Postado
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

  • Membro VIP
Postado
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
Postado
 

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

 

Postado
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
  • Membro VIP
Postado

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

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