Ir ao conteúdo
  • Cadastre-se

Simon Viegas

Membro VIP
  • Posts

    3.939
  • Cadastrado em

Tópicos solucionados

  1. O post de Simon Viegas em VisualG - exercício pilhas - FILO foi marcado como solução   
    Sobre:
     
    @devair1010, creio que não tenha problema fazer isso... Vai funcionar normalmente e sem erros lógicos (eu acho, rs).
     
    Um pouco mais sobre:
     
     
     
    @joshuayuuki, sobre:
     
     
    Tá! Mas está travado em qual ponto? Qual a sua dificuldade? Está dando algum erro ou alguma parte não está funcionando?
     
    Fazendo uma analogia... seria como chegar com um carro numa oficina e dizer pro mecânico: "Meu carro está com problema. Tome aqui a chave". Entende?
     
     
    Para tentar adiantar... ainda fazendo uma analogia, vou passar um scanner para ver se acho algo:
     
    Vamos lá:
     
    Um probleminha que já encontrei seria esse:
     

     
     
    Esse comando não deveria servir para esse propósito de "finalizar o programa na marra"... Entendo que o programa deveria seguir o seu fluxo natural. O programa não dá erro simplesmente porque o VisualG é problemático .
     
    Além do mais a estrutura do código já está correta... basta apagar essa linha!!! 
     
    Veja:

     
    Observe que, ao utilizar o "fimEnquanto" o programa "estoura" na hora... logo, essa condição acima nunca seria verificada, o que por si só não faz sentido. (Acaba se tornando uma tautologia para o contexto - sempre o resultado será verdadeiro.)
     
    Ah! a expressão aí no enquanto vai funcionar de boa, mas mesmo assim ela está ERRADA. Deveria ser E no lugar do OU.
     
    ADENDO: a não ser que tenha alguma literatura ou alguém com algum argumento mais plausível, esse comando fimAlgoritmo só deveria ser usando uma vez no programa.
     
     
     
    Um outro problema é na hora de listar... o código está exibindo todo o vetor*, mas acho que deveria exibir apenas os elementos cadastrados, ou seja: se cadastrou 2, só deveria aparecer 2 valores e não os 2 mais 0 e 0.
     
    *vetor = nome mais simples para a tal da "estrutura homogênea"
     
  2. O post de Simon Viegas em VisualG Modelo Bubble - sort Fila FIFO - as demais funções não são chamadas foi marcado como solução   
    Sobre:
     
    O que significa FIFO? Então, não me faz muito sentido querer ordenar! Concorda?
     
     
    Sobre:
     
    O método de ordenação contido nos códigos NÃO é um Bubble Sort. Dê também uma revisada.
     
    Sobre:
     
    Qual versão do VisualG está utilizando?
     
  3. O post de Simon Viegas em Erro Visualg "esperava encontrar ENTAO" foi marcado como solução   
    Falta as " (aspas duplas) para os caracteres a serem comparados. Exemplo:
     
    se (sexo = "F") e (idade >= 25) e (idade <= 30) e (cabelo = 3) entao mulher <- mulher + 1 fimSe  
  4. O post de Simon Viegas em O VisualG não reconhece a variável foi marcado como solução   
    @Felipe_Fernandes, você está utilizando um sintaxe não válida para VisualG. Veja:
     
     
     
    O comando var não usa o inicio... Seria algo assim:
    algoritmo "variáveis especiais" var numerico:cep,fone,data_nasc,rg,grauo literal:nome,cidade,uf,pai,mae    
    Certo?
     
    Aí entra outro ponto: no VisualG, o tipo vem depois.. e não antes. Seria algo assim:
    algoritmo "variáveis especiais" var cep,fone,data_nasc,rg,grau:numerico nome,cidade,uf,pai,mae:literal  
    Certo?
     
    Aí entra outro ponto: numerio e literal não são tipo usado no VisualG. Aqui usaria respectivamente inteiro e caractere. Seria algo assim:
    algoritmo "variáveis especiais" var cep,fone,data_nasc,rg,grau:inteiro nome,cidade,uf,pai,mae:caractere  
    Por aí vai...
     
    Esse código aqui já seria uma "correção" do seu código:
     
  5. O post de Simon Viegas em alguém poderia me ajudar com esse código, por gentileza? foi marcado como solução   
    Olá.
    a média só precisa ser calculada uma vez (fora do loop); feche o se da maioridade. O fimse está fora do lugar; tem variáveis declaradas que não foram usadas. Precisa dar uma reorganizada na lista  
    ADENDO:
    Acredito que esta estrutura não seja válida:
     
     
    O comando fimAlgoritmo deve ser inserido apenas no fim do programa... no caso, o programa não dá erro seria simplesmente um bug.
     
     
     
  6. O post de Simon Viegas em Tipo literal não reconhecido foi marcado como solução   
    Sobre:
     
    Então provavelmente o erro está nessa declaração. No caso, não existe (ou não é mais utilizado) literal em VisualG. O mais correto seria utilizar caractere em seu lugar.
     
    Segue referência básica:
    https://www.apoioinformatica.inf.br/produtos/visualg/linguagem/item/6-tipos-de-dados
     
     
     
    Adendo: sugiro utilizar a versão 3.0.6.5 do VisualG. É a versão mais estável.
     
    Link
    https://baixe.net/visualg
     
    Link direto (pois tem uma propagandas confusas no site)
    https://baixe.net/dwn/4/125/VISUALG3_REV60.rar
     
     
  7. O post de Simon Viegas em Como utilizar o REPITA ATE nesse meu programa? foi marcado como solução   
    Você colocaria tudo que quer que repita dentro do repita... exemplo:
     
    algoritmo "victor" var menos25, mais50, idade: inteiro inicio repita escreva("Idade: ") leia(idade) se (idade >= 0) e (idade < 25) entao menos25 <- menos25 + 1 fimSe se (idade > 50) entao mais50 <- mais50 + 1 fimse ate idade < 0 escreval("Menores que 25: ", Menos25) escreval("Maiores que 50: ", Mais50) fimAlgoritmo  
    Se quiser que fique exibindo a resposta, coloca a resposta dentro do laço também... aí vai dos requisitos e do gosto.
     
    O VisualG vai interpretando linha a linha do código... é como nossa leitura e escrita: da esquerda para direita, de cima para baixo. Aí, o comando repita vai funciona basicamente como um "marcador de posição"... aí, lá no ate vai verificar a condição, se for FALSO, o VisualG vai voltar para linha do repita. Se VERDADEIRO, vai para próxima linha após o ate.
     
    O repita é como o se. A diferença é que nesse último, se VERDADEIRO, ele executa o que está dentro do se, se FALSO, pula para depois linha o o fimSe (ou para o senao, caso tenha)... ou seja: só muda "para onde a execução pula" .
     
    Dicas:
    pressione Ctrl+G para identar o código; vá pressionando F8 para ir acompanhando linha a linha; no lado direito do VisualG dá para acompanhar os valores que estão nas variáveis.
  8. O post de Simon Viegas em Como instalar a função de raiz quadrada em uma calculadora do visualg? foi marcado como solução   
    1#
    Sobre:
     
    Essa sintaxe não existe. Simplesmente apague essa linha.
     
     
     
    2#
    Sobre:
     
    Essa sintaxe do senao está também incorreta. Não existe "senao/entao". De um modo geral, veja exemplos na internet. (Mas eu vou postar uma base mais pro fim.)
     
     
     
    3#
    No mesmo código do 2# você está comparando um valor real com o caractere... tá achando que está programando em JavaScript, amigo? . Não pode fazer isso. Uma alternativa seria utilizar uma variável do tipo caractere, veria se estaria representando um número ou não de alguma forma, aí converteria para real se precisasse. De qualquer sorte, é melhor pensar em outra forma...
     
     
     
    4#
    Segue um resumindo do código sem a raiz:
     
    algoritmo "Calculadora" var n1, n2: real met: caractere inicio escreval("Digite seu primeiro número ou operação") leia(n1) escreval() escreval("Agora digite seu segundo número") escreval() leia(n2) escreval() escreval("Agora escolha uma operação") escreval() leia(met) se met = "+" entao escreval(n1+n2) senao se met = "-" entao escreval(n1-n2) senao se met = "*" entao escreval(n1*n2) senao se met = "/" entao escreval(n1/n2) senao se met = "^" entao escreval(n1^n2) fimSe fimSe fimSe fimSe fimSe fimAlgoritmo  
    Perceba que o senao fica dentro do se. Se a condição resultar em VERDADEIRO, executa o que está entre o entao e o senao e pula o senao. Caso seja FALSO, pula o trecho entre o entao e o senao e executa o senao.
     
     
     
    5#
    Para tentar ajudar... segue um exemplo alternativo:
     
    algoritmo "Calculadora" var n1, n2: real met: caractere inicio escreval() escreval("Digite seu primeiro número") escreval() leia(n1) escreval() escreval("Agora escolha uma operação") escreval() leia(met) se met = "raiz" entao escreval(RaizQ(n1)) senao escreval() escreval("Agora digite seu segundo número") escreval() leia(n2) escreval() se met = "+" entao escreval(n1+n2) senao se met = "-" entao escreval(n1-n2) senao se met = "*" entao escreval(n1*n2) senao se met = "/" entao escreval(n1/n2) senao se met = "^" entao escreval(n1^n2) fimSe fimSe fimSe fimSe fimSe fimSe fimAlgoritmo  
    Dica: pressione Ctrl+G para indentar o código. Se fica torto, é porque tem algo fora do lugar.
     
  9. O post de Simon Viegas em Exercício VisualG: logica de programação foi marcado como solução   
    Olá. Só complementando:
     
    Sobre:
     
    Creio que a maioria das linguagens de programação o uso de "()" NÃO é obrigatório... entretanto, pode haver diferenças de sintaxes entre uma "linguagem de programação" e outra. Por exemplo: no Portugol Studio, que usa um "Portugol", não precisa usar "()" e iria funcionar corretamente. Já no Pascal, que é o "pai" do VisualG", também não é obrigatório usar o "()", mas a lógica não iria funcionar porque a comparação seria feita de outra forma e daria erro de incompatibilidade de variáveis, ou seja: o uso de "()" no Pascal seria para ajustar a lógica, não porque é "obrigatório". Já no VisualG, independentemente da lógica é obrigatório o uso de "()", isso ocorre, creio eu, por uma limitação da linguagem (o desenvolvedor não implementou ainda para funcionar). No C# também sei que não é obrigatório o "()" para separar as sentenças, mas não sei como se comporta... pode ser de uma outra outra forma (teria que ver a documentação ou fazer testar).
     
    RESUMINDO:
    Na dúvida, use o "()" como citado pelo @devair1010.
     
    Outra forma seria assim:
    se ((imc < 16) ou (imc > 40)) entao //esses "()" mais externos NÃO são obrigatórios no VisualG, mas //em outras "linguagens" costumam ser... como no caso do Portugol Studio  
     
     
    Vamos ao enunciado... lá tem algo como: 
     
    Ou seja: ele quer a expressão que faça as duas coisas: calcular e imprimir, e quer apenas os casos extremos da tabela (primeiro e último caso)... Se observar, todos calculam, daí precisa "apenas" ver a que calcula corretamente... existem 3 (três) formas de calcular no exercício e delas duas dão o mesmo resultado, portanto servem para calcular o IMC...
     
    Esta serve:
     
    e esta serve:
     
     
    Já esta NÃO serve:
     
    ADENDO 1: o VisualG meio que segue a regra do "PEMDAS". Daí, cada uma dessas 3 fórmulas efetuará um cálculo diferente, entretanto a primeira e a segunda são equivalentes.
     
    Entretanto, essa segunda que serve, é a que fica mais "semântica", ou seja: fica uma representação mais próxima da fórmula geral do IMC.
     
    Pronto, sobraram apenas as opções B e E, daí, para dar o resultado desejado ("apenas casos extremos"), o valor precisa ser OU menor que 16 OU maior que 40, logo seria a letra B.
     
    ADENDO 2: ainda complementando, não poderia ser a E, pois para a condição ser verdadeira, uma mesma variável teria que ter 2 valores ao mesmo tempo, o que torna a verificação uma contradição (nunca será verdadeiro, já que "nunca" terá 2 valores, logo "nunca" sendo maior e menor ao mesmo tempo).
     
     
     
    Apenas para demonstração...
     
    Vejam o ocorre no VisualG 3.6.0.5 (considerável a versão mais estável):

     
     
    Testei no VisualG 2.5 também:

     
     
    Já no Portugol Studio funciona de boa:
     

     
    Falou
  10. O post de Simon Viegas em Exercício VisualG: logica de programação foi marcado como solução   
    Olá. Só complementando:
     
    Sobre:
     
    Creio que a maioria das linguagens de programação o uso de "()" NÃO é obrigatório... entretanto, pode haver diferenças de sintaxes entre uma "linguagem de programação" e outra. Por exemplo: no Portugol Studio, que usa um "Portugol", não precisa usar "()" e iria funcionar corretamente. Já no Pascal, que é o "pai" do VisualG", também não é obrigatório usar o "()", mas a lógica não iria funcionar porque a comparação seria feita de outra forma e daria erro de incompatibilidade de variáveis, ou seja: o uso de "()" no Pascal seria para ajustar a lógica, não porque é "obrigatório". Já no VisualG, independentemente da lógica é obrigatório o uso de "()", isso ocorre, creio eu, por uma limitação da linguagem (o desenvolvedor não implementou ainda para funcionar). No C# também sei que não é obrigatório o "()" para separar as sentenças, mas não sei como se comporta... pode ser de uma outra outra forma (teria que ver a documentação ou fazer testar).
     
    RESUMINDO:
    Na dúvida, use o "()" como citado pelo @devair1010.
     
    Outra forma seria assim:
    se ((imc < 16) ou (imc > 40)) entao //esses "()" mais externos NÃO são obrigatórios no VisualG, mas //em outras "linguagens" costumam ser... como no caso do Portugol Studio  
     
     
    Vamos ao enunciado... lá tem algo como: 
     
    Ou seja: ele quer a expressão que faça as duas coisas: calcular e imprimir, e quer apenas os casos extremos da tabela (primeiro e último caso)... Se observar, todos calculam, daí precisa "apenas" ver a que calcula corretamente... existem 3 (três) formas de calcular no exercício e delas duas dão o mesmo resultado, portanto servem para calcular o IMC...
     
    Esta serve:
     
    e esta serve:
     
     
    Já esta NÃO serve:
     
    ADENDO 1: o VisualG meio que segue a regra do "PEMDAS". Daí, cada uma dessas 3 fórmulas efetuará um cálculo diferente, entretanto a primeira e a segunda são equivalentes.
     
    Entretanto, essa segunda que serve, é a que fica mais "semântica", ou seja: fica uma representação mais próxima da fórmula geral do IMC.
     
    Pronto, sobraram apenas as opções B e E, daí, para dar o resultado desejado ("apenas casos extremos"), o valor precisa ser OU menor que 16 OU maior que 40, logo seria a letra B.
     
    ADENDO 2: ainda complementando, não poderia ser a E, pois para a condição ser verdadeira, uma mesma variável teria que ter 2 valores ao mesmo tempo, o que torna a verificação uma contradição (nunca será verdadeiro, já que "nunca" terá 2 valores, logo "nunca" sendo maior e menor ao mesmo tempo).
     
     
     
    Apenas para demonstração...
     
    Vejam o ocorre no VisualG 3.6.0.5 (considerável a versão mais estável):

     
     
    Testei no VisualG 2.5 também:

     
     
    Já no Portugol Studio funciona de boa:
     

     
    Falou
  11. O post de Simon Viegas em Exercício VisualG: logica de programação foi marcado como solução   
    Olá. Só complementando:
     
    Sobre:
     
    Creio que a maioria das linguagens de programação o uso de "()" NÃO é obrigatório... entretanto, pode haver diferenças de sintaxes entre uma "linguagem de programação" e outra. Por exemplo: no Portugol Studio, que usa um "Portugol", não precisa usar "()" e iria funcionar corretamente. Já no Pascal, que é o "pai" do VisualG", também não é obrigatório usar o "()", mas a lógica não iria funcionar porque a comparação seria feita de outra forma e daria erro de incompatibilidade de variáveis, ou seja: o uso de "()" no Pascal seria para ajustar a lógica, não porque é "obrigatório". Já no VisualG, independentemente da lógica é obrigatório o uso de "()", isso ocorre, creio eu, por uma limitação da linguagem (o desenvolvedor não implementou ainda para funcionar). No C# também sei que não é obrigatório o "()" para separar as sentenças, mas não sei como se comporta... pode ser de uma outra outra forma (teria que ver a documentação ou fazer testar).
     
    RESUMINDO:
    Na dúvida, use o "()" como citado pelo @devair1010.
     
    Outra forma seria assim:
    se ((imc < 16) ou (imc > 40)) entao //esses "()" mais externos NÃO são obrigatórios no VisualG, mas //em outras "linguagens" costumam ser... como no caso do Portugol Studio  
     
     
    Vamos ao enunciado... lá tem algo como: 
     
    Ou seja: ele quer a expressão que faça as duas coisas: calcular e imprimir, e quer apenas os casos extremos da tabela (primeiro e último caso)... Se observar, todos calculam, daí precisa "apenas" ver a que calcula corretamente... existem 3 (três) formas de calcular no exercício e delas duas dão o mesmo resultado, portanto servem para calcular o IMC...
     
    Esta serve:
     
    e esta serve:
     
     
    Já esta NÃO serve:
     
    ADENDO 1: o VisualG meio que segue a regra do "PEMDAS". Daí, cada uma dessas 3 fórmulas efetuará um cálculo diferente, entretanto a primeira e a segunda são equivalentes.
     
    Entretanto, essa segunda que serve, é a que fica mais "semântica", ou seja: fica uma representação mais próxima da fórmula geral do IMC.
     
    Pronto, sobraram apenas as opções B e E, daí, para dar o resultado desejado ("apenas casos extremos"), o valor precisa ser OU menor que 16 OU maior que 40, logo seria a letra B.
     
    ADENDO 2: ainda complementando, não poderia ser a E, pois para a condição ser verdadeira, uma mesma variável teria que ter 2 valores ao mesmo tempo, o que torna a verificação uma contradição (nunca será verdadeiro, já que "nunca" terá 2 valores, logo "nunca" sendo maior e menor ao mesmo tempo).
     
     
     
    Apenas para demonstração...
     
    Vejam o ocorre no VisualG 3.6.0.5 (considerável a versão mais estável):

     
     
    Testei no VisualG 2.5 também:

     
     
    Já no Portugol Studio funciona de boa:
     

     
    Falou
  12. O post de Simon Viegas em Identificar a menor parcela de 5 inseridas (Portugol/VisuAlg) foi marcado como solução   
    Olá @LucasOne.
     
    Você está iniciando o "contador" com 1, mas logo após ler um valor já está mudando para 2... daí a verificação no se não passa.
     

     
    Basta colocar para atualizar depois, por exemplo, antes do FimEnquanto.
     
     
     
  13. O post de Simon Viegas em Função no VisualG retornando opção não escolhida foi marcado como solução   
    @qwerty78987, temos 2 probleminhas relacionados ao gerenciamento de escopo de variáveis:
    dupla declaração de variáveis "iguais"; não passagem de valores por parâmetros.  
    Você declarou a variável opcao duas vezes. Uma com escopo global, e outra dentro da função, que tem escopo local... são variáveis distintas!!!. Daí, você leu o valor na variável de escopo global, mas a função está utilizando a variável de escopo local.... (Como as variáveis com o mesmo nome, o VisualG escolhe o que está "mais próximo", que é o local.)
     
    Obs.: outro problema é que está utilizando valores inteiro, mas deveriam ser reais. Já inseri uma sugestão de correção:
     
    SOLUÇÃO 1:
    Simplesmente apague as variáveis locais da função.
     
    algoritmo "Minha Calculadora" funcao calc(): real var res: real inicio escolha opcao caso "1" res <- n1 + n2 caso "2" res <- n1 / n2 caso "3" res <- n1 * n2 caso "4" res <- n1 - n2 outroCaso escreval("Opção inválida") fimEscolha retorne res fimFuncao var n1, n2: real opcao: caracter resultado: real inicio escreval("Digite um número") leia(n1) escreval("Digite outro número") leia(n2) escreval("Escolha uma opção: ") escreval("1 - somar") escreval("2 - dividir") escreval("3 - multiplicar") escreval("4 - subtrair") leia(opcao) resultado <- calc() escreval(resultado) fimAlgoritmo  
     
     
    SOLUÇÃO 2:
    Passando os valores por parâmetros:
     
    algoritmo "Minha Calculadora" funcao calc(n1, n2: real; op:caractere): real var res: real inicio escolha op caso "1" res <- n1 + n2 caso "2" res <- n1 / n2 caso "3" res <- n1 * n2 caso "4" res <- n1 - n2 outroCaso escreval("Opção inválida") fimEscolha retorne res fimFuncao var n1, n2: real opcao: caracter resultado: real inicio escreval("Digite um número") leia(n1) escreval("Digite outro número") leia(n2) escreval("Escolha uma opção: ") escreval("1 - somar") escreval("2 - dividir") escreval("3 - multiplicar") escreval("4 - subtrair") leia(opcao) resultado <- calc(n1, n2, opcao) escreval(resultado) fimAlgoritmo  
     
    ADENDO:
    Entenda que as variáveis ali nos parâmetros da função são diferentes das variáveis globais. É fácil entender que op não é igual a opcao, certo? Dá mesma forma as variáveis n1 e n2 são distintas das que estão no escopo global... apenas deixei com o mesmo nome. Daí, ao chamar a função e passar os valores pelos parâmetros, o VisualG vai copiar cada um dos valores que foi enviado e jogar nas variáveis correspondentes que estão na função...
     
    A diferença desse segundo código para o teu código postado, é que o valor da variável global está sendo repassado para as variáveis locais. No teu código, as variáveis locais estão "vazias", sacou? Essa é a maneira mais clássica de usar funções... resumidamente funciona assim: tudo que é usado numa função, "deve" ser criado dentro da função ou passado por parâmetro, ou seja: devem-se evitar uso de variáveis globais diretamente na função.
     
    RESUMINDO:
    O primeiro código que postei funciona e é mais simples. Não tem problema utilizar assim nesse momento.
    O segundo código é mais elegante e desejável. É a forma que dá mais segurança e flexibilidade para função.
     
  14. O post de Simon Viegas em Sequência de Fibonacci portugol foi marcado como solução   
    @TEC897546, provavelmente trata-se uma limitação/arquitetura computacional.
     
    No VisualG, tomemos que o tamanho das variáveis na memória são fixos! Sempre "utiliza" a mesma quantidade de bits na memória para armazenar os valores. O número 10 vai ocupar o mesmo espaço do número 1.000.000. Para número menores que o limite, ele colocar um monte de 0 a esquerda... entende?
     
    Assim, existe um limite de representações possíveis para um inteiro, por exemplo: pode escrever de -10.000.000 a +10.000.000. Daí, quando chega a um limite, a forma que está programado para funcionar, é "virar" para a próximo valor lá da outra ponta da faixa. Algo assim:
     
    9.999.997
    9.999.998
    9.999.999
    10.000.0000
    -10.000.000
    -9.999.999
    -9.999.998
    -9.999.997
     
    Ou seja: a sequência fica limitada ao tamanho da faixa de números. Você pode tentar com outro tipo numérico compatível ou implementar alguma estrutura que consegui expandir 
     
    ADENDO:
    Poderia ser possível fazer o programa "travar" ao tentar passar do limite, mas por algum motivo técnico ou por opção mesmo, resolveram fazer o número "da uma volta" na sua faixa de valores. Isso não necessariamente é um problema, apenas não é útil para o teu contexto.
     
  15. O post de Simon Viegas em Erro com variáveis tipo REAL no VIsualG foi marcado como solução   
    @Guilherme Otávio, testei aqui e funcionou normalmente.
    Reinstale o VisualG. Recomendo a versão 3.0.6.5. (A versão 3.0.7.0 tem uns bugs extras);
    Link: https://visualg3.com.br/baixe-o-visualg-3-0-7/ Sempre mantenha o código identado. Pressione Ctrl+G no VisualG para ajudar. Tanto faz utilizar "." ou "," como separador no VisualG.  
  16. O post de Simon Viegas em erros em alguns codigos no pascal foi marcado como solução   
    @bugadao, qual compilador está utilizando?
     
    adicionado 3 minutos depois Para o primeiro, tente remover as repetições do var.
     
    De:
     
    Para:
    Program Ex02; var menu, n, f :integer; altura, peso_i, valor, soma, c :real; genero :char;  
  17. O post de Simon Viegas em Matriz programa Visualg 8x8 foi marcado como solução   
    De um modo geral, é preferível evitar a afirmação de uma negação. Pela lógica, é geralmente difícil de provar! 
     
    Mas sim, é possível:
    algoritmo "matriz001" var mat :vetor[1..8, 1..8] de inteiro l, c :inteiro inicio para l de 1 ate 8 faca para c de 1 ate 8 faca se (l>c) entao mat[l,c] <- -1 escreva(mat[l,c]:3) senao se (l<c)entao mat[l,c] <- 1 escreva(mat[l,c]:3) senao se (l=c)entao mat[l,c] <- 0 escreva(mat[l,c]:3) fimse fimSe fimSe fimPara escreval() fimPara fimAlgoritmo Esse :x depois da variável é o número mínimo de espaços que o número deve ocupar, ou seja: todo número vai ocupar pelo menos 3 espaços. Se for por exemplo "0", vai ficar "  0". Se for "-1" vai ficar " =1".
     
    Vou olhar o outro...
     
    adicionado 54 minutos depois Modo bruto:
    algoritmo "matriz002" var mat :vetor[0..11, 0..11] de inteiro soma, l, c :inteiro media :real op :caractere inicio soma <- 0 media <- 0 para l de 0 ate 11 faca para c de 0 ate 11 faca //leia(mat[l,c]) mat[l,c] := 1 fimPara fimPara escreval("Deseja calcular a soma(S) ou a média(M)?") leia(op) para l de 0 ate 11 faca para c de 0 ate 11 faca se (c > 11-l) entao soma <- soma + mat[l,c] fimSe fimPara fimPara se (op = "S") entao escreval(soma) fimSe se (op = "M") entao media <- soma/66 escreval(media:1:1) fimSe fimAlgoritmo  
    Modo otimizado:
    algoritmo "matriz002" var mat :vetor[0..11, 0..11] de inteiro soma, l, c :inteiro media :real op :caractere inicio soma <- 0 media <- 0 para l de 0 ate 11 faca para c de 0 ate 11 faca //leia(mat[l,c]) mat[l,c] := 1 fimPara fimPara escreval("Deseja calcular a soma(S) ou a média(M)?") leia(op) para l de 1 ate 11 faca para c de 11-l+1 ate 11 faca soma <- soma + mat[c,l] fimPara fimPara se (op = "S") entao escreval(soma) fimSe se (op = "M") entao media <- soma/66 escreval(media:1:1) fimSe fimAlgoritmo  
     
  18. O post de Simon Viegas em Alguem pode me ajudar poque nao esta mostrando a porcentagem? foi marcado como solução   
    Sobre:
     
    Vamos supor que foi informado 10 para candidato. Qual o valor de votos10d nesse momento? ele vale 0, pois não foi dado nenhuma valor a ele, logo, votos10 vai ser igual a 0 também. Reanalise melhor.
     
    No aguardo.
     
  19. O post de Simon Viegas em Relogio com "despertador" no VisualG foi marcado como solução   
    @joaquim_2k, aí está apenas interrompendo o para/faca mais interno, daí indo para o próximo ciclo do para/faca anterior.
     
    Uma forma bruta seria sair interrompendo um por um, ex.:
    para hr <- 0 ate 23 faca para min <- 0 ate 59 faca para seg <- 0 ate 59 faca escreval(hr, " horas", min, " minutos", seg, " seg") se (hr = hrd) e (min = mind) e (seg = segd) entao interrompa fimse fimpara se (hr = hrd) e (min = mind) e (seg = segd) entao interrompa fimse fimpara se (hr = hrd) e (min = mind) e (seg = segd) entao interrompa fimse fimpara  
    adicionado 3 minutos depois Ou utilizando uma flag, ex.:
    var ... tocarAlarme : logico inicio ... para hr <- 0 ate 23 faca para min <- 0 ate 59 faca para seg <- 0 ate 59 faca escreval(hr, " horas", min, " minutos", seg, " seg") se (hr = hrd) e (min = mind) e (seg = segd) entao tocarAlarme := VERDADEIRO interrompa fimse fimpara se tocarAlarme entao interrompa fimse fimpara se tocarAlarme entao interrompa fimse fimpara ...  
    adicionado 12 minutos depois Ou mudando a lógica... uma forma mais natural poderia ser algo assim:
    repita seg := seg + 1 se seg > 59 entao seg := 0 min := min + 1 fimSe se min > 59 entao min := 0 hr := hr + 1 fimSe se hr > 23 entao hr := 0 fimSe escreval(hr, " horas", min, " minutos", seg, " seg") ate (hr = hrd) e (min = mind) e (seg = segd)  
  20. O post de Simon Viegas em Programa somatório de números impares foi marcado como solução   
    Eu acho que o resultado deve ficar como foi solicitado no enunciado... como comentei, ele deve ser entendido como um contrato.. se ele "quer" de determinada forma, precisa ser feito como ele quer... se não quer fazer assim, "sugira refazer o enunciado".
     
    Segue:
     
     
    Veja que só por aí já verifica que o 0 não pode está na lista.
     
    Claro que isso é de um modo geral... pode ser que o "professor" ou a "plataforma" aceite resultado "personalizados". Falo como opinião.
     
    adicionado 11 minutos depois Vi tua resposta depois.. Segue:
     
     
    Show! Era um detalhe também importante.
     
     
     
    Sim! eu imaginei que era isso, mas a ideia que é procure outra solução.. . Veja: provavelmente um dos desafios do problema seja justamente aprender a como gerar aquelas expressões corretamente. Tanto pode ser que foi proposto duas formas diferentes (invertendo os membros). Em fim, colocar um 0 a esquerda seria como "resolver um problema substituindo por outro". (que eu acho que seja mais grave, pois seria um erro de lógica, já que zero não é ímpar. No outro, seria apenas um erro de "impressão")
     
    Minha sugestão: guarde esse código que você considera como pronto. Faça uma cópia e tente ajustar para exibir como foi solicitado. Não é difícil, só precisa parar um pouco para tentar... e, por sinal, quando obtiver uma solução para isso, poderá ser utilizada em novos programas... recomendo corrigir!
     
  21. O post de Simon Viegas em Problema no comando leia do VisuAlg foi marcado como solução   
    @Joao_Bilu, falta pular para próxima linha após escrever os números. Acontece que ao terminar de escrever, o cursor (onde sai as letras) ainda está no fim da linha. Daí, o próximo texto está começando a partir de lá. Bastar fazer ir para o início da próxima linha, exemplo:
     
    ... fimEscolha escreval("") ate (S = 3) fimAlgoritmo  
  22. O post de Simon Viegas em iniciante (Algorítimo em Portugol) Visualg - Uma revisãozinha se poderem (: foi marcado como solução   
    Não, simplesmente é o sinal de "diferente" no VisualG. É o oposto do operador relacional "=".. veja todos aqui. Em algumas linguagens, usam-se, por exemplo, "!=".
     
     
     
     
     
    Não. A proposta da verificação do valor do n2 é justamente para não deixar o computador efetuar a divisão por 0... pois o computador não sabe fazer isso!!! Logo, a divisão deve ficar dentro da "proteção".
     
    Obvervações:
    n2 é um inteiro, logo tem que usar um número. Ao usar as aspas, está comparando com um caractere; resultado é real, não pode atribuir valores do tipo caractere a ele. O que você fez faz sentido, mas não vai funcionar. Poderia ser assim:
    senao se opcao = "d" entao se n2 = 0 entao escreval("Não se pode dividir quando o denominador é zero!!") senao resultado := n1 / n2  
    Ah! aí vai ter que pensar no que fazer com a resposta final quado colocarem o 0 no denominador... pois ela vai continuar aparecendo... rs. Ou deixa ela lá, ou muda a lógica para apenas aparecer que não pode dividir por 0.
     
  23. O post de Simon Viegas em Casas decimais na divisão pelo VisuAlg foi marcado como solução   
    @kaosmila, seja bem vinda ao Fórum do Clube do Hardware.
     
    Sobre:
     
    Como assim não aceita? acontece o quê?
     
     
     
    Sobre:
    Não exatamente que "teria", mas "poderia" sim fazer assim.
     
     
    Mas em fim... testei o teu código e dividiu normalmente. Caso esteja com alguma falha, favor postar um print da tela com o erro.
     
    De qualquer sorte, como está utilizando número reis, seria bom formatar o resultado. Exemplo:
    escreva("Posso ter US$", dolares:1:2)  
  24. O post de Simon Viegas em Comando ENQUANTO no VisualG foi marcado como solução   
    Neste caso, todo o código entre o inicio e o fimAlgoritmo.
  25. O post de Simon Viegas em Usando Escolha e Se foi marcado como solução   
    Só complementando:
     
    Sobre:
     
     
    Você fez:
     
    Se você quer verificar os dados do entrevistado atual, você precisaria pegar esses dados.. Você apenas confundiu e usou o "total de entrevistados com olhos verdes" e o "total de entrevistados com cabelos louros", em vez usar a "cor do olho do entrevistado" e a "cor do cabelo do entrevistado", respectivamente. No caso podendo ficar:
     
     
    Obs.: a "id" da cor do cabelo seria 4, e não 1.
     
    Adendo:
    Sugeriria dar uma melhorada nas definições das nomenclaturas das variáveis. A recomendação seria deixar com termos mais sugestíveis... meio que lendo o seu nome, já ter uma ideia para que ela serve. Ex.:
    var sexo :caractere idade :inteiro idCorOlho :inteiro idCorCabelo :inteiro maiorIdade :inteiro qtdFemEntre18e35 :inteiro qtdOlhosVerdes, qtdOlhosAzuis, qtdOlhosCastanhos :inteiro qtdCabelosLouros, qtdCabelosPretos, qtdCabelosCastanhos: inteiro qtdOlhosVerdesCabelosLoiros :inteiro cont :inteiro  
    Outro dica interessante é utilizar o conceito de camelCase (ou mais especificamente o lowerCamelCase).
     
    Nesse contexto, o código citado mais acima ficaria com algo como:
    se (idCorOlho = 2) e (idCorCabelo = 4) entao qtdOlhosVerdesCabelosLoiros <- qtdOlhosVerdesCabelosLoiros + 1 Perceba como fica mais objetivo... mesmo se fosse um código isolado (que não está num tópico de um fórum), daria para suporte mais facilmente o que está fazendo.
     
    Se quiser ainda mais incrementar, poderia ser algo como:
    se (idCorOlho = OLHO_VERDE) e (idCorCabelo = CABELO_LOIRO) entao qtdOlhosVerdesCabelosLoiros <- qtdOlhosVerdesCabelosLoiros + 1 Sendo que OLHO_VERDE e CABELO_LOIRO declarados como constantes, e sendo definidos respectivamente com os seus valores  (2 e 4).
     
    Obs. 2: o código do cabelo poderia começar do 1 sem problema... não precisa iniciar a partir do fim do outro, pois são coisas isoladas..
     
    @Renato Alem, por favor, poste o enunciado completo do problema... que aí poderíamos aproveitar para verificar se o código está no caminho certo (seguindo o que foi "ordenado" para ser feito pelo enunciado).

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