Ir para o conteúdo
Suelen Passos

Números primos

Mensagens Recomendadas

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.

Editado por nunopicado

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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!

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.