-
Posts
3.940 -
Cadastrado em
Tipo de conteúdo
Artigos
Selos
Livros
Cursos
Análises
Fórum
Tudo que Simon Viegas postou
-
Olá @Igorc., por favor, poste aqui o seu código "final" para analisarmos e também poder servir de base para outros usuários do Fórum. Observações: Lembrando que o enunciado tem REQUISITOS, e eles devem ser seguidos... 1) Não encontrei a parte que lê o CPF; 2) Se atente também no requisito de "zerar a variável" (para quê? não sei! o que importa que está pedindo). A princípio você poderia usar um se/senão; 3) Vale lembrar que o salário mensal NÃO inclui o salário excedente, ou seja, dá para por exemplo concluir que salário mensal vai ser no MÁXIMO R$500. No aguardo.
-
(exercício) tirar média e verificar qual é maior
Simon Viegas respondeu ao tópico de Eric Pulquerio em Programação - outros
@FAWAUGHAN, acho que é por ai. Mas tem outros requisitos: -
Não conheço a linguagem Lua, mas possivelmente poderá usar o conceito de "threads" (para multitarefas). Qualquer coisa dá uma pesquisada enquanto aguarda...
-
Olá, vou tentar expandir... @ET Bilu, a primeira coisa para se resolver um problema é entendê-lo. Me refiro a "entender" no sentido de "saber do que se trata", e não em "saber qual a solução". Isso parece óbvio, mas muitas vezes esquecemos disso! Estamos mais preocupados em achar um solução, do que entender o problema em si. Então, pela leitura do enunciado, encontramos a chave após o "...corresponde a", ou seja, no "quantos dados são inseridos pelo usuário(?)". Veja que nesse momento "nossa dúvida" se remeteria a saber o que são "dados inseridos pelo usuário". Oras! como o usuário insere dados no programa? pelo leia()!!! Logo, o enunciado poderia ser mais ou menos traduzido para: "quantas vezes o leia() é chamado". Entende?. Seguindo o raciocínio, analisando as respostas, saberíamos de cara que está fazendo uma referência ao "b". Logo: "quantas vezes o leia() é chamado em relação ao valor de informado para b"? Certo, agora sabemos mais ou menos do que se pede. Mas como descobrir? Ai vai da criatividade... (o que quem propôs o enunciado está te estimulando a fazer). Nesse caso, por exemplo, poderia fazer testes empíricos!!! Pego valores "aleatórios" para "b" e vejo no que dá! No caso, "executando" linha a linha do algoritmo e atribuindo um desses valores para "b" e contando quantos "leia()" foram executados. Com "b=1" dá 3; Com "b=2" dá 4; Com "b=3" dá 5; Veja que existe uma relação entre "b" e a "quantidade que um leia() foi executado", dando "o valor de b"+2. Pronto: achamos a resposta! Obs.: Mas veja que essa resposta foi válida para alguns valores (e não "todos"). Mas como "deram certo alguns valores" supõem-se que é "A RESPOSTA" certa, já que não tem alternativa como "depende do valor de b", ou "para b>=1"... etc. Então, e para os outros valores, segundo para o mais infinito*? (veja que existe um limite para o programa, que vai depender do tipo dedado... acho que "inteiro" deve chegar até uns 32000 - eu não sei dizer)... acho que dá para concluir sem muitos problemas, que vai dar o mesmo resultado. Veja que "números inteiros" vão do menos infinito ao mais infinito. (lembrando que o programa tem limitação, creio eu que seria por volta de -32000 a +32000). E o enunciado não diz que é para apenas números positivo!!! Para o "0" continua sendo b+2? E para os números negativos, essa solução também é válida? Caso deseje, deixo essa verificação para você!
-
Exercício (algoritmo) envolvendo estruturas de repetição no visualg.
Simon Viegas respondeu ao tópico de la1207 em Programação - iniciantes
Você apenas está atribuindo um valor a soma, ou seja, ele vai ficar com o último resultado (9/10). Mas o que ele quer é a "soma dos valores". (valor atual+valor novo). Algo como: soma<-soma+((num-1)/num)) -
Problema com contador em visualg
Simon Viegas respondeu ao tópico de José Duarte de Barros Neto em Programação - iniciantes
Lento porque tem está escrevendo... (apagar seria tão trabalhoso quanto copiar) Não ia aguentar no sentido de "iria diminuir bastante a vida útil". HD iria trabalhar muito mais. -
Problema com contador em visualg
Simon Viegas respondeu ao tópico de José Duarte de Barros Neto em Programação - iniciantes
Resumidamente seria... Se não inicializar, vai ficar com o que tem lá na memória ("lixo"). Só que é automático... Segue um padrão. 0 para número (integer), '' para caracteres (string), verdadeiro (true) para logico (boolean) etc... No VisuAlg, acho que inicializa ao declarar (não tenho certeza). Já no Pascal, inicializa ao executar o BEGIN (equivalente ao "inicio")... pelo menos era assim (tem um compilador chamado Turbo Pascal, que dá para usar um "debug" que fica monitorando as variável, como aparece no VisuAlg no canto direito. E via que zerava apenas quando o begin principal era executado). Veja, que os comandos são executados "da esquerda para direita, de cima para baixo". No Pascal, quando é utilizado funções (lá chama procedure e function), as variáveis locais (declaradas dentro da função) NÃO SÃO INICIALIZADAS, ou seja, se não inicializar, vai ficar com um valor "aleatório". Por que não inicializa lá? não sei!!! rs. Um exemplo de código: program testeMemoria; var //variáveis declaradas aqui são acessíveis por todo o código strGlobal:string; numGlobal:integer; procedure imprimirVariavel; var //variáveis declaradas aqui, só são vista dentro do procedimento ("função"). Inclusive pode até usar um nome igual a da Global!!! pois a Global não se enxerga a Local, logo não dando conflito de "nomes iguais". Se for igual, fica valendo o local (isso depende da liguagem) strLocal:string; numLocal:integer; begin writeln('String global: ',strGlobal);//exibe '' (o conteúdo entre as aspas, no caso, "nada") writeln('Numero global: ',numGlobal);//exibe 0 writeln('String local : ',strLocal); //aqui vai ter um texto "aleatório" (do lixo da memória). Aqui não sei porque aperece um comando do Notepad++, programa que eu uso! rs writeln('Numero local : ',numLocal); //aqui um número aletório, ex. 8732. end; BEGIN //aqui, as variáveis globais são automaticamente inicializadas imprimirVariavel; END. Mas veja, as variáveis que são "lidas do usuário" ou que não usam um valor atual, não vai fazer diferença... pois vai ter o valor novo que foi atribuído. Já variáveis que são "usadas" sem nenhuma atribuição antes, como valors, caro1, vivo etc, podem dar problema. Por exemplo: vivo<-vivo+1 Nesse caso, o comando é executado primeiro no que está no lado direito do "<-", logo, seria o "valor contido em vivo + 1". Mas qual é o valor atual? Como o compilador "zerou" para ele, vai ser 0! Senão seria, algo como 13415+1, e ai? O que ocorreu com o valors lá? o "valor inicial" para próximo loop está com o valor do loop anterior (lixo do loop). No primeiro loop funciona, pois o programa zerou para ele! Isso é um "recurso" que o cara que desenvolveu o VisuAlg disponibilizou! Senão teria que ficar zerando variável por variável!!! No Java eu não lembro... se não me engano, nem compila!!! Solicita a inicialização. (mas lá envolve outros conceitos relacionados a OO (orientação à objetos). A declaração de uma variável seria análogo a "formatação do computador" (do HD). No caso, "formatar" seria "organizar/preparar"... o processo de "apagar" é uma "consequência", ou seja, temos a sensação que "formatar" seria "apagar" os dados, mas apenas reorganiza logicamente a estrutura, no caso de acordo com um formato, como NTFS, FAT32 etc. Quando alguém pede para "formatar" o pendrive, pede no sentido de "apagar tudo", né? mas o apagar é uma consequência da formatação, não o motivo. Formatar serve para "atribuir uma estrutura", no caso se deixar igual, "reatribuir". Daí, o SO entende esse "formato" e trata os espaços de acordo. Veja, de fato os dados NÃO SÃO APAGADOS, funciona como perdesse apenas as "informações para ter acesso a esses dados", ou seja, os registros que dizem que "tal arquivo está em determinadas posições no disco". Tanto que existem programas que conseguem (tentam) recuperar arquivos que ainda não foram sobrescritos... e outros que "escrevem por cima" para evitar de serem recuperados... Outro fato fácil de verificar é na hora de APAGAR um arquivo com "shift+del". Experimente copiar um filme de um pendrive e depois apagar esse arquivo! O tempo de copiar é muito maior, correto? pois ao apagar, o SO apenas sinaliza como "excluído". É praticamente instantâneo (pois o arquivo ainda está lá, apenas não é mais referenciado). Já pensou todo vez precisasse escrever um monto de 0 em cima? não ia HD que ia aguentar!!! (fora o tempo) No caso das variáveis, ao declarar lá no var, o programador ordena o programa solicitar ao SO que reserve uma parte da memória (se não tiver espaço disponível, da pau, rs) e que esse espaço tenha determinada característica, de acordo com o tipo (type). Como se "formatasse um pedaço da memória". Então, assim como o "formatar", o SO apenas organizou e reservou a estrutura.. entende? o que tá lá, continua lá. (tb não perde tempo reescrevendo bit a bit, mesmo sendo a memória mais rápida). -
Problema com contador em visualg
Simon Viegas respondeu ao tópico de José Duarte de Barros Neto em Programação - iniciantes
Olá @José Duarte de Barros Neto. Comentando... A variável valors seria uma variável "individual", correto? ou seja, que está relacionado aos "valores do entrevistado no momento" (e não um "somatório de todos", ou algo do tipo). Daí, é necessário iniciá-lo antes de começar uma "nova entrevista", pois senão vai ficar com o valor antigo nele, como citado por @Joao_Lucaas. Teoricamente, você pode inicializar em qualquer momento que seja "antes de utilizá-lo" novamente... mas para fins práticos, você poderia utilizar logo no "início da entrevista". No seu caso, logo abaixo do enquanto. No início do loop, vai "zerar" tb logo para o primeiro acesso. (apesar de não precisar, mas deveria) O que significa "inicializar" nesse contexto? Basicamente seria "dar um valor inicial a algo"... no seu caso um "0" (valor inicial que você precisa, mas poderia ser outro valor qualquer, dependendo do contexto). Ex.: valors<-0 EXTRA Obs.: A princípio você deveria "inicializar" todas a variáveis de "somatório", ou seja, que funcionam como "valor atual + novo valor"!!! Pois o valor inicial da variável não necessariamente está com um valor desejado!. (as variáveis que recebem um valor novo até que não precisa, pois o valor novo vai substituir..) Obs.2: Para facilitar, a alguns compiladores "zeram" as variáveis automaticamente. As variáveis numéricas ficam com "0"; as de caracteres com "" ("nada escrito) etc. Veja, ao declarar uma variável, o "programa" apenas reserva um espaço na memória e define qual tipo de valores ele irá aceitar... daí, o que tiver lá na memória, ficará sendo como o conteúdo da variável, entende?... Mas geralmente ocorre o que citei acima!... ao executar o programa, são "inicializadas" automaticamente. (mas nem sempre será assim. Como visto em outras linguagens, ou como no Pascal, em "funções" - variáveis locais ). -
@dhichagas , o @devair1010 apenas corrigiu a sintaxe (fazer compilar corretamente). Você ainda precisa resolver a parte da lógica.. 1) Sobre sua dúvida Creio que esteja errado. Com esse novo código, tente refazer os testes. Primeiro você faz uma simulação "de cabeça", acompanhando a lógica do código e anota. Após, executa e compara se deu o resultado esperado... por ai vai. ** 2) Sobre a leitura dos dados Dá para solicitar a leitura dos 3 valores de uma vez só (separado por ENTER). Vide código abaixo. 3) Sobre a identação do se, pode ser feita assim também: Inicio // Seção de Comandos, procedimento, funções, operadores, etc... //leia L1,L2,L3 {deve ser digitado apenas as letras V ou F} escreva("Digite as 3 letras [ V ] ou [ F ] ") leia(L1,L2,L3) se L1="V" então escreva("A") senao se L2="V" então se L3="V" então escreva("B") fimSe senao escreva("C") escreva("D") fimSe fimse escreva("E") FimAlgoritmo **Basicamente deixei o senão alinhado com o seu respectivo se. Veja, a identação é de suma importância. Ela NÃO INFLUENCIA NA EXECUÇÃO DO PROGRAMA, mas serve como referência para o programador! Só de olhar para o código, dá para ver como vai se comportar!!! Ela deve sempre ser feita de acordo com o código, e não de acordo com o que você pretendia! (ou seja, se você identar, e ver que não está de acordo com o que deseja, você precisará corrigir o código. Obs.: O ideal é já programar deixando identado!!! No aguardo.
-
Separação de dados em varios arquivos txt
Simon Viegas respondeu ao tópico de chronoghs em Programação - outros
Acho que dá para fazer basicamente em qualquer linguagem de programação que utilize arquivos... em .bat não sei se dar para fazer, talvez dê! Eu não entendi para que serve esse "k", teria como postar um exemplo real? Em fim, um algoritmo para efetuar essa tarefa de separar seria algo do tipo: - leia a linha; - vá imprimindo caractere por caractere dessa linha num arquivo, mas a cada "espaço" insira um "enter" (pular linha). No final terá o arquivo como deseja. Ai entraria a parte de ir verificando a sequência de arquivos... que daria para fazer utilizando loops e uma variável auxiliar. Em Pascal/Delphi dá para fazer. -
Algoritmo em portugol (.alg)
Simon Viegas respondeu ao tópico de Francisco Sancho em Programação - iniciantes
Vá reidentando seu código... vai encontrar os erros. Exemplo de padrão: algoritmo "Jogo De Escolhas, BraSim" // Função : Criar um Simulador do Brasil para o Augusto jogar // Autor : FranZ // LittleJimmy // Data : 28/08/2016 // Seção de Declarações : Agradeço a Deus por me deixar viver pra fazer isso var nome: caractere cidade: caractere escolhas: inteiro dinheiro: inteiro escolhas2: inteiro escolhas3: inteiro escolhas4: inteiro inicio // Identificação do personagem escreval("BEM VINDO AO SIMULADOR DE BRASIL v0.0.1 (Alpha)") escreval("OLÁ, EU SOU O BRASIM, UMA ENTIDADE GENÉTICA SUPERIOR") escreval("Humano, por favor, identifique-se") escreval( ) leia (nome) escreval( ) escreval("Então, seu nome será: " ,nome) escreval( ) escreval("Humano, escolha uma dessas duas cidades") escreval("Acre (1), Ceará(2)") leia (escolhas) escreval( ) se escolhas = 1 então escreva ("Então, você " ,nome) escreval(" nasceu no Acre, na pacata cidade de Alagoinha") escreva ("Como um bom jovem, de 21 anos ") escreval(" seu objetivo é se tornar bem sucedido na vida") escreval( ) escreval("-------------------SUA JORNADA COMEÇA AQUI-----------------------") escreval( ) senao se escolhas = 2 então escreva ("Então, você " ,nome) escreval(" nasceu no Ceará, na pacata cidade de Senador Sá") escreva ("Como um bom jovem, de 21 anos") escreval(" seu objetivo é se tornar bem sucedido na vida") escreval( ) escreval("----------------SUA JORNADA COMEÇA AQUI-----------------------") escreval( ) senao escreval("Entenda, sou uma entidade genética superior, não um deus bondoso e paciente") escreval("Reinicie e jogue pelas regras, ou então nem jogue") fimalgoritmo fimse fimse (CONTINUE A IDENTAÇÃO PARA O TRECHO ABAIXO) // A Aventura se inicia escreva ("Você Atualmente tem" ,dinheiro + 0) escreval(" em dinheiro") escreval( ) escreval("Você está morrendo de fome, mas se quiser sair") escreval("Desse país tem que trabalhar") escreval("Deseja comer (1) ou ir trabalhar(2) ?") leia (escolhas2) escreval( ) se escolhas2 = 1 então escreval("Você come um pedaço enorme de Pão Doce") escreval("Você sente que pode sobreviver mais um dia") escreval( ) senao se escolhas2 = 2 então escreval("Você vai pro trabalho sem comer nada") escreval("Você tem um colapso durante o expediente") escreval("Você morre") fimalgoritmo senao escreval("(CARA, SÉRIO QUE VOCÊ QUER ME TROLAR?)") escreval("Você tropeça e cai numa poça de ácido clorídrico") escreval("Por desrespeitar as regras do jogo, você morre, lenta e dolorasamente") fimalgoritmo //isso é só uma trollagem mesmo fimse fimse escreval("Uma passagem para países gringos custa 1500g") escreval("Você começará o seu novo emprego amanhã as 8:00 am.") escreval("está tarde, deseja sair(1) ou ir dormir? (2)") leia (escolhas3) se escolhas3 = 1 então escreval( ) escreval("Você resolve dar uma caminhada ao ar livre") escreval("Você se depara com uma senhora idosa te pedindo ajuda pra atarvessar a rua") escreval("vai ajudar(1) ou deixar a senhora sofrer(2) ?") leia (escolhas4) se escolhas4 = 1 então escreval( ) escreval("Quando você se aproxima a Velha saca uma arma e anuncia o assalto") escreval("Você não tem dinheiro") escreval("A velha te dá um tiro e dois chutes na costela") escreval("um morador chama o SAMU") escreval("você não tinha plano de saúde") escreval("os médicos te deixam morrer") escreval("Você morre") fimalgoritmo senao se escolhas4 = 2 então escreval( ) escreval("Você deixa a velha para trás, sofrendo com as dores da idade") escreval("Sua atitude egoísta atraiu uma má fama para a cidade") escreval("Seus pais ficam sabendo disso e te renegam como filho") escreval("você entra em depressão profunda e se mata") fimalgoritmo senao se escolhas3 = 2 então escreval( ) escreval("você se deita na cama") escreval("Você sonha com um lindo futuro, com um bom emprego e uma linda familia") escreval("Você tem uma ótima noite de soono") escreval("--------------------- Fim do 1º dia ----------------------------------) senao escreval("Eu odeio babacas como você") escreval("Você tropeça e cai num bueiro") escreval("Você descobre que a lenda do RATOzomem era real") escreval("Você é devorado por Igor, o ratozomem") escreval("você morre") fimse fimse fimalgoritmo -
Jogo da forca pascalzim/devpascal
Simon Viegas respondeu ao tópico de UniversoTempo em Programação - outros
Olá. 1) para leitura de string não utilize read, use apenas readln(). Ex.: read(PeD.palavra); Para readln(PeD.palavra); Mais sobre aqui: 2) você está lendo a "Palavra", escrevendo no arquivo, e depois lendo a "Dica" e escrevendo em outra posição... O mais correto seria ler a "Palavra" e "Dica", e escrever no arquivo... (cada PeD tem sua palavra e dica, por isso estão em record). 3) um conceito fundamental da "Estrutura de Dados" é que "se algo está sendo armazenado, de alguma forma ela pode ser recuperada" (estou descrevendo com minhas palavras). No caso, você está armazenando as palavras e não está utilizando depois! (logo não faz sentido armazenar)... No caso, ou você carrega os registros do arquivo para o vetor, ou ler apenas o registro que precisa direto do arquivo (seek). Acredito que ler diretamente seja melhor para esse caso. 4) Lembre-se sempre de apagar o arquivo antes de abrir o programa novamente (lá do c:\)... outra forma seria insirir um comando para ZERAR o arquivo no programa, pois cada vez que você utiliza o menu 1, ele continuará utilizando o mesmo arquivo, mesmo se fechar e abrir o programa. *** Por ai vai.. No aguardo. -
Arquivo .bat para simular click do mouse
Simon Viegas respondeu ao tópico de FernandoCP em Programação - outros
Entra em contato com a equipe de TI da empresa... esse bloqueio deve ser uma "diretiva". Pode ser que ser possível desabilitar para o seu usuário... -
Olá @aeddwd. Pelo que vi não precisa de várias variáveis. O processo funciona em cadeia, veja: Traduzindo ficaria algo assim: <VALOR_QUE_PRECISO_AGORA> = <VALOR_ATUALIZADO>/<FATOR> resto = <VALOR_ATUALIZADO>%<FATOR> se(<VALOR_QUE_PRECISO_AGORA> > 0){ Só entender o conceito e fazer isso para mês e dia. *** Tente fazer essa operação de cabeça... funciona mais ou menos assim: "quantos anos cabem nesse valor? tirando os possíveis anos, quantos meses cabem no que sobrou? tirando os meses, quantos dias cabem no que sobrou?"..... e daria para continuar... "tirando os dias, quantas horas cabem no que sobrou? tirando as horas, quantos minutos cabem no que sobrou? tirando os minutos, quantos segundo cabem no que sobrou? tirando os segundos, quantos........" (o processo poderia ser infinito!!!).. No aguardo.
-
Olá @aeddwd, o tente seguir o mesmo raciocínio para todas as conversões... Como você passou te "total" para "ano"? De "ano" para "meses" seria a mesmo princípio! De "meses" para "dia" idem! O mesmo vale para os "se", a condição para "escrever ou não" parte da mesma base!!! (mesmo usado em "ano") No aguardo.
-
Pesquisar uma palavra dentro de uma frase
Simon Viegas respondeu ao tópico de rovoliveira em Programação - outros
@rovoliveira, Se você pode usar uma "função" pronta, poderia utilizar o conceito do exemplo usado por @sergiolopessp. Daí poderia usar uma estrutura de seleção (if) para verificar se deu ou não diferente de 0 (e exibir "Verdadeiro" ou "Falso"). Se não poder usar, você poderia verificar letra por letra... veja, uma string no Pascal funciona como um array de char, ou seja, cada letra da "frase" pode ser acessada utilizando a "coordenada" pelo '[]', exemplo: frase:='Forum do Clube do Hardware'; wrinte(frase[10]); //vai exibir um 'C' (10a letra) Daí é só montar a sua lógica! Outro comando útil: tamanho:=Length(xxx); //retorna o tamanho da string, no caso "quantidade de caracteres". (Vai de 0 a 255) No aguardo. -
Separar palavras de uma string em pascal sem uso de funções
Simon Viegas respondeu ao tópico de Paula Minaré em Programação - outros
Olá @rovoliveira, Ficou legal o código. Simples e objetivo. Sugiro se atentar um pouco na identação (alinhamento do código), abaixo um exemplo (e compare com o seu postado acima): Program Pzim ; uses CRT; var {f, frase :string;} frase :string; i, letras:integer; BEGIN writeln('Digite uma frase'); readln(frase); letras:=Length(frase); for i := 1 to letras do begin if frase[i] = ' ' then writeln(frase[i]) else write(frase[i]); end; ReadKey; //dar um pause antes de fechar (no meu compilador, o FPC, ao chegar no END., fecha e não dá para ver o resultado!) END. Outra forma de identação: Program Pzim; uses CRT; var frase :string; i, letras:integer; BEGIN writeln('Digite uma frase'); readln(frase); letras:=Length(frase); for i := 1 to letras do begin if frase[i] = ' ' then writeln(frase[i]) else write(frase[i]); end; ReadKey; //dar um pause antes de fechar (no meu compilador, o FPC, ao chegar no END., fecha e não dá para ver o resultado!) END. Caso deseje, tente fazer como pede o enunciado: No caso exibindo o resultado como nessas 5 linhas acima.... No aguardo. -
Olá @Anderson Eiji. 1) Armazenando em inconformidade Ele está pedindo para armazenar os caracteres, não os códigos deles! 2) Resultado não exibindo como solicitado Aqui não funcionou... tá exibindo apenas números, mas deveria exibir "os caracteres ordenados". *** Pelo enunciado, o armazenamento e exibição dos caracteres são feitos normalmente... a Tablea ASCII entra na hora de ordenar, ou seja, "compara a ordem utilizando o código dos caracteres". (em vez de comparar a conteúdo da posição direto, compara o código do caractere) No aguardo.
-
O seu programa não está funcionado aqui... não está imprimindo corretamente... Abaixo algumas dicas/sugestões: 1) Dá para simplificar o processo de cadastrar mais de um. Apenas precisa saber quantos quer cadastrar e se tem espaço suficiente. E vai adicionado pelo inserir(). obs.: Não faz diferença se não tem nenhum cadastrado ou não. Ex.: Quero adicionar 5. Leio o valor e adiciono pelo inserir() cinco vezes. FIM. procedure inserir(x:TipoItem; var elemento:TipoLista); begin elemento.Item[elemento.Ultimo]:=x; elemento.Ultimo:=elemento.Ultimo+1; end; Obs.: Seria bom colocar uma verificação se tem espaço ou não dentro do inserir. 2) Você precisa calcular o total de elementos cadastrados, o elemento.ultimo NÃO CONTÉM o total de elementos! Para calcular, teria que fazer a conta da quantidade de posições entre .Primeiro e .Ultimo. Obs.: no seu caso, o .Ultimo (-1) corresponde ao total, mas seria considerado um erro de lógica!!! (veja item 3!) 3) Pelo fato de está utilizando .Primeiro e .Ultimo sugere que essa lista é seria uma FILA, ou seja, que utiliza o conceito de FIFO (já que necessariamente só mudaria o valor do "primeiro" e do "último", sempre tendo preenchido os valores entre eles) Mas não está utilizando a parte da remoção (saindo da fila), logo sendo uma simples lista mesmo... Daí, para corrigir, seria melhor tirar a variável .Primeiro (que não está sendo usado pra nada) e alterar o .Ultimo para .Total !!! Assim fica correto...E a variável passaria ter de fato o total (-1). Obs.: Não pode ser uma PILHA, pois nela o ".primeiro" não se altera!! O máximo que poderia ocorrer é misturar os conceito, como "pode sair pelo início, ou pelo fim.. veja, no conceito de LISTA em si, não existe essa limitação de sair de um lado ou de outro!!! pode sair de qualquer lugar, entende? Só as FILAS, e as PILHAS, que tem suas respectivas características "fixas" (se não usar, deixa de ser... tipo, se tem uma FILA, e sai alguém do meio, não é mais fila!!! Sacou?). *** Tem outros pontos, mas sugiro que tente corrigir esses. A depender iríamos vendo mais! No aguardo.
-
@Anderson Eiji, em tese sim. Não sei dizer se ficaria "mais pesado" ou não para rodar (acho que na prática a diferença é imperceptível), mas seria de fato mais passos a serem executados pelo código, ou seja, não necessariamente mais passados pelos processador, pois o array em si também tem a sua complexidade, a diferença é que é pronta e transparente!! Para acessar as posições poderia usar uma function... algo como... funtion retornaPosicao(pos:integer; elemento:^Apontador):^Apontador; Obs.: não sei dizer se funciona com ponteiros diretamente assim (sem usar um type) ou mesmo se funciona com ponteiros... mas seria algo assim.
-
Olá. Explicação no trecho abaixo...: procedure inserir2(var elemento: TipoLista); //arrumar, pois não está mostrando para imprimir var i,k: integer; x : TipoItem; begin writeln(' digite uma quantidade de elementos, sendo menor que 255.'); //tem que ser menor do que o sobrou!!! [Simon.Viegas] write (' quantos elementos serão digitados?: '); readln(k); if (k > 255) then //maior que o que sobrou [Simon.Viegas] while (k > 255) do //idem obs.: não precisa do if acima, o while já faz esse papel! (a não ser que precisa do else) [Simon.Viegas] begin writeln(' digite uma quantidade de elementos, sendo menor que 255.'); write('quantos elementos serão digitados: ');readln(k); end; writeln; for i:=elemento.Ultimo to k do begin write('digite o elemento a ser ordenado e tecle <ENTER>: '); readln(x.Chave); elemento.Item[i]:=x; //seria necessário ir atualizando o último!!! mas seria melhor chamar o "inserir()". [Simon.Viegas] end; end; Observações em relação ao código em si. 1) O "elemento.Ultimo" não armazena o valor total de elementos, mas sim a posição do último elemento (no contexto apontando para próximo após o último). Para saber o total, teria que fazer uma contata entre o primeiro e a última posição! Creio que usar essa variável para esse fim (total), seria um erro! Daí, seria necessário também ajustar os trechos que usam esse informação (total de elementos). 2) Pelo que eu vi da sua lista, ela não é "encadeada", pois não existe (não identifiquei) encadeamento algum nela! Os "apontadores" estão apontando simplesmente para o início e fim da lista. O encadeamento seria se cada posição apontasse para o seu sucesso (encadeamento simples) ou para o seu sucessor e antecessor (duplamente encadeada), de forma que para acessar, por exemplo, a 4 posição, teria que acessar a primeira posição, que possua vez apontaria para a segunda, que apontaria para 3ª, que finalmente apontando para 4ª... (ou vindo da última, se for duplamente encadeada). Me corrijam se estou equivocado em algum ponto! 3) Antes de imprimir, seria necessário verificar se está vazio, inclusive você já implementou a função para isso.. 4) É necessário fazer alguns ajustes em relação ao total de posições disponíveis. Sugiro que diminua o MaxTam para um número menor, como 3! Ai faz o testes e vai ajustando! Por ai vai. *** No aguardo.
-
Certo... a primeira coisa a fazer é testar se armazenando corretamente. Um maneira simples de fazer isso é "imprimir" sem ordenar... Após confirmar isso, obviamente, o erro estará no ShellSort! Ai terá que dá uma revisada nele... No aguardo.
-
Olá @Anderson Eiji, Creio que faltou inicializar a LISTA, chamado o FazListaVazia() antes de adicionar: BEGIN FazListaVazia(elemento); ... Ou você coloca uma verificação antes de adicionar, no caso, sugerindo inicializar manualmente pela opção 3. No aguardo.
-
Visualg calcular soma total?
Simon Viegas respondeu ao tópico de john209 em Programação - iniciantes
Só precisa ver se pegou os valore corretos..
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