Respostas no Fórum
-
AutorPosts
-
IcaroFilhoModerador
Bom dia. isto ocorre pois a logica dentro da condição esta errada. vc manda mostrar após a operação.
elif inicio > fim and passo != 0: #print(inicio, end=' ') pode retirar esta linha while inicio > fim: if inicio < fim: break if passo > 0: print(inicio, end=' ') inicio -= passo if inicio < fim: print("deu erro") if passo < 0: print(inicio, end=' ') inicio += passo if inicio < fim: break print('Fim!') print('-=' * 20)
com as entradas
10
|-12
|7
, terá a saída:Contagem de 10 até -12 de 7 em 7 10 3 -4 -11 deu erro Fim!
Em termos aritméticos, a sua saída vai estar correta.. basta corrigir apenas algumas questões logicas e o código estará correto.
IcaroFilhoModeradorBom dia.
Primeiramente, evite usar vaiáveis com 1 letra… por mais que você saiba do que se trata, nos programamos para outras pessoas lerem.
ex.: i => idade | s => sx ou sexo | m => nomeQuanto aos problemas.
Na primeira condição, não esta sendo atribuído os nomes, apenas as idades.Eu usaria uma abordagem diferente. Separaria por sexo e depois faria a checagem.
1- Se sexo F ou M
2- Se é a primeira entrada
3 – Se é menor que a idade cadastrada
4 – se é maior que a idade cadastradausando o seu código, criei o raciocínio para F, basta replicar para M
se(s == 'F' ou s == 'f'){ se(nomeFmenor == " "){ nomeFmenor = m nomeFmaior = m idadeFmenor = i idadeFmaior = i } senao { se (i < idadeFmenor ){ nomeFmenor = m idadeFmenor = i } se (i > idadeFmaior){ nomeFmaior = m idadeFmaior = i } } }
IcaroFilhoModeradorBom dia. seu código esta funcionando.
Sempre que enviar um código, envie-o configurado. para isso basta cola-lo e seleciona-lo por completo. Depois clicar emCODE
na barra superior da caixa de texto. (notará que aparecerá crases no inicio e no fim).
Possui alguma duvida referente ao exercício ??19 de abril de 2022 às 09:31 em resposta a: Exercicio – 54 estrutura de repetição validadando dados. #91609IcaroFilhoModeradorPara resolver o problema de inicialização basta inicializa-la com valor nulo, lembrando que se tratando de um tipo caracter, tem que se utilizar de aspas simples com um espaço entre elas:
caracter resp = ' '
1. Sua condição de tratamento para numero de caracteres esta invertida… ou seja, so esta aceitando nomes com menos de três caracteres. Para corrigir basta inverter o sinal de menor que para maior que:
se(text.numero_caracteres(teclado)>=3)
2. Seu programa esta tendo mais dois problemas:
2.1 Contador de pessoas cadastradas com erro de contagem
2.2 Nomes e idades incorretos
isto ocorre pois o seu contador esta inicializando em 1, logo após a etapa de checagem de nomes recebe um acréscimo de 1 e tem seu valor alterado para 2, sendo assim ele não contemplará a primeira condição decont == 1
e irá pular as atribuições de nomes e idades ao inicializar.
A correção é simplesmente altera para valor 0 na declaração e para exibir a chamada, usar o métodocont + 1
dentro do escreva:
inteiro cont=0
…
escreva("DIGITE A ", cont + 1 ," ° Pessoa:\n \n ")
2.3 Ainda sim dará erro de valores nas idades. acredito que tenha se perdido nas atribuições de valores e nomes. isto ocorreu pois tentou usar uma variável intermediadora (teclado) quando poderia simplesmente fazer atribuições diretas (sem precisar converter valores).
Para não ter que refatorar o código, basta que inverta as atribuiçõesse(idade<maisnovo){ idade=maisnovo // o correto é : maisnovo = idade novo=nome } se(idade>maisvelho){ idade=maisvelho // o correto é : maisvelho = idade velho=nome }
3.Dica de boas práticas:
procure utilizar mais “espaços” … isso deixara seu código mais legível:
se(text.numero_caracteres(teclado)>=3)
->se( text.numero_caracteres( teclado ) >= 3)
idade=t.cadeia_para_inteiro(teclado, 10)
->idade = t.cadeia_para_inteiro( teclado , 10 )
se(idade>maisvelho)
->se( idade > maisvelho)
Pode parecer bobeira, mas em códigos maiores irá ajudar a ler.
IcaroFilhoModeradorBom dia. Basta inicializar as variaveis:
caracter resp = ' ' cadeia teclado = ""
obs: Seu código esta dando a contagem errada errada de entradas pois o contador começa com 1.
Basca inicializar o contador em 0 que o valor de quantidade de vezes fica correto.. ou então terá que fazer uma operação na saida decont - 1
IcaroFilhoModeradorBom dia Daniel,
Você não fez nenhuma gambiarra, apenas dividiu em etapas o processo.
Excelente trabalho e bons estudos.16 de abril de 2022 às 10:00 em resposta a: Programação Básica_M04A14_ex65_( somando colunas ) #91431IcaroFilhoModeradorBom dia Abmael,
Conforme foi explicado pelo Daniel, trata de um verificador, que irá validar quando chegar na ultima linha. o simbolo de “!” é uma negação em programação. Ou seja, enquanto ele não chegar na condição, ele irá exibir o símbolo “+”IcaroFilhoModeradorO código esta bom. Teve algum problema ou dificuldade ?
IcaroFilhoModeradorBom dia Iago,
Movi seu tópico pois o mesmo assunto ja foi postado várias vezes.
Antes de criar um novo tópico, verifique se a duvida já não foi criada no forum, isto ajuda a ter um fórum mais limpo e na facilitação de buscas.
Teve algum erro ou duvida durante a execução da tarefa ?IcaroFilhoModeradorBoa noite Diego. Qual a versão do Portugol esta utilizando ? tenho instalado a versão 2.7.5
Se estiver utilizando a versão online, vai quebrar.IcaroFilhoModeradorBom dia Diego,
Eu copiei o seu código e o único erro que me retornou foi de variável não inicializada.
Apenas inicializei as variáveis idade e resp.
Código esta funcionando corretamente.
Segue abaixo como ficou:programa { inclua biblioteca Texto --> txt inclua biblioteca Tipos --> tip funcao inicio() { escreva("{ EXERCÍCIO 054 - Pessoas Validados } \n") inteiro idade = 0, cont = 0, velho = 0, novo = 0 cadeia nome = "", maisVelho = "", maisNovo = "", teclado = "" caracter resp = ' ' faca { escreva("-------------------------\n") escreva("Pessoa " + (cont + 1)) escreva("\n-------------------------\n") //LOOPING DE VALIDAÇÃO DE NOME, O NOME DEVE TER PELO MENOS 3 LETRAS. enquanto (verdadeiro) { escreva("NOME: ") leia(teclado) se(txt.numero_caracteres(teclado) >= 3){ nome = teclado pare } senao { escreva("ERRO - O nome deve ter no minimo 3 letras.\n") } } //FIM DO LOOPING DE NOME //LOOPING DE VALIDAÇÃO DE IDADE, A IDADE DEVE SER UM NUMERO INTEIRO ENTRE 1 E 110. enquanto (verdadeiro) { escreva("IDADE: ") leia(teclado) se(tip.cadeia_e_inteiro(teclado, 10)) { idade = tip.cadeia_para_inteiro(teclado, 10) se(idade >= 1 ou idade <= 110){ pare } senao{ escreva("ERRO - A idade deve ser de 1 a 110.") } } senao { escreva("ERRO - O numero digitado deve ser inteiro.") } }//FIM DO LOOPING DE IDADE //VALIDANDO OPCAO DE CONTINUAR enquanto (verdadeiro){ escreva("Quer continuar? {S/N} ") leia(teclado) se(tip.cadeia_e_caracter(teclado)) { resp = tip.cadeia_para_caracter(teclado) se(resp == 'S' ou resp == 's' ou resp == 'N' ou resp == 'n'){ pare } senao { escreva("ERRO - A resposta deve ser somente S ou N.") } } senao { escreva("ERRO - A resposta deve conter apenas 1 letra,") } } cont++ //INICIALIZANDO A VARIAVEL (CASO SEJA O PRIMEIRO NOME DIGITADO) se (cont == 1) { velho = idade novo = idade maisVelho = nome maisNovo = nome } senao { //AQUI O PROGRAMA ESTA COMPARANDO A IDADE DIGITADA COM AS IDADES QUE ELE JA TEM ARMAZENADO E SUBSTITUINDO SE CASO ATENDER A CONDIÇÃO se (idade < novo) { novo = idade maisNovo = nome } se (idade > velho) { velho = idade maisVelho = nome } } } enquanto (resp == 'S' ou resp == 's') escreva("----------------------------------\n RESULTADO \n----------------------------------\n") escreva("Você cadastrou " +cont + " pessoas.\n") escreva("A pessoa mais nova é " + maisNovo + " com " + novo + " anos.\n") escreva("A pessoa mais velha é " + maisVelho + " com " + velho + " anos.\n") } }
IcaroFilhoModeradorBom dia pedro,
Vc utiliza o enumarate quando deseja pegar o índice do elemento e o elemento.
por exemplo:my_list = ['apple', 'banana', 'grapes', 'pear'] for posicao, elemento in enumerate(my_list): print posicao, elemento
# Saida:
# 0 apple
# 1 banana
# 2 grapes
# 3 pearTambém aceita argumento que altera o contador:
my_list = ['apple', 'banana', 'grapes', 'pear'] for posicao, elemento in enumerate(my_list, 1): print(posicao, elemento )
# Saida:
# 1 apple
# 2 banana
# 3 grapes
# 4 pearO uso depende do tipo de problema.
IcaroFilhoModeradorIcaroFilhoModeradorBoa tarde Arthur.
Existe diversas formas de se realizar esse desafio, pois tudo é relativo a perspectiva que se enxerga o problema.
O importante é o código ter ficado limpo e resolvido o problema.
Por exemplo, eu enxerguei uma P.A na base do triangulo, tendo base inicial igual a 3 e sempre que se sobe 1 andar, adiciona + 2 a base.
Tendo isso como primícia, basta fazer o laço para “subir” até o centro do triangulo e depois “descer”Segue meu código:
programa { funcao inicio() { inteiro base = 3 inteiro andar, base_num escreva("Quantos andares a pirâmide vai ter? ") leia(andar) base_num = base + ((andar-1) * 2 ) para(inteiro b = 0; b < base_num; b++){ se(b > (base_num /2)){ para(inteiro altura = base_num -1 ; altura > b; altura--){ escreva("*") } } senao { para(inteiro altura = 0 ; altura < b; altura++){ escreva("*") } } escreva("*\n") } } }
PS: Nó meu código estou cogitando que a base não conta como altura, assim como um prédio que conta o primeiro andar o segundo pavimento.
- Esta resposta foi modificada 2 anos, 8 meses atrás por IcaroFilho.
IcaroFilhoModeradorBoa tarde João,
Não esta correto o código.
vc esta determinando que seu usuário fuma a 8 anos sempre (real tot_cigarros_anos = tot_cigarros * 8
)
Eu dei uma resposta bem detalhada no começo no tópico. de uma olhada e revise seu código.
Caso tenha problemas ou duvidas, retorne.IcaroFilhoModeradorMarcos, movi seu tópico pois o mesmo já foi criado.
Antes de abrir um novo tópico, procure pelo forum se alguem ja não teve a mesma duvida.Aqui tem bastante conteúdo referente ao que deseja. se ainda permanecer com duvida, fale por aqui que ajudaremos.
IcaroFilhoModeradorBoa tarde,
1. a variável logica “pin” não esta sendo utilizada. pode descarta-la
2. quando nomear variáveis evite usar “a”, “b”, “c” …., de nomes que façam sentido. Lembre-se de que se programa para outros desenvolvedores lerem.
3. Não precisa da equaçãox = x + 1
. Basta inicializar ox
com valor1
-Sua duvida-
4. Vc esta mandando escrever a variável x, independente do de qualquer checagem. logo ele sempre será impresso.
tem que por uma condição para ela ocorrer.
ex.:se(x % 4 == 0) { escreva("pin-") } senao { escreva(x,"-") }
5. correções:
programa { funcao inicio() { inteiro x = 1, y escreva(" Contar até: ") leia(y) enquanto (x <= y){ se(x % 4 == 0) { escreva("pin-") } senao { escreva(x,"-") } x = x + 1 } } }
fica um desafio de deixar de exibir o ultimo “-” quando o programa finaliza.
Bons estudosIcaroFilhoModeradorBom dia Gabriel,
esta escritowhrite
ao invés dewrite
tanto na sua linha 2 quanto na linha 3 onde esta dando erro.IcaroFilhoModeradorBom dia. reproduzi se código aqui. não esta me dando problema na inicialização, e sim nas validações.
IcaroFilhoModeradoracredito que o problema dela tenha sido a troca da crase por aspas
IcaroFilhoModeradorBoa noite Renato.
Vou tentar passar oq eu acredito que ocorra, pois não sou nenhum especialista.primeiramente isto ocorre apenas com a negação.
logico choice choice = 5 > 7 e 5 > 3 escreva(choice) //falso
logico choice choice = 5 > 7 ou 5 > 3 escreva(choice) //verdadeiro
O problema com o nao é que ele serve para umas coisas mais avançadas (como exemplo em javascript, que a negação faz checagem se o valor passado é vazio, nulo ou undefined antes de realizar a operação), provavelmente o mesmo deve ocorrer por debaixo dos panos em Portugol.
Contudo, é uma boa pratica a utilização dos parênteses nestes tipos de operação, por mais simples que for a operação.:
choice = ( 1 < 2 )
pois facilita a leitura para outros programadores lerem. ( uma das principais qualidades de um Dev e saber criar um código limpo para que outros programadores leiam )IcaroFilhoModeradorfrom random import randint minha_lista= list() maior = menor = 0 print("O computador sorteou os valores: ", end='') for n in range(1, 6): numeros = (randint(1,10)) print(numeros, end=". ") minha_lista.append(numeros) print(f"\nO maior valor sorteado foi {max(minha_lista)}") print(f"O menor valor sorteado foi {min(minha_lista)}")
para usar seu laço for com o max / min seria assim …
IcaroFilhoModeradorNeste exercício ele simplesmente quis lhe mostrar 2 métodos utilizados em listas. o Min e o Max ,que facilitam o trabalho.
vc fez do modo que funciona por “de baixo dos panos”.
o max entra dentro da lista e checa, indice a indice os valores e retorna o maior deles. o mesmo acontece pro min, so q pro menor valor.
vc realizou este processo não mão ao checar elemento por elemento.o append é o método que adiciona um valor no final da lista. ex.:
minha_lista = [2,3] minha_lista.append(4) print(minhaLista) // [2,3,4]
o problema do seu código não é o IF. eu disse pra tirar pq se tornaria redundante / desnecessária a checagem.
Seu problema está no tipo de variável.
min e max só podem ser utilizados em variáveis do tipo lista e as suas variáveis são do tipo INT.IcaroFilhoModeradorBom dia Darcio. o seu método esta construído errado.
documentação:
formato de hora 12h : booleano verdadeiro ==>hora_sis =( c.hora_atual (verdadeiro))
formato de hora 24h: booleano false ==>hora_sis =( c.hora_atual (falso))
falta terminar a lógica do horário.
IcaroFilhoModeradorBom dia. este é um erro comum da linguagem. para isso basta inicializa-las na declaração.
inteiro maior = 0 inteiro interm = 0 inteiro menor = 0
IcaroFilhoModeradorBom dia,
Está correto sim. Parabéns
Só cuidado ao escrever métodos dentro de métodos pois pode dificultar a leitura.21 de março de 2022 às 09:10 em resposta a: AO DIGITAR OPÇAO 1 É EXIBIDO RESULTADO DA OPÇÃO 2 #89102IcaroFilhoModeradorDarcio, movi seu tópico para cá pois o erro é o mesmo.
21 de março de 2022 às 09:08 em resposta a: AO DIGITAR OPÇAO 1 É EXIBIDO RESULTADO DA OPÇÃO 2 #89095IcaroFilhoModeradorBom dia Darcio,
o problema é que vc esta declarando o valor da opcao após a leitura. sendo assim independente do valor que por, ele vai valer o ultimo descrito: ex.:seu coóigo
escreva(“\nDigite sua opçao => “) leia(opcao)
Supondo que eu entre na opção 5 (natal)
continuando seu código.
opcao = ‘1’
o valor 5 vai ser substituído por 1
opcao = ‘2’
o valor 1 vai ser substituído por 2por isso independente do valor que por, ele sempre será a opção 2.
Para corrigir basta apagar essas atribuições.IcaroFilhoModeradorBom dia Douglas.
Não existe apenas uma resposta correta. Sempre haverá diversas maneiras de se resolver o mesmo problema. Ai está a magica da programação.
Quanto ao seu código, a lógica esta correta. o erro está apenas na ultima linha que esta declarando um valor fixo. ( R$ 900,0)
Para isto vc pode fazer um calculo dentro do próprio escreva.
escreva("O valor a ser pago é de " + ( valor - desconto ) + "! volte sempre!")
IcaroFilhoModeradorBom dia Gabriel.
Os métodos max e min são utilizados em listas.
No seu código, está usando em números inteiros e ai da erro.
Caso queira utilizar os métodos max e min você pode fazer com que os numeros gerados randomicamente sejam adicionados a uma lista vazia ( por meio de um append, e exclua toda a logica de if ) e ao final poderá executar o min e max.Tente resolver e caso não consiga, só postar aqui novamente.
-
AutorPosts