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 : Anterior  1, 2
AutorMensagem
Admin
Administradores
Administradores
avatar

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

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

Você concorca que com essa estrutura o 'n' so vai dividir por 'i' que é 1 sempre? E outra quem recebe o +1 a cada divisor não seria o 'i', crie uma variável pra receber esse valor, nesse algoritmo que você me passou não tem a variável 'acm'.

_________________
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:40 pm

Esqueci o i seria o acm.
Eu concordo que i sempre vai receber 1.
Pq o i<- 1 esta declarado o que fazer então para não receber só 1?

Só para vc ver uma coisa O código em C e este:

#include <stdio.h>

main()
{
int n, i;

printf("Digite um numero um número:\n");
scanf("%d", &n );
printf("Os divisores de %d são ", n );
for( i = 1; i <= n; i++ )
if( n % i == 0 )
printf("%d ", i );
printf("\n");
}
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 6:48 pm

Você nao pode ter o 'i' recebendo valores dentro de um loop que o próprio 'i' é o contador.
Você tem que criar uma condição que o algoritmo verifique se a variável 'i' está valendo '0', e se tiver com esse valor, pare o loop e comece outro do -1 até o negativo do número, ex:

para i ....
se ( i = 0 ) entao
pare o algoritmo
fimse
....
....
....
fimpara
para i....
....
....
....

Você substitui "..." pelo que já ta feito no algoritmo.

_________________
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:55 pm

Este
para i ....
se ( i = 0 ) entao
pare o algoritmo
fimse

Seria a primeira condição
para i de n ate 0 passo -1

e o segunda seria
para i de n ate -1 passo -1
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 6:59 pm

Exatamente. Faça-o e poste aqui se houver erros.

_________________
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 7:06 pm

Parece que agora estamos melhorando o algoritmo
Mais para divisores maior do que 6 ele apresenta numeros grandes
Por exemplo D(54) = 56 ?
Isto e impossivel
Mais o de 6 ele me retornou 8.
Existe a possibilidade de criar mais uma condição para que ele me mostre divisores maiores do que 6?

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,acm : inteiro
inicio
// Seção de Comandos

escreva("Digite um numero qualquer: ")
leia(n)

para i de n ate 0 passo -1 faca
se ( i = 0 ) entao
interrompa
fimse
fimpara

para i de n ate -1 passo -1 faca
i <- 1
se (n % i = 0) entao
acm <- acm + 1
fimse

fimpara
escreval("Divisores de",n, " são ",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   Qua Nov 07, 2007 7:21 pm

Outra coisa que você pode fazer, é botar esse 'se' dentro de outro 'se', assim:
se (i <> 0)
se ( n % i=0)
....
fimse
fimse

_________________
Equipe VisualgMaster.


Última edição por em Qua Nov 07, 2007 7:25 pm, editado 1 vez(es)
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 7:22 pm

E isto gera-ra um algoritmo que me mostre divisores maiores do que 6?
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 7:28 pm

Esse seu algoritmo há dois erros, preste mais atenção:
para i de n ate -1 passo -1 faca
i <- 1
se (n % i = 0) entao
acm <- acm + 1
fimse

NUNCA faça um contador receber um valor dentro do loop.

para i de n ate 0 passo -1 faca
se ( i = 0 ) entao
interrompa
fimse
fimpara

Nesse loop ele so verifica se é zero, faça-o verificar se n é divisível por i.
MAIS ATENÇÃO.

_________________
Equipe VisualgMaster.


Última edição por Admin em Dom Jun 15, 2008 7:32 pm, editado 1 vez(es)
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 7:46 pm

Desculpa eu não tinha visto isso
E o contador agora eu coloquei no lugar certo?
Agora ele me mostra 5 divisores
Eu tenho que acrescentar mais alguma coisa no algoritmo?

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,acm : inteiro
inicio
// Seção de Comandos
escreva("Digite um numero qualquer: ")
leia(n)
i <- 1
para i de n ate 0 passo -1 faca
se (i <> 0) entao
se ( i = 0 ) entao
se (n % i = 0) entao
acm <- acm + 1
interrompa
fimse
fimse
fimse
fimpara
i <- 1
para i de n ate -1 passo -1 faca

se (i <> 0) entao
se (n % i = 0) entao
acm <- acm + 1
fimse
fimse
fimpara
escreval("Divisores de",n, " são ",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   Qua Nov 07, 2007 8:04 pm

Três coisas desnecessárias nesse algoritmo,
i <- 1


se ( i = 0 ) entao


interrompa

para i de n ate -1 passo -1 faca

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

Agora, preste atenção será a ultima mensagem deste tópico, como você já está verificando se 'i' é diferente de '0', então você não precisa saber se o 'i' é igual a '0', outra coisa, se você tivesse usado o "f8" teria percebido que o seu primeiro loop so está repetindo uma vez e não está chegando até o '0' como deveria. Esse ultimo loop não é necessário já que você verificou 'se i <> 0'. E mais uma coisa como você tirou o ultimo loop, lembre-se de fazer com q o primeiro loop vá de 'n' até '-n'.


Pense que você consegue fazer, Tópico Trancado.

_________________
Equipe VisualgMaster.
Voltar ao Topo Ir em baixo
Ver perfil do usuário http://visualgmaster.livreforum.com
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 2 de 2Ir à página : Anterior  1, 2

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: