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:  
Ayron Matos

VisualG Exercício 6 - Vetores - (Introdução aos Algoritmos)

Recommended Posts

Exercício 6

Escreva um algoritmo que gera os 10 primeiros números primos acima de 100 e os armazena em um

vetor X(10) escrevendo, no final, o vetor X.

algoritmo "10PrimeirosPrimos"

var
   primo: vetor[1..10] de inteiro
   c, div, i, j: inteiro
inicio
    Para j <- 1 ate 10 faca
      Para c <- 1 ate 149 faca
          div <- 0
        Para i <- 1 ate 149 faca
          Se (c%i=0) então
            div <- div + 1
          FimSe
        FimPara
          Se (div = 2) e (c > 100) então
            primo[j] <- c
          FimSe
      FimPara
    FimPara
      
      Para j <- 1 ate 10 faca
        Escreva(primo[j]:4)

fimalgoritmo

O visualg não informa qual o problema mas eu suponho que seja as variaveis..

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá @Ayron Matos.

 

4 horas atrás, Ayron Matos disse:

O visualg não informa qual o problema mas eu suponho que seja as variaveis..

Tá, mais o que está acontecendo de errado? quais sintomas tem para que precise de intervenção?

 

obs.: qual compilador está utilizando? caso não esteja, sugiro atualizar para versão mais recente (3.0.6.5).

 

Vamos lá:

 

1) PALAVRAS RESERVADAS PELA LINGUAGEM

Aqui, ao compilar deu erro na terceira linha. Perceba que o div é azul, ou seja, é uma palavra reservada (no Visualg é chamado de "palavras-chave")... daí não pode ser utilizada para outro fim além do seu de origem. Sugeriria usar qtdDivisores, por exemplo.

 

 

 

2) NÚMEROS PRIMOS

A primeira coisa a se fazer é dar uma aprofundada no assunto... tentar entender o que é um número primo e descobrir forma de como achar um. Essa pesquisa já dará uma experiência sobre o tema. Enquanto aprende a programar, também vai aprendendo mais afundo conhecimentos gerais.

 

Identificar se um número é primo ou não é a base do algoritmo. Verificar números acima de 100 e os 10 em sequência são as restrições e requisitos. Deixa pra depois esses detalhes. A foco aqui é os primos!!!

 

 

Tente inicialmente apenas identificar se um número é primo ou não...  algo como você informar um número, e retornar se ele é primo ou não. Revise a lógica necessária para isso. Faça isso (relativamente bem feito) e o restante é será apenas pequenos ajustes... posta o código aqui para analisarmos...

 

Pronto! quando conseguir verificar um número específico, tente verificar uma faixa de números. Não precisa armazenar nada, por exemplo, só retorne os números primos entre 100 e 200. Mais pra frente vai fazendo modificações até chegar nos requisitos finais...

 

 

No aguardo.

Editado por Simon Viegas

Compartilhar este post


Link para o post
Compartilhar em outros sites
  • Autor do tópico
  • @Simon Viegas eu acho que não fiz exatamente como a questão queria mas pelo menos consegui chegar no mesmo resultado. A sintaxe segue abaixo:

    algoritmo "10PrimeirosPrimosDepoisde100"
     
    var
       primo: vetor[101..149] de inteiro
       c, divisor: inteiro
    inicio
          Para c <- 101 ate 149 faca
            divisor <- 0
            Se (c%2=0) então
              divisor <- divisor + 1
            FimSe
            Se (c%3=0) então
              divisor <- divisor + 1
            FimSe
            Se (c%5=0) então
              divisor <- divisor + 1
            FimSe
            Se (c%11=0) então
              divisor <- divisor + 1
            FimSe
            Se (c%12=0) então
              divisor <- divisor + 1
            FimSe
            Se (c%c=0) então
              divisor <- divisor + 1
            FimSe
            Se (divisor=1) então
              primo[c] <- c
              Escreva(primo[c]:4)
            FimSe
          FimPara
    
    fimalgoritmo

     

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites

    Olá @Ayron Matos.

     

     

     

    1) RESULTADO APRESENTANDO x RESULTADO ESPERADO

     

    1 hora atrás, Ayron Matos disse:

    Simon Viegas eu acho que não fiz exatamente como a questão queria mas pelo menos consegui chegar no mesmo resultado.

     

    Então, pelo meus testes não chegou ainda...

     

    Resultado ao executar o seu código:

    1 hora atrás, Ayron Matos disse:
    
    101 103 107 109 113 119 127 131 133 137 139 149

     

     

    Lista dos 10 primeiros primos acima de 100 segundo a internet:

    101 103 107 109 113 127 131 137 139 149

    Fonte: http://www.hypatiamat.com/apoiopdf/numerosprimosate1000-hypatiamat.pdf

     

    Ou seja, a conta não está batendo.

     

     

     

    2) LÓGICA PARA IDENTIFICAR NÚMEROS PRIMOS

    Mesmo que o resultado estivesse batendo (que não está), como você mesmo sugere, não necessariamente queria dizer que está "certo!". É necessário ter uma metodologia por traz.... caso contrário, para exemplificar, poderia simplesmente fazer seu código assim:

    algoritmo "10PrimeirosPrimosDepoisde100"
    inicio
    escrevaL("Segue os 10 primeiros números primos acima de 100")
    escrevaL()
    escrevaL("101 103 107 109 113 127 131 137 139 149")
    fimalgoritmo

    Entende? a resposta está certa, mas o método para achar não! O problema não é para apenas "exibir uma lista", mas sim "gera essa lista e exibir".

     

    Então, alguns pontos que precisamos esclarecer:

    2.1) Por que fazer a verificação dos restos da divisão por especificamente esses números (2, 3, 5, 11, 12 e 0)?

     

    2.2) Por que ir de 101 a 149?

     

    A partir da sua resposta podemos analisar o que pode ser corrigido ou melhorado.

     

     

     

    3) SOBRE MINHA SUGESTÃO

    Assim como é muito comum quando ainda não temos experiência, você está focando no resultado final... e já está tentando fazer tudo de uma vez... É como tentar aprender a correr antes de tentar aprender a andar... Eu entendo que isso não é uma boa ideia... como já citado:

     

    21 horas atrás, Simon Viegas disse:

    Tente inicialmente apenas identificar se um número é primo ou não...  algo como você informar um número, e retornar se ele é primo ou não. Revise a lógica necessária para isso. Faça isso (relativamente bem feito) e o restante é será apenas pequenos ajustes... posta o código aqui para analisarmos...

     

    Veja, é mais difícil verificar uma sequência de números é primos, sem antes ter a base para conseguir verificar apenas de um número específico antes! ou seja, foque apenas na verificação de um número específico. Quando conseguir resolver para um número, conseguirá facilmente para N números..

     

     

    ***

     

    No aguardo.

    Editado por Simon Viegas

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites
  • Autor do tópico
  • Algoritmo de número primo específico:

    algoritmo "Primo"
    
    var
       n, i, divisor: inteiro
    inicio
          Leia(n)
          LimpaTela
          Para i <-1 ate n faca
           Se (n%i=0) então
             divisor <- divisor + 1
           FimSe
          FimPara
          Se (divisor=2) então
             Escreva(n, " é um número primo.")
          SeNao
             Escreva(n, " não é um número primo.")
          FimSe
    fimalgoritmo

     

    adicionado 9 minutos depois

    Algoritmo dos números primos de 100 a 200:

    algoritmo "Primosde100a200"
    
    var
       i,j, divisor: inteiro
    inicio
         Para i <- 100 ate 200 faca
            divisor <- 0
          Para j <-1 ate i faca
           Se (i%j=0) então
             divisor <- divisor + 1
           FimSe
          FimPara
           Se (divisor=2) então
             Escreva(i)
           FimSe
         FimPara
    
    fimalgoritmo

     

    adicionado 28 minutos depois

    Consegui!

    algoritmo "10PrimeirosPrimosDepoisde100"
    
    var
       primo: vetor[1..10] de inteiro
       c, i, j, divisor: inteiro
    inicio
         i <- 100
         c <- 0
         Repita
         i <- i + 1
            divisor <- 0
          Para j <-1 ate i faca
           Se (i%j=0) então
             divisor <- divisor + 1
           FimSe
          FimPara
           Se (divisor=2) então
             c <- c + 1
             primo[c] <- i
             Escreva(primo[c])
           FimSe
         Ate (c = 10)

    Muito obrigado!

    Editado por Ayron Matos
    • Curtir 1

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites

    Olá @Ayron Matos.

     

    Seu código ficou muito bom!!!

     

     

    Segue algumas sugestões:

     

    1) MELHOR USO DO VETOR

    Em 22/10/2017 às 16:48, Ayron Matos disse:
    
             primo[c] <- i
             Escreva(primo[c])

    Nesse trecho acima, logo após copiar o valor na posição do vetor, essa posição está sendo impressa... o que seria o mesmo que fazer:

    escreve(i)

    Ou seja, o vetor deixaria de ser necessário... Acho que seria melhor primeiro cadastrar os números no vetor, e após imprimir todo o vetor de uma vez.

     

     

     

     

    2) NOMENCLATURA DE VARIÁVEIS

    Aqui mais servindo como demonstração e também poder servir de exemplo para você e outros usuários, segue sugestão para nomenclatura das variáveis, assim como inserido comentário para cada linha do código.

     

    algoritmo "10PrimeirosPrimosDepoisde100"
    var
       primos      :vetor[1..10] de inteiro //vetor que armazenará os números primos
       numero      :inteiro //número a ser analisado (dividendo)
       divisor     :inteiro //usado para as divisões sucessivas
       qtdPrimos   :inteiro //quantidade de primos já encontrados
       qtdDivisores:inteiro //quantidade de divisores que o número tem
    inicio
    numero <- 100 //inicializa com o valor anterior ao primeiro número da sequência
    qtdPrimos <- 0 //inicializa a quantidade de primos já encontrados
    Repita
       numero <- numero + 1 //atribui para o próximo número a ser verificado
       qtdDivisores <- 0 //zera a quantidade para o número atual
       Para divisor <-1 ate numero faca //para as divisões do 1 até o N
          Se (numero % divisor=0) ENTÃO //se divisão tem resto 0 ("é divisor")
             qtdDivisores <- qtdDivisores + 1 //atualiza a quantidade de divisores que esse númeto tem
          FimSe
       FimPara
       Se (qtdDivisores=2) ENTÃO //se número tem exatamente 2 divisores
          qtdPrimos <- qtdPrimos + 1 //atualiza a quantidade de primos já encontrados
          primos[qtdPrimos] <- numero //armazena o número no vetor
          Escreva(primos[qtdPrimos]) //*escreve a número contido no vetor
       FimSe
    Ate (qtdPrimos = 10) //até chegar a quantidade primos desejados
    fimAlgoritmo

    Perceba como tentei deixar a nomenclatura das variáveis o mais próximo de sua utilidade..

     

     

    ***

     

    Abraços

    • Obrigado 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






    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

    ×