Ir ao conteúdo

Simon Viegas

Membro VIP
  • Posts

    3.940
  • Cadastrado em

Tudo que Simon Viegas postou

  1. Olá!! Que nada, estamos aqui para aprendermos uns com os outros.. hehehehhehe Na minha analise, o código está de OK. Apenas um ressalva para a identação, que particularmente acho de extrema importância e a condição para repetir não está de acordo o enunciado (tem que sair ao digitar 0, correto?). No meu padrão ficaria assim: program Taboada;var n,tab :integer; resp :string;beginresp:='s';while resp='s' do begin write('Qual a tabuada: '); readln(tab); for n:= 1 to 10 do writeln(tab,' x ',n,' = ',tab*n); write('Deseja continuar (S/N): '); readln(resp); end;end. *** Aproveitando a oportunidade, vou comentar sobre algumas possíveis melhorias que poderiam ser úteis, no caso, exemplificando alguns conceitos e que podem ser utilizados em outros contextos. 1| NÃO DIFERENCIAR MAIÚSCULAS E MINÚSCULAS Por exemplo, nesse programa, ao usuário responder se vai continuar ou não, o programa só vai aceitar repetir se ele digitar exatamente "s" (minúsculo). Se digitar "S" ou qualquer outro caractere ou, conjunto de caracteres, que não seja esse, o programa sairá. Não vai repetir. Ai temos pelo menos 2 pontos: a) seria melhor utilizar CHAR, em vez de STRING, pois a resposta só precisa de um caractere, e uma string acaba sendo, de certo modo, um desperdício (variável com capacidade "muito" maior" do que precisa). A outra vantagem de utilizar um char, é que se ele digitar mais de um caractere o que vai importar é o primeiro, ex.: se digitar "sim", a variável só vai armazenar o "s". Se digitar "sgjk3123", ele também só vai pegar a primeira letra e iria funcionar, entende? Claro que isso depende do propósito. Se um contexto seja necessário que seja EXATAMENTE uma letra específica, ai teria que pensar o algoritmo de outra forma. RESUMINDO: usar resp :char; em vez de resp :string; é possível que o programa aceite tanto "s", quanto "S". Tem duas formas básicas. Uma seria declarando o while com as duas possibilidades. ex. while (resp='s') or (resp='S') do ou utilizar do comando UpCase(). (UpCase = "retorna o correspondente em maiúsculo do caractere informado") while UpCase(resp)='S' doou mesmowhile resp='S' do begin ... ... readln(resp); resp:=UpCase(resp); //já deixa a variável com o valor correspondente em maiúsculo end; 2) FORMATAÇÃO DE 'TEXTO" No Pascal, existe uma forma bastante simples e funcional de formatar um conjunto de caracteres, no caso "inserindo espaços a esquerda". Vamos ver na prática: Tomemos os exemplo: write('Deseja continuar (S/N): ':50); Nesse caso, esse :X (usei :50) após a variável ou, nesse exemplo, uma cadeia de caracteres em si, significa que ela (a cadeia) vai "passa a ter pelo menos X caracteres", ou seja, se tiver 10 letras, vão ser inseridos 40 espaços no início. Se tiver 30, vão ser adicionados 20 espaços etc... se tiver mais de 50, ai ele não vai fazer nada! (vai ter pelo menos 50 da mesma forma); E para que isso vai me servir? Como está exibindo uma "tabela", pode ser interessante que a exibição fique alinhada, veja: Sem formatação: Qual a tabuada: 77 x 1 = 77 x 2 = 147 x 3 = 217 x 4 = 287 x 5 = 357 x 6 = 427 x 7 = 497 x 8 = 567 x 9 = 637 x 10 = 70Deseja continuar (S/N): Com formatação: Qual a tabuada: 7 7 x 1 = 7 7 x 2 = 14 7 x 3 = 21 7 x 4 = 28 7 x 5 = 35 7 x 6 = 42 7 x 7 = 49 7 x 8 = 56 7 x 9 = 63 7 x 10 = 70Deseja continuar (S/N): Percebem a diferença? Abaixo como ficaria o código: writeln(tab:2,' x ',n:2,' = ',tab*n:2); 3) ESCOLHENDO O LAÇO "IDEAL" (For, While ou Repeat) Como costume dizer: "Tudo que dá para fazer com um, dá para se fazer com outro", em outras palavras: só precisaria existir um! Correto? Mas acontece que cada um é mais pratico que outro, daí é interessante entender o funcionamento dos 3... Em relação a esse "problema da tabuada", creio que já ficou meio claro que o for não cai muito bem, pois não se trata de uma quantidade de repetição fixa, mas sim condicional («O programa termina quando for digitado o número zero.»). Logo, sobra o Repeat e While. Com While já vimos, abaixo só um exemplo com Repeat. program Taboada;var n,tab :integer; resp :char;beginrepeat write('Qual a tabuada: '); readln(tab); for n:= 1 to 10 do writeln(tab:2,' x ',n:2,' = ',tab*n:2); write('Deseja continuar (S/N): '); readln(resp); until UpCase(resp)<>'S';end. Perceba que nesse caso talvez o repeat seja mais correto que o While, pois "sempre será executado pelo menos uma vez", e o While tem a característica "Verificar primeiro antes de iniciar o primeiro loop". E no caso "corrigindo" a condição para finalizar: program Taboada;var n,tab :integer;beginrepeat write('Qual a tabuada: '); readln(tab); for n:= 1 to 10 do writeln(tab:2,' x ',n:2,' = ',tab*n:2);until tab=0;end. Por ai vai. Qualquer coisa é só postar, ou avisem que fechamos o tópico. No aguardo.
  2. Oi... falha minha... foi eu quem apagou. . Aconteceu que ao apagar não tinha opção de deixar um comentário, daí eu ia te enviar um mensagem privada, mas acabei me ocupando e depois me esqueci.. desculpe! Mas em fim, a questão toda foi a seguinte: Evitem postar uma resposta pronta para usuário, o ideal é passsar as orientações e deixar que ele faça! Abraços UPDATE Fábio, por favor, poste aqui o seu código para, caso necessário, ser reanalizado, e também de servir de base para outros usuários... No aguardo.
  3. Olá. Como você já deve saber, o PZim é apenas uma IDE/Compilador que utiliza uma linguagem, no caso Pascal. Vamos lá. Imagino pelo menos duas possibilidades para verificar se o arquivo já está criado: utilizando o FileExists(); utilizando o IOResult; (tenta abrir o arquivo, se o IOResult retornar um valor diferente de 0, deu rúim!) Obs. 1: Creio que o FileExists() não funciona no Pascal Zim (a ferramenta tem algumas limitações), mas de qualquer forma vale a pesquisada; Obs. 2: Cada código retornado pelo IOResult significa alguma coisa. Na intermet deve ter uma tabela... para o seu programa em si, basta saber se foi 0 ou não. No aguardo.
  4. Olá. Qual compilador você usa? Vamos lá: Obs.: Ficou faltando o end. no final. Abaixo compilei o código (Compilador Free Pacal 2.6.4): program televisor;uses CRT;const Maximo = 1000; type RgProduto = record Nome: string; totaltvcores,totaltvpretobranco: integer; end;var salarioBruto,salarioliquido,salarioBruto,comissao,INPS,valorretido :real; n,i,totaltvcores,totaltvpretobranco,inscricao:integer; continuar,tipo:char; nome:string; beginn:=0;n:=n+1;ClrScr;writeln('informe o nome do encarregado:');readln(nome);writeln('informe o salarioFixo:');readln(salarioBruto);writeln('Informe a quantidade de televisores a cores vendidos :');readln(totaltvcores);writeln('Iforme a quantidade de televisores preto e brano vendidos :');readln(totalpretobranco);comissao:= (totaltvcores+ totalpretobranco); // qual formula usar se isoo depende da quantidade?end; E apresentou alguns erro, daí, vai tentando analisar, ex.: _FCH.PAS(12,31) Error: Duplicate identifier "salarioBruto" Na linha 12 , existem duas variáveis com o mesmo nome!! NÃO PODE!. Ou uma delas está digitado errada, ou você declarou a mesma variável duas vezes... Outro exemplo: _FCH.PAS(27,24) Error: Identifier not found "totalpretobranco" Na linha 27, foi utilizado uma variável de nome totalpretobranco, mas ela não foi declarada... etc... Vai compilando e corrigindo, compilando e corrigindo... No aguardo.
  5. Olá. Já conseguiu fazer? favor informar se ainda precisa de ajuda ou não, e se for o caso onde precisa de ajuda. No aguardo.
  6. Olá. Ainda precisa de ajuda? caso necessário, por favor, poste o que já conseguiu fazer e onde está com dúvidas. No aguardo.
  7. Sim. Utilize uma estrutura de repetição. Obs. 1: Mantenha seu código sempre identado. Exemplo: Algoritmo "colete"// Disciplina :// Professor(a):// Descrição :// Autor(a) :// Data atual :Var a: inteiroInicioEscreval (" _______________________________________________")Escreval ("| |")Escreval ("| Digite um numero para saber a cor do colete |")Escreval ("|_______________________________________________|")escreval(" _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ")escreval("|-Digite 1 para Setor T.I |")escreval("|-Digite 2 para Backoffice operacional |")escreval("|-Digite 3 para Trafego |")escreval("|-Digite 4 para Recursos Humanos |")escreval("|-Digite 5 para Supervisão |")escreval("|-Digite 6 para Operador de Telemarketing |")escreval("|-Digite 7 para Jovem Aprendiz |")escreval("|-Digite 8 para Gerência |")escreval("|-Digite 9 para Monitoria |")escreval(" ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ")leia (a)se (a=1) então escreval("|¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯|") escreval("| Azul Escuro |") escreval("|Obrigado pela consulta!|") escreval(" ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ")senao se (a=2) então escreval("|¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯|") escreval("| Azul |") escreval("|Obrigado pela consulta!|") escreval(" ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ") senao se (a=3) então escreval("|¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯|") escreval("| Verde fluorecente |") escreval("|Obrigado pela consulta!|") escreval(" ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ") senao se (a=4) então escreval("|¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯|") escreval("| Verde |") escreval("|Obrigado pela consulta |") escreval(" ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ") senao se (a=5) então escreval("|¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯|") escreval("| cinza |") escreval("|Obrigado pela consulta |") escreval(" ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ") senao se (a=6) então escreval("|¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯|") escreval("| Vermelho |") escreval("|Obrigado pela consulta |") escreval(" ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ") senao se (a=7) então escreval("|¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯|") escreval("| Bege |") escreval("| Obrigado pela consulta|") escreval(" ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ") senao se (a=8) então escreval("|¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯|") escreval("| Branco |") escreval("| Obrigado pela consulta|") escreval(" ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ") senao se (a=9) então escreval("|¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯|") escreval("| Laranja |") escreval("| Obrigado pela consulta|") escreval(" ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ") senao escreval("Colete não encontrado") fimse fimse fimse fimse fimse fimse fimse fimsefimalgoritmo Obs. 2: Devido essa característica de se/senao/se em sequência, seria melhor utilizar o CASO. Obs. 3: Existem muitas repetições que podem ser evitadas, ou seja, das 4 linhas, 3 são iguais para todos os casos. Sugiro duas formas para tentar ajustar isso: 1- impriime a primeira, depois seleciona (se) a mensagem da cor, depois exibe as duas últimas; 2- usa uma variável auxiliar para conter o "texto" da cor, daí imprimi uma vez só todo o "quadro" utilizando essa variável. *** No aguardo.
  8. Olá. Vamos partir pelo enunciado. Java é Orientado a Objetos, correto? então, talvez faça mais a sentido criar a estrutura baseada em objetos... Classe Aluno Classe Sala Classe Principal No seu programa principal, você cria uma Sala. Cada aluno a ser criado, você coleta o nome e as suas quatro notas e cria um Aluno. Daí adiciona o aluno a Sala. Para calcular a média do aluno: Cria um método em Aluno que retorna a média; (ex.: getMedia()) Para ver quem está na recuperação: Cria um método em Principal que retorna uma array com os Alunos que foram reprovados. (ex.: getReprovados()) Por ai vai... No aguardo.
  9. Olá A primeira coisa que precisam-se fazer é interpretar o enunciado. Então, o que significa «classifica as notas de uma turma»? Seria essa contagem da quantidade seguindo por categorias mesmo? Vou partir do pressuposto que seja como você está tentando fazer. VAMOS LÁ 1) Mantenha seu código identado A identação é de suma importância. Abaixo seu código identado (no meu padrão) Program ue ;var cont_suf,cont_insuf,cont_exelent,cont_total:real; nota,soma,media:real;beginsoma:=0;cont_total:=0;cont_exelent:=0;cont_suf:=0;cont_insuf:=0;//finalizador para notas -1.writeln('Este programa classifica as notas de uma turma em excelente, suficiente e insuficiente');writeln;writeln('Digite -1 ou menos para finalizar');write('Digite uma nota> ');readln(nota);//Condicionais das notas do algoritmo//Se a nota for >=9 ou <=10, é somado +1 ao cont_excelente.repeat {begin} //repeat não precisa de begin/end... if (nota>=9) and (nota<=10) then cont_exelent:=cont_exelent+1; media:=media+nota; cont_total :=cont_total+1; //Se a nota for >=7 ou <=8, é somado +1 ao cont_suf. if (nota>=7) and (nota<=8) then cont_suf:=cont_suf+1; media:=media+nota; cont_total:=cont_total+1; //Se a nota for >=0 ou <=6, é é somado +1 ao cont_insuf. if (nota>=0)and(nota<=6) then cont_insuf:=cont_insuf+1; media:=media+nota; cont_total:=cont_total+1; {end;} //repeat não precisa de begin/end... write('Digite uma nota> '); readln(nota);until nota<>-1;//Calculando a media.soma:=(media/cont_total);//Total de notas excelentes, suficientes e insuficientes.writeln('O número de notas exelentes é= ',cont_exelent:0:2);writeln('O número de notas suficientes é= ',cont_exelent:0:2);writeln('O número de notas isuficientes é= ',cont_insuf :0:2);writeln;writeln('A média das notas é=', soma:0:2);end. Daí, visualmente já percebemos que está faltando um begin/end nos ifs, pois ele só "amarra" um comando, ou seja, apenas o que vem logo após o then. Caso queira mais de um comando "amarrado", precisa cria um "bloco" (begin/end) Ex.: ATUAL //Condicionais das notas do algoritmo//Se a nota for >=9 ou <=10, é somado +1 ao cont_excelente.repeat {begin} //repeat não precisa de begin/end... if (nota>=9) and (nota<=10) then cont_exelent:=cont_exelent+1; media:=media+nota; cont_total :=cont_total+1; CORRETO (supostamente) repeat //Condicionais das notas do algoritmo //Se a nota for >=9 ou <=10, é somado +1 ao cont_excelente. if (nota>=9) and (nota<=10) then begin cont_exelent:=cont_exelent+1; media:=media+nota; cont_total:=cont_total+1; end; Percebe a diferença? Obs.: Precisa corrigir os comentários: Você escreveu ">=9 ou <=10", mas o certo é "E" !!!! Ex.: 8! 8 é maior igual a 9! Não. 8 é menor igual que 10, SIM! No "ou", essa condição daria "verdadeiro" (que não é o caso), já no "e" daria falso (ok). Logo, a frase está errada!!! O certo é "..for >=9 e <=10..." ) Obs2.: No if está certo.. "and" = "e". 2) Repetição desnecessária de código Então, você não precisa "somar a média" e "contar o total" a cada if, basta somar uma vez! No if fica somente o que é específico...(no caso "contar pela categoria"). 3) Separação das variáveis Durante o programa, você usou "media:=media+nota;", e isso (supostamente) está errado. Você precisa de outra variável para armazenar essa soma. E só depois, jogar o calculo da média na media. Ex.: "somaNotas:=somaNotas+nota;" e "soma:=somaNotas/cont_total;" *** Tem mais coisas.. por enquanto paro por aqui... Vê o que consegue fazer e qualquer coisa vamos te ajudando... No aguardo.
  10. Olá. Nesse caso, de fato não deve ter o else mesmo, pois como já sugerido, pode ser uma coisa e outra ao mesmo tempo. Em relação ainda ao enunciado, a ideia é que seja seguido o que está se pedindo, por exemplo, em nenhum momento está se pedindo a quantidade de motoristas... Sobre o enunciado: a. OK; (só está fora da ordem) b. OK; (tb fora de ordem) c. Você exibiu o "total de idades", mas ele pede a "Soma das idades das pessoas aptas a dirigir", ou seja, "somar as idades", em vez de "contar a quantidade"... PS: tá precisando agora dar uma arrumada na identação. Os ifs são independentes entre si, logo devem ficar alinhados na mesma coluna... PS2: Existem diversos padrões, mas o princípio é p mesmo..., no meu, o código que você postou ficaria assim: program Pzim;var idade, idosos, motoristas, eleitores : integer; beginidosos :=0;motoristas:=0;eleitores :=0;write('Digite a idade da pessoa: '); readln(idade);while (idade > 0) do begin if (idade >= 16) then eleitores:=eleitores + 1; if (idade >= 18) then //<--percebe que esse if fica no mesmo alinhamento do begin. Visualmente percebe-se que não depende do if anterior motoristas:=motoristas + 1; if (idade >= 65) then idosos:=idosos+1; write( 'Digite a idade da pessoa: ' ) ; readln( idade ) ; end;writeln( 'A quantidade de eleitores é : ',eleitores);writeln( 'A quantidade de motoristas é: ',motoristas);writeln( 'A quantidade de idosos é : ',idosos );end. No aguardo. Abraços
  11. Olá. Basicamente precisa corrigir a lógica da estrutura de seleção. As "sentenças" dos ifs estão incompletas. Ex.: Supondo que informou o tal 18.. if ( idade >= 16 ) then Então, 18 é maior que 16? Sim, é! ...e como está usando o else (já que são mutuamente exclusivas entre si), não vai ser verificado o restante! (obs.: o else está certo, o que está "errado" são as sentenças). Para facilitar um pouco: você precisará de duas condições para cada um dos dois primeiros ifs. PS: Não use read, USE SOMENTE readln!! PS2: Apenas como comentário... veja, essa classificação etária está um pouca estranha, já que de fato NÃO SÃO excludentes, ou seja, pode ser eleitor e ao mesmo tempo ser motorista, e também ser idoso.... RESUMINDO: precisaria revisar o "enunciado" (problema proposto). No aguardo.
  12. Olá. Essa postagem é inicialmente apenas para sugestões de correções de alguns detalhes... ok? Abaixo seu código até o momento. (juntei o original com correção da sua última postagem) Vamos lá: 1) Sobre o método ProcessaNumero(); Veja a declaração do método ProcessaNumero(). public double ProcessaNumero(String Mensagem) { Ou seja, ele RETORNA um double. Mas você está usando: } ProcessaNumero(txt.getText()); //<-- aqui! JOptionPane.showMessageDialog(null, "O fatorial do número " + num + " é: " + fator); } else { Para onde está indo o retorno??? Se você não vai utilizar ele, o método teria que ser void. Entende? Então, na verdade, acho que o método está no caminho certo, mas o uso que está errado. A ideia do ProcessaNumero é "tentar fazer a conversão, e retornar o valor convertido nela mesma. E caso não consiga, exibir uma mensagem de erro". Mas durante o programa, você está usando um tal de Double.parseDouble(). Ora! Se eu tenho um método que PROCESSA O NÚMERO, por quê eu vou tentar processar eu mesmo? Resumidamente: Use apenas o ProcessaNumero() para converter o número e pronto! Algo como: num = ProcessaNumero(txt.getText()); E após isso verifica a sua flag (variável de controle, no caso o processou), entende? 2) Sobre o método Fatorial(). Ué? para que ele foi criado? Experimente apagar o método e compilar para ver o que acontece... (o método não está sendo usado) Então, ai cai na mesma lógica anterior... o método está mais ou menos já estruturado, falta usar! Obs.: acho que precisa ajustar ela, pois acredito que não é bom utilizar variável globais em procedimentos, ou seja, talvez seria utilizar variável locais (declaradas dentro do método) e que o valor para cálculo seja repassado por parâmetro... No aguardo.
  13. e aí, ainda precisa de ajuda? Querem revisar o código? A depender, entrega novamente... talvez não falha pontos, mas pelo menos ajuda no aprendizado e ganha mais moral com professor. No aguardo.
  14. Olá. Conseguiu fazer? Se possível, poste aqui a solução encontrada e/ou onde está com dúvidas, para que aguarde nova tentativa de ajuda/servir de auxílio para outros membros. No aguardo.
  15. Olá Comédia Tube. A princípio o seu programa também está funcionando... talvez precise ajustar algo, como utilizar IF/ELSE, em vez de só IF, pois são condições mutuamente exclusivas entre si, ou seja, se for um, não pode ser o outro (isso pode ser considerado um erro de lógica). Em relação ao funcionamento em si, os dois estão utilizando 3 possíveis respostas... ai tem que vê se vai poder ser assim ou não... Então, vocês precisam verificar com o professor o que ele quer! A depender faz (implementa e entende a fundo) as duas formas, ou seja, com 3 respostas como já está E com 2 respostas, no caso só com SIM ou NÃO. O importante é que seja feito o que está pedindo... Em relação ao FLUXOGRAMA, infelizmente não lembro como se faz e no momento não dá para revisar e tentar te ajudar... Em relação: Não se preocupe com isso, estamos aqui compartilhar conhecimento e aprendizagem mútua. No aguardo.
  16. Olá. Tente fazer... entenda melhor o que está pedindo, e ajuste o código... basicamente precisa só ajustar de acordo com ele pediu... Program GuessIt(input, output);var ok: boolean; resposta, low, upp: integer; res: char;beginwriteln ('Pense em um número entre 1 e 60.');writeln ('Pressione ENTER para começar');readln;low := 1;upp := 60;repeat ok := false; resposta := ( ( upp - low ) div 2 ) + low; write ('O seu número é ',resposta:4, '?'); write ('Digite : ''l'' = não, ele é menor, ''h'' = não, ele é maior, ''c'' = correto: '); repeat readln (res); res := (res); until (res = 'c') or (res = 'l') or (res = 'h'); case res of 'l': upp := resposta; Aqui está o erro! 'h': low := resposta; Se eu trocar dá erro! else ok := true end;until ok;writeln ('Então seu número é: ', resposta:4);end. No aguardo.
  17. Olá. Desculpe pela demora, ontem não entrei no Fórum... Eu acho que eu entendi o que ele solicita, no caso, você precisa efetuar verificações até "apertar" o número, ou seja, não ter mais divisões possíveis e acabar tendo que ser determinado número.. o programa que deve achar o número, e não o usuário... o usuário apenas diz se é maior ou não. Veja, a pergunta é sempre "maior". Daí, por exemplo, se for 15, a primeira pergunta vai dar não e a segunda também. Continua dividido até não ter mais jeito!, e acabará descobrindo que é 15. No aguardo.
  18. Desculpe, eu tinha feito a conta errada. Corrigindo: Após o case, low=30, 60-30=30, 30 div 2=15, 15+30=45. (OK) Pelo visto, o código já está correto, qual seria a sua dúvida? veja, quando selecionado h, o que atualiza é o low mesmo e l, o upp. No aguardo.
  19. Olá. A cálculo está errado... Ex.: pensei no tal 52, 60-1=59, 50 div 2=29, 29+1 = 30. OK. Após o case, low=30, 60-30=30, 30 div 2=15, 15+1= 16. De cara vemos que tá errado, já que o número é maior que 30! No aguardo.
  20. Poste aqui o que já conseguiu fazer. Te ajudamos a converter... No aguardo
  21. Olá. De certo modo, a quantidade de números não é relevante para lógica, pois o cálculo pode utilizar uma variável. Novamente tente imaginar esse processo no mundo real, se for 60, ou 100, ou1.500.000 etc..., o "passa a passo" será o mesmo... usando o algoritmo chego a 45 e 15, 75 e 25, 1125000 e 375000 respectivamente para primeira rodada... Entende? Poste aqui o seu Pseudocódigo ou o código em Portugol. Depois vemos como converter para Pascal (converter para linguagem é a parte mais fácil) No aguardo
  22. Olá. Para criar o algoritmo, não necessariamente precisa saber "mexer com Pascal". Você poderia utilizar por exemplo um Pseudocódigo ou Portugol, que usam de uma linguagem mais natural. Daria por exemplo para criar os passos num papel (ou bloco de notas) e executar os passos e tentar chegar a um algoritmo funcional. E depois converter o algoritmo para linguagem Pascal. Imagine a situação: se eu precisasse de um "passo a passo para executar essa tarefa, quais passos deveriam ser seguidos?". Como é que você chegou a esse 45 e 15? qual a correlação deles com o 60. Eu imaginei algo como: Valor do SIM=N/2+N/4 e Valor do NÃO=N/2-N/4. (X=60/2+60/4 -> X=30+15 -> X=45). Por ai vai.. (obs.: é apenas uma sugestão). Tente fazer algo. Depois tente converter para o Pascal. Poste aqui o que conseguiu fazer, ou o "pseudocódigo" ou o código em Pascal, e onde está com dúvidas. No aguardo.
  23. Olá, Para inserir a tag CODE tem 3 formas básicas; 1) seleciona o código e clica no botão <>; 2) clica no botão (sem texto selecionado), e cola o código; 3) utilizando o botão "BBCode Mode", no lado da borracha... e coloca o texto entre as tag CODE e /CODE. Geralmente utilizamos a primeira e segunda opção... Antes de postar, clicar em Mais opções.Daí vai gerar uma visualização... e se quiser testar novamente, clicar em Pré-visualizar... quantas vezes precisar... Com o tempo se acostuma. *** Só complementando o primeiro código. Poderia inserir uma proteção para evitar divisão por zero, ex.: program media_idade ;var media:real; ano, conta, soma,idade:integer;beginconta:=0;soma:=0;writeln(' --------------------------------------------------------------');writeln(' Esse programa calcula a idade media de um grupo de invididuos.');writeln(' --------------------------------------------------------------');writeln;writeln(' Digite o ano de nascimento: ');readln(ano);while(ano <> 0) do begin conta:=conta+1; idade:=(2015-ano); soma:=soma+idade; writeln(' Digite o ano de nascimento: '); readln(ano); end;if conta>0 then //verifica se conta é maior que zero, já que "não existe" divisão por zero (por padrão dá erro se dividir) begin media:=soma/conta; writeln(' A soma das idades é de:' ,soma); writeln(' A media de idades é de:' ,media:2:2); endelse writeln('Nenhuma idade foi inserida');End. **** Sobre a segunda questão, aí você tem 2 problemas em um só. a) calcular áreas "descobrir" o maior e menor valor. Sugiro que primeiramente faça um programa que calcule o menor e maior valor dentro 5 valores digitados, pois creio que essa parte menos fácil. Depois faça um programa simples que calcular a área de um triângulo (acho que isso é bem fácil). Ai basta associar uma coisa com a outra, no caso, o enunciado completo. Então, para essa questão eu sugiro também usar um laço de repetição, como são laços fixos (X laços), recomendo usar o laço FOR. No aguardo.
  24. Olá. Baixe a versão mais recente e efetue novos testes (eu testei no trabalho, numa versão portável numa versão 2.0 portátil). Lembre-se de verificar sobre a questão da "inicialização do valor, pois se for escolhido uma opção diferente de 1, 2, 3, 4 e 5, nenhum valor será atribuído para ele, e estará exibindo uma variável sem ser inicializada. Obs.: pode ocorrer do compilador inicializar automaticamente a variável (acho que VisuAlg também faz isso, atribuindo 0 a ela), mas como já citado, a "boa prática" diz que devem-se inicializar a variável. Veja, tem compilador que não faz isso! E a dependendo do professor, pode considerar um erro de lógica. No aguardo.
  25. Aparentemente seu código não tem erros, talvez apenas esteja faltando o cabeçalho lá na primeira linha. algoritmo "NomeDoPrograma" Obs.: Como boa prática, é necessário inicializar a variável valor, como está sendo tratado por uma estrutura de seleção (caso), pode ocorrer de não receber nenhum valor... Em algumas outras linguagens o compilador nem aceita... obriga o programador inicializar a variável. Para inicializar basta colocar colocar um valor <- 0 antes do escolha. No aguardo.

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...

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!