• Comunicados

    • Gabriel Torres

      Seja um moderador do Clube do Hardware!   12-02-2016

      Prezados membros do Clube do Hardware, Está aberto o processo de seleção de novos moderadores para diversos setores ou áreas do Clube do Hardware. Os requisitos são:   Pelo menos 500 posts e um ano de cadastro; Boa frequência de participação; Ser respeitoso, cordial e educado com os demais membros; Ter bom nível de português; Ter razoável conhecimento da área em que pretende atuar; Saber trabalhar em equipe (com os moderadores, coordenadores e administradores).   Os interessados deverão enviar uma mensagem privada para o usuário @Equipe Clube do Hardware com o título "Candidato a moderador". A mensagem deverá conter respostas às perguntas abaixo:   Qual o seu nome completo? Qual sua data de nascimento? Qual sua formação/profissão? Já atuou como moderador em algo outro fórum, se sim, qual? De forma sucinta, explique o porquê de querer ser moderador do fórum e conte-nos um pouco sobre você.   OBS: Não se trata de função remunerada. Todos que fazem parte do staff são voluntários.

Simon Viegas

Moderadores
  • Total de itens

    2.093
  • Registro em

  • Última visita

  • Qualificações

    0%

Reputação

486

5 Seguidores

Sobre Simon Viegas

  • Data de Nascimento 22-06-1982

Informações gerais

  • Cidade e Estado Salvador/BA
  • Sexo Masculino

Outros

  • Biografia Carregando...
  • Ocupação Técnico e Analista de Sistemas
  • Interesses Tecnologia
  1. Só um pequeno adendo: Como você mesmo comenta... seria "instanciar um novo objeto". A classe seria um "molde do objeto", correto?
  2. Olá @Harry Francis Bacon. Faltou inserir algum comentário na postagem... para entendermos melhor qual o contexto do seu código. Sei que a postagem é um pouco antiga, mas vou tentar complementar, já que o tema é interessante: Então, eu não tenho certeza, mas acho que é o oposto... ou seja, a recursividade tende a gastar mais memória e gasta mais processamento... (obs.: estou fazendo suposições)... pois pode trabalhar com criação de novas variáveis locais, gerenciamento de pilhas... etc. Cada vez que um procedimento/função é chamado, seria como se tivesse abrindo um novo "subprograma"... Por acaso encontrei um tópico que fala desse tema: Abraços
  3. Olá @Emerson Chou, por favor, edite sua postagem, remova esse código, e insira o código original dentro da tag CODE (clique no botão <>, e na caixa que irá abrir, cola o código). Então, eu não entendi muito bem as observações... em qual parte não está conseguindo traduzir de uma linguagem para outra e em qual contexto seria essa tradução? No aguardo.
  4. Olá. Como já está resolvido, dei uma ajustada para demonstrar o uso do método "Bubble Sort". É bem parecido com o método de ordenação utilizando no seu código, mas ajustada para as características específicas do Bubble Sort. (no seu código, ele vai atualizando da posição atual em posição atual, ou seja, primeiro a atualiza a posição 1 com o maior valor, depois atualiza a posição 2 com o maior valor que sobrou, depois a 3... etc.... já no Bubble Sort, o menor valor vai para o fim do vetor, ou seja, a última posição, que eu chamei de "posicaoCHAVE" vai fica com o menor valor do vetor. No próximo loop, a posição chave passa a ser a penúltima, que ficará com o menor valor do que sobrou, por ai vai... "Essa movimentação lembra a forma como as bolhas em um tanque de água procuram seu próprio nível, e disso vem o nome do algoritmo", ou seja, "as posições mais leves vão subindo para o fim do vetor... no final o vetor ficar em ordem decrescente). obs.: se for usar "crescente", bastaria usar a mesma lógica, só que usando uma comparação de "maiores para o fim". Aproveitei e tentei dar uma reorganizada para demonstrar outros conceitos... que podem ser úteis também para outros usuários, vejam: algoritmo "Concurso Publico" var //DADOS DOS CANDIDATOS nomes :Vetor[1..5] de Caractere mat :Vetor[1..5] de Inteiro pontos :Vetor[1..5] de Real n1,n2,n3 :Real //DADOS DO CONCURSO vagas :Inteiro //VARIÁVEIS AUXILIARES auxC :Caractere //usado para trocas de posições do tipo caractere auxR :Real //usado para trocas de posições do tipo real auxI :Inteiro //usado para trocas de posições do tipo inteiro i :Inteiro //usado para controlar os para trocado :logico //flag utilizada no métdo de ordenação Bubble Sort posicaoCHAVE :Inteiro //posicao do vetor ainda não ordenada INICIO vagas <- 4 //inicializa o número vagas disponíveis //LER OS DADOS DOS CANDIDATOS aleatorio on {HABILITA a geração de número aleatórios (PARA FACILITAR OS TESTES)} para i de 1 ate 5 faca escreva("Nome: ") leia(nomes[i]) escreva("Matrícula: ") leia(mat[i]) escreva("NOTA 01: ") leia(n1) escreva("NOTA 02: ") leia(n2) escreva("NOTA 03: ") leia(n3) escreval("") pontos[i] <- (n1*2) + (n2*3) + (n3*5) //calcula o número de pontos fimPara aleatorio off {DESATIVA a geração de número aleatórios (PARA FACILITAR OS TESTES)} escreval("") //ORDENANDO OS VETORES POR "MAIOR PONTOS" (pelo método de ordenação Bubble Sort) repita trocado <- falso //inicializa como "não houve troca" posicaoCHAVE <- 5 //inicializa a "posicao a ser ordenada" para i de 2 ate posicaoCHAVE faca //para cada posição (da segunda em diante) se (pontos[i-1] < pontos[i]) então //se posição anterior é menor que a atual //troca de posições os nomes auxC <- nomes[i-1] nomes[i-1] <- nomes[i] nomes[i] <- auxC //troca de posições as matriculas auxI <- mat[i-1] mat[i-1] <- mat[i] mat[i] <- auxI //troca de posições os pontos auxR <- pontos[i-1] pontos[i-1] <- pontos[i] pontos[i] <- auxR trocado <- verdadeiro //atualiza a flag para "houve troca" fimse posicaoCHAVE <- posicaoCHAVE-1 fimpara ate nao trocado //ate não haver mais trocas escreval("") para i de 1 ate vagas faca escreval("NOMES: ",nomes[i]:6," MATRICULA: ",mat[i]:5," PONTOS: ",pontos[i]:4:0) fimPara leia(auxC) fimAlgoritmo Uma maneira bem interessante de estudar o funcionamento dos métodos de ordenação é ir pressionando F8 e ver linha a linha no lado esquerdo do VisuAlgo, e ao mesmo tempo ir analisando a "Área de variáveis de memória" que fica no lado direito do VisuAlg. Abraços adicionado 3 minutos depois ADENDO: Fiz essa tentativa de demonstração utilizando um "método de ordenação formal", ou seja, de um conceito já existente e especificado (reutilização de conceitos). O método utilizado no seu código também é famoso, mas eu não consegui identificar o nome dele. Quem souber por favor avisa.
  5. Olá a todos. Só um cuidado especial na identação do código, mais abaixo exemplo 2 exemplos: Obs.:pela lógica do algoritmo, seria necessário utilizar um senao nas estruturas de seleção (se), pois um mesmo número não pode ser ao mesmo tempo maior e menor, ou seja, caso seja atualizado o maior, necessariamente não poderia atualizar o menor. (são condições mutuamente exclusivas, logo não se faz necessário continuar verificando). Algoritmo "maior e menor" var c, maior, menor, num: inteiro med : real INICIO maior <- 0 para c de 1 ate 10 faca escreva("Digite um numero inteiro :") leia(num) se c=1 então menor:=num fimse se num > maior então maior <- num senao se (num < menor) então menor <- num fimse fimse fimpara med <- (maior + menor) /2 escreval("A média entre o maior e o menor é ",med) FIMALGORITMO Obs.2: se ainda não não estudou se/senao, ignore, o código ficaria assim: Algoritmo "maior e menor" var c, maior, menor, num: inteiro med : real Inicio maior <- 0 para c de 1 ate 10 faca escreva("Digite um numero inteiro :") leia(num) se c=1 então menor:=num fimse se num > maior então maior <- num fimse se (num < menor) então menor <- num fimse fimpara med <- (maior + menor) /2 Escreval("A média entre o maior e o menor é ",med) Fimalgoritmo No aguardo.
  6. Olá @Tuufee, qual a linguagem de programação? Poste o que já fez e onde está com dúvidas. No aguardo.
  7. Olá @ssrodrigo2. 1) ENUNCIADO DO PROBLEMA Então, para tentar consertar algo, primeiramente precisamos saber qual o problema... Com o enunciado fica mais fácil par entender o contexto. 2) POSTAGEM DE CÓDIGOS NO FÓRUM Para postagem de códigos no Fórum, é necessário utilizar a tag CODE. Especialmente para manter a identação do código... Por favor, dê uma olhada nesta postagem: obs.: na sua postagem anterior, isso já foi corrigido por um moderador... 3) IDENTAÇÃO DE CÓDIGO A identação do código é de suma importância para os programadores. Pois a estrutura da identação por si só já fiz muita coisa... Veja por exemplo abaixo seu primeiro código reidentado: algoritmo "semnome" var vet7x8 :vetor[1..7,1..8] de inteiro i,j :inteiro inicio // Seção de Comando s para i de 1 ate 7 faca para j de 1 ate 8 faca vet7x8[i,j]<-i+j fimpara para de 1 ate 7 faca para de 1 ate 8 faca escreva(vet7x8[i,j]," ") fimpara escreval(" ") fimpara fimalgoritmo Daí, só analisando visualmente, já vemos que falta um fimPara para o primeiro para. Além disso, tem u "s" perdido ali antes do para.. Já no 3º e 4º para, você esqueceu de declarar o i e j... por ai vai. Outra ponto é sobre as "aspas duplas", no seu eles estão inclinadas, possivelmente devi a não está na tag code... O VisuAlg só reconhece as aspas verticais. *** No aguardo.
  8. Olá. Em relação "ID" creio que que seja um número "aleatório", gerado pelo Facebook... e não tem relação com tradução de e-mail ou nome... acho que é como um número CPF da pessoa... é uma identificação e pronto (não tenho certeza) Em relação ao perfil fake, faça uma denúncia ao Facebook, e a depender do contexto, fazer um também um Boletim de Ocorrência na delegacia competente. Falsidade ideológica é crime.
  9. Olá @joao emilio borges garcia. Não entendi... você se refere a tirar esse trecho: //Exibe o Jogador Mais Goleador se (caracpnum(jogadores[i,6]) > Maior ) então Maisgoleador <-(jogadores[i,1]) Maior <- (caracpnum(jogadores[i,6])) fimse ...de dentro do para? se for isso, não deve... O "Mais Goleador" está sendo verificado posição por posição mesmo... Por favor, tente explicar melhor o que está tentando fazer... ADENDO: - Nesse trecho está utilizando uma variável chamada Maior, o que significa essa variável? Então, poderia utilizar uma nomenclatura mais sugestiva, ex.: "MaiorQtdGols" ou "golsGoleador" etc... :). - Outro ponto é que em vez de armazenar o "nome" do jogador em si, poderia guardar a sua posição, ou seja, o valor de "i". Ai na hora de exibir, usaria essa posição no vetor. Tente entender o exemplo: //Exibe o Jogador Mais Goleador se (caracpnum(jogadores[i,6]) > qdtGolsGoleador) então posMaiorGoleador <-i //guarda a posição do maior goleador qdtGolsGoleador <- (caracpnum(jogadores[i,6])) //atualiza a quantidade de gols do (maior) goleador fimse Veja que esse trecho não "EXIBE" nada, está apenas "processando"/"Calculando"/"Identificando" quem é o mais goleador... a "exibição" vem depois, ou seja, corrija esse comentário lá em cima. Ex.: //Calculando o Jogador Mais Goleador Para exibir: ... escreval("Nome DO JOGADOR MAIS GOLEADOR -----> ",jogadores[posMaiorGoleador,1]) .. Ou seja, com apenas uma informação (a posição) você tem acesso fácil a todos os dados do respectivo jogador.. ex.: os gols dele estão em "jogadores[posMaiorGoleador,6]" Por ai vai No aguardo.
  10. Olá @jeffrey donovan. Qual a sua dúvida? É uma apenas uma conta entre bases numéricas ou precisará programar em alguma linguagem de programação? A primeira coisa que precisam-se saber é: a resposta é em qual base? Veja, é o mesmo que perguntar: quanto é 32 quilômetros + 15 milhas? (a resposta vai ser em quilômetros? em milha? em cm? em unidade astronômica? O segredo ai é efetuar a operação utilizando a mesma base, ou seja, ou você deixa ambos em Hexadecimal, ou deixa ambos em Octal, ou deixa ambos Decimal, ou deixa ambos em qualquer outra base válida! não importa. Ai calcula, e depois reconverte para base que deseja. Obs.: a maneira mais fácil de calcular a adição é na base decimal (que usamos no dia a dia). Mas ai depende da proposta... talvez a intenção seja efetuar o calculo em outra base. No aguardo.
  11. Olá @joao emilio borges garcia. O código já está funcionando? faça uns testes de mesa, ou seja, utilize valores que você já sabe quais seriam os resultados e compara utilizando o programa... Mas tem um "errinho" no código... Veja, abaixo apenas peguei o seu código e reidentei: Algoritmo "futebol" // Função : Criar Algoritmo para Futebol // Autor : João Emilio // Data : 18/04/2017 // Seção de Declarações Var // Seção de Declarações das variáveis jogadores :vetor[1..20,1..8] de caractere continuar :caractere //flag para verificar se deseja continuar cadastrando MAXIMO :inteiro //maximo de jogadores possíveis i :inteiro //utilizado para controlar os for quant :inteiro //quantidade de pessoas cont :inteiro //quantidade de impressões na tela (não imprimir tudo de vez) Maisgoleador :caractere //Exibe o Mais Goleador Maior :real somaAltura :real mediaAltura :real somaPeso :real mediaPeso :real somaIdade :real mediaIdade :real somaGols :real somaJogos :real mediaGols :real somaPassesCorretos :real somaPassesErrados :real mediaPassesCorretos :real mediaPassesErrados :real mediaJogos :real Inicio // Seção de Comandos, procedimento, funções, operadores, etc... MAXIMO<-3 //CADASTRO DE Jogadores continuar:="s" enquanto (continuar = "S") ou (continuar = "s") faca //APRESENTAÇÃO DO PROGRAMA escreval() escreval("================================") escreval("ETEC Prof.Alcídio de Souza Prado") escreval(" FUTEBOL ") escreval("================================") escreval() quant:=quant+1 escreva("Nome do Jogador................: ") leia(jogadores[quant,1]) escreva("Altura do Jogador..............: ") leia(jogadores[quant,2]) escreva("Peso do Jogador................: ") leia(jogadores[quant,3]) escreva("Idade do Jogador...............: ") leia(jogadores[quant,4]) escreva("Número de Jogos................: ") leia(jogadores[quant,5]) escreva("Número de Gols.................: ") leia(jogadores[quant,6]) escreva("Número de Passes Corretos......: ") leia(jogadores[quant,7]) escreva("Número de Passes Errados.......: ") leia(jogadores[quant,8]) escreval() escreval() se quant < MAXIMO então escreva("Quer Cadastrar Mais Um Jogador ? < S/N > ") leia(continuar) senao escreva("Só Pode Cadastrar Até",MAXIMO," Jogadores... Tecle Enter") leia(continuar) continuar:="n" fimse limpatela fimenquanto //Cálculo de Resultados Maior <- 0 para i de 1 ate quant faca somaAltura <-(caracpnum(jogadores[i,2])+ somaAltura) somaPeso <- (caracpnum(jogadores[i,3]) + somaPeso) somaIdade <- (caracpnum(jogadores[i,4]) + somaIdade) somaGols <- (caracpnum(jogadores[i,6]) + somaGols) somaJogos <- (caracpnum(jogadores[i,5]) + somaJogos) somaPassesCorretos <- (caracpnum(jogadores[i,7]) + somaPassesCorretos) somaPassesErrados <- (caracpnum(jogadores[i,8]) + somaPassesErrados) mediaAltura <- somaAltura/quant //Média de Altura mediaPeso <- somaPeso/quant //Média de Peso mediaIdade <- somaIdade/quant //Média de Idade mediaGols <- somaGols/somaJogos //Média de Gols Por jogo mediaJogos<- somaJogos/quant //Média de Jogos mediaPassesCorretos <- somaPassesCorretos/quant //Média de Passes Corretos mediaPassesErrados <- somaPassesErrados/quant //Média de Passes Errados se (caracpnum(jogadores[i,6]) > Maior ) então //Mais Goleador Maisgoleador <-(jogadores[i,1]) Maior <- (caracpnum(jogadores[i,6])) fimse //Exibição dos resultados cont<-0 escreval() cont:=cont+1 escreval("Nome do Jogador ---> ",jogadores[i,1]) escreval("Altura ------------> ",jogadores[i,2], " Metros") escreval("Peso --------------> ",jogadores[i,3], " KG") escreval("Idade -------------> ",jogadores[i,4], " Anos") escreval("Número de Jogos ---> ",jogadores[i,5], " Jogos") escreval("Número de Gols ----> ",jogadores[i,6], " Gols") escreval("Número de Passes Corretos ---> ",jogadores[i,7], " Passes") escreval("Número de Passes Errados ---> ",jogadores[i,8], " Passes") se cont=3 então cont:=0 escreval() escreval("Tecle Enter Para Continuar") leia(continuar) fimse fimpara //TOTAL escreval() escreval() escreval() escreval() escreval("===================================") escreval("Total DE Jogadores Digitados ------> ",quant) escreval("Média de Altura dos Jogadores -----> ",mediaAltura:1:2, " Metros") escreval("Média de Peso dos Jogadores -------> ",mediaPeso:2, " KG") escreval("Média de Idade dos Jogadores ------> ",mediaIdade:2, " Anos") escreval() escreval("Média de Gols por Jogo ------------> ",mediaGols:2:2, " Gols Por Jogo") escreval("Média de Jogos por Jogador --------> ",mediaJogos:2," Jogos Por Jogador") escreval("Média de Passes Corretos por Jogo -> ",mediaPassesCorretos:2, " Passes Por Jogo") escreval("Média de Passes Errados por Jogo --> ",mediaPassesErrados:2, " Passes Por Jogo") escreval() escreval() escreval("Nome DO JOGADOR MAIS GOLEADOR -----> ",Maisgoleador) escreval("===================================") fimalgoritmo Observe que você colocou novamente o cálculo das médias está dentro do para. Esse trecho: Então, esse cálculo acima só precisa ser feito uma vez... se colocar dentro do para, a cada volta (loop) o programa irá calcular novamente... (desperdício de recurso - "calculará a média com um jogador, depois calculará a média com 2, com 3... etc, mas o que interessa é somente a média final). Ou seja, o cálculo da média vem depois... Tente entender o processo...., como se calcula uma média? ou seja, "é a soma dos valores (somaXXX) dividido pelo número total de valores (quant)". O para estará servindo para "somar" os valores, daí você não pode (não deve) ao mesmo "ir calculando a média"... faz uma coisa, depois a outra... são etapas diferentes! RESUMINDO Coloque esse trecho de código acima depois do fimPara. Após faz os testes e vê se os resultados estão corretos. Obs.: perceba que essa alteração que estou sugerindo não alterará o resultado dos cálculos, ou seja, será "apenas" uma correção na lógica ("primeiro somo os valores, depois calculo as médias"). No aguardo.
  12. Olá @joao emilio borges garcia. 1) AJUSTE DE COMENTÁRIO Acho que tá mais para 2) SUGESTÃO DE ORGANIZAÇÃO Para enxugar um pouco o código, veja exemplo abaixo: mediaAltura <- somaAltura/quant //Média de Altura mediaPeso <- somaPeso/quant //Média de Peso mediaIdade <- somaIdade/quant //Média de Idade mediaGols <- somaGols/somaJogos//Média de Gols Por jogo mediaJogos <- somaJogos/quant //Média de Jogos mediaPassesCorretos <- somaPassesCorretos/quant //Média de Passes Corretos mediaPassesErrados <- somaPassesErrados/quant //Média de Passes Errados se (caracpnum(jogadores[i,6]) > Maior ) então //Mais Goleador Maisgoleador <-(jogadores[i,1]) Maior <- (caracpnum(jogadores[i,6])) fimse Obs.: Tem um erro de lógica ai, pois "Mais Goleado" necessita do para. (vide item 4) 3) REAPROVEITAMENTO DE ESTRUTURA Observe que lá em Nessa parte que "exibição" tem um para que exibe os dados dos jogadores... e ele tem o mesmo tamanho que o para que o para lá em "calcula". Daí, seria até possível juntar uma coisa na outra... (se fosse o caso, a parte que calcula a média teria que também ficar abaixo do para). Mas acho que do jeito que está tá bom!!! (quis comentar sobre isso, mas não ligue por enquanto) 4) MAIS GOLEADOR.. Veja que nessa cálculo é necessário verificar a cada loop, logo deverá ficar dentro do para. Qual erro está dando? (de qualquer forma, uma coisa é certa: não é para ficar fora... ou seja, a tática de retirar teoricamente só serviria para a evitar o erro de sintaxe (bug ou erro na sua programação ), mas por si só já trouxe um erro de lógica) *** No aguardo.
  13. Olá @Milton Augusto. Inicialmente, por favor, transcreva o seu algoritmo para texto... daí, edite a postagem e use a tag code (botão <> na barra de ferramentas) para colar... Então, em relação a "faixa de números", você pode usar um laço de repetição que controlará um "contador" que irá variar do número inicial e finalizar no número final. Existem 3 tipos básicos de laços: "para", "enquanto" e "repita", certo? nesse caso, o mais simples seria usar para, pois na própria estruturação ele já usa um contatador, e define um valor inicial e final para ele.. Em relação a base do problema, temos o cálculo de número primos, que por si não é tão trivial (mas também não é nenhum bicho de 7 cabeças), ou seja, tente enxergar que são duas etapas: 1) calcular número primos; 2) calcular algo em uma faixa de números. SUGESTÃO Inicialmente faça um algoritmo que calcule se um número é primo ou não; (aqui é a chave); Depois, faça um programa que exibe na tela os números contidos entre uma faixa de inteiros; Pronto... juntar os dois recursos... sendo que irá verificar se um número é primo, e contar a quantidade destes. No aguardo.
  14. Olá. Complementando: 1) NOMENCLATURA DE VARIÁVEL Você está usando uma matriz chamada "nome", mas nela está cadastrando "Nome", "Altura", "Peso" etc. Sugiro alterar para "Jogadores". Para simplificar o processo, pressione CTRL+U, e "Procurar por: nome" e "Substituir por: jogadores". Ai vai pressionado "S" ou "N". Bem fácil. Obs.: é recomendado nomenclaturar vetores ou matrizes no plural. O mesmo vale para as variáveis que vai calculando a soma de cada atributo... ex.: - somaAltura, em vez de altura; - somaPeso, em vez de peso; etc 2) CÁLCULO DAS MÉDIAS Você está fazendo o cálculo das médias dentro do para, ou seja, para cada volta (loop) está sendo calculado novamente, mas na verdade deveria calcular uma vez só. Dentro do para deveria apenas ir somando... Algo como: para i de 1 ate quant faca somaAltura <-(caracpnum(jogadores[i,2])+somaAltura) somaPeso <-(caracpnum(jogadores[i,3])+somaPeso) somaIdade <-(caracpnum(jogadores[i,4])+somaIdade) somaGols <-(caracpnum(jogadores[i,6])+somaGols) somaJogos <-(caracpnum(jogadores[i,5])+somaJogos) somaPassesCorretos<-(caracpnum(jogadores[i,7])+somaPassesCorretos) somaPassesErrados <-(caracpnum(jogadores[i,8])+somaPassesErrados) ... Após ter esses dados, ai sim faz as contas, algo como: fimPara mediaaltura<-somaAltura/quant mediapeso <-somaPeso/quant ... *** No aguardo.
  15. Olá a todos... Me parece que a postagem é antiga, então tá valendo entregar "respostas prontas"... Então, apesar de funcional, acho que esse código de @devair1010 tá um pouco avançado para o contexto, pois já entrou em "matrizes" (vetores de duas coordenadas) e métodos de ordenação (acho que Bubble Sort). Dá para fazer apenas usando variáveis para armazenar o menor e maior valores, ex.: Program imc_doProf; uses CRT; //Biblioteca necessário para alguns compiladores para recenhecer alguns comandos (ex.: TextColor, ClrScr, UpCase, Yellow, White etc) var peso, alt, IMC, maiorIMC, menorIMC :real; cont :string; BEGIN TextColor(White); writeln; writeln('======================================='); writeln(' CALCULO DE IMC '); writeln('======================================='); writeln; repeat {peso:=0;} //não necessário {alt :=0;} //não necessário {cont:='Y'}; //não necessário writeln; write ('INFORME SUA ALTURA: '); readln(alt); write ('INFORME SEU PESO: '); readln(peso); IMC:=peso/Sqr(alt); writeln('SEU IMC E: ', IMC:0:2); if ((IMC<menorIMC) or (menorIMC=0)) then //se menor que o menor ou se é o primeiro menorIMC:=IMC; if (IMC>maiorIMC) then //se maior que o maior maiorIMC:=IMC; writeln; write ('DESEJA CALCULAR NOVAMENTE? (S/N): '); //use "sim", vem vez de "yes" {read(cont);} //não usem read, use somente readln readln(cont); until (UpCase(cont)='N'); writeln; writeln('Menor IMC: ',menorIMC:0:2); writeln('Maior IMC: ',maiorIMC:0:2); readln; END. Abaixo uma versão com alguns "enfeites". Program imc_doProf; uses CRT; //Biblioteca necessário para alguns compiladores para recenhecer alguns comandos (ex.: TextColor, ClrScr, UpCase, Yellow, White etc) var peso, alt, IMC, maiorIMC, menorIMC :real; cont :string; BEGIN TextColor(White+blink); //blink = fazer piscar. obs.: em alguns compiladores não funciona (No meu, Free Pascal Compiler, fica apenas com um fundo cinza, rs) writeln; writeln('======================================='); writeln(' CALCULO DE IMC '); writeln('======================================='); writeln; TextColor(Green); writeln(' TABELA IMC '); writeln('Abaixo de 17 Muito abaixo do peso '); writeln('Entre 17 e 18,49 Abaixo do peso '); writeln('Entre 18,5 e 24,99 Peso normal '); writeln('Entre 25 e 29,99 Acima do peso '); writeln('Entre 30 e 34,99 Obesidade I '); writeln('Entre 35 e 39,99 Obesidade II (severa) '); writeln('Acima de 40 Obesidade III (mórbida)'); TextColor(White); repeat writeln; write ('INFORME SUA ALTURA: '); readln(alt); write ('INFORME SEU PESO: '); readln(peso); IMC:=peso/Sqr(alt); writeln('SEU IMC E: ', IMC:0:2); if ((IMC<menorIMC) or (menorIMC=0)) then //se menor que o menor ou o primeiro menorIMC:=IMC; if (IMC>maiorIMC) then //se maior que o maior maiorIMC:=IMC; writeln; TextColor(Yellow); write ('DESEJA CALCULAR NOVAMENTE? (S/N): '); //use "sim", vem vez de "yes" TextColor(White); {read(cont);} //não use read, use somente readln readln(cont); until (UpCase(cont)='N'); writeln; writeln('Menor IMC: ',menorIMC:0:2); writeln('Maior IMC: ',maiorIMC:0:2); readln; END. Abraços