-
Posts
3.940 -
Cadastrado em
Tipo de conteúdo
Artigos
Selos
Livros
Cursos
Análises
Fórum
Tudo que Simon Viegas postou
-
VisualG Algoritmo quiz
Simon Viegas respondeu ao tópico de Pablo Queiroz Dias em Programação - iniciantes
Para inserir um gabarito, primeiro você precisa ter um código funcionando sem gabarito. Poste o teu código completo que esteja funcionando, depois vemos a parte do gabarito. No aguardo. -
VisualG Algoritmo quiz
Simon Viegas respondeu ao tópico de Pablo Queiroz Dias em Programação - iniciantes
@Albeliano Lacerda, o código que você postou estava ilegível e desta forma ele foi removido. Por favor, poste o código completo que você já fez e em qual parte está com dúvidas. -
VisualG Algoritmo para saber se o aluno está reprovado, de prova final ou aprovado
Simon Viegas respondeu ao tópico de Noob752 em Programação - iniciantes
@Noob752, vamos lá: Primeiramente, por que não está utilizando acentuação na sua postagem aqui no Fórum? Tirando algum problema técnico, seria também importante seguir a "sintaxe" do Português... Sobre: O problema é que você não está filtrando a faixa corretamente. Ali no segundo se, você está apenas verificando se é menor ou igual a 6,9... E o 3, que você usou no teste, satisfaz essa condição.. Entenda que são 3 verificações distintas e isoladas... um se não tem nada a ver com o outro... ou seja: são 3 verificações independentes. Tem duas formas para contornar: 1) Inserindo a faixa na expressão do segundo se: se media < 5 entao recuperacao <- 10-media+2 escreva ("O aluno está em recuperação e precisa de ", recuperacao:1:2, " pontos para passar") fimSe se (media >= 5) E (media < 7) entao provafinal <- 10-media escreva ("O aluno está em prova final e precisa de ", provafinal:1:2, " pontos para passar") fimSe se media >=7 entao escreva ("O aluno está aprovado") fimSe Obs.: esse espaçamento entre os se seria apenas estético... para deixar caro que são 3 verificações distintas... um não sabe da existência do outros... vão simplesmente ser verificadas em ordem... 2) Utilizando a estrutura se/senao se media < 5 entao recuperacao <- 10-media+2 escreva ("O aluno está em recuperação e precisa de ",recuperacao:1:2, " pontos para passar") senao se media < 7 entao provafinal <- 10-media escreva ("O aluno está em prova final e precisa de ", provafinal:1:2, " pontos para passar") senao escreva ("O aluno está aprovado") fimSe fimSe Aqui sim existe uma "amarração" entre as condições... se, por exemplo, a primeira condição for satisfeita, as restantes não serão verificadas. Obs.: mais um vez "deixar sem espaços" entre as condições não tem nada a ver... o que "amarra" um se com o outro é o senao. -
@Moraes_27, alguns pontos: 1# Sempre mantenha o código identado Suma importância! Essa identação pode ser feita a medida que vai criando o código... Não deve existir desculpas, simplesmente mantenha o código identado. Sempre! Como sugestão de apoio, utilize um identador online qualquer, exemplo: https://codebeautify.org/c-formatter-beautifier Por padrão está 2 espaços, aí você muda para quanto quiser... como com "3 indent"... Algumas IDEs também tem um recuros. Por exemplo o DevC++: Aqui, também ajusta como quiser: Por aí vai...importante que mantenha identado. 2# Se atente à semântica da coisa A ideia básica aqui seria dar nomes sugestíveis a funcionalidade da coisa.. O caminho seria esse mesmo: Mas veja que na hora de contar você utilizou cont: Consegue ver a estranheza da coisa? Então, só de bater o olho (com o código identado) já veria que tem um problema aqui... Fica mais fácil associar as coisas. (Exibição x Contagem.) Como poderá simplificar (vai ter um for dentro do outro, em vez de um monte de for separados), vai ter apenas uma variável... explicado abaixo. Adendo: se for exibir a mensagem logo após contar, também só precisaria de uma variável, concorda? Se for exibir lá no final, aí sim.. precisaria de uma variável para cada contagem OU criaria um vetor 3# Você pode fazer todo de uma vez só Como sugerido pelo @mauro_b, num só loop já pode ir verificando cada linha. Segue um código baseado no dele: for (i=0; i<2; i++) { qtd_entre_20_e_30 = 0; for (j=0; j<4; j++){ if(m[i][j] > 10 && m[i][j] < 20){ qtd_entre_20_e_30++; } } //<< mostrar contar >> } Observe que a "mostração dos dados" está dentro do primeiro for, daí, para cada loop vai exibir as informações da linha i. Adendo: você poderia descobrir testando, mas já adiantei que vai precisar zerar o contador a cada loop... (experimente não zerar) 4# Extra A base da sua lógica de contagem de certo modo estaria boa, ou seja: poderia criar um for para cada linha, mas como é fácil perceber, é meio "pobre"... principalmente pois deixaria de aproveitar as facilidades do uso dessa matriz... pois fazendo assim, seria como se tivesse "3 vetores", em vez uma matriz só com 3 linhas. Oras! se posso acessar "cada linha" de uma vez só, para que separar? Se fosse para fazer separado, teria apenas um for. Algo como: count = 0; for (j=0; j<4; j++) { if (m[0][j] > 10 && m[0][j] < 20) count++; } //<< mostrar contar >> count = 0; for (j=0; j<4; j++) { if(m[1][j] > 10 && m[1][j] < 20) count++; } //<< mostrar contar >> ADENDO: não tem ";" depois do if... Percebe como ficou ficou repetitivo? Seria só fazer algo como está no 3#.
-
VisualG Não consigo identificar uma idade igual, mais de uma vez.
Simon Viegas respondeu ao tópico de Bruno Faria Moraes Jeronimo em Programação - iniciantes
Sobre os espaçamentos: o VisualG (por algum motivo misterioso) insere espaços antes de números... daí, caso queira remover tem duas formas: 1. retirar o espaço que teria no texto que vem antes. Ex: Escreva("Digite a", c, "ª idade: ") 2. inserir uma formação. Ex.: Escreva("Digite a ", c:1, "ª idade: ") Eu prefiro da segunda forma, para manter o espaço no texto... (Obs.: esse espaçamento não costuma ocorrer em outras linguagens de programação...) Vá futucando... mexendo ali e aqui... as "coisas" que vai absorvendo, vão sendo "acumuladas" e "reutilizadas" em outros contextos... num próximo programa, já terá bem mais agilidade.... principalmente para fazer coisas parecidas... -
VisualG Não consigo identificar uma idade igual, mais de uma vez.
Simon Viegas respondeu ao tópico de Bruno Faria Moraes Jeronimo em Programação - iniciantes
Acho que as mensagens ficaram repetitivas... dizendo as mesmas coisas várias vezes... A depender experimente outra versão listando as posições. Ex.: Maior(es) de 25 anos na(s) posição(ões): 3, 5, 8. (melhor ainda se fosse 3, 5 e 8, mas vai dar mais trabalho. Pode tentar depois se quiser, rs). Outra coisa: cuidado com espaçamentos entre as letras e números na tela... Tem momentos que ficam com "2 espaços"... -
VisualG Não consigo identificar uma idade igual, mais de uma vez.
Simon Viegas respondeu ao tópico de Bruno Faria Moraes Jeronimo em Programação - iniciantes
@Bruno Faria Moraes Jeronimo, show de bola... Acho que sei como é essa sensação. . Fico feliz por você também. Antes de tudo um detalhe: por algum motivo não está vindo o fimAlgoritmo nos seus códigos, mas ele faz parte do algoritmo... Só tomar um cuidado na hora de enviar para corrigir, por exemplo. Em relação aos "refinos" para o código, vou dar uma olhada com mais calma e depois eu respondo.. Mas um ponto que você já poderia adiantar é para exibir cada resposta de modo mais discriminado... um outro ponto relacionado é sobre os maior de 25... experimente inserir apenas idades menores que 25... Para testar, continua a dia... coloque para gerar números aleatórios para os testes mais genéricos... facilita muito. Como no exemplo: Fica mais fácil para testar os casos... como "todas idades iguais", "só acima de 25", "só abaixo de 25"... "com mais idade iguais (bastaria colocar uma faixa pequena, como de 20 a 22)" etc. -
VisualG Não consigo identificar uma idade igual, mais de uma vez.
Simon Viegas respondeu ao tópico de Bruno Faria Moraes Jeronimo em Programação - iniciantes
@Bruno Faria Moraes Jeronimo, no seu código, você está mostrando cada atualização... e isso não faz parte do enunciado. O texto ali na verdade poderia ser algo assim: "Maior idade digitada passou a está na posição". Entende? Na alínea c, apenas pede qual foi o maior... você simplesmente vai dizer como já está fazendo lá no final... esse "pode haver repetições" para mim não quer dizer nada. Já para alínea d, aí você precisa pensar em algum lógica para informar as posições... esse é o objetivo do exercício. É você que precisa pensar em alternativas e tentar fazer. Para ler as idades, você pode utilizar valores aleatórios. Exemplo: inicio soma <- 0 ALEATORIO 12, 40 Para c <- 1 ate 8 faca Escreva("Digite a ", c, "ª idade: ") Leia (idade[c]) soma <- soma + idade[c] FimPara ALEATORIO OFF //LimpaTela() Para c <- 1 ate 8 faca ou Ativar essa opção: -
VisualG Algoritmo de definição de maior e menor número
Simon Viegas respondeu ao tópico de Maidaekan em Programação - iniciantes
Seria algo como: escreva ("Nota do aluno: ") leia(nota) se (c = 1) entao maior <- nota menor <- nota fimSe c <- c + 1 -
VisualG Não consigo determinar a repetição específica de um procedimento
Simon Viegas respondeu ao tópico de Bruno Faria Moraes Jeronimo em Programação - iniciantes
Sobre: Sabia dessa não... curioso! Mais uma coisa estranha no VisualG ... no Pascal, pai do VisualG, os comportamentos são iguais... alinham pela direita. Sobre: Dando uma simplificada: frase <- "Frase centralizada" espaco <- (65 - Compr(frase)) \ 2 escreval("":espaco, frase) Uma alternativa boa seria cria um procedimento para facilitar o reuso. Exemplo: procedimento EscrevalCentro(texto: caractere) var espaco: inteiro inicio espaco <- (65 - Compr(texto)) \ 2 escreval("":espaco, texto) fimProcedimento Como efeito de demonstração, poderia ser assim tb: procedimento EscrevalCentro(texto: caractere) inicio escreval("":(65 - Compr(texto)) \ 2, texto) fimProcedimento Mas acho que fica meio poluído. Usaria da forma anterior. ADENDO: funciona pois o que é esperado ali dps do ":" é um inteiro... como toda essa conta resulta num inteiro... funciona. -
VisualG Algoritmo de definição de maior e menor número
Simon Viegas respondeu ao tópico de Maidaekan em Programação - iniciantes
@Maidaekan, este está funcionando, né? Queria ver o código que está com problema e em qual parte. Mas basicamente deve ser isso: coloque esse "inicializador condicional" dentro do laço de repetição... também após ter lido a nota... aí ele deve verificar se é a primeira nota ou não. Se sim, ele atribui a primeira nota como sendo o maior e o menor. Para os outros loops, não vai mais ser o primeiro... daí, só vai ficar verificando se é um "novo" maior ou um "novo" menor. -
VisualG Algoritmo de definição de maior e menor número
Simon Viegas respondeu ao tópico de Maidaekan em Programação - iniciantes
Posta o código atual e em qual parte está com problemas. -
VisualG Não consigo determinar a repetição específica de um procedimento
Simon Viegas respondeu ao tópico de Bruno Faria Moraes Jeronimo em Programação - iniciantes
É isso mesmo... é normal ter dificuldade e, por sinal, é o esperado... Acho que uma boa base seria utilizar o Compr() mesmo. Mas tente entender melhor o problema... Faça algo bem simples... por exemplo, em vez de ficar lendo do teclado, já defina a string no código e vá testando lógicas diferentes... dps vai mudando o texto e vendo se vai dando certo... por aí vai. Com essa "perda" de tempo, você vai pegando macetes... que vai servindo para outras coisas q podem parecer que não tem nada a ver... Dá uns google... acha algumas lógicas já criadas... aí adapta para VisualG... tá valendo. Não precisa reinventar a roda por enquanto. -
VisualG Não consigo determinar a repetição específica de um procedimento
Simon Viegas respondeu ao tópico de Bruno Faria Moraes Jeronimo em Programação - iniciantes
Sim, sim.. a ideia é essa!!! mas só vai funcionar para esse texto... como é fixo, tá valendo, rs. Mas a proposta de "desafio" é fazer centralizar de acordo com o tamanho do texto. Precisaria "criar" / "utilizar" um algoritmo para calcular os espaços necessários e após imprimir... apesar da ideia ser boa, ela não é "justa". Por exemplo. Imagine eu fazer isso: Procedimento Gerador(msg: Caractere; qtd: Inteiro) var c: Inteiro inicio EscrevaL("+-------=======------+") EscrevaL(" ",msg) EscrevaL(" ",msg) EscrevaL(" ",msg) EscrevaL(" ",msg) EscrevaL("+-------=======------+") FimProcedimento inicio Gerador("Aprendendo Portugol", 4) fimalgoritmo Ou isso: inicio EscrevaL("+-------=======------+") EscrevaL(" Aprendendo Portugol") EscrevaL(" Aprendendo Portugol") EscrevaL(" Aprendendo Portugol") EscrevaL(" Aprendendo Portugol") EscrevaL("+-------=======------+") FimProcedimento Sacou? O que importa aqui não é o resultado (que seriam idênticos), mas sim os meios... é a "lógica utilizado por trás que está em jogo". Se quiser tentar fazer... não precisa tentar por esse código... crie novo. Ex.: Crie um programa que leia um texto e imprima esse texto centralizado na tela. (Vale pesquisa uma resposta pronta no Google, mas tem que entender todo o funcionamento.) -
VisualG Não consigo determinar a repetição específica de um procedimento
Simon Viegas respondeu ao tópico de Bruno Faria Moraes Jeronimo em Programação - iniciantes
1# Identar o código Pressione Ctrl+G no VisualG 2# Postar código aqui no fórum Edite seu tópico. Pressione o botão "<>" que está na Barra de Ferramentas e cole o código. 3# Sobre o problema x solução Sim. Creio que seria exatamente isso. Falta colocar para imprimir o texto centralizado.. fica o desafio lançado!! -
VisualG Não consigo determinar a repetição específica de um procedimento
Simon Viegas respondeu ao tópico de Bruno Faria Moraes Jeronimo em Programação - iniciantes
O procedimento está definido para receber 1 parâmetro (um texto). Lá no programa principal está passando 2. São assinaturas diferentes. Ajuste a assinatura do procedimento, exemplo: procedimento Gerador(msg: caractere; qtd: inteiro) Aí, coloque apenas para exibir o valor de qtd na tela... apenas para ver se está funcionando. Após, você ira criar um laço de repetição que vai fazer o msg ser impresso qtd vezes. -
VisualG Não consigo determinar a repetição específica de um procedimento
Simon Viegas respondeu ao tópico de Bruno Faria Moraes Jeronimo em Programação - iniciantes
@Bruno Faria Moraes Jeronimo, as linhas não são um monte de "=". Coloque como está no enunciado. Pronto... você vai receber mais um parâmetro no procedimento e aí você vai fazer repetir essa linha que está no meio utilizando esse novo parâmetro como referência. -
VisualG Não consigo determinar a repetição específica de um procedimento
Simon Viegas respondeu ao tópico de Bruno Faria Moraes Jeronimo em Programação - iniciantes
@Bruno Faria Moraes Jeronimo, sim. A quantidade de repetições está sendo repassada pelo parâmetro do procedimento. Vide: Você deve fazer o seguinte: Lá onde está exibindo a variável do parâmetro, você vai fazer repetir quantas vez está no valor desse segundo (e novo) parâmetro. inicio escreval("+-------=======------+") //aqui estrutura que vai exibir X vezes o texto escreval("+-------=======------+") fimProcedimento Então, em relação: Primeiramente, poste o seu código atual do exercício 87. Seria necessário antes verificar se este ficou "correto", já que o 88 seria uma mudança nele, ou seja: é como um "Efeito bola de neve"... se possível poste também o 86, rs. A partir dos código, posso sugerir as correções e posteriormente instruir como pode fazer para o 88. Caso queira tentar... a variável para controlar o laço precisaria ser declarado dentro da função... -
VisualG Algoritmo de definição de maior e menor número
Simon Viegas respondeu ao tópico de Maidaekan em Programação - iniciantes
@Maidaekan, isso. Dessa forma também funciona. A ideia seria "iniciar o menor com o maior valor possível para o contexto"... ou simplesmente inicializar com o maior valor possível para o tipo de dado. Daí, sempre na primeira comparação esse valor deve se atualizar. A forma que o @devair1010 passou seria outra forma... talvez um pouco mais elegante e precisa, mas em compensação pode ser mais custoso, já que, para todo loop, será verificado novamente se é o primeiro aluno... o que seria um "esforço extra". ADENDO: veja, na prática, esse esforço extra é irrisório no ponto de vista técnico, seria mais numa questão de lógica / conceito. O resultado final meio que vai ser igual... enfim. Tente fazer da forma que ele passou também. Entenda o funcionamento e vá ajustando o código... Vale a pena! Qualquer dúvida é só postar ADENDO 2: ah! no código original dele tinha um "if" (em inglês) na primeira linha, tomei a liberdade para alterar para "se" (como é no VisualG). Veja, se isso eventualmente teria sido um problema, o que poderiam se esperar era: "o que significa esse if"? Entende? Mas supostamente seria porque nas outras linguagens costumam se assim em inglês mesmo... deve ter sido a força do hábito, rs -
VisualG Precisando que alguém mostre se está certo
Simon Viegas respondeu ao tópico de Thamires Gonzaga Torquato em Programação - iniciantes
Uma forma de testar seria executando o código. Pressionar F9 no VisualG e veja o que ocorre. Para resolver um problema, você precisa primeiro entender qual é o problema. Não se engane: isso não é óbvio! Isso corre mais do que imaginamos... Mas enfim... O quê que o enunciado pede: O que você entendeu do que é para ser feito? Então, ele quer que o "conteúdo do que foi passado pelo parâmetro seja adicionado ao texto que vai aparecer na tela", ou seja: você precisaria utilizar a variável que está no parâmetro da função. Se ele passar "Bora Bahea", teria que aparecer: +-------=======------+ Bora Bahea +-------=======------+ Entendeu? Daí, como faço isso? já seria outra coisa... mas o importante, antes de tudo, é saber o que deveria ser feito... Vamos voltar para o primeiro exercício: O que ele quer? Quer simplesmente exibir 3 linhas de texto. Poderia ser algo assim: algoritmo "Exercício 86" procedimento Gerador () inicio escreval("+-------=======------+") escreval(" Olá, Mundo! ") escreval("+-------=======------+") fimProcedimento inicio Gerador() fimAlgoritmo Veja que todo o texto está dentro da função.. pelo código que você alterou, está colocando no "programa principal", o que estaria em inconformidade. Observe também o nome do procedimento ("inicial em maiúsculo") e os "traços" (estão escrito exatamente como no enunciado... por sinal eu copiei diretamente e colei no código), ou seja: o "problema pede algo de uma forma e tentamos fazer exatamente o que foi pedido". Podemos chamar isso de "seguir os requisitos do enunciado". É obrigatório seguir tudo exatamente nos mínimos detalhes? De um certo modo SIM, mas existe sempre uma flexibilidade... o mais importante que pelo menos não fuja muito... vale o bom senso. Certo, agora a segunda questão... Ele quer apenas que use uma variável para o texto do meio. Só alterar o texto do meio para usar uma variável. Algo assim: algoritmo "Exercício 86" procedimento Gerador (texto: caractere) inicio escreval("+-------=======------+") escreval(texto) escreval("+-------=======------+") fimProcedimento inicio Gerador("Aprendendo Portugol") fimAlgoritmo Observe que, inclusive, o que vai fazer depende do que foi elaborado no exercício anterior... mas basicamente "recebi um conjunto de caracteres na variável do parâmetro e usei essa variável para escrever na tela". Seria isso. (Pelo menos entendi assim.) É para isso que serviria a variável ali no parâmetro... desta forma, o procedimento sempre vai exibir o que passou... não vai mais ficar fixo. Exemplo: Ficou com erro ali no verbo, rs. Vai assim mesmo. ADENDO: para o segundo exercício seria "Exercício 87" ali no título, e não "86". -
Seria bom postar o "texto exato do enunciado". A definição de uma solução depende da definição do problema. Você pode estar fazendo um "bom código", mas que eventualmente não atende ao que foi pedido... Por exemplo, o que adianta um garçom entregar uma deliciosa moqueca se o cliente pedir uma feijoada? Entende? Além de "está gostoso" precisaria ser o que foi pedido... Poste seu código atual completo para ser analisado.. caso também ainda tenha dúvidas sobre alguma parte, é só informar. @907467
-
VisualG Não sei como resolver essa questão de Repetição Enquanto no Visualg
Simon Viegas respondeu ao tópico de Thamires Gonzaga Torquato em Programação - iniciantes
@Thamires Gonzaga Torquato, por favor, poste seu código completo atual e onde está com dúvidas. -
VisualG Não sei como resolver essa questão de Repetição Enquanto no Visualg
Simon Viegas respondeu ao tópico de Thamires Gonzaga Torquato em Programação - iniciantes
@Thamires Gonzaga Torquato, seja bem vinda ao Fórum do Clube do Hardware. Tente fazer algo mais básico antes... crie um programa que gera um número aleatório e imprime na tela. Dica: https://www.apoioinformatica.inf.br/produtos/item/30-as-funcoes-do-visualg-versao-2-0 Procure por Rand() e RandI(limite). Qualquer dúvida é só postar. No aguardo. -
@907467, qual o enunciado completo dessa questão?
-
Pascal Não consigo resolver a condição par
Simon Viegas respondeu ao tópico de Antonio Barco em Programação - outros
@Antonio Barco, alguns pontos: 1# Sobre o erro de sintaxe Utilize () para separar as partes da expressão. Exemplo: if (VET[CONJUNTO] > 0) and (VET[CONJUNTO] mod 2 = 0) then ou if ((VET[CONJUNTO] > 0) and (VET[CONJUNTO] mod 2 = 0)) then Tanto faz. 2# Sobre a tua tentativa O provável problema é que você colocou coisa de mais dentro do while. Poderia fica com algo assim: for CONJUNTO:= 1 to N do begin while (VET[CONJUNTO] <= 0)do begin writeln ('Digite um número = '); readln (VET[CONJUNTO]); end; if (VET[CONJUNTO] > 5) then CONTADOR := CONTADOR + 1 ; if (VET[CONJUNTO] mod 2 = 0) then CONTPAR := CONTPAR + 1; end; Ou seja: "ficar repetindo enquanto o número for negativo Daí, talvez seria bom colocar um aviso ou algo que indique que está lendo um novo número para a mesma posição do vetor. 3# Sobre paridade Então, pelo que consta, a definição de número pares ou ímpares é para inteiros, ou seja: estaria incluso também os negativos e o zero. Aí, aceitar ou não negativos vai depender do que está no enunciado... ou seja: não aceitar negativos apenas pela definição dos requisitos lá no enunciado... *** Adendo: Sobre: @devair1010, creio que não precisaria. Exemplo: "-4 / 2 = -2, com resto 0. Logo, é par". O código iria funcionar da mesma forma (só precisaria remover o while, que no código atual estaria "errado"). @Antonio Barco, tenta aí corrigir o código. Após, poste o enunciado completo da questão e o código atual. ADENDO 3: Sobre a nomenclatura, seria recomentado utilizar definições mais semânticas.. exemplo: var N, Contador, ContMaior5, ContParPositivo : integer; vetNumeros : array [1..100] of integer; Em fim... no mínimo mude esse "CONJUNTO". Acho que ficou meio sem nexo para o contexto.
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