Ir ao conteúdo
  • Cadastre-se

Pascal/Delphi Algoritmo para somar um conjunto numero e se digitar zero encerrar.


Posts recomendados

- Fazer  um  algoritmo  para  calcular  a  média  aritmética  de  um  conjunto  de  valores  inteiros, positivos e maiores que zero. (considere o valor zero como finalizador do programa).

 

Eu fiz desse jeito gostaria de saber se está certo.

 


Program Lista3_9;
//Agora vou declarar as variáveis
Var
D,numero1,media:integer;
//Área de lógica
Begin
  Writeln('Escola Técnica de Brasília - ETB');
  Writeln('Técnico em Informática');
  Writeln('Lógica de Programação');
  Writeln('Professor: Pedro');
  Writeln('Autor: Denis Alves');
  Writeln('Data: 15/09/2017');
  Writeln (' _________________________________________________');
  Writeln ('|                                                 |');
  Writeln ('| Números inteiros e mostrar a média aritimética  |');
  Writeln ('|_________________________________________________|');
  Writeln(' ');
  Writeln(' ');
  Writeln(' ');
  numero1 := 1;
      for d := 1  to 4 do begin
          if (numero1 <= 0)then
         writeln ('Zero digitado saindo!')
         else
         begin
           write ('Digite o ',d,'o número: ');
           readln (numero1);
           media := media+numero1;
             writeln (' ');
            end;
     end;
     writeln ('A media aritimética dos números informados é: ',media/4:0:2);
End.

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

  • Membro VIP

Olá @iGodD.

 

Vamos lá:

54 minutos atrás, iGodD disse:

- Fazer  um  algoritmo  para  calcular  a  média  aritmética  de  um  conjunto  de  valores  inteiros, positivos e maiores que zero. (considere o valor zero como finalizador do programa).

 

Antes de tudo, todo número positivo é maior que zero... Logo:

54 minutos atrás, iGodD disse:

- Fazer um algoritmo para calcular a média aritmética de um conjunto de valores inteiros e positivos. (considere o valor zero como finalizador do programa).

 

Outro ponto interessante é que o enunciado não estipula a quantidade de números, ou seja, deveria ir lendo até o número digitado ser igual a zero. Mas vamos tomar como base que sejam 4 números (mais pra frente voltamos a essa questão).

 

 

Então, temos 2 pontos principais ai:

  1. Ao inserir zero, o programa deve finalizar (no sentido de não ler mais números e ir para o fim do programa); no seu código, ele continua o laço de repetição (sem necessidade).
  2. Números negativos não devem fazer parte da conta, mas o programa deve continuar, ou seja, só deve parar se, e somente se, o número for zero; no seu código também está tentando finalizar.

Como o for se baseia em uma quantidade estipulada de loops, não é aconselhado "força a interrupção" dele (é possível, mas não é uma boa prática)... a orientação seria utilizar o repeat ou while. Como vai fazer pelo menos uma vez, recomendam-se utilizar o repeat.

 

 

Veja por exemplo uma base de raciocínio deste problema:

  • Ler 4 números, logo poderia ser um for (pois ele já é estruturado para repetir x vezes.)
  • Parar de ler caso um número seja 0, logo o laço de repetição possuirá além do controle de quantidade de número, a verificação se o número digitado é válido ou não, ou seja, são duas condições para continuar repetindo: não ter a quantidade de números lidos, nem um desses números ser zero.

Entende?

 

 

Para ficar mais claro, faça o seguinte: esqueça que não pode ser negativo ou igual a zero. Apenas faça o seguinte programa:

 

54 minutos atrás, iGodD disse:

- Faça um algoritmo para calcular a média aritmética de 4 números inteiros utilizando o repeat. (não pode usar o for)

 

Só isso.


Posta aqui o código para analisarmos e tirarmos algumas conclusões.

 

 

Após, você inclui finalizar ao digitar o 0.

54 minutos atrás, iGodD disse:

- Faça um algoritmo para calcular a média aritmética de 4 números inteiros utilizando o repeat, e caso o usuário insira o número zero, finalize o programa.

 

Mais pra frente vamos incluindo outros detalhes desse contexto.

 

 

No aguardo.

  • Curtir 3
Link para o comentário
Compartilhar em outros sites

Olá amigo, acontece que sou novo estou pegando aula e indo para cada um desses por vez, o professor pediu em for então no caso, minha duvida é somente essa, como faço para parar as repetições ou se desse jeito ai mesmo pode passar, ainda não vi o repeat ele pediu com for entende.

  • Curtir 2
Link para o comentário
Compartilhar em outros sites

  • Membro VIP

Olá @iGodD.

12 minutos atrás, iGodD disse:

Olá amigo, acontece que sou novo estou pegando aula e indo para cada um desses por vez, o professor pediu em for então no caso, minha duvida é somente essa, como faço para parar as repetições ou se desse jeito ai mesmo pode passar, ainda não vi o repeat ele pediu com for entende.

 

Entendi o que quis dizer.

 

Um ponto que acho super importante é justamente isso: primeiro devemos entender o problema, para só depois tentar resolver. Nesse caso, nós estamos entendendo o problema de formas diferente.. Primeiro precisamos alinhar isso.

 

Ele te pediu que seja feito com for especificamente OU você só aprendeu com for (no sentido que ele só chegou a ensinar o for, não passando por repeat e while ainda)? Tá explicito que deve ser com for? qual a quantidade máxima de números?

 

Vamos analisar o enunciado:

2 horas atrás, iGodD disse:

- Fazer  um  algoritmo  para  calcular  a  média  aritmética  de  um  conjunto  de  valores  inteiros, positivos e maiores que zero. (considere o valor zero como finalizador do programa).

 

Ou seja, deu a entender para mim que o laço de repetição é condicional... enquanto o usuário não digitar 0 (a condição é que o número seja diferente de 0) o programa deverá continuar repetindo... e isso NÃO É característica para usar o for. O for seria se fosse estipulada a quantidade números e que a quantidade fosse usada. Só por esse enunciado entendo que você pode inserir uma quantidade indeterminada de números... até que insira o valor zero...

 

Veja a diferença. No seu código está estipulado que são 4 números (a quantidade está fixa), e que se um deles for igual a zero, vai ignorar os que possam vir depois. Percebe a diferença?

 

 

Então, entendi que o enunciado diz que algo como:

Citação

"Leia números até que digite 0".

 

O seu código está:

Citação

Leia 4 números, se um deles for zero, ignore os possíveis próximos.

 

A minha sugestão é que primeiro entendemos o que de fato precisa ser feito! Caso contrário, estaríamos tentado fazer de modo certo algo errado.  (extrapolando uma analogia, seria algo como: entregar um macarrão delicioso, quando na verdade se queria uma feijoada)

 

 

Por favor, tente me esclarecer o que é para ser feito.. daí damos continuidade.

 

 

No aguardo.

  • Curtir 3
Link para o comentário
Compartilhar em outros sites

Esse o ponto eu não aprendi muita coisa ainda o que estou aprendendo estou tentando aplicar para resolver as listas de exercicios mas meu professor é tão ruim que ele não responde e-mail que mando para ele para tirar dúvidas, ai fico perdido estou tentando aprender, por isso estou entrando em fóruns e pedindo ajuda, para saber se o que estou fazendo está certo entende, eu não cheguei a ver REPEAT nem WHILE ainda. esse if que coloquei ai fiz que nem um que aprendi com você em outro algorítimo que fiz que antes verificava se os números eram iguais ai já pulava pro fim, mas como esse tem repetição não está funcionando 100% porque não sei 100% ainda entende.

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

Boa noite!

@Simon Viegas, vou aproveitar esse post. 

 

Tenho o mesmo professor do @iGodD. A questão é que ele passou uma lista para fazermos usando apenas o For, mas acho que ele não se atentou que algumas questões usam estruturas diferentes. Eu fiz aqui, rapidamente, usando o Repeat e ficou assim:

 

Program Media_Aritmetica;
uses
  CRT;
var num: integer;
    somaNum, contNum: real;
Begin
  writeln ('Calcula a média aritmética dos números digitados. Os números devem ser inteiros e positivos.');
  writeln ('');
  writeln ('Para receber o valor da média e parar o programa digite 0.');
  writeln ('');
  writeln ('');
  repeat
    write ('Entre com um valor: ');
    readln (num);
    if (num <> 0) then
      begin
      somaNum:= somaNum + num;
      contNum:= contNum + 1;
      end;
  until (num = 0);
  writeln ('A média é de: ', (somaNum / contNum):0:2); 
End.

 

No momento não me preocupei com o visual e nem com o fato de um número inserido ser negativo, mesmo avisando que o número precisa ser positivo, apenas em fazer o meu algoritmo funcionar. Teria algo a adicionar? 

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

  • Membro VIP

Olá @Alan Matos Lourenço.

 

6 horas atrás, Alan Matos Lourenço disse:

Tenho o mesmo professor do @iGodD. A questão é que ele passou uma lista para fazermos usando apenas o For, mas acho que ele não se atentou que algumas questões usam estruturas diferentes. Eu fiz aqui, rapidamente, usando o Repeat e ficou assim:

Justamente... cada tipo de repetição tem as suas características... mas é possível adaptar... (ou algo como "não usar o tipo de laço mais adequado")

 

Em 27/09/2017 às 13:43, iGodD disse:

- Fazer  um  algoritmo  para  calcular  a  média  aritmética  de  um  conjunto  de  valores  inteiros, positivos e maiores que zero. (considere o valor zero como finalizador do programa).

Para esse contexto, na minha atual interpretação, o for não se encaixaria tão bem.. como já explicado no outro post.

 

Exemplos de possibilidade:

 

1) Enquanto não encontrar o 0, ficaria reiniciando o valor do i para 1 novamente, ou seja, ficaria num loop infinito, pois o i nunca chegaria no valor final. Ao informar 0, faria o i ter um valor maior que o limite do for. Daí o for iria terminar.

 

2) Fazer o fazer o for ir de 1 até um número bem alto (ex.: 32767). Ao identificar o "0", executa o comando break.

 

*Conhecem o comando break? senão, dê uma pesquisa para tentar entender o seu funcionamento e características.

 

 

***

 

Sugiro que tentem fazer das duas formas. Qualquer coisa é só postar.

 

No aguardo.

  • Curtir 2
Link para o comentário
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades 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

×
×
  • Criar novo...