Ir ao conteúdo

Simon Viegas

Membro VIP
  • Posts

    3.940
  • Cadastrado em

Tudo que Simon Viegas postou

  1. OK. Isso eu entendi. Enunciado fornece o código e pede para você alterar ele? É isso? @Hydra_, poste o texto completo do enunciado para entendermos melhor o que precisaria ser feito... Mas em relação a alteração, altere o tipo do vetor, dos parâmetros das funções e o tipo da entrada de inteiro para caractere... é isso. Primeiro entenda o código original. Tem alguma dúvida sobre ele? Qual?
  2. Sobre: Sobrepondo como? Seria bom demonstrar o erro. Sobre> Não use read(), utilize somente readln(). Troque isso já! Após os ajustes, teste novamente e informe e demonstre o problema que está ocorrendo. No aguardo. Dica: utilize um replace de read( para readln(.
  3. @Andrieli Mendes, poste o que já conseguiu fazer e em qual parte está com dúvidas.
  4. @Hydra_, poste o enunciado completo da questão e em qual parte está com dúvidas.
  5. @Frank Charles Peach, bem vindo de volta. Sobre: A definição de "certo" é muito relativa.... basicamente vai depender do enunciado e daquilo que está estudando. Como está utilizando vetores, provavelmente faria mais sentido utilizar um laço de repetição... Ex.: para c <- 1 ate 3 faca para v <- 1 ate 3 faca se (c <> v) entao escreval(vet[c]:15, "[ ] X [ ] ", vet[v]) fimSe fimPara fimPara Adendo: observe que não adianta muita coisa "inserir espaços à direita para o time visitante". Concorda? Outra forma... deixando o espaçamento mais ajustado: algoritmo "TORNEIO DE FUTEBOL" var vTimes: vetor [1..3] de caractere i: inteiro x: inteiro c, v:inteiro funcao calcularLargulaColuna(): inteiro var maior: inteiro i: inteiro inicio maior <- Compr(vTimes[1]) para i <- 2 ate 3 faca se (Compr(vTimes[i]) > maior) entao maior <- Compr(vTimes[i]) fimSe fimPara retorne maior fimFuncao inicio para i <- 1 ate 3 faca escreva("Nome do ", i, "º time: ") leia(vTimes[i]) fimPara x <- calcularLargulaColuna() + 1 escreval(" TABELA DAS PARTIDAS ") escreval("---------------------------------") para c <- 1 ate 3 faca para v <- 1 ate 3 faca se (c <> v) entao escreval(vTimes[c]:x, "[ ] X [ ] ", vTimes[v]) fimSe fimPara fimPara fimalgoritmo Outra forma seria alinhar à direita para o time da casa: Se quiser tentar implementar: x <- calcularLargulaColuna() + 1 escreval(" TABELA DAS PARTIDAS ") escreval("---------------------------------") para c <- 1 ate 3 faca para v <- 1 ate 3 faca se (c <> v) entao espacos <- calcularEspacos(x) escreval("":espacos, vTimes[c], " [ ] X [ ] ", vTimes[v]) fimSe fimPara fimPara Faltaria apenas criar o calcularEspacos(). Observe que está recebendo um parâmetro. A função deve retornar a quantidade de espaços à esquerda... de modo que o resultado sai como a imagem acima. Qualquer dúvida, ou comentário, é só postar.
  6. @RENAN FP, conseguiu?
  7. Pegue o seu código original (da primeira postagem) e: 1. ajuste as variáveis. Deixe as nomenclaturas dos vetores no plural: var perguntas: vetor [1..10] de caractere respostas: vetor [1..30] de caractere corretas : vetor [1..10] de caractere resposta : caractere pontos, c: inteiro Ajuste o código para funcionar com essa alteração. Teste e deixe funcionado. Veja: apenas altere isso e deixe funcionando! Não tente fazer duas ou mais coisas ao mesmo tempo. 2. deixe o preenchimento do "banco de perguntas" separado da parte principal do código Apague o que está na parte principal e deixe o preenchimento dentro de um procedimento. Depois é só invocar o procedimento lá no parte principal: inicio pontos <- 0 // INICIAR O PLACAR carregarBancoDeQuestoes() Veja: apenas altere isso e deixe funcionando! Não tente fazer duas ou mais coisas ao mesmo tempo. *** Escolha fazer uma coisa ou outra... tente fazer até funcionar... NÃO tente fazer as duas coisas ao mesmo tempo. Caso tenha dúvidas sobre alguma parte, informe em que está com dúvidas, e não apenas não consegui mudar. É normal ter dúvidas (tanto que estamos num fórum), mas é preciso dizer qual é dúvida e tentar resolver... Poste o código completo após as alterações. Caso tenha dúvida, informa em qual parte. No aguardo.
  8. Sobre: Seria só separar o código: procedimento carregarBancoDeQuestoes() inicio // BANCO DE QUESTÕES perguntas[1] <- "O que são VETORES?" respostas[1] <- "(A) Estruturas de dados Rígido" respostas[2] <- "(B) Estruturas de dados homogêneas " respostas[3] <- "(C) Estruturas de dados Restrito" corretas[1] <- "B" perguntas[2] <- "Qual é o Paradgma que executam processos como se fossem funções matemáticas?" respostas[4] <- "(A) Paradgma Fundador" respostas[5] <- "(B) Paradgma Operacional" respostas[6] <- "(C) Paradgma Funcional" corretas[2] <- "C" //por enquanto deixe apenas com duas perguntas. Depois só inserir as outras seguindo a mesma lógica fimProcedimento Sobre: // FAZER A PERGUNTA procedimento perguntar(p:inteiro) var r: inteiro inicio escreval("QUESTÃO ", p) escreval(perguntas[p]) escreval("") para r de 1 ate 3 passo 1 faca escreval(respostas[p, r]) fimPara escreva ("QUAL É A LETRA DA SUA RESPOSTA? ") leia(resposta) fimProcedimento Como a "assinatura do procedimento mudou", precisará também mudar "as chamadas do procedimento" lá no parte principal. Ex.: // GAME PLAY perguntar e pontuar // GAME PLAY perguntar e pontuar perguntar(1) pontuar(1) perguntar(2) pontuar(2) Deu para entende? Antes, você colocou as respostas em sequência, daí precisava "calcular" as posições das respostas para as respectivas perguntas. Dessa forma acima, as resposta de cada pergunta já ficam associadas as próprias perguntas. Faça esses ajustes e vá arrumando outras detalhes. Qualquer dúvida, é só informar em qualquer parte.
  9. Está com dúvidas em qual parte? Por favor, poste o enunciado completo da questão, o que já conseguiu fazer e em qual parte está com dúvidas.
  10. Sobre: @RENAN FP, está com dúvidas em qual parte? Dicas gerais: sugeriria cadastrar o "BANCO DE QUESTÕES" em um procedimento. Deixar o "programa principal" mais limpo; que tal usar uma matriz (em vez de um vetor) para armazenar as respostas? Algo assim: respostas: vetor [1..10, 1..3] de caractere //[<nº da pergunda>, <nº da resposta da perguna>] Creio que assim fica mais fácil para gerenciar. Daí, só precisa do número da pergunta mesmo, já que "sempre serão 3 respostas, ou seja: usaria o p para primeira coordenada e r variando de 1 a 3; assim como alguns dados são enviados para os procedimentos pelos parâmetros, a resposta também precisariam voltar de alguma forma. No código atual, você está acessando a variável global resposta, em vez disso, você poderia passar ela por parâmetro por referência (vide Google) lá no procedimento perguntar() (o valor vai ficar salvo) e no pontuar() passar essa variável por parâmetro também, já que também está acessando diretamente. PS: pense assim: um procedimento deveria utilizar apenas aquilo que vem por parâmetro ou que foi declarada dentro dela mesma. (Com exceção dos vetores, pois o VisualG não permite... por limitação técnica) Qualquer dúvida é só perguntar.
  11. Vou tentar também aqui para demonstrar.. @Pedroso90, um ponto principal é: seu código SEMPRE deve está compilável, ou seja: se botar para compilar, tem que compilar sem erros... No caso do seu código postado, ele está incompleto... ou porque você esqueceu de copiar (acontece); ou porque realmente deixou parte faltando (isso é proibido ). A primeira coisa a se fazer é entender o problema... me parece que tudo está bem claro... então não tem nem muito no que pensar... dá para ir direto para o código. Exemplo de base inicial: program EX2; {$CODEPAGE UTF8} //para permitir acentos nas string em alguns compiladores [Não necessário no PascalZim, mas pode deixar] { ENUNCIADO: Utilizando as estruturas de repetição estudadas em sala de aula, faça um programa em Pascal que receba dez idades, pesos e alturas, calcule e mostre: * A média das idades das dez pessoas; * A quantidade de pessoas com peso superior a 90 quilos e altura inferior a 1,50 metros; * A percentagem de pessoas com idade entre 10 e 30 anos entre as pessoas que medem mais de 1,90 metros. } var mediaIdade, qtdPesoMaior90AlturaMenor150, qtdIdadeEntre10e30AlturaMaior190: real; begin end. Se botar para compilar, deve compilar de boa... Aí, vou partir para leitura dos dados... ex.: [...] const QTD_PESSOAS = 10; var mediaIdade, qtdPesoMaior90AlturaMenor150, qtdIdadeEntre10e30AlturaMaior190: real; cont: integer; begin for cont := 1 to QTD_PESSOAS do begin end; end. Observe que o código continua compilável... daí vai implementando... Mas porque isso? Dessa forma, você vai garantido que o código não tem erros de sintaxe... vai ficar apenas "preocupado" com a parte da lógica. Se compilar e der erro, vai meio que ter certeza que o erro está em algo que acabou de fazer... vai lá e corrigo. OBSERVAÇÃO: deixar compilável não é mesma coisa de "deixar certo". A proposta aqui é que foque apenas na lógica... Mais um pouco: [...] const //QTD_PESSOAS = 10; QTD_PESSOAS = 3; var somaIdade, mediaIdade, qtdPesoMaior90AlturaMenor150, qtdIdadeEntre10e30AlturaMaior190: real; cont: integer; idade: integer; peso, altura: real; begin for cont := 1 to QTD_PESSOAS do begin write ('Idade : '); readln(idade); //write ('Altura: '); readln(altura); //write ('Peso : '); readln(peso); somaIdade := somaIdade+idade; end; mediaIdade := somaIdade / QTD_PESSOAS; //observe que o cálculo da média só precisa ser feito apenas uma vez! writeln('Média das idades: ', mediaIdade:1:3); ReadKey(); end. Fazendo testes: Resultado esperado: Até aqui bateu! ..fui fazendo testes e ajustes. Cheguei a isso: program EX2; {$CODEPAGE UTF8} //para permitir acentos nas string em alguns compiladores [Não necessário no PascalZim, mas pode deixar] uses CRT; //necessário para alguns compiladores reconhecerem o ReadKey() { ENUNCIADO: Utilizando as estruturas de repetição estudadas em sala de aula, faça um programa em Pascal que receba dez idades, pesos e alturas, calcule e mostre: * A média das idades das dez pessoas; * A quantidade de pessoas com peso superior a 90 quilos e altura inferior a 1,50 metros; * A percentagem de pessoas com idade entre 10 e 30 anos entre as pessoas que medem mais de 1,90 metros. } const //QTD_PESSOAS = 10; QTD_PESSOAS = 3; var mediaIdade: real; somaIdade, qtdPesoMaior90AlturaMenor150, qtdIdadeEntre10e30AlturaMaior190, cont: integer; idade: integer; peso, altura: real; begin for cont := 1 to QTD_PESSOAS do begin write ('Idade : '); readln(idade); write ('Altura: '); readln(altura); write ('Peso : '); readln(peso); somaIdade := somaIdade+idade; if ((peso > 90) and (altura < 1.50)) then Inc(qtdPesoMaior90AlturaMenor150); if (((idade > 10) and (idade <=30)) and (altura > 1.90)) then Inc(qtdIdadeEntre10e30AlturaMaior190); end; mediaIdade := somaIdade / QTD_PESSOAS; //observe que o cálculo da média só precisa ser feito apenas uma vez! writeln(); writeln(); writeln('Média das idades'); writeln(mediaIdade:1:3); writeln(); writeln('Quantidade de pessoas com peso superior a 90 quilos e altura inferior a 1,50 metros'); writeln(qtdPesoMaior90AlturaMenor150); writeln(); writeln('Percentagem de pessoas com idade entre 10 e 30 anos entre as pessoas que medem mais de 1,90 metros'); writeln(qtdIdadeEntre10e30AlturaMaior190); ReadKey(); end. Teste rápido: Nesses testes utilizei apenas dados para 3 pessoas... Se funciona com 3, deve funcionar com qualquer* N>1. Testar com 3 já fica chato pra c@c&t&, imagine com 10? Daí, uma ideia é criar alguma estrutura que poupe-nos desse trabalho. Tem duas formas básicas: - deixar os dados fixos; (Seria mais útil quando usando vetores.) - gerar dados automaticamente. (Basicamente utilizando dados aleatórios.) Exemplo: //VERSÂO GERANDO AUTOMATICAMENTE (vou deixar você mesmo interpretar e, se desejar, efetuar ajustes) write ('Idade : '); idade := 14 + Random(60); writeln(idade); write ('Altura: '); altura := 1.30 + Random(70)/100; writeln(altura:1:2); write ('Peso : '); peso := 40 + Random(800)/10; writeln(peso:1:1); Sai algo assim: Ajustei para imprimir os dados de uma mesma pessoa um ao lado do outro (economizar linhas): //VERSÂO GERANDO AUTOMATICAMENTE (vou deixar você mesmo interpretar e, se deseja, ajustar) write ('Idade: '); idade := 14 + Random(60); write (idade); write ('Altura: ':15); altura := 1.30 + Random(90)/100; write (altura:1:2); write ('Peso : ':15); peso := 40 + Random(800)/10; writeln (peso:1:1); Pode parecer estranho... mas só para para entender!!! Obs.: claro que essa estrutura não sai do nada.. fui fazendo teste até que ficasse mais ou menos bom... Os comandos também fui tendo contato em outros experiências e pesquisas... basicamente fui apenas testando na práticas, mas se não soubesse, poderia vir no fórum e perguntar como poderia fazer, entende? Resultado: O ":" ficou separado do "Peso", estou com preguiça de tirar outro print, rs. Mas veja que seria apenas ir lá no código e tirar o espaço... e rodar novamente. Principais pontos: - deixe sempre o código compilável. Pode ficar compilando toda hora... mas a medida que vai pegando a prática, vai reduzindo a quantidade de vezes; - utilize nomenclaturas de variáveis o mais sugestíveis possíveis ("deixar semântico"). Facilita na identificação de qual variável usar em qual momento... e deixa o código mais legível para outros lerem. Adendo: observe o detalhe importante no cálculo da porcentagem... é para certas idades apenas para certa altura... veja nesse caso como a nomenclatura da variável deixa isso mais claro!!! (não é uma porcentagem sobre o total). Por aí vai. Qualquer dúvida é só perguntar Ah! segue o código atual: program EX2; {$CODEPAGE UTF8} //para permitir acentos nas string em alguns compiladores [Não necessário no PascalZim, mas pode deixar] uses CRT; //necessário para alguns compiladores reconhecerem o ReadKey() { ENUNCIADO: Utilizando as estruturas de repetição estudadas em sala de aula, faça um programa em Pascal que receba dez idades, pesos e alturas, calcule e mostre: * A média das idades das dez pessoas; * A quantidade de pessoas com peso superior a 90 quilos e altura inferior a 1,50 metros; * A percentagem de pessoas com idade entre 10 e 30 anos entre as pessoas que medem mais de 1,90 metros. } const QTD_PESSOAS = 10; var mediaIdade, percIdadeEntre10e30AlturaMaior190: real; somaIdade, qtdPesoMaior90AlturaMenor150, qtdIdadeEntre10e30AlturaMaior190, qtdAlturaMaior190, cont: integer; idade: integer; peso, altura: real; begin Randomize; //evitar que gere números repetidos com o Random() for cont := 1 to QTD_PESSOAS do begin //write ('Idade : '); readln(idade); //write ('Altura: '); readln(altura); //write ('Peso : '); readln(peso); //VERSÂO GERANDO AUTOMATICAMENTE (vou deixar você mesmo interpretar e, se deseja, ajustar) write ('Idade: '); idade := 14 + Random(60); write (idade); write ('Altura: ':15); altura := 1.30 + Random(90)/100; write (altura:1:2); write ('Peso: ':15); peso := 40 + Random(800)/10; writeln (peso:1:1); somaIdade := somaIdade+idade; if ((peso > 90) and (altura < 1.50)) then Inc(qtdPesoMaior90AlturaMenor150); if ((altura > 1.90)) then begin Inc(qtdAlturaMaior190); if ((idade > 10) and (idade <=30)) then Inc(qtdIdadeEntre10e30AlturaMaior190); end; end; mediaIdade := somaIdade / QTD_PESSOAS; //observe que o cálculo da média só precisa ser feito apenas uma vez! if (qtdAlturaMaior190 > 0) then percIdadeEntre10e30AlturaMaior190 := (qtdIdadeEntre10e30AlturaMaior190 / qtdAlturaMaior190) * 100; writeln(); writeln(); writeln('Média das idades'); writeln(mediaIdade:1:1); writeln(); writeln('Quantidade de pessoas com peso superior a 90 quilos e altura inferior a 1,50 metros'); writeln(qtdPesoMaior90AlturaMenor150); writeln(); writeln('Percentagem de pessoas com idade entre 10 e 30 anos entre as pessoas que medem mais de 1,90 metros'); writeln(percIdadeEntre10e30AlturaMaior190:1:2, '%'); ReadKey(); end.
  12. @KalI555, em qual linguagem de programação e qual programa utilizará para editar o código? Por favor, poste também o que já conseguiu fazer e em que parte está com dúvidas.
  13. Em outro tópico parecido, foi dado uma solução alternativa, segue:
  14. Sobre: O comando fimAlgoritmo não pode ficar no meio do código. Essa estrutura acima não é uma sintaxe válida para o VisualG. (O programa não dar erro devido a bugs no programa do VisualG.) Necessário que reformule essa lógica... até porque sequer faz sentido "forçar uma finalização do programa" apenas porque o usuário digitou uma nota inválida. Obs.: lembrando, mesmo que faça sentido, NÃO pode utilizar fimAlgoritmo do meio do código. Só deve existe um dele.. que é "no fim do algoritmo" mesmo... Sobre: O que você quer imprimir? Após saber o que quer, vai lá e imprime... Como os dados estão em vetores... assim como você fez um laço de repetição para preencher, precisaria de um outro laço para imprimir. Algo como: // IMPRESSÃO DOS RESULTADOS (NOME, NOTAS, MEDIAS E SITUAÇÃO) para i de 1 ate cont faca escrevaL("*************************************") escrevaL() escrevaL("Candidato:", Maiusc(candidato[i])) escrevaL("Média :", media[i]:1:2) se (media[i] >= notaAprov) entao escrevaL() escrevaL("O candidato ", Maiusc(candidato[i]), " foi aprovado") senao escrevaL("O candidato ", Maiusc(candidato[i]), " foi reprovado") fimSe fimPara
  15. Dúvida em como se faz o quê? Poste o que já conseguiu fazer em qual parte está com dúvidas. Qual a linguagem de programação vai utilizar? Abaixo segue um exemplo de código em VisualG. Obs.: esse código não é uma solução para o seu problema, é apenas um exemplo mesmo. algoritmo "Apenas ler dados e mostrar na tela" //Disciplina : //Professor : //Descrição : Elaborar um algoritmo que receba o preço de custo e o preço de // venda de produtos e mostre na tela esses dados //Autor(a) : Simon Viegas //Data atual : 22/08/2021 var precoDeCusto: real precoDeVenda: real inicio escreva ("Informe o preço de custo: R$ ") leia(precoDeCusto) escreva ("Informe o preço de venda: R$ ") leia(precoDeVenda) escreval("Preço de Custo: R$ ", precoDeCusto:1:2) escreval("Preço de Venda: R$ ", precoDeVenda:1:2) fimAlgoritmo No caso, para o seu algoritmo, você precisaria ler 5 produtos e..
  16. Resumo: - a variável soma não tem utilidade no código. Basta removê-la; - não é interessante ficar tendo que ficar digitando valores para cada execução. Implemente algo como gerar os números ou já deixar uma matriz fixa. Na versão final retira. (Ou deixa gerando automaticamente mesmo.) - o valor da diagonal já está na matriz, não precisaria de outro vetor; Segue um exemplo de código: program SomaCol_ValDiagonal; {$CODEPAGE UTF8} //para permitir acentos nas string em alguns compiladores [Não necessário no PascalZim, mas pode deixar] uses CRT; //Unit que disponibiliza o Readkey() para alguns compiladores [Não necessário no PascalZim, mas pode deixar] var matriz: array[1..5,1..5] of integer; somaC : array[1..5] of integer; l,c,i : integer; begin Randomize; //evitar que os números gerados pelo Random() repitam ao reexecutar o programa for l := 1 to 5 do begin for c := 1 to 5 do begin write ('Digite um valor para a ', l, 'ª linha e ', c, 'ª coluna: '); //readln(matriz[l,c]); matriz[l,c] := Random(10)+1; writeln(matriz[l,c]); //preenche com valores aleatórios somaC[l] := somaC[l] + matriz[l,c]; end; writeln(); end; write ('Os elementos na diagonal são respectivamente: '); for i := 1 to 5 do write (matriz[i,i], ' '); writeln(); write ('As somas das colunas são respectivamente: '); for c := 1 to 5 do write (somaC[c], ' '); Readkey(); end.
  17. @alejandro henrique, poste o que já conseguiu fazer e em qual parte está com dúvidas.
  18. Sim... fica mais destacado da forma que sugeriu. Se tivesse mais else, eu meio que deixa todos alinhados a partir do segundo, ou seja: só dando um dente a partir do segundo... pois já fica claro que seria uma sequência. Isso serviria para "economizar o espaçamento à direita... pois se for inserindo dentes, fica parecendo uma escada e vai precisando utilizar a barra de rolagem. Outros exemplos de indentação: Seguindo uma mesma base: if (i = 1) then begin n_maior := num; i_maior := i; n_menor := num; i_menor := i; end else if(num > n_maior) then begin n_maior := num; i_maior := i; end else if(num < n_menor) then begin n_menor := num; i_menor := i; end; Aqui a escada vai se formando.. como citado, acho desnecessário. Eu sou mais acostumado assim: if (i = 1) then begin n_maior := num; i_maior := i; n_menor := num; i_menor := i; end else if (num > n_maior) then begin n_maior := num; i_maior := i; end else if (num < n_menor) then begin n_menor := num; i_menor := i; end; Basicamente o cerne em deixar o begin e end um dente para frente em relação ao if e o conteúdo deles no mesmo dente. Costumo ver dessa forma também: if (i = 1) then begin n_maior := num; i_maior := i; n_menor := num; i_menor := i; end else if (num > n_maior) then begin n_maior := num; i_maior := i; end else if (num < n_menor) then begin n_menor := num; i_menor := i; end; No caso, com o begin e end no mesmo dente do if, mas o conteúdo um dente para frente... (O exemplo do @Midori me parece melhor.) Adendo: sou também acostumado a dar espaço após o if, mas tanto faz. Vai do gosto mesmo. Eu costumo deixar junto mais quando é uma função.
  19. @dve, você precisaria assimilar melhor o problema. Daí tentar criar um algoritmo a partir do que entendeu. Tente entender que o "assimilação" não tem relação com o VisualG. Está mais voltado para "interpretação de textos" mesmo. O VisualG seria apenas uma ferramenta que tentaria automatizar o que você entendeu... Vamos tentar destrinchar o enunciado: Para o [1], estaria meio que claro... ele quer que obtenha os dados de alguma forma. No contexto do problema seria "via teclado", os dados informados pelo usuário... Mas poderia ser de qualquer forma... por um formulário no Google; por um arquivo de texto etc., entende? A a "essência" é que precisa obter os dados... Basicamente no VisualG seria o que você fez: escreva ("Digite um número: ") leia(numero) Para [2], ele quer que faça o [1] até que determinada condição seja feita. Como você deve está estudando, o para seria mais voltado para "loops com quantidade pré-determinadas", mas que não é o caso... ou seja: talvez seria mais adequado utilizar o enquanto ou o repita. Para o [3], ele quer que, após o [2], apresente "informações". No caso, os dados serão o [4] e o [5]... Ou seja: em algum momento seria necessário processar os dados de [1] para obter o [4] e [5]. Segue um algoritmo parcial: repita leia um número atualize a quantidade de entrados adicione o valor do número a soma total dos números até número igual a 0 calcule a média exiba a quantidade de números entrados exiba a média dos entrados Um código poderia ser mais ou menos assim: Obs.: o algoritmo inicial e código estão incompletos... ainda tem problemas, sendo necessário reanalisar e complementar. algoritmo "Quantidade de números e a média deles" var numero: real somaNumeros: real qtdEntrados: inteiro media: real inicio repita ///[2] escreva ("Digite um número positivo (ou 0 para sair): ") leia(numero) //[1] //atualiza a quantidade de números entrados qtdEntrados <- qtdEntrados+1 //atualiza a soma dos números entrados somaNumeros <- somaNumeros+numero ate (numero = 0) //fim [2] //[3] media <- somaNumeros/qtdEntrados escreval("Quantidade de entrados:", qtdEntrados) //[4] escreval("Média dos entrados :", media) //[5] //fim [3] fimAlgoritmo Falta por exemplo inserir uma lógica para tratar os números negativo e cuidar da soma dos números (ele está contabilizando o 0, mas não deveria [assim como não deve contabilizar os negativos]). Por aí vai
  20. Se já estudou if/else, poderia ficar assim: if (i = 1) then begin n_maior := num; i_maior := i; n_menor := num; i_menor := i; end else if (num > n_maior) then begin n_maior := num; i_maior := i; end else if (num < n_menor) then begin n_menor := num; i_menor := i; end; Pela lógica, são condições mutuamente exclusivos, logo, se for um, não faria sentido verificar se será um outro (pois nunca será). Daí, essa segunda forma seria mais técnica... com fins didáticos... já a primeira forma seria mais simples (no sentido do entendimento) e creio que também mais leve (no sentido da complexidade do código fonte). Vai depender do que está estudando. Resumindo: Na prova usaria a segunda, mas na "vida real" geralmente usaria a primeira.
  21. Provavelmente teria algo a ver com o gerenciamento de memória no VisualG. Nos testes aqui, no primeiro loop, quando c está igual a 1, o programa estaria retornando o valor que está atribuído a t2... Para o restante do loop estaria retornando o que seria o "último valor da sequência". Meio que está apontando para o "suposto enderenço de memória do retorno da função"... o que seria a "variável fibonacci". Tipo, lá quando você colocou: T3 <- fibonacci(t1,t2,t3) Perceba que a própria função funciona como uma variável.. você podendo "copiar o valor dela", que no caso seria o "tal retorno da função"... Beleza. Vamos demonstrar.. Se for a primeira vez que executou o código, provavelmente vai aparecer assim: Esse primeiro 0 é o valor de t1. O 1 é o valor que está em t2. Vou mudar para 7, veja: Agora vou inserir o retorne e o var: Observe o valor final deu, eventualmente, 89. Esse foi o "último retorno". O que estaria lá no endereço que seria do retorno da função. Daí, ao executar novamente o seu "código incompleto". (Basta remover o retorne, ou seja: parar de atualizar o valor do retorno.) Oh! Lá! Esse primeiro 0 é o valor de t1, o 1 é do t2 e o restante seria o tal "valor que está lá na memória"... um "lixo da execução anterior". O VisualG estaria sempre retornando o último valor que está lá onde seria o retorno da função. Resumindo: o motivo não seria tão importante. D se (op = "sair") entao fimAlgoritmo fimSe e qualquer modo esse código não era nem para rodar, já que a função está sem retorno. Veja: existe uma diferença entre "erro de lógica", como por exemplo não colocar o var e a conta dar errada. E o "erro de sintaxe", como no exemplo de de não colocar o retorne. Para esse último, o "compilador" nem deveria deixar rodar... apenas acontece que o VisualG não compila o código, ele sequer é capaz de verificar que tem esse problema (de não ter o retorne)... são coisas da "IDE". Adendo 1: Como citado, a necessidade ou não do var estaria ligado apenas a lógica. Isso não tem influência direta no erro do que está acontecendo. Adendo 2: @Matheus Rodrigues, essa constatação faz até sentido no mundo da programação, mas não teria relação com o problema, pois o VisualG não é Case Sensitive. RESUMINDO: A falta do retorne na função está causando um bug no VisualG. Entendo que isso NÃO seria uma "forma de implementar" códigos. O retorne é um requisito. Conceitualmente o programa não poderia ficar assim, mesmo que esse recurso (ficar sem o retorne) funcionasse para alguma lógica... Seria um glitch. (Ou algo do tipo.) Só para deixar claro: imagine que por alguma sorte absurda o código com erro tivesse pegando o valor de C para o retorno. O resultado do cálculo poderia dar certo, mas..... mesmo assim estaria ERRADO. Pois necessariamente teria que vir do explicitamente pelo retorne. PS: Outro exemplo de glitch: se (op = "sair") entao fimAlgoritmo fimSe Se utilizar algo do tipo no programa iria funcionar, mas essa sintaxe não existe! Não poderia "utilizar o fimAlgoritmo" para forçar o encerramento. O código "roda" porque o VisualG é "bugado"/"tem limitações"...
  22. Qual é a dificuldade? Siga o modelo: Esse "posicaoItem" seria qualquer variável, ou valor, que conterá a posição que quer verificar... Você só vai trabalhar com os arquivos que não estão excluídos... daí, só verificar no momento propício: PS: é o mesmo que: se (não (excluidos[cod] = VERDADEIRO)) entao //verifica se está excluído ou se (excluidos[cod] = FALSO) entao //verifica se está excluído PS: o se fica aguardando um lógico, certo? Daí, normalmente utilizamos um operador relacional (nesse exemplo o "=") para que o resultado seja um valor lógico... como a própria variável do vetor já é um valor lógico, então pode ser utilizado diretamente... ali no se pode colocar qualquer coisa... o importante que o resultado final seja um lógico. sda
  23. Perfeito... então o problema já estava resolvido. Fiz um textão nada com nada! No caso outra forma seria deixar o vetor em ordem decrescente e pegar o primeiro.... Se quiser mostrar, caso exista, mais de um valor para moda, vai exibido todos enquanto o valor for igual ao primeiro. Outra coisa que vi é que não poder ser igual a 1, mas como são 6 opções e tem mais de 6 itens, sempre vai existir uma moda.
  24. @Drigola, uma coisa que eu sugiro é separar as coisas.. aqui tem 2 pontos: entender o problema e propor uma solução; implementar uma solução em forma de código. Perceba que são duas coisas distintas!!! A primeira não tem (e nem deveríamos achar que tem) qualquer relação com programação... não tem nada a ver com Pascal ou qualquer coisa do tipo... simplesmente existe um problema e seria necessário entendê-lo. Já a segunda parte, estaria na questão de, após ter resolvido o primeiro, passar tentar implementar um código que sirva como solução. Então, a proposta do exercício (com quase toda certeza) é estimular que você tenha contato com um "problema notável" e pesquise sobre o referido tema. Vamos lá: Para (i), o que significa essa fórmula para Y? Talvez um "quem souber morre!" . O enunciado não fala sobre e sequer dá uma utilidade para o Y depois. Reparem aí!!!... depois de calcular, faz o que com esses dados? NADA!!! Ou seja: uma coisa que se esperaria seria: "Oxente, para que raios eu preciso calcular esse valores Y?". Entende? Não precisa saber do que se trata... mas (se segundo entendi). essa cálculo será feito à toa... (Ou será que tem algo a ver com moda? Será? ) Tá... mas o que ele estaria pedindo? Basicamente o que já foi dito por @Midori: Para para tentar visualizar melhor, seria algo assim em Pascal: y[1] := (x[1]-1)/5 y[2] := (x[2]-1)/5 //isso para cada uma das 5000 mil posições Percebes? O vetor y, na posição 1, vai ter o resultado de x, na posição 1, menos 1, e o resultado dividido por 5... repetido isso para cada um dos 5000 registros. Agora imagine você fazendo essa conta de um a um... para cada um dos 5000 valores... daí que entraria o Pascal... seria apenas parte da ferramenta que irá automatizar o processo. (Irá criar um programa que por sua vez será executado por um computador... bla bla bla.) Lá, já idealizaria que seria mais prático utilizar um laço de repetição... que esse laço seria do tipo for, já que tem uma quantidade pré-determinada..... Já para o(ii), ele quer que calcule a moda... e tá lá: Aí vai lá e pesquisa sobre o tema caso não lembre ou não saiba o que é. Adendo: @Midori, como deve se lembrar depois, não é o "maior valor", né? kkkkkkk Vamos direto ao ponto que mais interessa (a parte do código): Sobre: Um "segredo" que aprendi é: tente ser o mais semântico possível. Tá lá... "preencha o vetor Y", ou seja: uma nomenclatura boa para o vetor poderia ser "y": var x: array[1..5000] of integer; y: array[1..5000] of integer; ou var x, y: array[1..5000] of integer; Aí você preenche y como foi explicado mais acima. Sobre: Aqui, como citado, primeiro você entende o que é uma moda, só depois implementa um código. Aí, a sua dúvida OU deve ser na parte do que é a moda, que ao pesquisar é bem provável que lembre/aprenda e por consequência também saberá como encontrar uma (acho que o conceito é bem simples e faz sentido ao nome). OU vai ser em como imaginar um algoritmo para encontrar uma moda... OU vai ser em como traduzir o algoritmo para Pascal... mas veja: a lógica de como deve ser feito o cálculo deve partir de você... aí vai tentando traduzir o que você imaginou em Pascal e caso não consiga, vai tirando dúvidas. Você precisa pensar em estratégias... PS: pelo que percebi, não será também simples como "encontrar o maior"... seria um pouco mais complicado que isso. No aguardo. Ah! pelo amor de d'us, não tente fazer as duas coisas (preencher y e calcular a moda) ao mesmo tempo. OU você tenta preencher Y (que me parece simples), OU tenta calcular a moda. Dica: teste com vetores menores, como uns 10 itens ou menos... que daí você compara mais facilmente os resultados com os valores esperados.

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

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!