Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

JoseBispo

Dizer se é primo ou não Pascal

Recommended Posts

Boa Noite, sou novo nessa área de programação, pois só comecei a estudar agora na faculdade e literalmente não entendo nada.

 

O prof passou trabalho em pascal, para dizer se o numero inserido é primo (Falso ou Verdadeiro).

 

Esse é o mais próximo que consegui chegar, mas eu coloco outros números ele ta afirmando que é primo sendo que não é.

 

function Primo ( n : Integer) : boolean;
 Var
F: integer;


     Begin
     for F:=2 to n-1 do
      begin
        If n mod F = 0 then


      result:= false
      else
      begin
      result:= true
      end;
      end
      end;

Compartilhar este post


Link para o post
Compartilhar em outros sites

Por que você usou n-1? Você poderia ter simplesmente testado o if, não é necessário um for neste caso... Você não está realizando nenhuma repetição.

 

E o código que você colocou não checa se o número é primo, mas sim se ele é par ou impar...

Compartilhar este post


Link para o post
Compartilhar em outros sites

cara lembro nada de Pascal mas segue uma lógica pra você traduzir pro pascal! olha se te ajuda assim!

 

function Primo ( n : Integer) : boolean;
Var
F: integer;

c: integer;

 

Begin

c := 0
for F:= 1 to n do
begin
If n mod F = 0 then

c := c + 1
end

if c= 2 then

return: True

else

return: False

end.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Por que você usou n-1? Você poderia ter simplesmente testado o if, não é necessário um for neste caso... Você não está realizando nenhuma repetição.

 

E o código que você colocou não checa se o número é primo, mas sim se ele é par ou impar...

então eu usei o n-1 pq a função ta pra dividi de 2 até n-1, então se o resto da divisão de N até N-1 for zero então é falso, pois o numero primo so da divisao exata por 1 e por ele msm.

Colocando n-1 eu descarto ele e descarta o 1 na divisao

Compartilhar este post


Link para o post
Compartilhar em outros sites

então eu usei o n-1 pq a função ta pra dividi de 2 até n-1, então se o resto da divisão de N até N-1 for zero então é falso, pois o numero primo so da divisao exata por 1 e por ele msm.

Colocando n-1 eu descarto ele e descarta o 1 na divisao

Na verdade da maneira como você escreveu da primeira vez, você está dividindo todos os números de n-1 até seu número por 2 e verificando se o resto é 0, isso é verificação de par ou impar (se n=2k então par se não n=2k+1 é impar, implica que n/2=k é par). O modo como o pedro colocou parece correto pois você está dividindo o número colocado por todos os números desde 1 até ele mesmo, se houver alguma divisão neste meio que não seja MOD 0 tirando o 1 e ele próprio então ele não é primo.

Compartilhar este post


Link para o post
Compartilhar em outros sites

  • Conteúdo Similar

    • Por Jehlemos
      Olá,
      Boa Tarde!
      Estou em uma plataforma de estudos no qual se executa exercícios e testes, o enunciado é:
       
      Escreva a função pode SeAposentar que recebe por parâmetro a idade, o sexo e os anos de contribuição previdenciária que uma pessoa tem, exemplo: podeSeAposentar(62, "F", 34) true.
      A idade mínima para se aposentar para mulheres é 60 anos, enquanto que para homens é 65. Em ambos os casos, deve ter pelo menos 30 anos de contribuição.
       
      function podeSeAposentar (idade, sexo, anosTrabalhados) { if(anosTrabalhados >= 40) { if(sexo == "F") { if(idade >= 60) { return true; } } else if(sexo == "M") { if(idade>= 65){ return true; } } } return false; }
      >
      Sua solução funcionou, mas aponta o seguinte erro:
      Objetivos que não foram atendidos: podeSeAposentar faz comparações contra strings.
       
      **O que está errado? Alguém pode me ajudar?** 
      Obrigada!
    • Por FILIPEINFORMATICA10
      uses Crt; var X, Y : Integer; begin Writeln ('Entre com dois Números:'); { Mostra na tela a mensagem} Readln (X, Y); { Lê os dois números } If (X = Y) Then {Condição - SE X for igual a Y} Begin {INICIO - Repare abaixo que existe duas instruções, dois comandos Writeln, por isso estão entre BEGIN e END} Writeln ('X é igual que Y'); Writeln ('O Valor de X é =', X); End; {FIM} end.
    • Por flavionorvel
      #include <stdio.h>
      #include <stdlib.h>
      // Limites de tamanhos
      #define MINIMO 2
      #define MAXIMO 50
      // Variáveis globais
      int opcao = 0;
      int linhas = MAXIMO;
      int colunas = MAXIMO;
      int matrizA[MAXIMO][MAXIMO];
      int matrizB[MAXIMO][MAXIMO];
      void limpar_tela();
      // Retorna resposta do usuario se quer rodar novamente
      int rodar_novamente()
      {
      int opcao = 0;
      printf("\n\nDeseja rodar novamente? Digite 1 para SIM e 0 para Não: ");
      scanf("%d",&opcao);
      if (opcao == 1 || opcao == 0) {
      return opcao;
      }
      printf("\nOpcao invalida. Escolha novamente.");
      return rodar_novamente();
      }
      // Recebe valor inteiro do usuario
      int receber_numero()
      {
      int numero = 0;
      scanf("%d",&numero);
      if (numero >0) {
      return numero;
      }
      printf("\nNúmero inválido. digite um número positivo.: ");
      return receber_numero();
      }
      // Valida tamanhos de linhas e colunas
      int validar_tamanhos(int linhas, int colunas)
      {
      if ((linhas >= MINIMO && linhas <= MAXIMO) && (colunas >= MINIMO && colunas <= MAXIMO) && (linhas !
      = colunas)) {
      return 1;
      }
      printf("\nLinhas e Colunas devem ser diferentes e ter valores entre %d e %d. Tente
      novamente.",MINIMO,MAXIMO);
      return 0;
      }
      // Preencher matriz
      void preencher_matriz(int matriz[MAXIMO][MAXIMO], int linhas, int colunas)
      {
      int i,j;
      for (i = 0 ; i < linhas ; i ++) {
      for (j = 0 ; j < colunas ; j ++) {
      printf("\nDigite um valor inteiro para a posicao %d-%d da matriz A: ",i,j);
      matriz[j] = receber_numero();
      }
      }
      }
      // Imprimir matrizes
      void imprimir_matrizes(int matrizA[MAXIMO][MAXIMO], int matrizB[MAXIMO][MAXIMO], int linhas, int
      colunas)
      {
      int i,j;
      limpar_tela();
      printf("\n\nMATRIZ A\n");
      for (i = 0 ; i < linhas ; i++) {
      for (j = 0 ; j < colunas ; j ++) {
      printf("\nMATRIZ A POSICAO %d-%d: %d",i,j,matrizA[j]);
      }
      }
      printf("\n\nMATRIZ B (TRANSPOSTA DE A)\n");
      for (i = 0 ; i < colunas ; i++) {
      for (j = 0 ; j < linhas ; j ++) {
      printf("\nMATRIZ B POSICAO %d-%d: %d",i,j,matrizB[j]);
      }
      }
      }
      void limpar_tela()
      {
      system("@cls||clear");
      }
      // Laço principal
      int main()
      {
      int i,j;
      do {
      //Inicializar variáveis
      opcao = 0;
      linhas = 0;
      colunas = 0;
      i = 0;
      j = 0;
      do {
      printf("\nEntre com o tamanho para linhas: ");
      linhas = receber_numero();
      printf("\nEntre com o tamanho para colunas: ");
      colunas = receber_numero();
      } while (!validar_tamanhos(linhas,colunas));
      // entrar com valores para a matriz A
      preencher_matriz(matrizA, linhas, colunas);
      // criar matriz transposta de A
      for(i = 0 ; i < linhas ; i ++) {
      for(j = 0 ; j < colunas ;j ++) {
      matrizB[j] = matrizA[j];
      }
      }
      // Imprimir matrizes
      imprimir_matrizes(matrizA,matrizB,linhas, colunas);
      // Pergunta ao usuário se quer continuar
      opcao = rodar_novamente();
      } while (opcao == 1);
      }me 

       
    • Por AnotherSunset
      Boa noite/dia gente. Preciso de ajuda aqui. Tenho um exercício no qual tenho de fazer um programa em pascal com o seguinte enunciado:
      Considere a soma S dos termo da série infinita apresentada abaixo:

      Fazer um programa em Free Pascal que calcule o valor aproximado da soma S dos termos da série até o momento em que a diferença das normas (módulo) de 2 termos consecutivos for menor que 0,000001 ({i.e.}, norma da diferença das normas de dois termos consecutivos).
       
      Segue meu algoritmos/programa:
       
      program calcserie;
      var
         soma, a1, a2, an  : real;
         sinal                : longint;
         cont, n, fat         : integer;
      begin
         n := 0;
         a1 := 1;
         a2 := 0;
         soma := 0;
         cont := 1;
         fat := 1;
         an := 1;
         sinal := 1;
         while (an) > 0.000001 do
            begin
            n := n + 2;
              while cont <= n do
                  begin
                  fat := fat * cont;
                  cont := cont + 1;
              end;
           soma := (soma + (a1 * sinal));
           sinal := sinal * -1;
           a2 := a1;
           a1 := ((1/fat));
              if (a2 < 0) then
              an := (a2 * -1) - a1
              else if (a1 < 0) then
              an := (a2) - (a1 * -1);
              end;
         write (soma:0:15);
      end.
       
      Meu erro está sendo a partir da 3 casa decimal

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.