Ir ao conteúdo
  • Comunicados

    • Gabriel Torres

      Seja um moderador do Clube do Hardware!   12-02-2016

      Prezados membros do Clube do Hardware, Está aberto o processo de seleção de novos moderadores para diversos setores ou áreas do Clube do Hardware. Os requisitos são:   Pelo menos 500 posts e um ano de cadastro; Boa frequência de participação; Ser respeitoso, cordial e educado com os demais membros; Ter bom nível de português; Ter razoável conhecimento da área em que pretende atuar; Saber trabalhar em equipe (com os moderadores, coordenadores e administradores).   Os interessados deverão enviar uma mensagem privada para o usuário @Equipe Clube do Hardware com o título "Candidato a moderador". A mensagem deverá conter respostas às perguntas abaixo:   Qual o seu nome completo? Qual sua data de nascimento? Qual sua formação/profissão? Já atuou como moderador em algo outro fórum, se sim, qual? De forma sucinta, explique o porquê de querer ser moderador do fórum e conte-nos um pouco sobre você.   OBS: Não se trata de função remunerada. Todos que fazem parte do staff são voluntários.
    • DiF

      Poste seus códigos corretamente!   21-05-2016

      Prezados membros do Fórum do Clube do Hardware, O Fórum oferece um recurso chamado CODE, onde o ícone no painel do editor é  <>     O uso deste recurso é  imprescindível para uma melhor leitura, manter a organização, diferenciar de texto comum e principalmente evitar que os compiladores e IDEs acusem erro ao colar um código copiado daqui. Portanto convido-lhes para ler as instruções de como usar este recurso CODE neste tópico:  
Samuel Barbosa Ramos

VisualG Algoritmo URI online 1968, Terra Desconhecida

Recommended Posts

Estou tentando resolver o exercício 1968 (A terra desconhecida) do URI online judge, mal consigo sair do início, até agora o que consegui fazer inserir as variáveis (rsrs). Preciso de ajuda pelo menos para entender um pouco mais do exercício, por favor.

Obs: Pelo que eu entendi eu vou ter que descobrir quais números entre os números inseridos apresentam n divisores (ex: 2 divisores), então multiplicar a quantidade de números que supre essa condição por "n" (A quantidade de divisores estabelecidas pelo usuário) para poder achar as possibilidades de formação de grupo, onde os cidadão estão enumerados de A a B e a quantidade de grupos e obtida através de quantos líderes há. Os líderes são determinados pelo seu número, caso ele tenha n divisores. Aqui um pouco do que já fiz:

Var
// Seção de Declarações das variáveis 
a,b,n: inteiro
poss: real
Inicio
// Seção de Comandos, procedimento, funções, operadores, etc... 
escreval("os baobás começaram a crescer e tomaram conta da Terra Desconhecida.")
escreval("Agora, os cidadãos precisam se mudar urgentemente. Para auxiliar na")
escreval("evacuação, todos os cidadãos foram numerados de A a B . Para definir")
escreval("quem seriam os líderes dos grupos durante a evacuação, alguém sugeriu")
escreval("que os líderes deveriam ser todos aqueles que houvessem recebido um")
escreval("número primo. Mas logo outra ideia surgiu: Um número primo é um número")
escreval("que possui exatamente 2 divisores. E se os líderes fossem aqueles que")
escreval("receberam um número com exatamente N divisores?")
escreval("Insira o número N escolhido pelos cidadãos:")
leia (N)
escreval("Os cidadãos foram enumerados de A a B,insira esses valores,respectivamente:")
leia (a,b)

 

Editado por DiF
Botão CODE <>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá @Samuel Barbosa Ramos.

 

Tente focar na base dos problemas... ir do mais simples para o mais complexo.

 

O segredo é fazer abstrações...

 

Qual o objetivo maior do problema?

Resp: A identificação de líderes.

 

Ok, mas como identifico os líderes?

Resp: Os líderes são aqueles que possuem um número com exatamente N divisores.

 

Certo, então como identifico a quantidade de divisores de um número?

Resp.: Aqui está o foco! Você precisa saber com faz isso.

 

Perceba que a necessidade básicas vem do mais simples... saímos do mais complexo em caminho de algo mais básico...

 

 

Então... seria mais ou menos o que você sugeriu:

Em 24/09/2017 às 12:41, Samuel Barbosa Ramos disse:

Obs: Pelo que eu entendi eu vou ter que descobrir quais números entre os números inseridos apresentam n divisores (ex: 2 divisores),

 

Para calcular os múltiplos de "N" números, é necessário saber calcular de 1 antes, correto?... Traduzindo,

 

Você focar em fazer inicialmente algo assim:

"Faça um programa que recebe um número X, e retorne o número de divisores que X possui".

 

A base de conhecimento estaria encaminhada.. Depois, evolua o código para algo como:

"Faça um programa retorne o número de divisores de 10 números".

 

Perceba que executar para "10 números" também é uma base, se já fez isso para outra lógica qualquer, conseguirá adaptar para seu problema... Depois, algo como:

"Faça um programa retorne o número de divisores de uma faixa de números, ex.: 5 a 20".

 

Idem ao anterior, pereba que a "dificuldade maior" seria "achar a quantidade de divisores"... ir de "5 a 20" seria uma pequena diferença de 1 a 10...

 

 

Por ai vai... a depender da experiência, já daria para ir direto ao objetivo... mas sempre ter em mente que a base é tudo. Não tem como tentar aprender a correr antes de saber andar.

 

 

Veja que já sabendo calcular a quantidade de divisores, bastará verificar se essa quantidade é igual o valor desejado.

 

 

RESUMINDO

Sugiro que faça esse programa, para criar experiência:
"Faça um programa que recebe um número X, e retorne o número de divisores que X possui".

 

Percebe que o problema proposto é isso acima, só que com mais firulas...

 

 

Posta o código aqui, e onde está com dúvidas.

 

 

 

No aguardo.

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites
  • Autor do tópico
  • @Simon Viegas

    Var
       // Seção de Declarações das variáveis
       n, cont: inteiro
    
    
    Inicio
       // Seção de Comandos, procedimento, funções, operadores, etc...
       escreva ("Insira um número:")
       leia (n)
       para i de 1 ate n faca
          se n mod i = 0 então
             cont<-cont+1
          fimse
       fimpara
       escreval (cont)

    Eu fiz o algoritmo que só descobre os divisores de um certo número, não consegui passar pra descobrir de vários números

    Editado por Simon Viegas
    Ao postar um código, antes pressione o botão "<>" na barra de ferramentas

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites
  • Autor do tópico
  • @Simon Viegas Oi, refiz o código com algumas coisas mais que já imprime quantos números apresentam "n" divisores, meu problema agora está em achar as possibilidades de formação de grupo. Aqui o algoritmo:

     // Seção de Declarações das variáveis
       n1, n2,cont,i, di,j,cont2, poss : inteiro
       
    
    Inicio
       // Seção de Comandos, procedimento, funções, operadores, etc...
       escreva ("Insira o número de quantos divisores você quer:")
       leia (di)
       escreva ("Insira um número:")
       leia (n1)
       escreval("Insira outro número")
       leia(n2)
       para i de n1 ate n2 faca
          para j de 1 ate i faca
             se i mod j = 0 então
                cont<-cont+1
             fimse
          fimpara
          se cont >=di então
           escreval(i)
           cont <- 0
           cont2<-cont2+1
          fimse
       fimpara
       poss<-cont2*di
       escreva ("Há",poss," possibilidades")

     

    *O cálculo de possibilidades não bate com os exemplos dado :(

     

     

     

    Editado por Simon Viegas
    Ao postar um código, antes pressione o botão "<>" na barra de ferramentas

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites

    Olá @Samuel Barbosa Ramos.

     

    Eu estava respondendo a postagem anterior agora... rs.

     

    Vou reanalisar a sua nova resposta e jajá atualizo..

    adicionado 7 minutos depois

    Então, vamos lá:

     

    Você está tentando resolver qual "problema"?

     

    Pelo que eu entendo, a postagem anterior tentou fazer este:

    Em 25/09/2017 às 18:16, Simon Viegas disse:

    "Faça um programa que recebe um número X, e retorne o número de divisores que X possui".

     

     

    Daí, a próxima etapa seria fazer este...

    Em 25/09/2017 às 18:16, Simon Viegas disse:

    "Faça um programa retorne o número de divisores de 10 números".

     

    Vá com calma...

     

     

    Deixa esse seu código guardado e tente fazer esse etapa que falta, posta aqui o código para analisarmos ou onde está com dúvidas.

     

    Obs.: Qual a versão do Visualg que está utilizando? sugiro que baixe a versão mais recente (3.6.0.5) e tente fazer o código nele.

     

     

    No aguardo.

    Editado por Simon Viegas

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites
  • Autor do tópico
  • @Simon Viegas O problema do algoritmo é descobrir a quantidade da possibilidade de formação de grupo, onde  as equipes são criadas a partir de um líder que é determinado caso tenho a quantidade n de divisores

     

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites
    32 minutos atrás, Samuel Barbosa Ramos disse:

    @Simon Viegas O problema do algoritmo é descobrir a quantidade da possibilidade de formação de grupo, onde  as equipes são criadas a partir de um líder que é determinado caso tenho a quantidade n de divisores

     

    Estamos tratando disso...!

     

     

    A minha proposta é:

    Em 25/09/2017 às 18:16, Simon Viegas disse:

    ir do mais simples para o mais complexo.

     

     

    Se você conseguir fazer a segunda etapa:

    Em 25/09/2017 às 18:16, Simon Viegas disse:

    "Faça um programa retorne o número de divisores de 10 números".

     

    E depois fazer a terceira:

    Em 25/09/2017 às 18:16, Simon Viegas disse:

    "Faça um programa retorne o número de divisores de uma faixa de números, ex.: 5 a 20".

     

    Conseguirá sem muita dificuldade resolver por completo o problema inicial.

     

    O que eu quero dizer é que para resolver o seu problema, você terá que ser capas de fazer a terceira etapa (que por sua vez necessita da etapa dois... e este último da etapa 1)...  a terceira etapa é uma subtarefa do seu problema maior, apenas transformei essa subtarefa em uma tarefa separada. Pelo que entendi do problema principal, você precisará fazer essa lógica... é muito mais fácil tratar de coisas mais simples, do que trata de algo mais complexo que contém algo simples dentro dela.

     

    Qualquer coisa releia o tópico do início, passando por cada postagem...

     

    RESUMINDO:

    Faça a segunda etapa e posta o código aqui.

    Depois fala a terceira etapa,e posta o código aqui.

     

    ou

     

    Caso tenha alguma dúvida, é só perguntar.

     

    No aguardo.

     

     

    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






    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

    ×