Home › Fóruns › Programação Básica › Modulo 3, exercício 54 – Fundamentos da programação
- Este tópico contém 10 respostas, 6 vozes e foi atualizado pela última vez 3 anos, 6 meses atrás por Tutora Mayla.
-
AutorPosts
-
-
29 de março de 2021 às 10:53 #64007BRUNO BOECHATParticipante
Olá a todos!
Não estou conseguindo criar o programa de forma fiel ao que o guanabara ensinou. Já copiei linha a linha letra a letra e mesmo assim o prorama não roda. diz que preciso inicializar a variavel nome,idade e resp ao utilizar o comando de repetição enquanto(verdadeiro).
Para contornar isso dei valores a essas variaveis quando as declarei, e isso funcionou, porém sei que isso é uma gambiarra e prentendo não começar assim!rs!
Agradeço a quem puder me ajudar!programa
{
//primeiro estruturar o programa do básico ao complexo por partes
//criar as variaveis nome, idade,cont e resp – dentro do enquanto
//testar entrada de dados (primeira coisa a se fazer)//criar as variaveis jovem,velho,maior e menor –
//testar a condicional maior e menor , jovem e velho//fazer validações do nome e idade
//testar
//fazer validação da finalização do programainclua biblioteca Tipos –> tp
inclua biblioteca Texto –> tx
funcao inicio()
{
cadeia nome = “a”, jovem = ” “, velho = ” “, teclado
inteiro idade = 0, cont = 0,maior = 0, menor = 0
caracter resp = ‘s’
//precisei inicializar as variveis nome,idade e resp pois não
//estava conseguindo usa-las no enquanto(verdadeiro), dava erro sempre
//mas da forma que fiz isso é uma gambiarra, preciso aprender melhor!!!faca{
escreva(“\n=====================”)
escreva(“\nPESSOA: “,cont + 1,”\n”)
escreva(“\n=====================”)enquanto (verdadeiro){
escreva(“\nNOME: “)
leia(teclado)
se (tx.numero_caracteres(teclado) >= 3){
nome = teclado
pare
}senao{
escreva(“\n<<ERRO>> NOME DEVE CONTER NO MINIMO 3 LETRAS!”)
}
}enquanto (verdadeiro){
escreva(“\nIDADE: “)
leia(teclado)
se (tp.cadeia_e_inteiro(teclado,10)){
idade = tp.cadeia_para_inteiro(teclado,10)
se (idade >=1 e idade <= 130){
pare
}senao{
escreva(“\n<<ERRO>> IDADE INVALIDA!!!”)
}
}senao{
escreva(“\n<<ERRO>> DIGITE UM NÚMERO INTEIRO!!!”)
}
}//=====VALIDAÇÃO DO MAIS JOVEM E MAIS VELHO COM NOMES E IDADES==========
//se contador for igual a 1 o primeiro nome e a primeira idade
//são considerados tanto o mais velho quanto o mais novo
//caso o cont seja > que 1 ai o teste condicional vai dizer quem é o
//menor e maior com seus respectivos nomes e idadescont++
se (cont == 1){
jovem = nome
velho = nome
maior = idade
menor = idade}senao{
se (idade > maior){
maior = idade
velho = nome
}senao{
menor = idade
jovem = nome
}
}
// aqui deu dor de cabeça, não consegui mesmo fazer a contagem de caracteres!
//ele apenas entra no looping se digitar mais de uma caracter,mas fica
//sem mensagem de erro! já ajuda mas não está legal
enquanto (verdadeiro){
escreva(“\nQUER CONTINUAR? [s/n]”)
leia(teclado)
se (tp.cadeia_e_caracter(teclado)){
resp = tp.cadeia_para_caracter(teclado)
se (tx.numero_caracteres(teclado) == 1){
pare
}senao
escreva(“\n<<ERRO>> DIGITE APENAS [S\\N]”)
}
}}enquanto (resp == ‘s’ ou resp == ‘S’)
escreva(“\nVOCÊ CADASTROU “,cont,” PESSOAS”)
escreva(“\nO MAIS NOVO FOI “,tx.caixa_alta(jovem),” COM “,menor,” ANOS”)
escreva(“\nE O MAIS VELHO FOI “,tx.caixa_alta(velho),” COM “,maior,” ANOS”)
}
} -
29 de março de 2021 às 19:10 #64035FRANCISCO TADEU PEZZIParticipante
Olá Bruno, no que eu entendi, quando na feitura do programa se você fizer por etapas como cadenciou no inicio, ele vai funcionar normal, até você partir para
validação, pois colocara a cadeia teclado na jogada e será perdidas as referências nome, idade e resp. por isso deve ser inicializadas essas variáveis, não se trata de gambiarra. fica tranquilo,
cadeia nome = “”
inteiro idade = 0
resp = ‘ ‘
Se tiver outra informação me passe, mas esse é meu entendimento você não errou em nada. Bons estudos. E desistir não é uma opção! -
29 de março de 2021 às 19:12 #64038FRANCISCO TADEU PEZZIParticipante
Desculpe.
caracter resp = ‘ ‘ -
29 de março de 2021 às 22:28 #64044Tutora MaylaMestre
Bruno, o seu código está bom e isso não é de forma alguma uma gambiarra. A questão ai é que as vezes o compilador precisa ter certeza que a variável não está vazia, pois como todos são inicializadas em blocos condicionais
se
não é possível saber se a execução entrará em um bloco e iniciará a variável. Se houvesse umsenao
onde a variável fosse inicializada isso garantiria que se a execução não entrar nos blocosse
, ou seja, se os valores inseridos não pertencerem a nenhuma condição, a variável seria inicializada mesmo assim. Mas nessa questão não há como inserir um senão e manter a lógica.Por conta do enquanto(verdadeiro) sabemos que as variáveis vão ser sempre inicializadas, mas o programa enxerga apenas a questão que mencionei sobre os blocos condicionais.
Há várias formas de resolver este problema, mas para não modificar a sua lógica que está boa, basta inicializar as variáveis quando forem declaradas como já foi feito, e novamente, não é uma gambiarra nessa situação, não se preocupe.Quanto a sua dúvida sobre a contagem de caracteres, o problema está na organização dos blocos condicionais.
Uma cadeia só será caractere se seu tamanho for igual a 1, então não há necessidade de testar isso novamente dentro desse bloco. Basta por umsenao
nose
onde é verificado se é caractere que entrarão nosenao
todos os casos onde o tamanho for maior que 1.se (tp.cadeia_e_caracter(teclado)){ //a função só retornará verdadeiro se o tamanho da variável teclado for 1 resp = tp.cadeia_para_caracter(teclado) }senao escreva(“\n<<ERRO>> DIGITE APENAS [S\\N]”) //entrarão aqui todos os casos onde o tamanho da variável teclado não for 1 }
Quaisquer outras dúvidas estamos a disposição.
-
30 de março de 2021 às 19:03 #64089BRUNO BOECHATParticipante
Boa noite,
Muito obrigado mesmo pelo rápido feed back Tayla! Consegui entender perfeitamente!
-
-
30 de março de 2021 às 18:09 #64080Katia Santos AntunesParticipante
OLÁ !
NO MOMENTO EM QUE FAÇO A VALIDAÇÃO DE DADOS E SUBSTITUO A VARIÁVEL (NOME) OU (RESP) OU (IDADE) POR (TECLADO ), NO FINAL DA SEMPRE ERRO NO CÓDIGO .
A MESSAGEM DE ERRO É ” EXISTEM TRECHOS DE CÓDIGO ONDE A VARIÁVEL () PODE NÃO TER SIDO INICIALIZADA ” . EU NÃO CONSIGO IDENTIFICAR O ERRRO , SE ALGÉM PODER ME AJUDAR AGRADEÇO : ) copiei um trecho do código abaixo
enquanto (verdadeiro){
escreva(“IDADE : “)
leia (teclado)
se (t.cadeia_e_inteiro(teclado,10)){
idade = t.cadeia_para_inteiro(teclado,10)
se(idade>=1 e idade <=130){
pare
}senao{
escreva(“<<Erro>> Idade inválida\n”)
}
}senao{
escreva(“<<Erro>> A idade deve ser um numero inteiro\n “)
}
}-
31 de março de 2021 às 20:18 #64144Tutora MaylaMestre
Katia, movi a sua dúvida para este tópico que trata do mesmo assunto. Há uma resposta minha aqui explicando o porque deste problema acontecer, dê uma olhada nela e na interação que houve neste tópico e se ainda houver dúvidas volte a entrar em contato.
Antes de criar um tópico é sempre bom verificar se já existe um tópico sobre o assunto, utilize a barra de pesquisa no fórum para procurar por tópicos já existentes.
Espero ter ajudado, quaisquer dúvidas basta entrar em contato.
-
-
31 de março de 2021 às 13:52 #64118FRANCISCO TADEU PEZZIParticipante
– Boa tarde! Katia, não consegui verificar, observe se no indicativo de erro não está aparecendo a linha, como você não mandou o código todo não sei dizer, mas geralmente nestes casos, tudo está normal, até acrescentar a variável teclado.
– Observe você lançou a variável teclado como cadeia?
– Se lançou como ela entrou no meio entre as variáveis, nome, resp e idade estas tem que ser inicializadas com um valor:
cadeia nome = ” ”
caracter resp = ‘ ‘
Talvez
inteiro idade = 0
Do mais só observando o código todo. Espero ter ajudado. Desistir não é uma opção! Bom estudos! -
31 de março de 2021 às 17:57 #64132IcaroFilhoModerador
Bom dia Katia, eu já postei uma explicação no forum a respeito de variável não inicializada.
Conforme Francisco falou, você provavelmente criou uma variável sem valor e quando o programa inicializa e faz a verificação, ele se depara com isso.
Então basta inicializa-las conforme dito pelo amigo.
Caso isso não ocorra, por favor poste o código completo para verificarmos junto a você.
PS: Use a formatação CODE no forum para postar os códigos, assim não precisaremos corrigir os espaços e aspas caso precisemos polo no Portugal Studio. -
5 de maio de 2021 às 18:05 #66395Antonio Carlos Belemel da CruzParticipante
Fala pessoal, tudo tranquilo?
alguém pode me ajudar?? Estava tendo um pouco de dificuldade no exercício 54 do modulo 3 por isso resolvi dar uma olhada na resposta. Porém copiei o exercício igual ao vídeo da aula do mestre Guanabara e não está executando igual o dele. No meu o portugol aponta erro de compilação devido as variáveis NOME, IDADE e RESP e ter sido inicializadas. Porém no vídeo elas também não foram. Aí quando inicializo elas o programa roda.
Segue abaixo o código que copiei e que inicializei as variáveis NOME, IDADE e RESP para que ele funcionasse. Caso alguém note uma diferença com o código do professor pode deixa o feedback por favor. (Estou revisando esse codigo faz 3 dias)programa { inclua biblioteca Tipos --> t inclua biblioteca Texto --> txt funcao inicio() { escreva("{ EXERCÍCIO 054 - Pessoas Validadas }\n\n") cadeia teclado, nome = "", jovem = "", velho = "" inteiro idade = 0, cont = 0, maior = 0, menor = 0 caracter resp = ' ' faca{//ENTRADA DE DADOS COM VALIDAÇÃO escreva("---------------------\n") escreva(" PESSOA " + (cont + 1) + "\n") escreva("---------------------\n") enquanto (verdadeiro) { escreva("NOME = ") leia(teclado) se (txt.numero_caracteres(teclado) >= 3) { nome = teclado pare } senao { escreva("<<ERRO>> O nome deve ter pelo menor 3 letras.\n") } } enquanto (verdadeiro) { escreva("IDADE = ") leia(teclado) se (t.cadeia_e_inteiro(teclado, 10)) { idade = t.cadeia_para_inteiro(teclado, 10) se (idade >= 3 e idade <= 130) { pare } senao { escreva("<<ERRO>> Idade inválida.\n") } } senao { escreva("<<ERRO>> A idade deve ser um número inteiro.\n") } } cont++ se (cont == 1) {//SE FOR A PRIMEIRA PESSOA maior = idade menor = idade jovem = nome velho = nome } senao {//SE NÃO FOR A PRIEMEIRA PESSOA se (idade > maior) { maior = idade velho = nome } se (idade < menor) { menor = idade jovem = nome } } enquanto (verdadeiro) { escreva("Que continuar? [S/N] ") leia(teclado) se(t.cadeia_e_caracter(teclado)) { resp = t.cadeia_para_caracter(teclado) se(resp == 'S' ou resp == 's' ou resp == 'N' ou resp == 'n') { pare } senao { escreva("<<ERRO>> Resposta inválida! Digite apena 'S' ou 'N'.\n") } } senao { escreva("<<ERRO>> O valor deve ser apenas uma letra.\n") } } } enquanto( resp == 'S' ou resp == 's') escreva("=========================================\n") escreva("Você cadastro " + cont + " pessoas.\n") escreva(jovem + " é a pessoa mais nova com " + menor + " anos.\n") escreva(velho + " é a pessoa mair velha com " + maior + " anos.\n") escreva("==========================================\n\n") } }
-
6 de maio de 2021 às 22:24 #66441Tutora MaylaMestre
Antonio, tem uma resposta minha neste tópico explicando o porquê deste problema acontecer. Por isso movi a sua postagem para cá. Dê uma olhada na resposta e na interação que aconteceu aqui e se ainda houver dúvidas volte a entrar em contato.
Antes de criar um tópico é sempre bom verificar se já existe um tópico sobre o assunto, utilize a barra de pesquisa no fórum para procurar por tópicos já existentes.Espero ter ajudado, quaisquer dúvidas basta entrar em contato.
-
-
-
AutorPosts
- Você deve fazer login para responder a este tópico.