Ir para conteúdo

POWERED BY:

Arquivado

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

Leandro B. Lopes

[Resolvido] algoritmos em pascal

Recommended Posts

Pessoal peço que se alguém puder meajudar com este programa por favor me mostra onde eu errei.

 

Escrever um programa que leia um número não determinado de valores e calcule a média aritmética dos valores lidos, a quantidade de valores positivos, a quantidade de valores negativos e o percentual de valores negativos e positivos. Mostre os resultados.

 

 

PROGRAM EX5;

USES CRT;

VAR CONT,I,SOMA,CONTN,CONTP,NUM : INTEGER;

MEDIA,PPOS,PNEG : REAL;

BEGIN

CLRSCR;

CONT:=0;

I:=0;

SOMA:=0;

CONTN:=0;

CONTP:=0;

WRITELN('DIGITE A QUANTIDADE DE VALORES');

READLN(CONT);

WHILE I<=CONT DO

BEGIN

WRITELN('INSIRA O VALOR');

READLN(NUM);

IF NUM > 0 THEN

BEGIN

CONTP:=CONTP+1;

END

ELSE

IF NUM < 0 THEN

BEGIN

CONTN:=CONTN+1;

END

END;

 

MEDIA:=(NUM/CONT);

PNEG:=(CONTN/SOMA)*100;

PPOS:=(CONTP/SOMA)*100;

WRITELN('MÉDIA = ',MEDIA);

WRITELN('QUANTIDADE DE POSITIVOS = ',CONTP);

WRITELN('QUANTIDADE DE NEGATIVOS = ',CONTN);

WRITELN('PERCENTUAL DE POSITIVOS = ',PPOS);

WRITELN('PERCENTUAL DE NEGATIVOS = ',PNEG);

END.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Vou enumerar algumas coisa

 

-Não é obrigatorio mas se não colocar a obrigatoriedade de entrar um numero positivo na quantidade pode ter problemas

 

-Um erro é fazer I:=0; e depois na leitura WHILE I<=CONT DO, pois se não analisei errado lerá um valor a mais pois irá de 0 a N ou seja terá N + 1 números lidos, pode corrigir isso simplesmente incrementando logo no inicio do loop antes das demais verificações ao envés de fazer isso no fim

 

- voce nao realizou a soma dos valores, faça isso antes de sair do laço, depois aqui MEDIA:=(NUM/CONT); será MEDIA:=(SOMA/CONT);, mas tenha cuidado em corrigir o CONT senão pode usar a soma de CONTN e CONTP tambem

 

- aqui ta errado tambem PNEG:=(CONTN/SOMA)*100; PPOS:=(CONTP/SOMA)*100; o certo seria dividir pelo CONT ou tambem pela soma de CONTN e CONTP e não pela SOMA

 

- outro erro é CONTN:=CONTN+1; o certo seria incrementar o I assim I:=I+1;

 

Corrija estes pequenos pontos e ponha o proximo erro se houver

Compartilhar este post


Link para o post
Compartilhar em outros sites

Fiz as correções mais acho que ainda está faltando algo. Pois quando coloco ele pra rodar o mesmo me pede um valor a mais do que o informado.

 

 

 

PROGRAM EX5;

USES CRT;

VAR CONT,I,SOMA,CONTN,CONTP,NUM : INTEGER;

MEDIA,PPOS,PNEG : REAL;

BEGIN

CLRSCR;

CONT:=0;

I:=0;

SOMA:=0;

CONTN:=0;

CONTP:=0;

WRITELN('DIGITE UM NUMERO POSITIVO PARA A QUANTIDADE DE VALORES');

READLN(CONT);

WHILE I<=CONT DO

BEGIN

WRITELN('INSIRA O VALOR');

READLN(NUM);

IF NUM > 0 THEN

BEGIN

CONTP:=CONTP+1;

END

ELSE

IF NUM < 0 THEN

BEGIN

CONTN:=CONTN+1;

END;

I:=I+1;

END;

 

MEDIA:=(SOMA/CONT);

PNEG:=(CONTN/CONT)*100;

PPOS:=(CONTP/CONT)*100;

WRITELN('MÉDIA = ',MEDIA:8:2);

WRITELN('QUANTIDADE DE POSITIVOS = ',CONTP);

WRITELN('QUANTIDADE DE NEGATIVOS = ',CONTN);

WRITELN('PERCENTUAL DE POSITIVOS = ',PPOS:8:2);

WRITELN('PERCENTUAL DE NEGATIVOS = ',PNEG:8:2);

READKEY;

END.

Compartilhar este post


Link para o post
Compartilhar em outros sites

sua variavel 'i' começa do 0, e no loop você faz

WHILE I<=CONT
ele vai pedir com ctz + 1 msm

2 opçoes

 

inicialize i com 1

ow troque '<=' por '<'

 

[]s

Compartilhar este post


Link para o post
Compartilhar em outros sites

o pior é que ja tinha avisado isso

 

e ainda falta realizar a soma

 

para o primeiro problema temos uma serie de alternativas

 

a mais simples como já foi falado é fazer I:=1; de cara

 

o segundo caso basta abaixo de READLN(NUM); colocar SOMA:= SOMA + NUM;

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

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