Jump to content
Suelen Passos

Números primos

Recommended Posts

Suelen Passos

Olá! Sou estudante e estou começando a estudar Pascal, e preciso de ajuda com meu código.

Preciso de duas coisas, deve ser simples pra quem já tem uma certa prática. Ao digitar um número negativo meu código finaliza e me traz um resumo, preciso que ele finalize caso eu digite um número negativo e zero. E preciso que no final me diga quantos numeros primos foram digitados. Desde já agradeço. Segue o esboço.

program NumPrimos(input{teclado}, output{video});

function primo(x{e}: integer): boolean;
  var
     i: integer;
  begin
    i:= 2;
    while (i<x) and ((x mod i)<>0) do
       i:= i+1;
    primo:= (i=x);
  end;
var
  num, qtd,  soma, maior, menor, maiorPrimo, menorPrimo: integer;
begin
    write(output, 'Digite um n£mero: ');
    readln(input, num);
    if num<0 then writeln('Nenhum numero lido foi maior que zero')
    else
       begin
          qtd:= 0;
          maior:= num;
          menor:= num;
          maiorPrimo:= -1;
          soma:= 0;
          while num>=0 do
             begin
                inc(qtd);
                soma:= soma + num;
                if num>maior then maior:= num
                else
                   if num<menor then menor:= num;
                if primo(num) then
                   if maiorPrimo = -1 then
                      begin
                         maiorPrimo:= num;
                         menorPrimo:= num;
                      end
                   else
                      if num<menorPrimo then menorPrimo:= num
                      else
                         if num>maiorPrimo then maiorPrimo:= num;
                write(output, 'Digite um numero: ');
                readln(input, num);
             end;
          writeln(output, 'O maior numero = ', maior, ' e o menor numero = ', menor);
          writeln(output, 'A media de todos os numeros lidos = ', soma/qtd:5:2);
          if maiorPrimo=-1 then
             writeln(output, 'Nenhum numero primo foi lido')
          else
             writeln(output, 'Maior primo = ', maiorPrimo, ' e o menor primo = ', menorPrimo);
       end;
    readln(input);
end.

Retificando: Preciso que ele finalize caso seja digitado um numero negativo ou* zero.

Edited by nunopicado

Share this post


Link to post
Share on other sites
nunopicado

Não deu para analisar convenientemente o teu código por estar a ler no telemóvel, mas talvez queiras experimentar mudando a condição do teu while.

Em vez de num>=0, experimenta num>0...


"A humanidade está a perder os seus génios... Aristóteles morreu, Newton já lá está, Einstein finou-se, e eu hoje não me estou a sentir bem!"

> Não esclareço dúvidas por PM: Indica a tua dúvida no quadro correcto do forum.

Share this post


Link to post
Share on other sites
thoga31

Para além de mudar a condição do ciclo (eu teria usado um repeat-until para evitar repetir o código do input), hoje em dia é totalmente arcaico usar as directivas (input, output). Declara o programa sem isso, e tira-os do readln e do writeln. Isso é do Pascal de 1971, não de 2013.

De resto pareceu-me estar tudo bem.


Knowledge is free!

Share this post


Link to post
Share on other sites
nunopicado

Isso é do Pascal de 1971, não de 2013.

Diz que agora há professores que querem aquela coisa... Devem ser os mesmos que dizem que pascal é fraco! Vai na volta, ainda acham que o programa não funciona sem aquilo!


"A humanidade está a perder os seus génios... Aristóteles morreu, Newton já lá está, Einstein finou-se, e eu hoje não me estou a sentir bem!"

> Não esclareço dúvidas por PM: Indica a tua dúvida no quadro correcto do forum.

Share this post


Link to post
Share on other sites
pwseo

Suelen Passos,

De facto podias simplificar um pouco o teu ciclo principal. Se escolheres bem as variáveis a utilizar e respectivos valores iniciais, podes ter algo deste género:

repeat
 write('Número? ');
 readln(n);

 if n < 0 then break;

 if n > max then max := n;
 if (n < min) or (count = 0) then min := n;

 if isprime(n) then begin
   if n > maxp then maxp := n;
   if n < minp then minp := n;
   inc(pcount);
 end;

 inc(sum, n);
 inc(count);
until false;

Desta forma, toda a lógica fica contida num ciclo pequeno e de fácil leitura. Antes deste código terias a inicialização de variáveis, e após o código terias a impressão de resultados.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.