Ir ao conteúdo
  • Cadastre-se

Simon Viegas

Moderadores
  • Total de itens

    3.511
  • Registro em

  • Última visita

  • Qualificações

    0%

Reputação

1.648

Sobre Simon Viegas

Informações gerais

  • Cidade e Estado
    Salvador/BA
  • Sexo
    Masculino

Outros

  • Biografia
    Carregando...
  • Ocupação
    Técnico e Analista de Sistemas
  • Interesses
    Tecnologia
  1. Além de qual linguagem, poste o enunciado completo do problema para facilitar o entendimento. No aguardo.
  2. Olá. 1# Para pastar um código, antes clique no botão <>, que fica na barra de ferramentas. 2# Sobre os textos das postagens... sugiro tente utilizar uma linguagem menos coloquial. A falta de acentuação nas palavras e dos "." e "," podem dificultar a leitura e compreensão deles... É recomendado utilizar uma linguagem mais formal e clara, ainda mais por se tratar de um contexto de estudos. 3# Sobre o problema que lhe foi proposto, por favor, poste o enunciado completo para analisarmos melhor. Mas para adiantar, vou tentar me basear pelo que já foi informado. Veja, primeiramente é necessário entender o problema. Esqueça que existe o Pascal ou qualquer linguagem de programação. A questão ai está no âmbito da matemática. Você precisa entender e saber calcular a porcentagem de faltas do aluno, entende? A parte da programação entra apenas posteriormente. É necessário interpretar o problema. Por exemplo, poderia responder algo do tipo: Certo aluno de uma determinada disciplina tem uma carga horária de 60 horas, que dão 25 dias de aulas. Se o aluno atingir 25% de falta, ele está reprovado. A partir de quantas faltas que o aluno tiver ele será reprovado? Você PRIMEIRAMENTE deve ser capaz de responder essa questão acima. Tendo já dominado a problemática, aí sim parte para desenvolver um algoritmo para uma determinada linguagem de programação, que no seu caso será o Pascal. Veja, o Pascal entra nessa na questão para poder automatizar determinado processo... ou seja, pelo que foi informado ele quer que informe quantas faltas o aluno teve e informar se foi aprovado ou não. *** RESUMINDO: Poste o enunciado completo da questão; Tente responder a pergunta do item 3#. Se tiver dúvidas sobre alguma parte, é só perguntar. Adendo: perceba que são duas coisas distintas: saber calcular faltas; saber implementar um algoritmo em Pascal. Você está com dificuldades nas duas coisas. A minha sugestão é separar. Primeiro revisa a forma de calcular faltas, depois implementa em Pascal. No aguardo.
  3. @Diego111, precisa implementar em qual linguagem de programação?
  4. Olá 1# @LTheLordh, o enunciado diz: O enunciado está um pouco confuso, mas deu para extrair o seguinte: Basicamente tem os requisitos: - Ler um vetor de 10 posições; (não diz de que tipo, mas tudo bem. Deixa por inteiro) [OK] - Exibir o vetor na tela; [Falta fazer] - Exibir a posição do menor e do maior [Falta fazer] - Exibir o valor do menor e do maior [Com erro] obs.: sendo que esses dois últimos podendo ser feito de uma vez só. 2# Sobre: Como citado anteriormente, essas verificações do menor e maior estão incorretas. Para o menor, está verificando errado, pois a cada loop está atribuindo o valor do primeiro, no final das contas, SEMPRE o menor será o primeiro ou será o último. Precisa corrigir. Para o maior, você não está inicializando a variável, o que pode dar erros no resultado, ou seja, apesar de alguns casos a resposta podendo dar correta, está com erro de lógica. 3# Como sugerido por @devair1010, basta você usar outra variável para armazenar a posição deles, ou seja, ao encontrar um novo menor ou maior, atualiza o valores dele, e também atualiza o valor da posição. *** Resumindo: obs.: TENTE FAZER APENAS UMA COISA DE CADA VEZ. NÃO TENTE FAZER TUDO AO MESMO TEMPO!!! - Faça a parte para exibir o vetor na tela. Testa até ficar tudo pronto; - Após, faz o programa só exibir o menor. Para facilitar, mude o tamanho do vetor para 3. Faça diversos testes até garantir que está funcionando. Se tiver dúvidas, vai postando aqui. - Coloque também para exibir a posição desse menor. Faz testes e garante que está pronto. - Só após, insira a verificação do maior. A base é exatamente a mesma do menor. Já inclui a questão da posição também. PS: Segue uma base que pode tomar como referência. algoritmo "FCdH" var valores :vetor [1..3] de inteiro menor :inteiro contador:inteiro inicio //ler o vetor de números inteiros para contador de 1 ate 3 faca escreva("Informe o",contador,"º elemento: ") //use "elemento" em vez de "Elemento" leia(valores[contador]) fimpara //exibe o vetor de inteiros //processamento para identificar o menor número do vetor //exibe o menor número na tela fimAlgorito Pronto! Tente fazer a parte para exibir o vetor. Se conseguir sem maiores problemas, já faz o processamento para encontrar o menor e exibir na tela. Aí posta o código aqui para verificarmos ou, se caso ocorra, indicar onde está com dúvidas. DICA: Para efetuar testes, o segredo é tentar identificar os possíveis casos principais... por exemplo, com 10 números, um bom teste seria usar números para que o 1º seja o menor. Depois testar com algum do "meio" ser o menor, como o 4º), depois testar com o último... Mas como ficar digitando de 10 em 10 é muito trabalho, para facilitar os testes, deixei justamente com apenas 3. A ideia é que, se funciona com 3, deve funcionar com 10 com 1000, entende? só que será muito mais fácil para testar. Testa com maior no início, no meio e no fim. Use número negativos também. No aguardo.
  5. @SKYLPHES, tente fazer a sugestão do @devair1010, mas aproveite e poste logo o enunciado completo e o seu código atual para reanalisarmos... após, você posta o novo código com essa implementação e, se tiver algumas, que parte precisa de ajuda. Perceba que nesse momento a dúvida não é sobre Pascal, mas sim sobre matemática (ou algo do tipo). Você precisa entender o problema independente de uma linguagem de programação... tente fazer essa conta no papel. Só depois que você tentará "traduzir" o algoritmo para o Pascal (ou qualquer outra linguagem). O enunciado é importante sobretudo para entender as características do problema... Sem mais detalhes, particularmente entenderia que faltas são baseadas por aulas (não por horas, nem por dias)... essa quantidade de aulas pode variar de curso pra curso... por exemplo, determinada disciplina poderia ter apenas 1 aula por dia. Outra poderia ter 2... outra poderia ter 3 ou mais.. etc, ou seja, por exemplo, um dia de falta pode representar 3 aulas perdidas da mesma disciplina (se essa disciplina tiver 3 aulas no determinado dia). Nesse mesmo sentido, a carga horária do aluno seria seria de fato relacionada a quantidade de horas de uma aula e quantas aulas ele tem. Por exemplo: Temos: Carga horária: 60 horas Dias: 25 Concluímos: Horas por dia: 2,4 Se tem duas aulas por dia, teria: Hora aula: 1,2 Número de aulas: 50 (já que são duas por dia OU 60/1,2) Ou seja, nesse exemplo hipotético (já que não tive acesso ao enunciado), o aluno tem 50 aulas no total. Teria que coletar quantas aulas ele perdeu... lembrando que nesse contexto, o aluno poderia assistir uma aula e perder a outra... ou chegar atrasado, perdendo a primeira aula e só contado para segunda. RESUMINDO: Se fosse baseado aulas como imaginaria, você precisa de duas informações: número de aulas totais e número de aulas assistidas. Daí calcula a % correspondente. Qualquer dúvida é só postar. ADENDO: Como percebível, o número de HORAS AULAS e DIAS DE AULA é proporcional ao NÚMERO DE AULAS... Logo, se que calcular por "horas aula", basta pegar o seu valor a partir do número de aulas assistidas... já se quiser calcular por "dias aula", idem... (acha a quantidade correspondente de dias pelo número de aulas assistidas) No aguardo.
  6. Olá. 1# Sobre Veja: Você está exibindo os dados errados (usando as variáveis erradas). adicionado 20 minutos depois 2# Tente manter o código mais organizado possível. Abaixo código com alguns ajustes: program FCdH; var idade_recebida :integer; nome_recebido :string; idade :integer; nome :string; contagem :integer; begin contagem:=1; {idade_recebida:= 0;} //não precisa inicializar {idade:=0;} //não precisa inicializar repeat writeln('Digite seu Nome'); readln(nome_recebido); writeln('Qual sua idade'); readln(idade_recebida); if contagem = 1 then begin nome :=nome_recebido; idade:=idade_recebida; end else {begin} //não precisa if idade_recebida > idade then begin nome :=nome_recebido; idade:=idade_recebida; end; {end;} contagem := contagem + 1; until contagem = 4; writeln('A maior idade foi de : ',nome_recebido); writeln('A idade digitada foi : ',idade_recebida); readln; end. Basicamente deixei num padrão de indentação e identifiquei alguns item desnecessários que deixei como comentário... Outro ponto que seria interessante ajustar as nomenclaturas das variáveis para algo mais sugestivo às suas funções... da mesma forma que usou "nome_recebido" e "idade_recebida"... seria interessante usar "nome_maior_idade" e "maior_idade" (em detrimento de nome e idade). Inclusive ficaria ainda mais claro o erro que foi cometido no item 1#. 3# Já estudou o comando for? se sim, porque está utilizando o comando repeat? Tem algum motivo especial? *** No aguardo.
  7. Olá. 1# Sobre: @Charles Diogo123, por favor, ao postar um código, favor utilizar a tag CODE. Basta, antes de colar o código, clicar no botão <>. obs.: para o código anterior, já editei e inseri. 2# Sobre: Seria basicamente isso mesmo. Então presumimos que já sabe verificar se um número é ímpar também... correto? 3# Basicamente só fazer as duas verificações na mesma estrutura... algo como: repeat pessoas:=pessoas + 1; if ((lista[pessoas] mod 2)=0) then //verifica se é par par:=par+lista[pessoas]; if ((lista[pessoas] mod 2)=1) then //verifica se é ímpar impar:=impar+lista[pessoas]; until (pessoas = 10); writeln('soma das idades pares é : ',par); writeln('soma das idades impares é : ',impar); A soma de um com o outro será a soma das variáveis... (que na prática será a soma de todas as idades) Aí entra outras questões. Por exemplo: 1) um número não pode ser par e ímpar ao mesmo tempo. via Wikipedia Ou seja, a intercessão do conjunto dos pares com o conjunto dos ímpares, resulta em conjunto vazio, ou seja, não existe elemento em comum. Logo, se um número for par, jamais poderá ser ímpar também... nesse caso, usam-se o else do if. Algo como: repeat pessoas:=pessoas + 1; if ((lista[pessoas] mod 2)=0) then //verifica se é par par:=par+lista[pessoas] else if ((lista[pessoas] mod 2)=1) then //verifica se é ímpares impar:=impar+lista[pessoas]; until (pessoas = 10); 2) se um número (lembrando que estamos tratando só de inteiros) não é par, necessariamente ele será ímpar. E vice-versa. via Wikipedia Ou seja, a união do conjunto dos números pares com o conjunto dos números ímpares resulta no conjunto dos números naturais. Como já sabemos que um número não pode ser par e ímpar ao mesmo tempo, concluímos que se um número não é par, necessariamente ele será ímpar. E vice-versa, é claro. Resumindo: basta verificar se é um deles. Se não for, é o outro. (todo número inteiro ou é par ou é ímpar) Seria algo assim: repeat pessoas:=pessoas + 1; if ((lista[pessoas] mod 2)=0) then //verifica se é par par:=par+lista[pessoas] else //senão é ímpar impar:=impar+lista[pessoas]; until (pessoas = 10); 4# Em vez de repeat, seria mais interessante utilizar for. Combinaria mais. Sugeriria mudá-los. 5# Só um detalhe besta sobre o padrão de nomenclatura das variáveis... (que talvez não seja importante, mas que particularmente acho relevante). *** Qualquer coisa é só postar. No aguardo.
  8. Olá. 1# Sobre: Agradeço também o seu feedback. Estamos aqui para isso. Um dos objetivos centrais é essa colaboração mutua. 2# Sobre: Vamos focar no problema em si: Então, de fato o programa deveria rodar mais ou menos como você sugeriu. Veja que o enunciado é explícito: "caso o usuário digite um valor fora deste limite, o sistema deve fechar e exibir a mensagem ("valor fora do alcance")". O único detalhezinho seria que faltou a frase. Poderia ficar algo mais ou menos assim: Digite valores entre 100 e 200 180 180 150 80 valor fora do alcance Se for seguir essa definição, poderia ficar algo assim: inicio escreval("Digite valores entre 100 e 200") leia(valor) enquanto (valor >= 100) e (valor <= 200) faca leia (valor) fimEnquanto escreval("valor fora do alcance") fimAlgoritmo Perceba que só será "fora do alcance" se o número estiver "fora do alcance", ou seja, "enquanto" o número digitado estiver na faixa estipulada, vou continuar lendo números, caso contrário paro de ler. EXTRAS: Dúvidas, críticas ou sugestões? No aguardo. adicionado 6 minutos depois ADENDO: Só um detalhe que me veio agora: Obviamente seria primeiro "exibir a mensagem", só depois "fechar o sistema". Se não for nesse ordem, ficaria complicado, já que a mensagem é exibida no próprio "sistema". Me lembrou aquele "Cúmulo da rapidez": «Fechar a gaveta, trancar e jogar a chave dentro».
  9. Sobre: Talvez sim. Mas como fala de "números", entendo que usar real seria mais próximo... Lembrando que o conjunto dos reais englobam os inteiros também. Se usar inteiro estará limitando o escopo/alcance do programa. Já no caso do i, este sim "não poderia" ser real... pois o escopo dele é apenas de números inteiros*. O i vai de 1 até "a quantidade de números"... essa quantidade é apenas inteira (no caso natural), não haveria necessidade de definir como real. obs.: fora que o para não aceita real. Mas mesmo que aceitasse, ficaria "estranho" definir o i como real. Costumo remeter a questão da "coerência".
  10. Veja: só não deve colocar ; no comando imediatamente ao else. Se for um end, então ele não terá ; antes de end. O restante continua normal. Em qual linha está com erro? obs.: antes dos end os ; são facultativos, mas como recomendação é melhor sempre usar, ou seja, nesse sentido, faltou um ; depois do comando que está no primeiro if. No aguardo. adicionado 4 minutos depois Adendo: Cuidado com a indentação. Sempre mantenha o código indentado... um dica importante é também tomar cuidado com o tab (tabução), ou seja, ou você só usa tab ou só usa espaço. Como exemplo, reindentei o código: program NovoSalario; uses CRT; var nome :string; salario_atual, novo_salario :real; begin textbackground(yellow); textcolor(white); clrscr(); writeln(' ',#201,#205,#205,#205,#205,#205,#205,#205,#205,#205,#205,#205,#205,#205,#205,#187); writeln(' ',#186,' NOVO SALÁRIO ',#186); writeln(' ',#200,#205,#205,#205,#205,#205,#205,#205,#205,#205,#205,#205,#205,#205,#205,#188); writeln(); write (' - Nome : '); readln(nome); write (' - Salário Atual: '); readln(salario_atual); writeln(); if (salario_atual < 0) then begin writeln(' * Salário Inválido!') //aqui faltou ; end else if (salario_atual <= 400) then begin novo_salario := ((salario_atual * 15) / 100 + salario_atual); writeln(' * Nome do Funcionário: ', nome); writeln(' * Salário Atual: ', salario_atual:0:2); writeln(' * Aumento de 15%'); writeln(' * Novo Salário: ', novo_salario:0:2); end else if (salario_atual > 400) and (salario_atual <= 700) then begin novo_salario := ((salario_atual * 12) / 100 + salario_atual); writeln(' * Nome do Funcionário: ', nome); writeln(' * Salário Atual: ', salario_atual:0:2); writeln(' * Aumento de 12%'); writeln(' * Novo Salário: ', novo_salario:0:2); end else if (salario_atual > 700) and (salario_atual <= 1000) then begin novo_salario := ((salario_atual * 10) / 100 + salario_atual); writeln(' * Nome do Funcionário: ', nome); writeln(' * Salário Atual: ', salario_atual:0:2); writeln(' * Aumento de 10%'); writeln(' * Novo Salário: ', novo_salario:0:2); end else if (salario_atual > 1000) and (salario_atual <= 1800) then begin novo_salario := ((salario_atual * 7) / 100 + salario_atual); writeln(' * Nome do Funcionário: ', nome); writeln(' * Salário Atual: ', salario_atual:0:2); writeln(' * Aumento de 7%'); writeln(' * Novo Salário: ', novo_salario:0:2); end else if (salario_atual > 1800) and (salario_atual <= 2500) then begin novo_salario := ((salario_atual * 4) / 100 + salario_atual); writeln(' * Nome do Funcionário: ', nome); writeln(' * Salário Atual: ', salario_atual:0:2); writeln(' * Aumento de 4%'); writeln(' * Novo Salário: ', novo_salario:0:2); end else if (salario_atual > 2500) then begin novo_salario := salario_atual; writeln(' * Nome do Funcionário: ', nome); writeln(' * Salário Atual: ', salario_atual:0:2); writeln(' * Sem Aumento'); writeln(' * Novo Salário: ', novo_salario:0:2); end; write(' '); ReadKey(); end. Outro detalhe: O begin/end só é necessário quando tem mais de um comando dentro da estrutura, logo para o primeiro if não necessitaria. Ex.: if (salario_atual < 0) then writeln(' * Salário Inválido!') //obs.: agora não tem ; pois está antes do else! else if (salario_atual <= 400) then begin novo_salario := ((salario_atual * 15) / 100 + salario_atual); writeln(' * Nome do Funcionário: ', nome); ...
  11. 1# Ao postar um código, favor utilizar a tag CODE. Antes de colar, clique no botão <>. 2# Uma dica importante é que sempre deve manter o seu código indentado. Exemplo: program Pzim; var i, idade, total: integer; begin for i:=1 to 5 do begin writeln('Digite a idade:'); {read(idade);} //não use read(), use somente readln() readln(idade); if (idade>=18) then total:=total + 1 end; writeln('A soma das idades maiores de 18 anos é ', total); if (idade=18) then total:=total - 1; writeln('A soma das idades iguais a 18 anos é ', total); end. 3# Vamos analisar a estrutura do código: No primeiro if você está verificando se idade é maior ou igual a 18, ok. Mas ao constatar isso, está somando 1 ao total. Mas veja, o enunciado não quer saber a "quantidade de pessoas maiores de idade", mas sim "somas das idades". Oras! onde está a idade que foi digitada? na própria variável idade, logo, seria: total:=total + idade; 4# No segundo if está verificando se a idade é igual a 18. Só que em nenhum momento foi solicitado essa verificação, ou seja, apenas tire isso do código. *** No aguardo.
  12. 2# Sobre: Só para deixar claro... o "botão <>" não tem qualquer relação com o operador <> do Visualg (ou melhor, tem apenas que os símbolos são iguais, rs), ou seja, o botão <> do Fórum serve para postar códigos na postagem... já o comando <> no Visualg é um Operador Relacional, que basicamente serve para comparar dados. 3# Sobre: Dois ponto iniciais: - Seu código está incompleto. Cadê o fimAlgoritmo? Falta também o algoritmo lá no topo do código. - Sempre mantenha seu código indentado. Inclusive o próprio Visualg pode dar uma ajuda. Basta pressionar CTRL+G. "Corrigindo" esses pontos teríamos algo assim: algoritmo "Aqui o nome do meu programa" var valor: inteiro inicio escreval ("digite um valor entre 100 e 200: ") leia(valor) enquanto valor < > 100 e 200 faca leia(valor) fimenquanto escreval("valor fora do alcance: ") fimAlgoritmo Pronto. Em relação ao seu código, essa seria uma base mínima. 4# Qual versão do Visualg está utilizando? recomendo a versão 3.6.0.5 (exemplo de link aqui), que é a então penúltima versão disponível (atual é a 3.7.0.0, mas não recomendo, pois tem alguns bugs). Então, baseado nessa versão 3.6.0.5, ao compilar o seu código (contido em 3#) deu o seguinte erro: "VisuAlg3 encontrou o seguinte problema em seu algoritmo, na linha 7: Esperava encontrar FACA" Ou seja, como sugerido por @devair1010, a estrutura do comando enquanto está com erro de sintaxe, pois cada uma das "comparações" devem ser feitas separadamente... e para "conectá-las" usam-se os Operadores Lógicos. Logo, tem uma expressão ("comparação") que verifica se valor é maior ou igual a 100; tem outra comparação que verificar se o valor é menor ou igual a 200 e tem um operador lógico que "calcula" o resultado final. A primeira expressão resulta em VERDADEIRO ou FALSE (true ou false); A segunda expressão resulta em VERDADEIRO ou FALSE (true ou false); Ai o operador lógico "calcula" o resultado de uma resposta E a outra. Ex. 1: Se valor igual 160. 1ª expressão: 160 é maior ou igual a 100? resposta: VERDADEIRO 2ª expressão: 160 é menor ou igual a 200? resposta: VERDADEIRO Operador lógico: VERDADEIRO e VERDADEIRO resulta em? resposta VERDADEIRO Ou seja, o resultado final da expressão geral do enquanto resultou em VERDADEIRO, logo, o enquanto vai repetir. Ex. 2: Se valor igual 25. 1ª expressão: 25 é maior ou igual a 100? resposta: FALSO 2ª expressão: 25 é menor ou igual a 200? resposta: VERDADEIRO Operador lógico: FALSO e VERDADEIRO resulta? resposta FALSO Ou seja, o resultado final da expressão geral do enquanto resultou em FALSO, logo, o enquanto vai parar. 5# Apenas para demonstrar: Ah! e se eu quisesse o oposto? ou seja, que se digitasse um valor FORA da faixa desse limite de 100 e 200, o programa continuasse repetindo? Ai a condição do enquanto seria a negação do atual: Em vez de: enquanto (valor >= 100) e (valor <= 200) faca Poderia ser: enquanto (valor < 100) ou (valor > 200) faca Ex. 1: Se valor igual 160. 1ª expressão: 160 é menor que 100? resposta: FALSO 2ª expressão: 160 é maior que 200? resposta: FALSO Operador lógico: FALSO ou FALSO resulta em? resposta FALSO Ou seja, o resultado final da expressão geral do enquanto resultou em FALSO, logo, o enquanto vai PARAR. Ex. 2: Se valor igual 25. 1ª expressão: 25 é menor 100? resposta: VERDADEIRO 2ª expressão: 25 é maior 200? resposta: FALSO Operador lógico: VERDADEIRO ou FALSO resulta? resposta VERDADEIRO Ou seja, o resultado final da expressão geral do enquanto resultou em VERDADEIRO, logo, o enquanto vai REPETIR. Por ai vai. *** Resumindo: Se tiver dúvidas sobre o que é um Operador Relacional, pesquise sobre o tema; Se tiver dúvidas sobre o que é um Operador Lógico, pesquise sobre o tema; Se tiver dúvidas sobre a sintaxe do Enquanto, pesquise sobre o tem; etc Ou seja, no caso do seu código, o programa está no enquanto, daí, uma boa sugestão é (além de pesquisar sobre o comando) dá uma olhada em exemplos gerais sobre do comando... veja exemplos de como foi utilizado em outros códigos quaisquer e tente entender a estrutura. No aguardo.
  13. Olá. Vou tentar explicar um possível desenvolvimento.. Tomemos como base o problema proposto: 1# De um modo geral, a primeira coisa se fazer é ENTENDER O PROGRAMA. Então, o que é um número positivo? como vamos resolver um problema que não sabemos do que se trata??? Segundo o Wikipedia: Veja, ainda estamos numa etapa de entender o problema, correto? segundo essa definição, os positivos pode ser entendidos como começando do 0 em diante. Entende? se 0 for positivo, como sugerido pelo artigo, o algoritmo já começaria sendo implementado de modo errado, pois foi usado ">0", em vez de ">=0". Para efeitos práticos, tomemos que de fato é apenas para o MAIORES QUE 0, ou seja, considerando que 0 não é positivo. Mas temos que ter em mente que existe outra possibilidade. Beleza? Apenas vamos usar o que achamos mais provável, ou seja, supostamente o que se deseja (como existe uma suposta dúvida, seria interessante consultar quem sugeriu esse problema... se for um livro, talvez apenas achar a forma mais provável.) RESUMINDO: No nosso contexto, números positivos são números reais que são maiores que 0. Creio que segue o senso comum. 2# Sobre: O quê ou onde está dando errado? Enfim. Seria necessário tentar entender o que ocorre. Quando um código é implementando, ao executar é esperando um resultado... se não ocorre, tem que tentar identificar o que está divergente... tá dando erro (tranvando) ou está dando uma resposta incorreta? Executando esse código, poderia dizer algo como: "Ao executar e inserir os números, está dando erro no se", ou seja, o erro está provavelmente na expressão lógica do se. 3# Vamos lá: Uma sugestão inicial é que sempre tentar deixar o código compilável. Ex.: supondo que estou começando a implementar esse código. Inicialmente poderia ficar com algo assim: algoritmo "FCdH" var numero :real inicio fimAlgoritmo //<-- se coloquei o "inicio" já coloco o seu respectivo "fim". Outro ponto seria tentar dividir o programa em partes mais simples. Como assim? veja, como vou verificar algo em 5 números se nem sei como verificar com apenas 1? ou seja, é mais simples verificar apenas um número... entender a estrutura e só posteriormente tentar implementar para mais (números)... Seria como tentar fazer: Questão: Elabore um programa que receba 1 (UM) número e imprima se é positivo. ex. hipotético: algoritmo "FCdH" var numero :real inicio escreval("Digite um número real") leia(numero) se (numero > 0) entao escreval(numero," é positivo") senao escreval(numero," é negatio") fimSe //<--aqui mesma coisa. A estrutura que estou construindo sempre deve ficar //completa, ou seja, se fiz um se, tenho que colocar o seu respectivo fimse fimAlgoritmo Aí fazemos alguns testes. É relativamente simples, pois só existem 3 possibilidades: maiores que zero, o zero em si e os menos que 0. Vemos que já temos 2 problemas: - Zero está dando como negativo. O 0 é negativo mesmo? (não mesmo. Por sinal, como citado, poderia ser considerado positivo...); - Em que momento problema está solicitando para verificar se um número é negativo ou positivo? o programa apenas diz: «imprima somente os positivos.», ou seja, a implementação inicial do código não está seguindo o que foi pedido. Ele pede para "ler número e imprimir aqueles que são positivos"... Poderia ser algo como: algoritmo "FCdH" var numero :real inicio escreval("Digite um número real") leia(numero) se (numero > 0) entao escreval(numero) fimSe fimAlgoritmo Agora sim. Se o número é positivo, eu imprimo. Se não for... não faço nada!!! Já responde a sua dúvida: Nessa caso: não está correta. Pois ele não pede para dizer se é positivo ou negativo, mas apenas imprimir os positivos. Além da questão que está considerando erroneamente o 0 como negativo, ou seja, está "respondendo uma pergunta que não foi feita" e ao mesmo "errando a resposta para essa pergunta". 3# Supostamente já conseguimos responder para um número. Como fazer para N números? só replicar: ex.: algoritmo "FCdH" var numero1 :real numero2 :real inicio escreval("Digite o primeiro número real ") leia(numero1) escreval("Digite o segundo número real ") leia(numero2) se (numero1 > 0) entao escreval(numero1) fimSe se (numero2 > 0) entao escreval(numero2) fimSe fimAlgoritmo Ou seja, leio 2 números e verifico cada um depois. E com 5? algoritmo "FCdH" var numero1 :real numero2 :real numero3 :real numero4 :real numero5 :real inicio escreval("Digite o primeiro número real ") leia(numero1) escreval("Digite o segundo número real ") leia(numero2) escreval("Digite o terceiro número real ") leia(numero3) escreval("Digite o quarto número real ") leia(numero4) escreval("Digite o quinto número real ") leia(numero5) se (numero1 > 0) entao escreval(numero1) fimSe se (numero2 > 0) entao escreval(numero2) fimSe se (numero3 > 0) entao escreval(numero3) fimSe se (numero4 > 0) entao escreval(numero4) fimSe se (numero5 > 0) entao escreval(numero5) fimSe fimAlgoritmo Alguma dúvida sobre a parte da "replicação"? 4# Ah! eu estou usando 5 variáveis repetidas. No decorrer do curso veria que existe um conceito chamado vetores. algoritmo "FCdH" var numeros :vetor [1..5] de real inicio escreval("Digite o primeiro número real ") leia(numeros[1]) escreval("Digite o segundo número real ") leia(numeros[2]) escreval("Digite o terceiro número real ") leia(numeros[3]) escreval("Digite o quarto número real ") leia(numeros[4]) escreval("Digite o quinto número real ") leia(numeros[5]) se (numeros[1] > 0) entao escreval(numeros[1]) fimSe se (numeros[2] > 0) entao escreval(numeros[2]) fimSe se (numeros[3] > 0) entao escreval(numeros[3]) fimSe se (numeros[4] > 0) entao escreval(numeros[4]) fimSe se (numeros[5] > 0) entao escreval(numeros[5]) fimSe fimAlgoritmo Alguma dúvida sobre essa parte dos vetores? 5# Outro conceito que existe é dos laços de repetições, ou seja, seria possível reorganizar para evitar essas repetições... perceba que de um número para outro só muda o número da variável.... logo: algoritmo "FCdH" var numeros :vetor [1..5] de real i :inteiro inicio para i de 1 ate 5 faca escreval("Digite o",i,"º número real ") leia(numeros[i]) fimPara escreval() escreval("Número positivos:") para i de 1 ate 5 faca se (numeros[i] > 0) entao escreval(numeros[i]) fimSe fimPara fimAlgoritmo Perceba que são 3 conceitos distintos: - Estrutura de seleção; - Vetores; - Estrutura de repetição; O interessante é que para implementar o laço de repetição (para) se faz necessário também implementar o conceito de vetores. São duas coisas complemente distintas.. apenas que podem se interagir. *** No aguardo.
  14. Caso queira interagir com os outros exercícios no fórum, crie um novo tópico separada para cada um deles. Att.

Sobre o Clube do Hardware

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

×