Ir ao conteúdo
  • Cadastre-se

GustavoHCS

Membro Pleno
  • Posts

    42
  • Cadastrado em

  • Última visita

posts postados por GustavoHCS

  1. Galera, boa noite, há um desafio que consegui fazer, porém queria ter uma visão mais "light" do código que executasse o mesmo processo...


    Desafio

    Faça a leitura de um valor inteiro. Em seguida, calcule o menor número de notas possíveis (cédulas) onde o valor pode ser decomposto. As notas que você deve considerar são de 100, 50, 20, 10, 5, 2 e 1. Na sequência mostre o valor lido e a relação de notas necessárias.


    Entrada

    Você receberá um valor inteiro N (0 < N < 1000000).


    Saída

    Exiba o valor lido e a quantidade mínima de notas de cada tipo necessárias, seguindo o exemplo de saída abaixo. Após cada linha deve ser imprimido o fim de linha.


    Se a entrada for 576 a saída será...

    576
    5 nota(s) de R$ 100,00
    1 nota(s) de R$ 50,00
    1 nota(s) de R$ 20,00
    0 nota(s) de R$ 10,00
    1 nota(s) de R$ 5,00
    0 nota(s) de R$ 2,00
    1 nota(s) de R$ 1,00


    Fiz o código e funcionou, mas ficou carregado de IF's

     

    let valor = 576;
    
    let nota100 = 0;
    let nota50 = 0;
    let nota20 = 0;
    let nota10 = 0;
    let nota5 = 0;
    let nota2 = 0;
    let nota1 = 0;
    
    let valor_aux = valor;
    
    while (valor != 0)
    {
      if ( valor >= 100 ) { valor -= 100; nota100 += 1; }
      else  if ( valor >= 50 ) { valor -= 50; nota50 += 1; }
            else  if ( valor >= 20 ) { valor -= 20; nota20 += 1; }
                  else  if ( valor >= 10 ) { valor -= 10; nota10 += 1; }
                        else  if ( valor >= 5 ) { valor -= 5; nota5 += 1; }
                              else  if ( valor >= 2 ) { valor -= 2; nota2 += 1; }
                                    else if ( valor >= 1 ) { valor -= 1; nota1 += 1; }
    }
    
    console.log( valor_aux );
    console.log( nota100 + " nota(s) de R$ 100,00");
    console.log( nota50 + " nota(s) de R$ 50,00");
    console.log( nota20 + " nota(s) de R$ 20,00");
    console.log( nota10 + " nota(s) de R$ 10,00");
    console.log( nota5 + " nota(s) de R$ 5,00");
    console.log( nota2 + " nota(s) de R$ 2,00");
    console.log( nota1 + " nota(s) de R$ 1,00");


    Consegui reduzir o código, mas estou com dificuldade pra corrigir no bloco do while e if onde não consigo fazer com que o identificador "valor" permanecesse, exemplo, 576 - 500 = 76, ele não permanece os 76, simplesmente reinicia o valor:

     

    let valor = 576;
    let nota = [100, 50, 20, 10, 5, 2, 1];
    let contador = [];
    let contador_aux = valor;
    for( let a = 0; a < 7; a++ )
    { 
        while( valor >= nota[a] )
        { 
            if( valor >= nota[a] )
            {
                valor -= nota[a];
                contador_aux += 1;
                contador[a] = contador_aux;
            }
        }
    }
    console.log( valor_aux );
    for (let i = 0; i < 7; i++)
    {
        console.log( contador[i] + " nota(s) de R$ " + nota[i] + ",00");
    }

     

  2. Estou estudando JavaScript e me deparei com a uilização de dois pontos de esclamação, mas confesso que não entendi a lógica para utilização deles.

     

    Uma negação até faz sentido pra mim, mas duas... Eu não consigo ver a aplicação destes em alguma função ou qualquer outro lugar. Tipo:

     

    const isAtivo = true
    console.log(!!isAtivo)

     

    Define o identificador e é atribuído à ele o valor verdadeiro, daí no console vira falso depois verdadeiro de novo. Qual o sentido disso? Se ele é verdadeiro, pra que trocar pra ter certeza de que realmente é verdadeiro? O mesmo pergunto se for falso.

     

    Compreendo que há as formas para identificar o que pode ser verdadeiro e falso...

     

    console.log('Os verdadeiros...')
    console.log(!!3)
    console.log(!!-1)
    console.log(!!' ')
    console.log(!![])
    console.log(!!{})
    console.log(!!Infinity)
    console.log(!!(isAtivo = true))
    
    console.log('Os falsos...')
    console.log(!!0)
    console.log(!!'')
    console.log(!!null)
    console.log(!!NaN)
    console.log(!!undefined)
    console.log(!!(isAtivo = false))

     

    Isso é muito confuso pra mim. Já fim alguns códigos de colegas, mas não entendi foi nada, fiquei mais perdido que cego em tiroteio.

  3. Citação

    O i é uma variável qualquer. Poderia chamar de letra que iria funcionar da mesma forma. Usa i, j, k etc, seria apenas uma convenção/padrão. Qualquer nomenclatura (válida) iria funcionar.

     

    Eu sei que poderia ser qualquer coisa, não estou me referindo ao nome da variável, mas à função dela diante da rotina.

     

    Citação

    Nops! Segue um teste com o código original (apenas copiei, colei e rodei) :

     

    Aqui original apareceu este erro...

     

    adscacs.png

     

  4. @Simon Viegas

     

    Citação

    Então, no caso eu "analisei o código e forcei o erro"... vi ali que tem uma divisão... logo, o denominador não pode ser 0 para esse contexto (computadores não funcionam muito bem com divisão por 0)... mas vejam: de um modo geral não caberia a nós "ajudantes" ficarmos caçando erros em código... ele que deveria já mais ou menos indicar. A partir do relato, partiríamos para ver o que está acontecendo . (Claro que vale como exercício ficar caçando.)

     

    Havia testado várias vezes aqui e não apareceu essa mensagem em nenhum momento. 😐

     

    Citação

    Como citado, ele está tentando "ler um vetor"... ou seja: "está preenchendo o vetor do programa com valores vindos do teclado".

     

    Sim, mas o que ele fez foi pedir para que o usuário informasse até quantas vezes a rotina seria executada e não pedia para o usuário informar mais nenhum valor, mesmo sabendo que que os valores em cada posição seja 0.

     

    Citação

    Sobre o uso do i, não importa o que se está utilizando para "acessar o vetor". Não existe qualquer relação técnica entre o valor passado para definir a posição e o valor do conteúdo da variável. Seria algo assim:

     

    Mas o i está sendo utilizado como identificador da posição do vetor, 0, 1, 2, ...

     

    Citação

    Já no caso do código do @VictorMenezesNA, a leitura estaria tecnicamente de funcional... veja:

     

    Sim, é funcional se utilizar o comando aleatório ou mesmo o randi(), mas no código ele mostrou seco, sem estas, apenas realizou a leitura do mesmo.

     

  5. Em 03/01/2021 às 15:44, VictorMenezesNA disse:

    Boa tarde!
    Estou tendo o mesmo problema, porém meu código não possui raiz quadrada. Já tentei fazer o negócio de alterar la nas configurações de região, mas nada também.

     

    
    Algoritmo "media_pares"
    
    Var
    
       N, i, QuantidadePares, SomaPares : inteiro
       media : real
       vet : vetor[0..20] de inteiro
    
    Inicio
    
       escreva("Quantos elementos terá o vetor? ")
       leia(N)
    
       QuantidadePares <- 0
       SomaPares <- 0
    
       para i de 0 ate N - 1 faca
          leia(vet[i])
          se vet[i] % 2 = 0 entao
             SomaPares <- SomaPares + vet[i]
             QuantidadePares <- QuantidadePares + 1
          fimse
       fimpara
    
       media <- SomaPares / QuantidadePares
    
       se QuantidadePares > 0 entao
          escreva("A MÉDIA DOS PARES É: ", media)
       senao
          escreva("NÃO HÁ NÚMEROS PARES")
       fimse
    
    Fimalgoritmo

     

     

    Brother,seu problema é diferente da colega acima, não aparece nenhuma mensagem de "Invalid floating point operation" e deveria ter criado outro tópico para não confundir outras pessoas;

     

    Tu criou um vetor inteiro e está tentando ler as posições do vetor por meio do contador do ' i ', logo, durante a leitura de cada posição não há valores, não faz sentido você querer ler um vetor sem valores.

     

    Adicionei valores à 3 posições onde N será 3 e rodou liso sem a necessidade do leia(vet[i]) que antecedia a estrutura de condição.

    Algoritmo "media_pares"
    
    Var
    
       N, i, QuantidadePares, SomaPares : inteiro
       media : real
       vet : vetor[0..20] de inteiro
    
    Inicio
    
       escreva("Quantos elementos terá o vetor? ")
       leia(N)
    
       QuantidadePares <- 0
       SomaPares <- 0
    
       vet[0] <- 2
       vet[1] <- 8   // valores adicionados à 3 posições do vetor
       vet[2] <- 3
    
       para i de 0 ate N - 1 faca
         //aqui ficava o leia(vet[i]), não há necessidade disso
          se vet[i] % 2 = 0 entao
             SomaPares <- SomaPares + vet[i]
             QuantidadePares <- QuantidadePares + 1
          fimse
       fimpara
    
       media <- SomaPares / QuantidadePares
    
       se QuantidadePares > 0 entao
          escreva("A MÉDIA DOS PARES É: ", media)
       senao
          escreva("NÃO HÁ NÚMEROS PARES")
       fimse
    
    Fimalgoritmo

     

    • Curtir 1
  6. @Juniorjbk7 Vamos lá!

     

    1. Dentro da estrutura escolha do sexo Masculino você não declarou o fimescolha, logo impossibilita a execução do programa.
    2. Em ate c = "s" substitua o "s" pelo "n", caso contrário entrará em loop das perguntas.
    3. Na estrutura do escolha da cor do cabelo masculino onde conta quantas pessoas que são maiores de 18 você esqueceu de adicionar o identificador ch para adicionar: ch <- ch + 1
    • Curtir 2
  7. Em 26/12/2020 às 12:06, devair1010 disse:

    @Hatchiko, isso mesmo que o @Flávio Pedroza disse, logo que pegar o primeiro valor atribua ele a variável menorV, e nas outras leituras não faça mais isso, e poderia ser assim:

    
    escreva( "Informe o valor do ", contador, "º produto: " )
    leia( valor )
    se contador = 1 entao
      menorV = valor
    fimse
    se ( valor > maiorV ) entao
      maiorV <- valor
    fimse

    Mas de qualquer modo não indicará sempre que o numero 1 é o menor valor? Meio que já fica como o menor sem ter a necessidade de realizar novas comparações exceto se o usuário informar 0.1.

    • Curtir 1
  8. Em 20/11/2020 às 00:55, Esleide disse:

    @Simon Viegas cara,  acho que analisando o que você me falou e testando uns negócios no programa eu acho que entendi os problemas que eu estava cometendo xD, e achei criativo o jeito como você mudou o "met" de lugar, além de se parecer mais como você executa uma calculadora (numero, depois operação, depois outro número), acho que preciso praticar um pouco mais de fluxogramas para "liberar" minha criatividade de programação haha. você falou que algumas sintaxes não existiam , como: 

    
    senão então

     ou

    
    met<-("+"),("-"),("*"),("/"),("^")

    porém por algum motivo elas não faziam diferença no programa (ou seja, tanto fazia estar quanto não estar) sabe o porquê disto? 

     

    Colega, no portugol não é permitido palavras com acento, logo, senão e então não existem como sintaxe da pseudolinguagem. Bem como o @Simon Viegas falou acima, o programa nem deveria rodar. Em todo caso, dê uma olhadinha no material da Apoio Informática responsável pela construção do Visualg clicando aqui.

    • Obrigado 1
  9. Vamos lá!

     

    1º) Nome não pode ser do tipo inteiro, mas caractere;

    2º) Não entendi porque pediu a nota da turma no início do código, menos ainda a variável ct3;

    3º) No primeiro Se você não definiu o valor a ser comparado com a "nota1";

    4º) Quando é solicitado que você mostre os nomes dos alunos que foram aprovados nas matérias 1 e 4 não deve mostrar dentro do para, mas fora dele como resultado final. Nessa brincadeira você deverá utilizar concatenação de texto;

    5º) Para mostrar a porcentagem não seria para apenas contar, mas calcular, de fato, por exemplo para uma turma de 45 alunos, logo, você pegaria o total de aprovados, dividira pela quantidade de alunos da turma. Supondo que apenas 10 alunos foram aprovados, ficaria algo como: 10 / 45 = 0,22 -> 22% da turma foi aprovado.

     

    Bom, é isso.

    Sei que sua dúvida é antiga, mas comecei meus estudos dia 15/12/2020, daí estou buscando ajudar a galera de acordo com o que aprendi.

    Uma dica, se estiver com dificuldades ainda sobre Algoritmos, acessa o material do Curso em Vídeo lá tem muito material gratuito e de boa qualidade, estou estudando por lá.

    • Curtir 1
  10. Hey colega, segue abaixo o código atualizado e funcionando perfeitamente. Espero que entenda e supra seu problema a fim de entender o exercício proposto.

    algoritmo "semnome"
    // Função :
    // Autor :
    // Data : 25/12/2020
    // Seção de Declarações
    var
          valor_par, valor_impar, qtd_valor_par, qtd_valor_impar, media_par, media_impar, diferenca: real
          valor, acima50, contador: inteiro
    inicio
          contador <- 1 //O contador é apenas deixar a solicitação do valor mais convidativo
          repita
    
                escreva( "Informe ", contador, "º valor inteiro: " )
                leia( valor )
    
                contador <- contador + 1
    
                se ( valor = 0 ) entao
                     escreva( "Programa encerrado!" )
                senao
                      se ( valor > 50 ) entao
                         acima50 <- acima50 + 1
                      fimse
    
                      se ( ( valor % 2 ) = 0 ) entao
                         //Então o valor é par
                         valor_par <- valor_par + valor //Realiza a soma
                         qtd_valor_par <- qtd_valor_par + 1 //Conta quantos valores pares existem
                      senao
                           //Então o valor é ímpar
                           valor_impar <- valor_impar + valor //Realiza a soma
                           qtd_valor_impar <- qtd_valor_impar + 1 //Conta quantos valores ímpares existem
                      fimse
                fimse
    
          ate ( valor = 0 )
    
              media_par <- valor_par / qtd_valor_par
              media_impar <- valor_impar / qtd_valor_impar
    
              diferenca <- valor_par - valor_impar
    
          limpatela
    
          escreval( "---------------------------------------" )
          escreval( "> NÚMEROS ACIMA DE 50: ", acima50 )
          escreval( "---------------------------------------" )
          escreval( "> NÚMEROS PARES" )
          escreval( "SOMA: ", valor_par )
          escreval( "QUANTIDADE: ", qtd_valor_par )
          escreval( "MÉDIA: ", media_par )
          escreval( "---------------------------------------" )
          escreval( "> NÚMEROS ÍMPARES" )
          escreval( "SOMA: ", valor_impar )
          escreval( "QUANTIDADE: ", qtd_valor_impar )
          escreval( "MÉDIA: ", media_impar )
          escreval( "---------------------------------------" )
          escreval( "> DIFERENÇA ENTRE PARES E ÍMPARES: ", diferenca )
          escreval( "---------------------------------------" )
    
    
    fimalgoritmo

     

    Resultado na imagem em anexo.

     

    Sem título 2.png

    • Curtir 2
  11. A atividade é:

    Citação

    51) Faça um aplicativo que leia o preço de 8 produtos. No final, mostre na tela qual foi o maior e qual foi o menor preço digitados.

     

    Fiz o código, executei.

    algoritmo "semnome"
    // Função :
    // Autor :
    // Data : 26/12/2020
    // Seção de Declarações 
    var
          contador: inteiro
          valor, maiorV, menorV: real
    inicio
          enquanto ( contador < 2 ) faca
               contador <- contador + 1
    
               escreva( "Informe o valor do ", contador, "º produto: " )
               leia( valor )
               
               se ( valor > maiorV ) entao
                  maiorV <- valor
               fimse
               
               se ( valor < menorV ) entao
                  menorV <- valor
               fimse
          fimenquanto
          
          escreval( "Maior: ", maiorV )
          escreval( "Menor: ", menorV )
    fimalgoritmo

    Obs.: Sei que há parênteses desnecessário, mas é uma questão de organização pessoal.

     

    Foi identificado o maior valor e, consequentemente, atribuído à variável correspondente.

    Porém para descobrir o menor valor, é feita a comparação, mas o valor não é atribuído. Sei que por se tratar de uma variável sem valor definido ele "entende" como zero, logo, não há valor menor que zero.

     

    Como proceder com relação à isso?

    Sem título 2.png

    • Obrigado 1
  12. @devair1010

    Ah sim, entendi. Agradecido pela ajuda. 😃

    Quanto aos parênteses desnecessários é mais para organização minha mesmo. 😅

     @devair1010  Utilizando conforme orientou, se eu informar zero como primeiro valor ele não executa mais nada, em contrapartida o programa trava apresentando a mensagem:

    Citação

    Invalid floating point operation.

    e para sair, de fato, apenas utilizando o comando de Parar localizado no Menu ou por meio das teclas CTRL + F2. Porquê isso acontece?

    • Obrigado 1
  13. Vi o perrengue de um colega no fórum, aceitei o desafio, e me prontifiquei a resolver o problema (detalhe, sou iniciante em programação). A atividade pede:

    Citação

     

    Desenvolva um algoritmo que leia N valores inteiros (0- finaliza) que apresente: 

    - quantidade de valores acima de 50

    - soma e a media dos valores pares

    - soma e a media dos valores impares

    - diferença entre a soma dos valores pares e impares.

     

     

    Consegui construir e deixá-lo funcional...

     

    algoritmo "semnome"
    // Função :
    // Autor :
    // Data : 25/12/2020
    // Seção de Declarações 
    var
          valor_par, valor_impar, qtd_valor_par, qtd_valor_impar, media_par, media_impar, diferenca: real
          valor, acima50: inteiro
    inicio
          repita
          
                escreva( "Informe um valor inteiro: " )
                leia( valor )
    
                se ( valor > 50 ) entao
                   acima50 <- acima50 + 1
                fimse
    
                se ( ( valor % 2 ) = 0 ) entao
                   //Então o valor é par
                   valor_par <- valor_par + valor //Realiza a soma
                   qtd_valor_par <- qtd_valor_par + 1 //Conta quantos valores pares existem
                senao
                     //Então o valor é ímpar
                     valor_impar <- valor_impar + valor //Realiza a soma
                     qtd_valor_impar <- qtd_valor_impar + 1 //Conta quantos valores ímpares existem
                fimse
    
          ate ( valor = 0 )
          
              media_par <- valor_par / qtd_valor_par
              media_impar <- valor_impar / qtd_valor_impar
              
              diferenca <- valor_par - valor_impar
    
          limpatela
    
          escreval( "---------------------------------------" )
          escreval( "> NÚMEROS ACIMA DE 50: ", acima50 )
          escreval( "---------------------------------------" )
          escreval( "> NÚMEROS PARES" )
          escreval( "SOMA: ", valor_par )
          escreval( "QUANTIDADE: ", qtd_valor_par )
          escreval( "MÉDIA: ", media_par )
          escreval( "---------------------------------------" )
          escreval( "> NÚMEROS ÍMPARES" )
          escreval( "SOMA: ", valor_impar )
          escreval( "QUANTIDADE: ", qtd_valor_impar )
          escreval( "MÉDIA: ", media_impar )
          escreval( "---------------------------------------" )
          escreval( "> DIFERENÇA ENTRE PARES E ÍMPARES: ", diferenca )
          escreval( "---------------------------------------" )
    
    
    fimalgoritmo

     

    O que me incomoda é que no momento em que executa a primeira vez a estrutura de repetição o bloco de código que verifica se é número par, ele conta o 'zero', que é utilizado para sair do loop, como item par, logo, em quantidade apresenta 2 valores ao invés de apenas 1.

     

    Há possibilidade de ajuda? 🙁

     

    • Amei 1

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

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!