-
Posts
3.940 -
Cadastrado em
Tipo de conteúdo
Artigos
Selos
Livros
Cursos
Análises
Fórum
Tudo que Simon Viegas postou
-
Visualg calcular soma total?
Simon Viegas respondeu ao tópico de john209 em Programação - iniciantes
Olá @john209, Veja, o VisualAlg vai executando os códigos da esquerda para direita, de cima para baixo, ou seja, da mesmo forma que lemos um texto... Na linha soma:=a+(a*porcentagem) que citei acima, porcentagem não está com nenhum valor definido ainda!!! Você só deu o valor a porcentagem duas linhas abaixo. Veja, a conta será feita sempre com o valor que está no momento, que no caso é 0! (obs.: o valor fica 0 porque o VisuAlg zera todas as variáveis automaticamente quando começa o programa). Para corrigir, você precisa atribuir o valor que você quer antes de usar a variável, ex.: inicio porcentagem:=10/100 //defino o valor da porcentagem escreva("Escreva o valor:") leia(a) soma:=a+(a*porcentagem) //aqui estou usando a variável, que nesse momento terá o valor de 0,1 escreval("ano 1: ",soma," ",soma*12) Ou seja, o computador só entende "o valor no momento da execução"... ex.: qual o valor de a no momento que está executando a 5ª linha? vai ser o último valor que ela recebeu, que no caso foi a que o usuário digitou. Já porcentagem, a mesma coisa, vai ter o último valor que recebeu, que o caso foi o "resultado da divisão de 10/100". Na próxima linha, soma vai ter o valor da conta da linha acima... e por ai vai... Então, se você quer somar o total, você precisa fazer justamente isso.. "somar os totais"... No seu caso esse "total" é dado por soma*12, correto? logo poderia ficar algo do dito: escreval("ano 1: ",soma," ",soma*12) total=total+(soma*12); soma:=soma*porcentagem+soma Obs.: veja que nesse momento não estou me preocupando se a forma de calcular a porcentagem está certa ou não, apenas é em relação a "como somar o total das somas". No aguardo -
Não consigo fazer cálculos com números no visualg
Simon Viegas respondeu ao tópico de Humberto_mi em Programação - iniciantes
Tópico movido de Programação - outros para Iniciantes -
Como achar a media da turma em visualg?
Simon Viegas respondeu ao tópico de Lucio Carvalho em Programação - iniciantes
Tópico movido de Programação - outros para Iniciantes Olá @Lucio Carvalho, Como se calcula uma média? no caso seria basicamente "a soma dos valores dividido pela quantidade de valores"... ou seja, assim como você fez para calcular a média de cada aluno, onde você somou as notas e dividiu por 4, você precisa somar as médias e dividir pela quantidade de médias, no caso por 2. Você também pode somar todas as notas e dividir pela quantidade de notas, no caso por 8 (4*2). No aguardo. -
Visualg calcular soma total?
Simon Viegas respondeu ao tópico de john209 em Programação - iniciantes
Tópico movido de Programação - outros para Iniciantes Olá @john209, inicio escreva("Escreva o valor:") leia(a) soma:=a+(a*porcentagem) Qual o valor de porcentagem nessa última linha citada acima? você está usando uma variável que "não possui nenhum valor" definido pelo usuário ou pelo programador. Em relação a sua dúvida, por favor, explique melhor, pois não entendi o que você está tentando fazer. No aguardo. -
Bucket sort - formando o algoritmo
Simon Viegas respondeu ao tópico de RuanCS em Programação - outros
Olá @RuanCS, tem como postar a seu código aqui? a depender tentamos traduzir para Pascal. -
Bucket sort - formando o algoritmo
Simon Viegas respondeu ao tópico de RuanCS em Programação - outros
Olá. Se possível, poste o enunciado do trabalho, pode ser que ajude... Então, em relação a sua dúvida: Se você definir que os dados de entrada vão de 1 a 10 (usuário vai digitar nessa faixa) vai sim... ex.: maior igual a 7... o vetor só vai ser utilizado até essa posição...logo tendo uma espécie de limite "lógico", ou seja, o vetor continuará com 10 posições e "gastando" memória para esse tamanho, mas limitado ao uso de "7". Para ficar mais claro, você poderia usar um "tamB" para armazenar o "tamanho de B". Obs.: Creio que dá para configurar um "vetor de tamanho dinâmico", mas acho por hora não tem problema usar um ver "maior" e limitar seu tamanho durante o uso... essa parte dinâmica poderia ficar para depois. Em relação ao Bucket Sort em si, creio que seja necessário se aprofundar mais... eu particularmente não conhecia. O que entendi é que de alguma forma, os elementos são separados de um "balde maior" em "baldes individuais" (bucket) seguindo alguma regra (ex.: em números de 0 a 100, poderia dividir em dezenas... um balde de 0 a 9, outro de 10 a 11 etc), daí os baldes são ordenadas individualmente por um método de ordenação qualquer, (que poderia ser o próprio Bucket Sort, nesse caso utilizando recursividade*) e posteriormente o conteúdos dos baldes é derramado, em ordem, um a um, no balde maior, resultando na ordenação completa. Na internet, encontrei uma explicação que acho que pode ser útil: (no caso utilizando baldes que recebem apenas um valor, em vez de uma faixa) Tem na wikipédia muito bem explicado. Mas vai aí o jeito que eu aprendi. Bucket sort é um algoritmo de ordenação na ordem O(n). Mas o problema dele é que ele aloca muita memória. E exige um conheicmento prévio sobre o conjunto de entradas. Ele funciona da seguinte maneira. É alocado um vetorzão do tamanho do máximo+1 do vetor que deseja se ordenar. E cada entrada é guardada no índice do vetorzão. E em seguida as entradas são passadas de volta para o vetor original. Então por exemplo queremos ordenar o seguinte vetor: 7 9 3 5 2 Nesse caso devemos alocar um vetor de tamanho 10 (pois o máximo é 9). As entradas do vetor original são passadas então para o vetorzão de modo que cada entrada fica em seu índice correspondente. O vetorzão vai ficar da seguinte maneira. _ _ 2 3 _ 5 _ 7 _ 9 (O índices marcados como '_' são índices vazios e na programação deve-se colocar um valor que não será utilizado no vetor.) Em seguida as entradas são repassadas para o vetor original percorrendo o vetorzão todo. No caso de entradas repetidas deve-se alocar uma matriz no lugar de um vetorzão. Cada índice do vetorzão é chamado de bucket. E pode-se utilizar intervalos ao invés de um bucket para cada número. Mas isso vai exigir a ordenação de cada bucket. É como armazenar dados para um histograma. Fonte: http://forum.baboo.com.br/index.php?/topic/666787-bucket-sort/ Não sei se ajudei muito.. mas foi o que consegui até o momento. No aguardo. -
Agortimo - vetor e matriz
Simon Viegas respondeu ao tópico de Rharison Lucas em Programação - iniciantes
Olá, O processo é o mesmo. Primeiro tente fazer apenas de uma matéria... -
Erro de sintaxe inesperado no visualg
Simon Viegas respondeu ao tópico de Luc0909 em Programação - iniciantes
Olá, Qual versão do VisuAlg está usando? testei aqui no 3.0 e funciona tanto com ",", tanto com ".". -
Lógica de programação // visualg
Simon Viegas respondeu ao tópico de Dayvson Lucas em Programação - iniciantes
Olá, Qual a sua dúvida? Por favor, poste o que já conseguiu fazer e onde precisa de ajuda. No aguardo. -
Agortimo - vetor e matriz
Simon Viegas respondeu ao tópico de Rharison Lucas em Programação - iniciantes
Olá. Primeiro, tente implementar o conceito de "maior nota" separadamente. Tendo X valores, como identifico qual o maior? Então, uma forma seria ter uma variável que armazena o menor valor possível, ou o primeiro valor, e vai comparando ela uma a uma com cada valor restante... se for maior, atualiza essa variável com o valor atual... no final, essa variável vai ter o maior valor. Outra forma é ordenar o vetor de forma decrescente... o primeiro será o maior... No aguardo -
Soma de números decimais no visualg
Simon Viegas respondeu ao tópico de alexsamaralns em Programação - iniciantes
Olá Testei aqui, não deu erro. Qual versão do VisuAlg está usando? teste na 3.0 -
Desenvolver um algorítimo para instalação de postes
Simon Viegas respondeu ao tópico de Marcela Host em Programação - outros
Olá. Vocês inicialmente precisam entender o que o enunciado está pedindo... Seriam 3 dados de entrada? ex.: tamanhoRua; quantidadeIndustrias; numerosLocalizacaoIndustrias; No caso, dê exemplos de valores para essas variáveis, e quais seriam os resultados esperados... ex.: tamanhoRua=1260 quantidadeIndustrias=2 numerosLocalizacaoIndustrias=320 e 800 Qual seria a resposta? Só depois, pensa em como converter para Pascal. No aguardo. -
Olá @Laize Neves, Você precisa escrever o "elemento comum", não a posição do elemento. ou escreval (vetA[ii]) ou escreval (vetA[jj]) Sugiro dar mais atenção a identação... no meu padrão ficaria assim: var ii,jj: inteiro vetA : vetor[1..5] de inteiro vetB : vetor[1..8] de inteiro inicio // Seção de Comandos para ii de 1 ate 5 faca escreva ("Digite o ",ii," número : ") leia (vetA[ii]) fimpara para jj de 1 ate 8 faca escreva ("Digite o ",jj, " número : ") leia (vetB[jj]) fimpara para ii de 1 ate 5 faca para jj de 1 ate 8 faca se (vetA[ii] = vetB[jj]) então escreval (vetA[ii]) fimse fimpara fimpara É necessário deixar visualmente claro que determinadas instruções estão dentro de outras... Obs.: "ii" e "jj", pois o i entre colchetes está sendo interpretado como itálico. No aguardo.
-
Olá @leolimaf, Vamos lá... RESUMIDAMENTE SERIA O se precisa de um valor lógico para decidir se devia o caminho ou não da execução do programa..., se o valor for VERDADEIRO, ele executa as linhas dentro do se, se for FALSO não executa. No caso do SE/SENAO, se o valor lógico for VERDADEIRO, ele executa o que está no SE, e pula o SENAO. Se o valor lógico for FALSO, ele pula o SE e executa o que tem no SENAO. Sugiro que tente fazer e poste sua resposta aqui e/ou possíveis dúvidas... VERSÃO EXTENDIDA Para esse exercício, você basicamente necessita ter conhecimento no comando "SE" ("Comando de Desvio Condicional" ou "Estrutura de Seleção") e no conceito de "Valor lógico". O próprio VisuAlg tem uma "referência" que ajuda a explicar esses conceitos... basta ir em Ajuda/Referência da Linguagem do VisuAlg (atalho Ctrl+Alt+H). Lá procura por "SE" e por "LOGICO". Vale dar uma pesquisada no Google também. Vou tentar dar uma explicada sobre nos conceitos e afins... Então, de um modo geral o "computador" vai executar o código compilado seguindo em ordem os comandos, no caso "da esquerda para direita, de cima para baixo" (da mesma forma como lemos um texto, por exemplo). O comando se vai servir para possibilitar o programa ter mais de uma rota, ou seja, executar determinada instrução a depender de uma condição!!! Algo como: "se determinada condição for verdadeira, execute a próxima instrução depois de mim, caso a condição seja falsa, pule a instrução depois de mim". Vai funcionar como o nome sugere: "desviando condicionalmente". O se/senao é semelhante, mudando apenas para "se condição verdadeira, execute o que vem depois de mim e pule o que está no senao, caso contrário pule o que vem depois de mim, execute o que está no senão". (ou executa uma coisa, ou executa a outra). Em relação ao valor lógico, seria resumidamente "algo", no caso, "um tipo de dado", que só tem 2 valores possíveis. Que por definição é true ou false (verdadeiro ou falso). O comando "se" utiliza desse "tipo de dado" para justamente decidir para qual "desvio" o programa vai seguir... Se usarmos um valor fixo no se, como "se (verdadeiro) então", o comando perderá o sentido, pois SEMPRE verdadeiro vai ser verdadeiro e SEMPRE vai executar o que vez depois... logo não precisaria ter um se (já que SEMPRE vai desviar para o mesmo caminho, é melhor logo não ter nenhum comando tentando controlar)... Daí, é necessário que esse valor, utilizado no se, seja "variável"... que dependa de algo... ai que que entra as "expressões lógicas". As expressões lógicas seriam algo que após serem calculados, sempre retornem o tipo de dado lógico, no caso TRUE ou FALSE. Para isso, elas (as expressões lógicas) utilizam de outro recurso, chamado "Operadores Relacionais" (=, <, >, <=, >=, <> ). Ex.: 2>5 (false). 4*4=16 (true). Nos exemplo, também foi utilizado outro conceito chamado "Operadores Aritméticos" (sinal de +. Consulte os outros lá na referência). Outro conceito que também pode ser utilizado é o "Operadores Lógicos" (vide referência).... Enfim, Ai termos "a)se condicao1 <- verdadeiro, condicao2 <- verdadeiro, condicao3 <- falso, quais os comandos que serão executados?" , ele está utilizando de "Comando de Atribuição" (No caso o <- ) para "atribuir o valor que está na direita, na variável que está na esquerda... (a variável condicao1 vai ter o valor verdadeiro) Ex.: condicao1 <- verdadeiro se (condicao1) então comando1 Como o que está em parênteses resulta em verdadeiro, logo vai executar o que vem depois...daí é só seguir os princípios de "executar" ou "pular" para cada se. No aguardo.
-
Estrutura de repetição enquanto no visualg
Simon Viegas respondeu ao tópico de luismatheusbs15 em Programação - iniciantes
Olá @luismatheusbs15, Você não pode fechar o enquanto, antes de fechar o se que está dentro dele. -
Olá @leonardo de souza Além das sugestões do @devair1010, esse conjunto de "se" devem ficar dentro de repeat, mais precisamente entre o "leia(i)" e o "escreval("você quer continuar?"[S/N]"), ou seja: 1) ler o número; 2) verifica e mostra o intervalo do número 3) pergunta se quer repetir
-
Olá @T635. Vou tentar explicar uns conceitos inicialmente. Veja, o Pascal ler as instrução "da esquerda para direita - de cima para baixo"... ou seja, exatamente da mesma forma que fazemos leitura de textos. No Pascal, o que separa os comando é o ";". Ex.: o primeiro código poderia ficar assim: begin writeln(n+1); n:=n+1; end; Ou tudo numa linha só... tanto faz... A ordem de execução será exatamente a mesma... (como explicado acima). Além dessa "regra", quando temos uma operação dentro de uma função (no exemplo o writeln), a operação (calculo) é efetuada primeiro, e depois é lançado o resultado na função.. ex.: writeln (n + 1); Primeiro soma "o valor de n com 1" e após é jogado o resultado no writeln, que por sua vez irá "escrever na tela"... veja! esse cálculo não altera o valor de n!!! Está trabalhando apenas com VALORES. Nesse contexto, o n é tratado como um número mesmo... (no caso o valor que está armazenado nele no momento da execução). Já n := n + 1;. O n da esquerda é tratado como um VARIÁVEL, e o n da direita como VALOR, ou seja, "a variável n vai ser igual o valor de n mais 1". Ex.: Sendo n=10. n=10+1, n=11! Até ai tudo bem? (nada de novo, apenas entendendo o processo) AGORA VAMOS A PARTE QUE INTERESSA Como já sabido, o Pascal segue uma sequência de leitura de instrução, logo, ao inverter a ordem dos comandos, consequentemente as operações serão executadas na nova ordem.. ou seja, antes exibe o resultado da soma, depois atualiza o n. No outro código, primeiro atualiza o n, para depois efetuar a soma.... Ex.: Código 1 Supondo n=8 writeln(n+1); //vai exibir 9 n:=n+1; //n vai ficar igual a 9 Código 2 Supondo n=8 n:=n+1; //n vai ficar igual a 9 writeln(n+1); //vai exibir 10 (pois nesse momento, o n está igual a 9 já) No aguardo.
-
@BeeTx, vamos lá. O código da sua postagem está incompleto... analisando ele, fiz alguma modificações que creio que "consertam" ele. PROGRAMA aps2EX1a; Var Inteiro: num[10],i,x,y; Início x=1; y=2; num[x]=y*y; num[y]=x; num[x+y]=num[x]; num[6]=num[1]+num[3]; num[num[x]]]num[6]-num[y]; num[x+y]=x*y; num[3+4]=num[6]*2; num[x-1]=x+y; num[num[x]+1]=num[x]+num[y]; num[num[6]+1]=num[6+1]; num[4*2]=num[9]-num[7]+x; Para (i de 1 até 9 passo 1) faça Escreva(num[i ]); FimPara; Fim. Em relação ao Teste de Mesa, creio que seja basicamente você "simular os passos do programa e registrando as mudanças na variável". Antes de começar, dê uma pesquisada sobre o assunto e se aprofunde um pouco mais... (vou tentar explicar baseado nesse conceito simples) No papel, você escreve as variáveis num[1]= num[2]= num[3]= num[4]= num[5]= num[6]= num[7]= num[8]= num[9]= num[10]= i = x = y = Daí, você vai executando cada linha do algoritmo e efetuando as modificações correspondentes nas variáveis, exemplo: x=1; Dai, a variável no papel passa a ter esse valor: num[1]= num[2]= num[3]= num[4]= num[5]= num[6]= num[7]= num[8]= num[9]= num[10]= i = x = 1 y = E assim sucessivamente... na próxima, y=2... Na linha num[x]=y*y;, temos que a variável num, na posição x, vai ter o valor y*y, ou seja, num[1]=2*2 (já que x vale 1, e y vale 2). Logo, num[1]=4. Na próxima temos num[y]=x;, logo num[2]=1. Na próxima temos num[x+y]=num[x];, logo num[3]=4. Na próxima temos num[6]=num[1]+num[3];, logo num[6]=8; (4+4) etc No para basta seguir a orientação. O i começa com 1. Escreve "na tela" o num[1]. Depois, i vale 2, logo escreve o num[2]... etc No aguardo.
-
@Vinícius RM, antes de qualquer coisa, peço que quando for pedir auxílio, coloque também o código em forma de texto, para facilitar os possíveis testes. Para facilitar, disponibilizo abaixo: Algoritmo "semnome" var temperatura: inteiro Inicio escreva ("Digite a temperatura em graus celsius") leia (temperatura) se (temperatura <= 15) então escreva ("MUITO FRIO") senao se (temperatura > 15) .e. (temperatura <=23) então escreva ("FRIO") senao se (temperatura >23 ).e. (temperatura <=30) então escreva ("CALOR") senao escreva ("MUITO CALOR") fim_se Fimalgoritmo Vamos lá.. O próprio erro informado na imagem já sugere um dos erros... "Esperava encontrar FIMSE". Ou seja, o termo correto é fimse e não fim_se! Um outro ponto é que cada se necessita do seu próprio fimse. Como é algo bem simples, abaixo já demonstro: Algoritmo "semnome" var temperatura: inteiro Inicio escreva ("Digite a temperatura em graus celsius") leia (temperatura) se (temperatura <= 15) então escreva ("MUITO FRIO") senao se (temperatura > 15) .e. (temperatura <=23) então escreva ("FRIO") senao se (temperatura >23 ) .e. (temperatura <=30) então escreva ("CALOR") senao escreva ("MUITO CALOR") fimse fimse fimse Fimalgoritmo Obs.: A forma como você identou os se também é válida, mas fazendo dessa forma como demonstrei, fica mais clara e, na minha opinião, mais elegante, pois fica mais fácil de identificar os elementos e senão também os 3 fimse ficariam um em cima do outro... No aguardo.
-
@Fernando Marcelino, apenas identei o código... veja: algoritmo "2" var numero1, numero2 ,numero3: inteiro inicio escreval("escreva numero1") leia(numero1) escreval("escreva numero2") leia(numero2) escreval("escreva numero3") leia(numero3) se (numero1 > numero2) então escreval("o numero maior é :",numero1) senao se (numero2 > numero1) então escreval("o numero maior é:",numero2) senao se (numero3 > numero1 e numero2) então escreval("o numero maior é:",numero3) senao se (numero1 = numero2 = numero3) então escreval("os numeros sao iguais") fimse fimse fimse fimalgoritmo Repare que faltou um fimse, o que é correspondente ao primeiro se. Ficaria assim: ... fimse fimse fimse fimalgoritmo PS: ao compilar aqui no VisuAlg 3, o próprio compilador informar que "Esperava encontrar um FIMSE". No aguardo.
-
Olá. Poste os que já conseguiu fazer e onde está com dúvidas.
-
Problema com string em pascal.
Simon Viegas respondeu ao tópico de Pedrohtico em Programação - outros
Talvez o problema esteja no uso do read (sem o ln). De certo modo NUNCA* use read, USE SEMPRE readln!! Um pouco mais sobre aqui --> Qual a diferença entre READ e READLN ??? . No aguardo. -
Cadastro com código pascal
Simon Viegas respondeu ao tópico de Leonardo Teixeira em Programação - outros
Olá. Abaixo, seu seu código identado, para facilitar a leitura... Program cadastro_aluno; var responsavel: array [1..60] of string; nota_ano: array [1..60] of integer; nota_bimestre1: array [1..60] of real; nota_bimestre2: array [1..60] of real; nota_bimestre3: array [1..60] of real; nota_bimestre4: array [1..60] of real; sexo: array [1..60] of string; opcao: STRING; nome: array [1..60] of string; tel: array [1..60] of string; endereco: array [1..60] of string; idade: array [1..60] of integer; z: array [1..60] of integer; //chave primaria cont: integer; x, y: integer; //contadores Begin //codigo := 1; x := 0; Writeln ('>>>>>>>>>CADASTRO DE ALUNOS<<<<<<<<<< '); writeln (' '); writeln ('1-Incluir'); writeln ('2-Corrigir'); writeln ('3-Consultar'); writeln ('4-Excluir'); writeln ('E-Sair'); writeln (' '); writeln ('Digite a opção'); read (opcao); writeln (' '); while opcao = '1' do //for codigo := 1 to 60 do begin x := x + 1; for x := 1 to 60 do writeln (x); writeln ('Entre com o nome do aluno : '); read (nome [x]); writeln (' '); writeln ('Entre com o telefone: '); read (tel [x]); writeln (' '); write ('Entre com o endereço do aluno:'); read (endereco [x]); write ('Entre com a idade do aluno:'); read(idade [x]); write ('Entre com o sexo do aluno:'); read(sexo [x]); write ('Entre com o responsável do aluno:'); read (responsavel [x]); write ('Insira a nota do 1o bimestre: '); read (nota_bimestre1 [x]); nota_ano := nota_ano + nota_bimestre1 ; write ('Insira a nota do 2o bimestre: '); nota_ano := nota_ano + nota_bimestre2; read (nota_bimestre2 [x]); write ('Insira a nota do 3o bimestre: '); nota_ano := nota_ano + nota_bimestre3; read (nota_bimestre3 [x]); write ('Insira a nota do 4o bimestre: '); nota_ano := nota_ano + nota_bimestre4; read (nota_bimestre4 [x]); writeln ('Deseja incluir mais um aluno?'); writeln ('1-Incluir'); writeln ('E-Sair'); read (opcao); if opcao = 'E' then BEGIN exit; end; end; End. Só vou reforçar o que já foi dito e um pequeno detalhe... 1) USO DE ARRAYS Faltou definir as posições no array em alguns trechos, exemplo: nota_ano := nota_ano + nota_bimestre1 ; Basicamente seria: nota_ano[x] := nota_ano[x] + nota_bimestre1[x] ; 2) READ x READLN Vou ser direto: não use read, use apenas readln! *** Daí, vai refazendo os ajustes... -
Olá. Testou para ver se funciona? Se for string, ou algo do tipo, tente usar um "+" em vez de vírgulas. Ou alguma forma de concatenar esses dados. Obs.: Se as vírgulas em si também fizer parte do texto a ser construído, teria informar isso tb... algo como: 'ItemsToWin'+','+s1+','+s1+'etc'
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