Leandro B. Lopes 0 Denunciar post Postado Junho 16, 2009 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
Mário Monteiro 179 Denunciar post Postado Junho 16, 2009 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
Leandro B. Lopes 0 Denunciar post Postado Junho 16, 2009 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
quitZAUMMM 18 Denunciar post Postado Junho 16, 2009 sua variavel 'i' começa do 0, e no loop você faz WHILE I<=CONTele vai pedir com ctz + 1 msm2 opçoes inicialize i com 1 ow troque '<=' por '<' []s Compartilhar este post Link para o post Compartilhar em outros sites
Mário Monteiro 179 Denunciar post Postado Junho 17, 2009 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
Giovanni Ritchie 0 Denunciar post Postado Junho 17, 2009 Por favor usem coloquem aqui o codigo. Compartilhar este post Link para o post Compartilhar em outros sites
Leandro B. Lopes 0 Denunciar post Postado Junho 21, 2009 Muito obrigado galera pelas dicas!!!!!! Agora deu certo...... Compartilhar este post Link para o post Compartilhar em outros sites