-
Posts
3.940 -
Cadastrado em
Tipo de conteúdo
Artigos
Selos
Livros
Cursos
Análises
Fórum
Tudo que Simon Viegas postou
-
VisualG visulag, estou com dificuldade na logica: vetores
Simon Viegas respondeu ao tópico de dev aleatorio em Programação - iniciantes
Você está utilizando um mesmo contador para 2 para alinhados (um para dentro do outro). Não pode! Cheguei a comentar anteriormente: Ou seja: não dá erro de sintaxe lá no para. O erro que está dando é de lógica. (Está utilizando o contador do vetor gabarito para posicionar o vetor notas.) No caso, como o computador vai saber qual cont2 vai utilizar? Aí, ele utilize o que "está mais próximo". RESUMINDO Utilize, por exemplo, cont1 no primeiro, e cont2 no segundo. E lá no vetor notas utilize o cont1. Adendo 1: A minha forma de pensar é que você deveria descobrir isso, mas pelo visto não é uma boa estratégia... então vou adiantar: Sobre: A soma das notas fica dentro do para (antes do fimPara), já que precisa ir pegando o valor a cada loop. Lembrando que a coordenada de notas[] seria cont1, já que ele está relacionado a posição do aluno. E o cont2 ficara relacionado a posição do gabarito/respostas. Adendo 2 Eu falo "notas" (no plural) pois é um vetor... Vide: -
VisualG visulag, estou com dificuldade na logica: vetores
Simon Viegas respondeu ao tópico de dev aleatorio em Programação - iniciantes
Ok! Siga um princípio básico: se está "calculando uma média", o nome da variável que vai receber a média não poderia se chamar somaNotas. A ideia é manter a semântica no código... ele deve naturalmente fazer sentido. Sobre o cálculo da média, basicamente seria isso: mediaNotas <- somaNotas/3 O que é uma média? Existem várias tipos... mas provavelmente seria uma "média aritmética". Basicamente seria isso: "soma dos valores dividido pela quantidade de valores". Tá lá... a soma está em..... somaNotas (teve esse nome para sugerir a sua função) e a média, por sua vez, vai ficar em.... mediaNotas... Pegou a ideia? Daí, perceba que, primeiro eu encontro a soma das notas (que vai se acumulando em algum momento), depois eu calculo a média... que deve ser feita apenas uma vez aí para o contexto... Tenta aí... Para contextualizar melhor, poste o código completo do que já conseguiu fazer. -
VisualG Estrutura de Repetição - Marcar os divisíveis por 4
Simon Viegas respondeu ao tópico de T.A.L em Programação - iniciantes
Tem toda razão!!. Eu tento me policiar, mas é difícil superar os (maus) hábitos... kkkkkkkk. . Um dos grandes defeitos meu. Valeu pelo feedback! -
VisualG Erro de variável simples no visualg
Simon Viegas respondeu ao tópico de natália x3 em Programação - iniciantes
@natália x3, por favor, além do print do erro, poste o texto do código... assim outros membros podem copiar e testar o código. Para postar um código, pressionar o botão <> que fica na barra de ferramentas...: Após cole o código dentro da caixa de texto. -
VisualG visulag, estou com dificuldade na logica: vetores
Simon Viegas respondeu ao tópico de dev aleatorio em Programação - iniciantes
Não, não é isso. Para encontrara uma média, eu preciso dividir a própria média? Não faz sentido. E como assim "se não me engano"?. Se você não sabe/não lembra, precisa justamente pesquisar sobre como calcular uma média... Primeiro entenda como se calcular uma média... esse cálculo não tem qualquer relação com programação... Daí, após aplique os conceitos no código. -
VisualG visulag, estou com dificuldade na logica: vetores
Simon Viegas respondeu ao tópico de dev aleatorio em Programação - iniciantes
Vou tentar detalhar... A primeira coisa que precisa entender é que não existe relação técnica entre variáveis nos programas... simplesmente tem-se uma variável do tipo vetor de caractere, e simplesmente tem-se outras variáveis do tipo inteiro... assim como pode ter tantas variáveis quanto quiser e nenhuma vai ter relações entre si... Relacionar uma variável com outra não passa de abstração, ou seja, seria apenas devido a uma necessidade de criar comportamentos no programa, de modo que gere um resultado desejado... Veja: para utilizar um para, necessariamente precisa ter o ate , ter o faca e também ter o fimPara. Esses "comandos" estão intimamente ligados e precisam estar em determinada ordem e tal... fazem parte da sintaxe de estrutura lá desse laço de repetição... todo "para" vai ter esses comandos, entende? Já no caso do vetor, simplesmente existe a necessidade de acessar uma determinada posição dele... seja para inserir valores nesse vetor, seja para ter acesso a valores que estão nele... Quando uma variável global é criada no VisualG, ela automaticamente é inicializada. O próprio VisualG já insere um valor padrão, no caso, para um vetor de caracteres, vai inserir um texto em branco. ATENÇÃO: isso não é um comportamento comum na maioria da linguagem de programação do mercado.. que de um modo geral "exigem" que o próprio programador dê o valor inicial.. (se não inicializar uma variável manualmente, ou o código não compila, ou o compilador dá um alerta, ou a variável fica com um "lixo de memória"...) Veja o trecho abaixo: algoritmo "corrigeprovas" var gabarito: vetor[1..5] de caractere Como deve saber, o VisualG vai executando "da esquerda para direita, de cima para baixo", assim como "nós do ocidente lemos textos". Ao terminar de executar essa terceira linha acima, o vetor deve ficar assim: Na posição 1, tem "", na posição 2 tem "" etc. Daí, pelo contexto do exercício, se faz necessário preencher o vetor com dados. Mas que dados vou inserir lá? Oras! o vetor foi criado para armazenar os valores de um gabarito, logo faz sentido preencher com dados que remetam a um gabarito... (Mas isso é uma abstração do contexto. Um vetor de caractere é simplesmente um vetor de caractere.) Como preencho um vetor? Simplesmente insiro o valor na posição desejada, exemplo: gabarito[1] <- "1" gabarito[4] <- "5" gabarito[2] <- "4" gabarito[5] <- "3" gabarito[3] <- "1" Oh! Lá em cada posição ficou com o valor que eu atribuí: Veja que não importa a ordem de atribuição.. entenda que uma variável é simplesmente uma variável... algo que armazena dados e pronto.. "entender que essa variável vai funcionar como um gabarito não passa de uma abstração do programador". Eu preciso de algo que represente um gabarito e preciso que essa estrutura seja utilizável de algum forma.... Tá! Mas eu quero preencher lendo do teclado: Poderia fazer assim: leia(gabarito[1]) leia(gabarito[3]) leia(gabarito[5]) leia(gabarito[2]) leia(gabarito[4]) Pronto, eu estou, eventualmente, lendo os 5 valores do teclado e inserindo em cada uma das 5 posição... Reforço: propositalmente coloquei para preencher o vetor fora de ordem.. justamente porque isso não importa! Ler numa ordem também não passaria de uma conveniência para o contexto do exercício... Ah! Mas se fossem 1000 posições, teria que ter 1000 leia()? Se você quiser, SIM! Teria que ir fazer um a um... Mas daí que pode surgir o laço repetição, simplificando o processo. para i de 1 ate 5 faca leia(gabarito[i]) fimPara Observe que ali no parâmetro do vetor agora tem outra variável... essa variável pode ter qualquer nomenclatura... Utilizar i, ou cont , ou qualquer outro termo nada mais é por conveniência ou padrões de uso... eu poderia fazer assim: para navio de 1 ate 5 faca leia(gabarito[navio]) fimPara O importante é que essa variável seja de um tipo compatível que a coordenada do vetor precisa, que para o caso é inteiro. Exemplo: var gabarito: vetor[1..5] de caractere i: inteiro Entende? Perceba que eu também poderia fazer assim: i <- 1 leia(gabarito[i]) i <- 2 leia(gabarito[i]) i <- 3 leia(gabarito[i]) i <- 4 leia(gabarito[i]) i <- 5 leia(gabarito[i]) Vai dar na mesma (lembrando que acima deixei em ordem porque eu quis..)... entretanto, a ideia de utilizar uma variável para posicionar o vetor vem justamente para simplificar a implementação... por isso fica melhor utilizando o para para controlar o valor da variável. CONCLUSÃO Tudo isso simplesmente para dizer: eu poderia utilizar qualquer variável do tipo inteiro em um para ou no outro.... mas porque não utilizar o cont1 em ambos já que ela foi criada justamente para "contar algo" lá no contexto do exercício? Simplesmente porque cont1 já esta sendo utilizado para contar os nomes lá naquele trecho! Daí, o cont2 está sendo utilizado para contar as questões!! Se atente que a verificação das questões está DENTRO da leitura de cada nome, ou seja, é um laço de repetição dentro do outro... por isso NÃO poderia utilizar a mesma variável!!! Pois, na lógica da coisa, a contagem de um laço iria atrapalhar contagem da outro. Adendo 1 !importantíssimo!: no VisualG meio que não vai dar erro se utilizar a mesma variável, por exemplo, cont1 para os 2 laços.. eu suponho que foi implementando algum recurso pelo autor do projeto do VisualG para que diferencie uma variável da outra (meio que a variável é duplicada)... Na minha opinião, isso mais atrapalha que ajuda, já que normalmente isso não vai ocorrer em outras linguagem de programação. (obs.: VisualG não é uma linguagem de programação.) COMPLEMENTAÇÃO: cont1 e cont2 são utilizados como contadores quaisquer. Num momento o cont1 é utilizado para preencher o vetor do gabarito, num outro o próprio cont1 é utilizado para percorrer o vetor de nomes, e daí foi utilizado cont2 para percorrer as questões, já que um para está dentro do outro. "Ah! mas não faria mais sentido deixar o cont1 apenas para questões e deixar o cont2 para os nomes?". Talvez sim! Mas observe que nos para, as variáveis são sempre reinicializadas, ou seja, passando a começarem com 1... logo, não importando o seu valor antes de ser utilizada, daí tanto faz onde utilizar... cont1 e cont2 estão sendo variáveis para percorrer vetores... Eu deixei o cont1 primeiro porque geralmente fica em ordem, mas tanto faz. Normalmente são utilizado i e j... Lembrando que isso seria apenas uma convenção. Adendo 2: Em algumas linguagens, a declaração da variável pode ser feita no próprio para, o que deixa muito mais simples e elegante, o código poderia ficar mais ou menos assim. OBS: Código apenas para exemplificar!! Não funciona no VisualG para var contGabarito <- 1 ate 5 faca escreva("Questão ", contGabarito:1, ": ") gabarito[contGabarito] <- Carac(RandI(5)+65) {se quiser gerar de A a E} escreval(gabarito[contGabarito]) //exibir a resposta gerada caso usando RandI() fimPara Ou seja: para cada para poderia inserir uma nomenclatura mais semântica. E a variável deixaria de existir após o fim do laço. Mas já utilizando variáveis globais normalmente (que é a necessidade atual do VisualG), faria que fosse deixado criado várias variáveis como um mesmo propósito, logo, é muito mais simples ter apenas 2 variáveis genéricos. -
VisualG visulag, estou com dificuldade na logica: vetores
Simon Viegas respondeu ao tópico de dev aleatorio em Programação - iniciantes
@kalline, espero que, quando retorne, já tenha adiantado mais coisas no teu código... Abaixo fiz um esboço com alguns ajustes e sugestões: algoritmo "corrigeprovas" var gabarito: vetor[1..5] de caractere resposta: caractere nomes: vetor [1..3] de caractere notas: vetor [1..3] de real cont1, cont2: inteiro media, notaAluno :real temp: caractere inicio escreval("Cadastro de Gabarito") escreval("====================") para cont1 <- 1 ate 5 faca escreva("Questão ", cont1:1, ": ") //leia(gabarito[cont1]) {se quiser ler do usuário via teclado} gabarito[cont1] <- NumPCarac(RandI(5)+1) {se quiser gerar de 1 a 5} //gabarito[cont1] <- Carac(RandI(5)+65) {se quiser gerar de A a E} escreval(gabarito[cont1]) //exibir a resposta gerada caso usando RandI() fimpara escreval("") escreval("====================") escreval("Cadastro das Respostas das Provas") para cont1 <- 1 ate 3 faca escreval("") escreval("====================") escreval("Aluno ", cont1:1) escreval("====================") escreva ("Nome do aluno:") leia(nomes[cont1]) escreval("Respostas dadas") notaAluno <- 0 para cont2 <- 1 ate 5 faca escreva ("Questão ", cont2:1, ": " ) //leia(resposta) {se quiser ler do usuário via teclado} resposta <- NumPCarac(RandI(5)+1) {se quiser gerar de 1 a 5} //resposta <- Carac(RandI(5)+65) {se quiser gerar de A a E} escreval(resposta) //exibir a resposta gerada caso usando RandI() se (resposta = gabarito[cont2]) entao notaAluno <- notaAluno+1 fimSe fimPara escreval("Nota: ", notaAluno:1) fimPara fimAlgoritmo Nesse código, o Gabarito e as Respostas podem ser geradas automaticamente. Isso é bom para facilitar os testes, e não ficar precisando digitar um monte de valores a cada tentativa (isso é chato e é uma grande perda de tempo... fora que cansa a mente, o que pode tirar o foco)... Após os testes ficarem mais ou menos certos, aí só alterar para ler via teclado... Nele ajustei para cada acerto valer 1 ponto. Se atente ao detalhe que, para cada aluno, a soma precisa ser zerada... para deixar mais "semântico", alterei de soma para notaAluno, pois essa variável seria especificamente para "nota do aluno". Daí, o que precisaria para calcular a média? No caso a soma das notas dos alunos. Poderia criar uma nova variável, por exemplo: somaNotas. Nela vai acumulando a soma, algo como: notaAluno <- 0 para cont2 <- 1 ate 5 faca escreva ("Questão ", cont2:1, ": " ) //leia(resposta) {se quiser ler do usuário via teclado} resposta <- NumPCarac(RandI(5)+1) {se quiser gerar de 1 a 5} //resposta <- Carac(RandI(cont)+65) {se quiser gerar de A a E} escreval(resposta) //exibir a resposta gerada caso usando RandI() se (resposta = gabarito[cont2]) entao notaAluno <- notaAluno+1 fimSe fimPara somaNotas <- somaNotas+notaAluno escreval("Nota: ", notaAluno:1) Por aí vai. ADENDO: observe que nessa parte do cadastro das respostas, existe um para dentro do outro, no caso, de fato precisa de 2 contadores distintos... uma para cada para. (Mesmo que usando um só venha a não apresentar erro no VisualG.) ADENDO 2: sempre mantenha o seu código indentado. No VisualG, basta pressionar Ctrl+G para auto-indentar. 95% das vezes funciona bem. -
VisualG visulag, estou com dificuldade na logica: vetores
Simon Viegas respondeu ao tópico de dev aleatorio em Programação - iniciantes
Só um detalhe: seria linha 47. Basicamente os vetores nome e nota tem apenas 3 posições, mas o para está indo até 5... o erro ocorre quando o programa tenta acessar a posição 4 do vetor nome, que não existe. Mudando o para para ir até 3, resolve! Adendo 1: Seria interessante utilizar nomenclaturas de variáveis mais "semânticas". Por exemplo, para os vetores, ficaria melhor deixar no plural ou algo que remeta a um coletivo. Ex.: var gabarito: vetor[1..5] de caractere respostas: vetor[1..5] de caractere nomes: vetor [1..3] de caractere notas: vetor [1..3] de real cont: inteiro media, soma : real Observe que "gabarito" não vai para o plural, pois é um gabarito só... que meio que se traduz para um "conjunto das respostas corretas". Usar "gabaritos" faria sentido para uma matriz, ou seja, um vetor de vetores... no caso para caso tivesse vários gabaritos diferentes... (Ex.: O Enem, que tem, sei lá, 3 gabaritos diferentes.) Adendo 2: Por quê você não separa a etapa da "leitura das respostas" da etapa de "correção da prova"? Primeiro ler a respostas, depois calcular o resultado... Daí, você pode corrigir a prova logo após ler todas respostas do aluno. Outra possibilidade seria ler todas as respostas, de todos os alunos, e só após corrigir tudo de uma vez, mas talvez precisaria utilizar o tal um vetor de vetores (matriz / vetores de 2 coordenadas)... já que seria "uma posição para cada conjunto de respostas"... uma coordenada seria o código do aluno, a outra seria cada uma das notas desse aluno. Observação: no caso, do jeito que você fez, já lendo cada resposta e corrigindo, as respostas não precisariam ser um vetor, já que não tem necessidade de armazená-los individualmente, bastaria uma variável simples. resposta: caractere e faria: se (resposta = gabarito[cont]) entao Concorda? *Perceba a importância de um uso mais "semântico" para as nomenclaturas variáveis... "reposta" no singular de cara remete que seria "uma resposta".. que não é um vetor... já "respostas" daria um ar de "mais de uma resposta", que no caso seria "um vetor de respostas". Adendo 3: O cálculo das notas e também da média estão errados... mas sugerido você primeiro testar e tentar corrigir sozinho... (você não teria visto ainda já que o código estava com erro na coordenada do para). -
VisualG Estrutura de Repetição - Marcar os divisíveis por 4
Simon Viegas respondeu ao tópico de T.A.L em Programação - iniciantes
Nisso que quero focar: eu entendo que o programa não dar erro na execução seria devido a um bug, e não por uma funcionalidade em si. Sobre "estar replicando o professor", no vídeo ele uma variável do tipo inteiro, vide: Já no seu código você utiliza real, vide: Logo, o que foi feito no vídeo está de acordo com o que estou propondo ("não estar utilizando real"). O que estaria inconsistente no seu código não seria os valores nos caso, mas sim a variável de referência definida no escolha. Observação: sequer funciona valores do tipo real no caso, ou seja, no mínimo ficaria estranho aceitar real no escolha, mas não aceitar nos caso. Show! Mas só um adendo: "infinitos" não, existe um limite computacional... meio que baseado na faixa de valores do inteiro. Por sinal, os inteiros no VisualG são bem grandes... pelo que vi, pelo menos variando de menos -10^9 a mais de +10^9 (faixa de mais de 2 bilhões de valores). No Pascal, pai do VisualG, meio que seria um pouco mais de 32000 negativo e positivo (faixa de mais 64000 valores. Talvez dobrando em compiladores 64 bits...). Caso tenha interesse, deixo para você descobrir a faixa exata do inteiro no VisualG. Adendo: Um exemplo fazendo com escolha: algoritmo "divisíveis" var cont : inteiro inicio cont <- 30 enquanto (cont >= 1) faca escolha cont mod 4 caso 0 escreva (" [", cont:1, "]") outroCaso escreva (" ", cont:1) fimEscolha cont <- cont - 1 fimEnquanto fimAlgoritmo No caso acima, está tudo ok. "Ah!, mas você utilizou um real lá no escolha". Não, não usei. O que "vai" para escolha é a resultante da expressão... No caso, operador aritmético mod retorna um inteiro.. Faz até sentido, né? Já que "todo resto de uma divisão é um inteiro"... logo é tecnicamente válido para usar no escolha. -
VisualG Estrutura de Repetição - Marcar os divisíveis por 4
Simon Viegas respondeu ao tópico de T.A.L em Programação - iniciantes
@NerivanPrestes, por definição, supostamente, o escolha não aceita valores do tipo real, ou seja: conceitualmente existiria um erro de sintaxe. Seu código nem deveria rodar por completo*!!!. Ali no escolha deveria ser passado um valor do tipo inteiro!!! *o VisualG não compila os código, mas sim vai "interpretando linha a linha" (deveria dar erro de execução)... Diferente do seu pai, o Pascal, que primeiro compila, e depois executa o arquivo gerado (dá erro de compilação). "Ah! mas o resultado está saindo como esperado". Eu entendo isso como uma "eventualidade". Como assim? Primeiro vamos aos fatos: Teste do seu código no VisualG 2.0: "Opa! Deu certo". Agora exatamente o mesmo código na versão 3.6.0.5 (que seria versão mais estável): "Vixe! Deu B.O." O que pode está acontecendo? Eu acredito que o autor/criador do VisualG, provavelmente por algum motivo nobre, idealizou implementar algumas funcionalidades no programa para tentar facilidade a vida do estudante... daí, em vez de dar erro lá no escolha ao utilizar um real, ele fez alguma alteração para o recurso funcionar... meio que implicitamente convertendo de real para inteiro e/ou efetuando alguma outra coisa... só que, entre uma versão e outra (da 2x para 3x) ele meio que "reajustou" essa "ajuda"... que no final, como visto nas imagens acima, acabou causando essa inconsistência... já que um mesmo código está dando resultados diferentes... Não deveria, concorda? Na minha humilde opinião seria muito mais educativo dar erro mesmo... "Amigo, não pode usar real num escolha". No VisualG 3x, ele meio que "pega a parte inteira do valor real e compara com os valores que estão nos caso". Ele "compara inteiro com inteiro". Já no VisualG 2x, ele faz algo diferente... eu não entendi exatamente, mas ele meio que "pega a parte real do valor real e compara com a parte inteira dos valores que estão nos caso"... tá meio confuso, mas ele "compara um real com um inteiro". Ou seja: comportamentos diferentes entres versão... repito: era muito mais "lógico" simplesmente dar erro e não aceitar reais. Em fim, na minha opinião seu algoritmo não seria válido.. pois o que está em jogo é o meio (de chegar a uma solução), e não o resultado. Exemplo para contextualizar: É para utilizar enquanto, né? algoritmo "divisíveis" var pronto: logico inicio enquanto (não pronto) faca escreval("30 29 [28] 27 26 25 [24] 23 22 21 [20] 19 18 17 [16] 15 14 13 [12] 11 10 9 [8] 7 6 5 [4] 3 2 1") pronto <- VERDADEIRO fimEnquanto fimalgoritmo Essa resposta é válida? Não, não seria. Está implícito que precisaria gerar os número e verificar de alguma forma... O foco não é o resultado, mas sim o meio. Outro exemplo: algoritmo "divisíveis" inicio enquanto (FALSO) faca fimEnquanto escreval("30 29 [28] 27 26 25 [24] 23 22 21 [20] 19 18 17 [16] 15 14 13 [12] 11 10 9 [8] 7 6 5 [4] 3 2 1") fimalgoritmo Usei enquanto e o resultado saiu como esperado... E aí? CONCLUSÃO O objetivo dos exercício seria justamente "exercitar algo".... No caso, provavelmente, o contexto do exercício está inserido no estudo do laços de repetição, daí está implícito que deve-se ser utilizado as características do tal laço de forma efetiva... nos dois exemplo acima, eu "utilizei" (tá lá no código), mas basicamente não teve propósito algum na lógica... entende? Aí talvez entre a tal questão, que é positiva positiva, de "pensar fora da caixa", ok!, mas isso não seria o foco do exercício em si. Resumindo: Não acho que sua solução seja válida... seria necessário pensa em outra forma de resolver. O resultado está correto, mas o meio não. -
VisualG Estrutura de Repetição - Marcar os divisíveis por 4
Simon Viegas respondeu ao tópico de T.A.L em Programação - iniciantes
Não, não deu certo. Pelo menos aqui: É necessário destacar apenas os múltiplos de 4. Você precisaria dar um revisada no código. Tenta aí. -
VisualG como usar +1 e +valores?
Simon Viegas respondeu ao tópico de dev aleatorio em Programação - iniciantes
@kalline, segue: Se temos: x <- 4 Quer dizer que a variável x vai passar a ter o valor 4. Por exemplo, se antes a variável x tinha 10, ao executar a linha acima, vai passar a ter 4. Ok? O valor da direita é atribuído a variável da esquerda. Não importa o que tinha antes na variável x. Então, o que o primeiro se quer? Ele quer "contar a quantidade de valores que são divisíveis por 5". Daí, inicia a quantidade como sendo 0: divisivel5 <- 0 Depois vai "contando quantas vezes ocorreu": se (valores%5 = 0) entao //se o valor é divisível por 5 divisivel5 <- divisivel5+1 //pego o valor atual da variável, adiciono mais 1 //e depois atribuo o resultado à própria variável fimSe Por exemplo, foi inserido o valor 15. Seria algo como: se (15%5 = 0) entao divisivel5 <- 0+1 fimSe Logo, divisivel5 ficará igual 1. Posteriormente foi inserido o valor 25. Seria algo como: se (25%5 = 0) entao divisivel5 <- 1+1 fimSe Logo, divisivel5 ficará igual 2. Por aí vai. 3, 4, 5... vai "somando para cada ver que o valor for múltiplo de 5". Já o segundo se quer "a soma dados valores pares". Daí, inicia a soma como sendo 0: soma <- 0 Depois vai "calculando a soma": se (valores%2 = 0) entao //se o valor é par (se é divisível por 2) somaPares <- somaPares + valores //pego o valor atual da variável, adiciono o valor atual //e depois atribuo o resultado à própria variável fimSe Se foi inserido 4: se (4%2 = 0) entao somaPares <- 0 + 4 fimSe Logo, somaPares ficará igual 4. Posteriormente foi inserido o valor 32. Seria algo como: se (32%2 = 0) entao somaPares <- 4 + 32 fimSe Logo, somaPares ficará igual 36. O 4 que tinha antes, mais o valor atual... Por aí vai. Irá somando cada valor que eventualmente é par. Resumidamente: O valor que vai ser somado (1 ou "o valor de uma variável" ou "qualquer outra coisa") vai depender da necessidade do algoritmo... -
VisualG Exercícios com Procedimentos e com Funções
Simon Viegas respondeu ao tópico de fergie em Programação - iniciantes
@fergie, sugiro fazer os programas aos poucos... A medida que vai implementando, sempre deixando o código rodável. Você postou um código cheio de coisa, mas que sequer inicia, já que falta elementos básicas, como o cabeçalho. Vou exemplificar se eu fosse tentar fazer o primeiro exercício: Exemplo de código inicial: algoritmo "Exercício 01" //1)Escrever um programa para ler tipo de ação a ser comercializada na bolsa //de valores, preço de compra e o preço de venda de cada ação, calcule e //escreva: a. O lucro de cada ação; b. A quantidade de ações com lucro //uperior a R$ 1.000,00 c. A quantidade de ações com lucro inferior a R$ //200,00 d. O lucro total das ações; O final da entrada de dados é conhecido // quando informado fim como tipo de ação. var tipoAcao: caractere precoCompra, precoVenda: real lucro: real qtdAcoesLucroSuperior1000: inteiro qtdAcoresLucroInferior200: inteiro lucroTotal: real inicio escreva ("Tipo de ação : ") leia(tipoAcao) escreva ("Preco de compra: ") leia(precoCompra) escreva ("Preco de venda : ") leia(precoVenda) escreval("") escreval("Tipo de ação : ", tipoAcao) escreval("Preco de compra: R$ ", precoCompra:1:2) escreval("Preco de venda : R$ ", precoVenda:1:2) fimAlgoritmo Observe que só implementei uma leitura de dados e a exibição desses dados... apenas para testar se está lendo corretamente. Aí testa implementar mais alguma coisa. Ex.:calcular o lucro: ... escreva ("Preco de venda : ") leia(precoVenda) lucro <- precoVenda - precoCompra escreval("") escreval("Tipo de ação : ", tipoAcao) escreval("Preco de compra: R$ ", precoCompra:1:2) escreval("Preco de venda : R$ ", precoVenda:1:2) escreval("Lucro : R$ ", lucro:1:2) ... Agora testar ler várias ações (inserir um laço de repetição): algoritmo "Exercício 01" //1)Escrever um programa para ler tipo de ação a ser comercializada na bolsa //de valores, preço de compra e o preço de venda de cada ação, calcule e //escreva: a. O lucro de cada ação; b. A quantidade de ações com lucro //uperior a R$ 1.000,00 c. A quantidade de ações com lucro inferior a R$ //200,00 d. O lucro total das ações; O final da entrada de dados é conhecido // quando informado fim como tipo de ação. var tipoAcao: caractere precoCompra, precoVenda: real lucro: real qtdAcoesLucroSuperior1000: inteiro qtdAcoresLucroInferior200: inteiro lucroTotal: real inicio enquanto (tipoAcao <> "fim") faca escreva ("Tipo de ação : ") leia(tipoAcao) escreva ("Preco de compra: ") leia(precoCompra) escreva ("Preco de venda : ") leia(precoVenda) lucro <- precoVenda - precoCompra escreval("") escreval("Tipo de ação : ", tipoAcao) escreval("Preco de compra: R$ ", precoCompra:1:2) escreval("Preco de venda : R$ ", precoVenda:1:2) escreval("Lucro : R$ ", lucro:1:2) escreval("") escreval("") fimEnquanto fimAlgoritmo Observe que não faz sentido ler e nem exibir o dados para quando for informado o tipo da ação "fim", ou seja: precisa corrigir isso. Daí não faz muito sentido tentar implementar um coisa nova, como tentar calcular "a quantidade de ações com lucro superior a R$ 1.000,00"... entende? Primeiro resolve esse problema... ao ler "fim" o programa NÃO deve ler os preço de compra e venda... Do código acima, pararia para entender o que está ocorrendo e tentaria implementar uma solução para o problema citado acima. Ex.: algoritmo "Exercício 01" //1)Escrever um programa para ler tipo de ação a ser comercializada na bolsa //de valores, preço de compra e o preço de venda de cada ação, calcule e //escreva: a. O lucro de cada ação; b. A quantidade de ações com lucro //uperior a R$ 1.000,00 c. A quantidade de ações com lucro inferior a R$ //200,00 d. O lucro total das ações; O final da entrada de dados é conhecido // quando informado fim como tipo de ação. var tipoAcao: caractere precoCompra, precoVenda: real lucro: real qtdAcoesLucroSuperior1000: inteiro qtdAcoresLucroInferior200: inteiro lucroTotal: real inicio enquanto (tipoAcao <> "fim") faca escreva ("Tipo de ação : ") leia(tipoAcao) se (tipoAcao <> "fim") entao escreva ("Preco de compra: ") leia(precoCompra) escreva ("Preco de venda : ") leia(precoVenda) lucro <- precoVenda - precoCompra escreval("") escreval("Tipo de ação : ", tipoAcao) escreval("Preco de compra: R$ ", precoCompra:1:2) escreval("Preco de venda : R$ ", precoVenda:1:2) escreval("Lucro : R$ ", lucro:1:2) escreval("") escreval("") fimSe fimEnquanto fimAlgoritmo Por aí vai. Veja: não necessariamente o código precisa fica bom logo de início. O importante é simplesmente fazer rodar de alguma forma... Resumindo: É isso... Sempre o que for fazendo, vá deixando funcionando... não tente fazer tudo de uma vez... Escolha um dos exercício e tente fazer do início. Daí poste aqui o que conseguiu fazer e onde está com dúvidas. -
VisualG Exercícios com Procedimentos e com Funções
Simon Viegas respondeu ao tópico de fergie em Programação - iniciantes
Caro usuário, Seja bem-vindo ao Clube do Hardware. No intuito de servir como fonte de pesquisa no caso de instituições de ensino, informamos que incorrer no resolvimento por completo de questões relacionadas a disciplinas escolares de cursos técnicos e faculdades podem ser revistas e removidas pela Equipe de Moderação do Clube do Hardware. Para sanar dúvidas sobre esse tipo de problema, por gentileza, publique o passo a passo do desenvolvimento da questão, projeto, monografia ou conteúdo em dúvida para que possamos analisar se a resposta está correta ou não, ou para que possa ser auxiliado com a dúvida no desenvolvimento do exercício. Infelizmente, não há como resolver os trabalhos pelos usuários. O objetivo do Clube do Hardware é auxiliar seus usuários a encontrar soluções para que possam sanar suas dúvidas, e não de trazer soluções prontas para seus usuários. Além disso, copiar e colar respostas que não são de autoria própria do qualquer usuário é considerado plágio, o que é ilegal. Esperamos que compreenda. Atenciosamente, Equipe Clube do Hardware -
VisualG Problema com (Esperava encontrar FACA) visualg
Simon Viegas respondeu ao tópico de CriadorDeTravaZap em Programação - iniciantes
@Varnahal, seria bom manda um print do erro. Se for no enquanto, dê um espaço antes do "(". Ex.: De: Para: enquanto (continuar = "S") faca -
VisualG Erro que não consigo identificar
Simon Viegas respondeu ao tópico de Big_Big em Programação - iniciantes
@Big_Big, observe o que está sendo pedido no enunciado. Você deve entregar algo que atenda a ele. Basicamente: ler o valor da compra e mostrar o valor do desconto correspondente. No seu código meio que você está mostrando o "tipo" ou "categoria" do desconto, mas ele quer o "valor". Segue um exemplo de solução: algoritmo "Desconto Máximo" //Uma empresa de cartões de crédito está oferecendo descontos nas compras //efetuadas com o cartão. A empresa oferece 10% de desconto, porém este //desconto fica limitado até um valor máximo de 50 reais. Faça um programa //que leia o valor da compra e mostre o valor do desconto correspondente. var valorCompra, valorDesconto, valorFinal: real taxaDesconto : real limiteDesconto: real inicio taxaDesconto <- 10 limiteDesconto <- 50 escreval("Valor da compra") escreva ("R$ ") leia(valorCompra) valorDesconto <- valorCompra*(taxaDesconto/100) se valorDesconto > limiteDesconto entao valorDesconto <- limiteDesconto fimSe escreval("Valor do desconto: R$", valorDesconto:1:2) fimAlgoritmo -
VisualG Como fazer um algoritmo identificar se um número é par ou impar?
Simon Viegas respondeu ao tópico de Artur Elias Coelho em Programação - iniciantes
Você vai analisar a coordenada do vetor.. Por exemplo, se o vetor for de 1 a 10, você vai exibir os valores que estão nas posições 1, 3, 5, 7 e 9. Por exemplo, meio que a coordenada do vetor vai começar de 1 e variando de 2 em 2 até o 9. -
VisualG Como relacionar dados de variáveis?
Simon Viegas respondeu ao tópico de BiancaV. em Programação - iniciantes
Poste o enunciado completo. Além disso faltou a declaração das variáveis lá no código... poste ele completo também. Inicialize o menor com valor bem alto. Algo como: menor <- 9999999 enquanto (contador <= 1) faca Uma outra forma é inicializar o menor (e o maior) com o valor primeiro valor. Você precisa primeiro "contar a quantidade de cidades" e "calcular a soma dos acidentes dessas cidades". O cálculo da média é feito apenas uma vez... após ter esses dois dados. se (veic > veicMenor) entao escreval ("Não há cidades com menos de 2000 veículos.") senao se (veic < veicMenor) entao escreval ("A média de acidentes de trânsito nas cidades com menos de 2000 veículos de passeio é :", mediaAcid, ".") fimse fimse Na condição da primeira linha, você precisa verificar se existem cidades com esse critério ou não. Algo como: se (qtdCidadesMenos2000VeiculosPasseio = 0) entao ou se (não (qtdCidadesMenos2000VeiculosPasseio > 0)) entao -
VisualG Literal no Visualg não funciona
Simon Viegas respondeu ao tópico de Raphael Clementino em Programação - iniciantes
@Raphael Clementino, o tipo correto no VisualG seria caractere. Exemplo: algoritmo "teste" var nome, sobrenome, completo :caractere inicio nome <- "Raphael" sobrenome <- "Clementino" completo <- nome + " " + sobrenome escreval(completo) fimAlgoritmo -
VisualG Quais e quantas vezes os elementos estão repetidos numa matriz
Simon Viegas respondeu ao tópico de Ryan1010 em Programação - iniciantes
Por favor, poste o código e a explicação do que foi feito. -
VisualG Como relacionar dados de variáveis?
Simon Viegas respondeu ao tópico de BiancaV. em Programação - iniciantes
Sempre mantenha o código indentado. No VisuaLG, para ajudar, pressiona Ctrl+G. Eu nem reparei. A sintaxe está errada: Seria algo assim: se (acid > maior) entao maior <- acid senao se (acid < menor) entao menor <- acid fimSe fimSe Ou, como para o primeiro município precisa atualizar ambos, poderia ficar assim: se (acid > maior) entao maior <- acid munMaior <- mun fimSe se (acid < menor) entao menor <- acid munMenor <- mun fimSe @BiancaV., qual o enunciado completo da questão? -
VisualG Literal no Visualg não funciona
Simon Viegas respondeu ao tópico de Raphael Clementino em Programação - iniciantes
Eu vi cara. Apenas é que precisamos que poste o "texto do código" (em vez de uma "imagem do texto") para facilitar os testes e também a internet indexar as palavras... Copie e esse texto, clica no botão "<>": E cola o código... Assim, podemos copiar o texto e testar nos nossos compiladores. -
VisualG Literal no Visualg não funciona
Simon Viegas respondeu ao tópico de Raphael Clementino em Programação - iniciantes
@Raphael Clementino, por favor, poste o texto completo do código. -
VisualG Quais e quantas vezes os elementos estão repetidos numa matriz
Simon Viegas respondeu ao tópico de Ryan1010 em Programação - iniciantes
Para facilitar o preenchimento da matriz: para i de 1 ate 15 faca para j de 1 ate 5 faca //escreva ("Digite um valor do elemento da linha" , i, ", coluna ",j, " da matriz A: ") //leia(matA[i,j]) matA[i,j] <- RandI(100) fimPara fimPara Simplificação da exibição da matriz: escreval("Matriz A:") para i de 1 ate 15 faca para j de 1 ate 5 faca escreva (matA[i,j]:4) fimPara escreval("") fimPara Sobre: Ué!? Então, isso seria 99% do que foi pedido . Mas falando sério, antes de tentar implementar um código, sugiro o seguinte: Você precisa primeiro entender o problema...o foco aqui NÃO implementar um código, mas sim assimilar o enunciado e criar UMA solução para ele. Por exemplo. Tome como base a matriz fixa abaixo: 1 2 3 2 2 4 5 1 2 Seguindo o cerne do enunciado: Uma resposta poderia ser algo como: O elemento 1 aparece 2 vezes em A O elemento 2 aparece 4 vezes em A Escreva essa matriz no papel... pare para pensar em como conseguiria dar esse resultado acima. Qual lógica você utilizaria se fosse fazer de cabeça ou com auxílio do caderno? Daí, precisaria transformar/criar um algoritmo que seja traduzível para VisualG. Foque na lógica: como faria para descobrir que apenas o 1 e o 2 estão se repetindo e quantas vezes eles se repetiram? -
VisualG Como relacionar dados de variáveis?
Simon Viegas respondeu ao tópico de BiancaV. em Programação - iniciantes
Vejamos o código: Então, na primeira linha, está sendo exibido o conteúdo da memória correspondente ao identificador mun. Lá tem, por exemplo, "Salvador". Logo em seguida está sendo utilizando a mesma variável... o esperado é que saia o mesmo valor mesmo, entende? O computador só vai lá no endereço de memória e tenta exibir o que está lá... Dica: no VisualG vá pressionando F8. No lado direito do problema tem uma "tabela com os valores das variáveis"... a medida que vai alterando uma variável, os valores vão atualizando lá. Resumidamente: uma sugestão seria utilizar outras variáveis mesmo.. ex.: munMaior e munMenor. Assim como maior recebe o "valor atual de acidentes", essas duas variáveis receberia o nome do município quando necessário. Algo como: se (acid > maior) entao maior <- acid munMaior <- mun senao (acid < menor) entao menor <- acid munMenor <- num fimse E utiliza as variáveis lá na hora de exibir. Adendo: depois faça alguns teste para confirmar se o cálculo do menor e maior está funcionando bem.
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