VisualgMaster

Bem vindo ao fórum visualgmaster, tudo relacionado ao visualg, tire suas dúvidas, resolva seus algoritmos.
 
InícioInício  PortalPortal  FAQFAQ  BuscarBuscar  Registrar-seRegistrar-se  MembrosMembros  GruposGrupos  Conectar-se  

Compartilhe | 
 

 Divisores

Ver o tópico anterior Ver o tópico seguinte Ir em baixo 
Ir à página : 1, 2  Seguinte
AutorMensagem
guga22
Iniciante
Iniciante


Número de Mensagens : 175
Data de inscrição : 27/10/2007

MensagemAssunto: Divisores   Dom Nov 04, 2007 5:40 pm

Eu estou tendo dificuldades em definir os divisores de um numero
Eu fiz o seguinte:
O que esta errado?
para i de n ate 0 passo - 1 faca

i <- 1
acm <- 1
se (n%n=0) entao
acm <- acm + 1
fimse

fimpara
Voltar ao Topo Ir em baixo
Ver perfil do usuário
Admin
Administradores
Administradores
avatar

Número de Mensagens : 126
Data de inscrição : 26/10/2007

MensagemAssunto: Re: Divisores   Dom Nov 04, 2007 9:45 pm

guga22, seu algoritmo tem dois erros muito simples, veja:

para...
i<- 1
fimpara


Com essa estrutura, a cada repetição a variável "i" receberá o valor 1.

se (n%n=0) entao


% = o algoritmo vai verificar se sobra "resto" na divisão, ex: "3 / 2 = 1 com resto 1", isso pode ser visto no estudo de binários.
Um número dividido por ele mesmo sempre vai dar "resto" 0.

Não entendi o acm <- acm + 1, talvez porque eu não tenha vista o resto do algoritmo, posta todo ele aqui.

_________________
Equipe VisualgMaster.
Voltar ao Topo Ir em baixo
Ver perfil do usuário http://visualgmaster.livreforum.com
guga22
Iniciante
Iniciante


Número de Mensagens : 175
Data de inscrição : 27/10/2007

MensagemAssunto: Re: Divisores   Seg Nov 05, 2007 10:44 am

Agora o algoritmo esta dando errado
Eu fiz a alteração recomendada mais continua dando erro no acm.
Pois, o acm receberá um valor mais 1

escreva("Digite um numero qualquer: ")
leia(n)
i <- 1
para i de n ate 0 passo - 1 faca

se (n%n=0) entao
acm <- acm + 1
fimse

fimpara

escreval("Divisores de",n," =",acm)
Voltar ao Topo Ir em baixo
Ver perfil do usuário
Admin
Administradores
Administradores
avatar

Número de Mensagens : 126
Data de inscrição : 26/10/2007

MensagemAssunto: Re: Divisores   Seg Nov 05, 2007 11:15 am

Admin escreveu:

se (n%n=0) entao


% = o algoritmo vai verificar se sobra "resto" na divisão, ex: "3 / 2 = 1 com resto 1", isso pode ser visto no estudo de binários.
Um número dividido por ele mesmo sempre vai dar "resto" 0.
Preste mais atenção!

Você deve verificar o resto da divisão de 'n' por 'i', e não 'n' por 'n'

_________________
Equipe VisualgMaster.
Voltar ao Topo Ir em baixo
Ver perfil do usuário http://visualgmaster.livreforum.com
guga22
Iniciante
Iniciante


Número de Mensagens : 175
Data de inscrição : 27/10/2007

MensagemAssunto: Re: Divisores   Seg Nov 05, 2007 12:35 pm

Obrigado.
Eu não tinha lido direito
Eu fiz a alteração mais me esqueci dessa.
E me diz uma coisa.
A variavel acm <- acm + 1 vai receber + 1 a cada divisor encontrado pelo número?
Voltar ao Topo Ir em baixo
Ver perfil do usuário
guga22
Iniciante
Iniciante


Número de Mensagens : 175
Data de inscrição : 27/10/2007

MensagemAssunto: Re: Divisores   Seg Nov 05, 2007 12:37 pm

Agora deu erro na divisão. E i%n.
Confere?
Voltar ao Topo Ir em baixo
Ver perfil do usuário
guga22
Iniciante
Iniciante


Número de Mensagens : 175
Data de inscrição : 27/10/2007

MensagemAssunto: Re: Divisores   Seg Nov 05, 2007 12:41 pm

Deu certo mais tem um erro pois, quando coloca-se 6 aparece só 7 divisores sendo que 6 possui 8 divisores

Os divisores de 6 são: 1,2,3 e 6, -1,-2,-3 e -6 confere?
Voltar ao Topo Ir em baixo
Ver perfil do usuário
guga22
Iniciante
Iniciante


Número de Mensagens : 175
Data de inscrição : 27/10/2007

MensagemAssunto: Re: Divisores   Seg Nov 05, 2007 12:44 pm

E a variavel acm deverá ter a mesma estrutura que eu postei anteriormente?
Voltar ao Topo Ir em baixo
Ver perfil do usuário
Admin
Administradores
Administradores
avatar

Número de Mensagens : 126
Data de inscrição : 26/10/2007

MensagemAssunto: Re: Divisores   Seg Nov 05, 2007 1:07 pm

Mais atenção as regras!!
Admin escreveu:

Quinta Regra:

Evite o "double post", ou seja, post duplo, edite sempre que poder, até porque flood eh proibido.

1º aviso adicionado, leia: Sobre Alertas

_________________
Equipe VisualgMaster.
Voltar ao Topo Ir em baixo
Ver perfil do usuário http://visualgmaster.livreforum.com
Suporte
Administradores
Administradores
avatar

Número de Mensagens : 35
Data de inscrição : 26/10/2007

MensagemAssunto: Re: Divisores   Seg Nov 05, 2007 1:27 pm

Não sabia que eram necessários números negativos, teste mudar o 'para' assim:

para i de n ate -n passo - 1 faca

Pelo que percebi, acm contará o número de divisores.

Se não der certo poste aqui e testarei aqui.
Voltar ao Topo Ir em baixo
Ver perfil do usuário
guga22
Iniciante
Iniciante


Número de Mensagens : 175
Data de inscrição : 27/10/2007

MensagemAssunto: Re: Divisores   Seg Nov 05, 2007 5:56 pm

Agora esta dando o resultado de 3 divisores
Olha eu fiz assim:
Se eu colocar n%i da a mensagem division by zero
O que esta errado agora?
Ta dificil resolver o problema

escreva("Digite um numero qualquer: ")
leia(n)
i <- 1

para i de n ate -n passo -1 faca

se (i%n=0) entao
acm <- acm + 1
fimse

fimpara

escreval("Divisores de",n," =",acm)
Voltar ao Topo Ir em baixo
Ver perfil do usuário
Leon
Novato
Novato


Número de Mensagens : 7
Data de inscrição : 28/10/2007

MensagemAssunto: Re: Divisores   Seg Nov 05, 2007 7:33 pm

Amigo, poste aqui o seu algoritmo para que eu possa te ajudar.
Voltar ao Topo Ir em baixo
Ver perfil do usuário
guga22
Iniciante
Iniciante


Número de Mensagens : 175
Data de inscrição : 27/10/2007

MensagemAssunto: Re: Divisores   Ter Nov 06, 2007 11:20 am

Ta aqui o algoritmo
Não sei onde esta o erro.
algoritmo "divisores"
// Função : Calcular divisores de um numero
// Autor : Gustavo Rodrigues Torre
// Data : 29/10/07
// Seção de Declarações
var
n,i : inteiro
acm : inteiro
inicio
// Seção de Comandos
escreva("Digite um numero qualquer: ")
leia(n)
para i de n ate 0 passo - 1 faca
i <- 1

se (n % i = 0) entao
acm <- acm + 1
fimse

fimpara

escreval("Divisores de",n," =",acm)

fimalgoritmo
Voltar ao Topo Ir em baixo
Ver perfil do usuário
Admin
Administradores
Administradores
avatar

Número de Mensagens : 126
Data de inscrição : 26/10/2007

MensagemAssunto: Re: Divisores   Ter Nov 06, 2007 7:15 pm

Você tem que exibir quais os divisores? Esse erro "division by zero" é porque está dividindo por zero no momento em que o loop chega ao mesmo.
Pense um pouco e crie uma condição para que o algoritmo não faça essa divisão.

_________________
Equipe VisualgMaster.
Voltar ao Topo Ir em baixo
Ver perfil do usuário http://visualgmaster.livreforum.com
guga22
Iniciante
Iniciante


Número de Mensagens : 175
Data de inscrição : 27/10/2007

MensagemAssunto: Re: Divisores   Ter Nov 06, 2007 7:24 pm

O erro já foi corrigido eu postei o algoritmo como o Leon
havia me pedido
Mais se olhar bem o que eu disse por exeplo 6 tem 8 divisores sendo 4 positivos e 4 negativos e programa só me mostra 7.
O erro esta nisto.
O division by zero eu resolvi colocando (n % i = 0).
Voltar ao Topo Ir em baixo
Ver perfil do usuário
Admin
Administradores
Administradores
avatar

Número de Mensagens : 126
Data de inscrição : 26/10/2007

MensagemAssunto: Re: Divisores   Ter Nov 06, 2007 7:25 pm

Bom, posta ele agora como ficou para eu ver qual o erro.

_________________
Equipe VisualgMaster.
Voltar ao Topo Ir em baixo
Ver perfil do usuário http://visualgmaster.livreforum.com
guga22
Iniciante
Iniciante


Número de Mensagens : 175
Data de inscrição : 27/10/2007

MensagemAssunto: Re: Divisores   Ter Nov 06, 2007 7:45 pm

Ta aqui acho que vc vai achar o erro

algoritmo "divisores"
// Função : Calcular divisores de um numero
// Autor : Gustavo Rodrigues Torre
// Data : 29/10/07
// Seção de Declarações
var
n,i : inteiro
acm : inteiro
inicio
// Seção de Comandos
escreva("Digite um numero qualquer: ")
leia(n)
para i de n ate 0 passo -1 faca
i <- 1

se (n % i = 0) entao
acm <- acm + 1
fimse

fimpara

escreval("Divisores de",n," =",acm)

fimalgoritmo
Voltar ao Topo Ir em baixo
Ver perfil do usuário
Admin
Administradores
Administradores
avatar

Número de Mensagens : 126
Data de inscrição : 26/10/2007

MensagemAssunto: Re: Divisores   Ter Nov 06, 2007 7:58 pm

Leia todas as minhas respostas desse tópico e terá a resolução de um dos erros.


Outra coisa, como suporte já havia falado, muito erros podem ser resolvidos usando o "f8", ferramente que executa o passo-a-passo, execute e veja os valores que cada variável recebe a cada loop e verá outro erro, agora:
para i de n ate 0 passo -1 faca
Como valem resultados negativos também, você deve fazer com que o contador va até o negativo do 'n'

_________________
Equipe VisualgMaster.
Voltar ao Topo Ir em baixo
Ver perfil do usuário http://visualgmaster.livreforum.com
guga22
Iniciante
Iniciante


Número de Mensagens : 175
Data de inscrição : 27/10/2007

MensagemAssunto: Re: Divisores   Qua Nov 07, 2007 9:32 am

Já resolvi um dos erros que era para contar os negativo.
Agora ao invés de o algoritmo me mostrar 7 divisores de 6 me mostra 7

A estrutura esta assim:

para i de n ate -n passo -1 faca
i <- 1

se (n % i = 0) entao
acm <- acm + 1
fimse

fimpara
Voltar ao Topo Ir em baixo
Ver perfil do usuário
Admin
Administradores
Administradores
avatar

Número de Mensagens : 126
Data de inscrição : 26/10/2007

MensagemAssunto: Re: Divisores   Qua Nov 07, 2007 11:02 am

Você só resolveu o que eu disse, mas eu mostrei dicas importantes, vou falar de novo, execute passo-a-passo usando o "f8" e verifique o valor que cada variável recebe a cada repetição do loop, e leia ATENTAMENTE todas as minhas mensagens deste mesmo tópico.

_________________
Equipe VisualgMaster.
Voltar ao Topo Ir em baixo
Ver perfil do usuário http://visualgmaster.livreforum.com
guga22
Iniciante
Iniciante


Número de Mensagens : 175
Data de inscrição : 27/10/2007

MensagemAssunto: Re: Divisores   Qua Nov 07, 2007 12:26 pm

Eu fiz assim seguindo o modelo de código em c que eu encontrei

se (n % i = 0) entao
i <- i + 1
fimse

E o programa me mostra -7
E quanto as variaves elas estão recebendo numeros iguais
Isto esta dificil de se resolver
Voltar ao Topo Ir em baixo
Ver perfil do usuário
Admin
Administradores
Administradores
avatar

Número de Mensagens : 126
Data de inscrição : 26/10/2007

MensagemAssunto: Re: Divisores   Qua Nov 07, 2007 3:49 pm

Posta todo para eu ver.

_________________
Equipe VisualgMaster.
Voltar ao Topo Ir em baixo
Ver perfil do usuário http://visualgmaster.livreforum.com
guga22
Iniciante
Iniciante


Número de Mensagens : 175
Data de inscrição : 27/10/2007

MensagemAssunto: Re: Divisores   Qua Nov 07, 2007 5:43 pm

Ta aqui o algoritmo.
Ele esta dificil de se fazer.


algoritmo "divisores"
// Função : Calcular divisores de um numero
// Autor : Gustavo Rodrigues Torre
// Data : 29/10/07
// Seção de Declarações
var
n,i : inteiro
inicio
// Seção de Comandos

escreva("Digite um numero qualquer: ")
leia(n)
para i de n ate -n passo -1 faca

i <- 1

se (n %i = 0) entao
i <- i + 1
fimse

fimpara
escreval("Divisores de",n, " são ",i)


fimalgoritmo
Voltar ao Topo Ir em baixo
Ver perfil do usuário
Admin
Administradores
Administradores
avatar

Número de Mensagens : 126
Data de inscrição : 26/10/2007

MensagemAssunto: Re: Divisores   Qua Nov 07, 2007 5:46 pm

Amigo, como eu já disse, você não leu todas as minhas respostas, vou ser mais exato, execute o "f8", veja os valores que cada variável recebe (principalmente a variável 'i'). Mais uma coisa, se o i é o contador, porque ta recebendo valores dentro do loop?


Foi adicionado 5% de alerta por falta de atenção.

_________________
Equipe VisualgMaster.
Voltar ao Topo Ir em baixo
Ver perfil do usuário http://visualgmaster.livreforum.com
guga22
Iniciante
Iniciante


Número de Mensagens : 175
Data de inscrição : 27/10/2007

MensagemAssunto: Re: Divisores   Qua Nov 07, 2007 6:22 pm

Pq no código em C estava assim: i++ ou seja o contador recebendo +1.
Estou fazendo por partes

A variavel acm recebe os seguintes valores:

1 2 3 4 5 6 7 8 9 10 11 12 13

A variavel i recebe os seguintes valores

1 1 1 1 1 1 1 1 1 1 1 1 1

E a variavel n recebe

Só valores 6
Voltar ao Topo Ir em baixo
Ver perfil do usuário
Conteúdo patrocinado




MensagemAssunto: Re: Divisores   

Voltar ao Topo Ir em baixo
 
Divisores
Ver o tópico anterior Ver o tópico seguinte Voltar ao Topo 
Página 1 de 2Ir à página : 1, 2  Seguinte

Permissão deste fórum:Você não pode responder aos tópicos neste fórum
VisualgMaster :: VisualgMaster :: Pedidos de algoritmos :: Algoritmos resolvidos-
Ir para: