-
Posts
3.940 -
Cadastrado em
Tipo de conteúdo
Artigos
Selos
Livros
Cursos
Análises
Fórum
Tudo que Simon Viegas postou
-
Pascal lista encadeada em pascal
Simon Viegas respondeu ao tópico de Patriota_Programador em Programação - outros
Olá @Patriota_Programador. Vamos lá: Daí você está usando: Tem um pequeno equívoco, pois esse "intervalo de 3 a 40" refere-se à: ou seja, o vetor vai de 1 a X... Esse "3 a 40" se refere ao X. (ex.: de 1 a 6, de 1 a 32 etc). No seu contexto, o vetor iria de 1 a 40. (ou 0 a 39) Daí também fica faltando o principal: Cadê a lista encadeada? No aguardo. -
Pascal Calculador de equação de segundo grau, ora funciona, ora não
Simon Viegas respondeu ao tópico de NomeUnderground em Programação - outros
Olá. @NomeUnderground, alguns pontos importantes: O que seria essas "letras" ? talvez uma referencia melhor seria chamá-los de "constantes" (no caso: "constante a", "constante b" e "constante c" ) ou respectivamente «coeficiente quadrático, coeficiente linear e coeficiente constante ou termo livre». O Delta seria a "discriminante". Quem disse que b tem que ser transformado em um número negativo? na verdade, a fórmula simplesmente usa "-b", que por sua vez NÃO que dizer que está transformando em negativo (atenção nessa interpretação), mas sim usando o "oposto" ou "simétrico" (são coisas distintas). Pegue por exemplo b=-3, -b vai ser negativo? Essa informação sobre "x positivo" e "x negativo" não procede também. Apenas consta que x pode ter 2 «duas raízes reais e distintas» (ou «duas raízes reais e iguais» ou «não possuir qualquer raiz real») ... poderia chamar, por exemplo, de x1 e x2. Por sinal, você precisa tratar os casos especiais... como esses 3 citados em negrito acima, e também a questão citada por @Vitor Mattos: veja, se a=0, deixará de ser uma equação do segundo grau, pois "0" vezes "x^2" é igual a zero! (viraria uma equação de primeiro grau, já que o grau é medido pelo maior expoente de x)... Daí, ou você trata o caso, como você estava fazendo, ou estipula que não vai aceitar!!! De um modo geral, a sua verificação no seu primeiro código está no caminho certo, apenas não precisa do trecho do else. A fórmula para encontrar as raízes está errada, pois você está dividindo o numerador apenas por 2, e depois multiplicando o resultado por a, mas a fórmula diz que você precisa dividir todo numerador por 2*a (e não apenas por 2). (apenas coloque 2*a entre parênteses, para mudar a prioridade da operação). obs.: veja, dividir antes e multiplicar depois tem resultados diferentes nesse contexto. Daí, o Pascal segue a regra do PEMDAS. No aguardo. -
VisualG Algoritmo pra número primo
Simon Viegas respondeu ao tópico de Diego_Soares em Programação - iniciantes
Olá. Show de bola... Agora só refinar! Inicialmente segue algumas "correções": para Cont2 de 1 ate N faca N <- Cont1 //N está sendo utilizado no for. Deve evitar tentar alterar o valor dele* (apaga essa linha) se (N % Cont2 = 0) ENTÃO //use o próprio Cont1 no lugar do N *Não sei exatamente o comportamento do para no Visualg, pelo visto, pois mesmo alterando o valor de N, o programa está dando o resultado correto. Mas observe que esse N é o limite do laço, e ao dar um novo valor, teoricamente estaria alterando esse limite. Acho que em outras linguagens possa dar problema. Sugestões: - tente usar nomenclaturas de variáveis mais próximos do seu uso; (eu usaria "atual" no lugar de "cont1" e "divisor" no lugar de "cont2"...); obs.: com o "Ctrl+u" dá para substituir fácil fácil. - deixe o recurso de exibir os primos disponível, algo como: {escreval(Cont1)} //exibe na tela os primos primo <- primo + 1 No caso, caso queira visualizar os primos e fazer uma comparação ou algo do tipo, bastaria tirar as {}... ou mesmo deixa imprimindo mesmo (apesar de não ser solicitado); Acho que seria isso.. Ai, caso queira tentar implementar a tal divisão por primos, você poderia utilizar um vetor para ir armazenando o primos a medida que ia encontrando (lá mesmo onde está contando)... aí utilizaria o vetor na hora das divisões. PS: existe outra forma de achar primos, pelo Crivo de Eratóstenes, se quiser tentar também... Resumindo: O código já está excelente! Ai: - tentar implementar a divisão por primos; - tentar fazer outro algoritmo utilizando o Crivo de Erastóstenes. No aguado. -
VisualG Precisamos criar uma entrada e os cálculos para uma nota fiscal
Simon Viegas respondeu ao tópico de LnX2 em Programação - iniciantes
Caro usuário, Seja bem-vindo ao Fórum do 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 Fórum 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 Algoritmo pra número primo
Simon Viegas respondeu ao tópico de Diego_Soares em Programação - iniciantes
Olá. Essa parte: não pode está no seu código... você está usando uma sequência de números primos! Onde encontrou eles? Como você sabe que 3, 5, 7 etc são primos se é o seu programa é que deveria encontrar eles? Como disse: Não é coerente utilizar alguns primos já conhecidos para elaborar um algoritmo para encontrar outros primos, pois de onde veio esses 9 primos, poderia vir logo todos os outros primos que o programa iria encontrar!! No final das contas o programa não ia ter utilidade, já que já se teria a lista e poderia simplesmente contar os menores que 1000! Talvez tenha me expressado mal. Estou dizendo que um das possíveis de melhorias seria tentar fazer a divisão apenas por primos... mas que essa parte pode ser deixada para depois... ou mesmo não ser usada. A base do seu algoritmo está no primeiro código, teoricamente ela já funciona, ai você poderia ir inserindo possíveis melhorias, como as já encontradas. RESUMINDO: Seu primeiro programa já calcula os números, correto?... teoricamente ele já é EFICAZ (acha o resultado), mas pelo que foi observado não é EFICIENTE (demora muito). Daí, foi sugerido efetuar melhorias, como: - só verificar se um número é divisível até no máximo a raiz quadrada desse número (pois o segundo maior divisor não é maior que a raiz do próprio número); - a partir do 2, só verificar números ímpares (pois o único primo par é o 2); - ao encontra o terceiro divisor (além do 1 e ele mesmo), parar de tentar dividir (pois já não será mais primo); - efetuar divisões apenas por números primos (pois...)); <-- Essa melhoria por enquanto deve ser evitada (seria um desafio bônus!) obs.: Lembrando que segundo o que foi dito na primeira postagem, terá que utilizar PARA (não pode enquanto). Coloquei os itens acima em ordem de dificuldade, do mais fácil para o mais complexo. Ou seja, cada uma das MELHORIAS são INDEPENDENTES, cada uma delas tendem a tornar o algoritmo mais eficiente. Por exemplo, para testes, use esse código como base: Algoritmo "Contador de primos contidos numa faixa de números" Var Cont1, N, divisores, Cont2, primo: inteiro Inicio CRONOMETRO ON //para Cont1 de 1 ate 1000 faca para Cont1 de 1 ate 100 faca N <- Cont1 divisores <- 0 para Cont2 de 1 ate N faca se (N % Cont2 = 0) ENTÃO divisores <- divisores + 1 fimse fimpara se (divisores = 2) ENTÃO escreval(cont1) primo <- primo + 1 fimse fimpara escreval("Total de números primos: ", primo) CRONOMETRO OFF Fimalgoritmo Aqui, apenas inserindo o item 1, o algoritmo ficou 300ms mais rápido (de aprox. 800ms para 500ms). Cada item vai deixar o código mais rápido (ou não, é preciso testar)... como dito, são independentes, mas quanto mais itens implementar, mais rápido ficará... Experimente só inserir o 1 e ver a diferença. Depois só o 2 e ver a diferença... etc. Depois, tente combinar e ver quanto ganha em eficiência. DICAS: - item 1: "int(raizq(N)" - item 2: "N <- Cont1*2+1"; - item 3: "interrompa"; No aguardo. -
VisualG Algoritmo pra número primo
Simon Viegas respondeu ao tópico de Diego_Soares em Programação - iniciantes
Olá. Vamos direto a um ponto importante: primo <- 8 // Inicializa com o valor de '8' enquanto "para n1 de 1 ate 23 ou mais" O objetivo do programa é justamente encontrar os primos... daí não seria interessante utilizar primos já conhecidos... a proposta seria utilizar primos que o próprio programa já encontrou... veja, se você já está utilizando 8, o que te impediria de utilizar os X primos que existem do 1 ao 1000? daí nem precisaria de um programa, entende? Poderia por exemplo pegar essa lista e apenas contar quantos são menores que 1000. Mas não! Você precisa pegar cada um os 1000 números e verificar se é primo... ou por aí... Em relação as melhoras, deixe a parte do uso da divisão por primos para final. Por enquanto os outros pontos que já sabe: - o segundo maior divisor de um número natural é no máximo a raiz desse número (utilizar a "raiz de N" no processo); - com exceção do 2, todo número primo é ímpar (gerar lista de número ímpares); Tenta fazer o código com essas características posta aqui. No aguardo. -
VisualG Algoritmo pra número primo
Simon Viegas respondeu ao tópico de Diego_Soares em Programação - iniciantes
Olá. Obs. 1: eu utilizei o termo MDC, mas na verdade seria apenas MD, já que está se verificando apenas o "maior divisor" do número! Não cabe aqui o termo "comum", pois para ser "comum" teria que ter os divisores de outro(s) número(s) (para ai encontrar "o maior divisor comum entre eles"). Obs. 2: Na verdade não é exatamente o MD, já que o maior divisor sempre será o próprio número... como você mesmo trata no seu código: Ou seja, como não está dividindo por ele mesmo, a quantidade de divisores ficará com um a menos. Resumindo: você precisa encontrar o SMD (Segundo Maior Divisor), rs. Está dando para compreender até aqui? Vamos lá... o trecho abaixo: enquanto (C < Cont1) faca Pode ser traduzido como: enquanto (divisor_atual < limite_de_valor_para_o_divisor_que_eu_tenho_certeza_que_após_ele_NÃO_pode_ser_um_divisor) Ou seja, o valor do "divisor atual" não precisa ser maior que esse limite, pois sei que não será divisível. No seu caso, você deixou o limite como sendo o próprio número (Cont1), mas dentro do trecho faz uma verificação que impede passa da metade. se C * 2 >= Cont1 então //obs.: se fosse seguir o que o texto define, seria algo como "se C >= Cont1/2 então", entende? Matematicamente é mesma coisa Se observar o comentário acima, poderá perceber que poderia simplesmente fazer algo como: enquanto (C < Cont1/2) faca ou limite<-Cont1/2 enquanto (C < limite) faca Pronto.. primeiro tente ajustar o código para que façam testes até a metade do valor de N. Depois que tiver rodando liso, tenta encontrar um limite menor. Obs.: Para simplificar, em vez de usar: se divisores = 1 então divisores <- divisores + 1 C <- Cont1 Use lá em baixo: se divisores+1 = 2 então primo <- primo + 1 fimse Sacou? Ou mesmo inicialize o C com 1, para que comece a dividir a partir de 2, pois por um sempre será divisível (cálculo desnecessário). Daí, o se acima ficaria com "divisores+2" (pois como já citado, todo número tem 2 divisores!, daí só interessa achar se tem mais de 2). Se fosse fazer uma interpretação, poderia ser algo como: se quantidade_de_divisores_além_dos_divisores_que_todo_número_é_divisível = 0 então primo <- primo + 1 fimse Por ai vai... Qualquer dúvida é só perguntar. No aguardo. -
VisualG Algoritmo pra número primo
Simon Viegas respondeu ao tópico de Diego_Soares em Programação - iniciantes
Olá. Dica inicial: efetue testes com um universo menor... por exemplo com apenas 100 números. A depender com apenas 10... a base é a mesma, ou seja, as regras do algoritmo para primos independe do valor de N, daí com um N menor é mais fácil efetuar as comparações do resultado retornado com o real. A ideia é ir tentando entender o como funciona os primos e ir aplicando melhorias, ex.: - verifique apenas o possíveis candidatos: com exceção do 2, se for par não tem como ser primo, logo já reduz pela metade (ou aproximadamente) o número de cálculos. Ajuste o código para apenas verificar os número 3, 5, 7, 9, 11..., 995, 997, 999. Encontre uma forma de ter essa sequência; - utilize no máximo o máximo MDC possível para reduzir o número de verificações para cada número: uma certeza básica é que não pode ser maior que a metade de N, já que o menor divisor primo é o 2, logo o "divisor do outro lado" seria o maior divisor, correto? Por exemplo: 210. Seu maior divisor é 210/2, ou seja, 105. Logo, não faz sentido verificar o 106, 107, 108... (se já considerar a ideia acima, só será por ímpar, logo não necessitando do 107, 109, 111...). RESUMINDO: verificando apenas de 1 a N/2 já reduz pela metade. Faça isso e testa os resultados. Daí, vai analisando e entendendo os conceitos para tentar encontrar um máximo MDC ainda menor. Quando menor o máximo MDC melhor. - utilizar divisores primo: acho que você já entendeu... - pare de verificar se já identificar um "não primo": se encontrar um divisor extra (se atente que todo número tem 2 divisores, no caso 1 e ele mesmo), não precisa continuar verificando, ou seja, não importa se tem outros ou não. Para de verificar e vai para o próximo. Etc. Vá fazendo por partes... Não tente fazer tudo de uma vez. Insere uma melhora e testa. Se tiver dúvidas, posta aqui. Após, insere outra... repete processo... (tira dúvidas, vai pro próximo, tira dúvidas, vai pro próximo). Tente fazer uma implementação e posta o código aqui. No aguardo. -
Caro usuário, Seja bem-vindo ao Fórum do 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 Fórum 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 Problemas com a logica
Simon Viegas respondeu ao tópico de Fabio Aragao em Programação - iniciantes
Olá. Alguns pontos: - Não precisa inicializar a variável sair, pois está utilizando repita ("faz, depois pergunta"). Isso seria necessário se utilizado enquanto. Por sinal, conceitualmente o que deve ser inicializado é o contador, pois ela é utilizado como incrementação, ou seja, que utiliza o seu próprio valor para atualizar. obs.: O Visualg inicializa automaticamente, mas é bom para ir se acostumando para futuras outras linguagem quem não fazem isso. - a nomenclatura "sair" não está batendo com o seu uso. Quando tem "s" ele repete?? poderia por exemplo usar "continuar". - no código do @devair1010 a variável i não está sendo utilizada. De qualquer sorte, como "padrão" ("costume") é utilizado o i como primeira opção de auxiliar do para, ou seja, remove o j e troca pelo i. - @Fabio Aragao, em relação ao seu código, observe que você está utilizando um vetor para cada dado, daí, a correlação entre eles está na posição... logo, teria que ser a mesma variável para elas... logo, sendo uma estrutura de repetição só. Como a quantidade de cadastros não é fixa, daí que surgiu a necessidade do contador citado por @devair1010. Obs.: @devair1010, por favor, evite não entregue o código com as correções sugeridas, deixe que o próprio usuário o faça, pois desta forma estimula o usuário a interpretar as orientações, assim como absorverá melhor o que foi aplicado. No aguardo. -
VisualG Algoritmo pra número primo
Simon Viegas respondeu ao tópico de Diego_Soares em Programação - iniciantes
Olá a todos. Creio que o programa está correto. Apenas precisa de alguns refinamentos. Normal, isso é o tempo do processamento, já que são mais de 500.000 cálculos!!! (basta efetuar a "soma da PA".) Obs.: é possível reduzir esse número, como por exemplo diminuindo o valor máximo do divisor... por exemplo, você está dividindo até o N, mas muuuuito antes disso a divisão já é impossível que seja divisível, ou seja, está fazendo muita conta sem necessidade... basta achar qual seria o maior divisor possível para cada número e aplicar no algoritmo. Outra forma de melhor seria apenas dividindo por número primos. Daí, como o próprio programa já vai encontrando, você pode ir armazenando os primos e utilizando eles na conta, para isso pode usar vetores. ADENDO: Apesar de ser recomendado inicializar as variáveis, no Visualg não se faz necessário, pois elas são zeradas automaticamente (assim como no Pascal/Delphi). O números ficam com 0 e as "caractere" ficam com '' (sem letras armazenadas), assim por diante. Já em outras linguagens como Java, C/C++ dão de fato problema, pois lá o gerenciamento é diferente... obs.: em funções e procedimento também podem dar problema no Visualg e Pascal, pois as variáveis globais só são inicializadas automaticamente. Para testes, experimentem ir pressionando F8, quando as variáveis forem declaradas, verás que apareceram "zeradas" na "Área de Variáveis" que fica no canto superior direito. No aguardo. -
VisualG Não aparece a resposta no VisualG
Simon Viegas respondeu ao tópico de Herbet em Programação - iniciantes
Olá. Importante: @Herbet, além desse ponto relatado por @devair1010, informei 0 (zero) e não deu alguma resposta. Zero é número inteiro também, concorda? Precisa tratar esse caso. Da forma que você fez (com a correção) ficou muito bom... mas também poderia fazer, por exemplo, separando por categorias, algo como: - quando igual a zero; - quando maior que zero; - quando menor que zero. Para o primeiro apenas dá a resposta e para cada um dos 2 últimos verifica se é par ou ímpar e dá a respectiva resposta. Lembrando que a forma que você fez ficou bom, falta apenas tratar o zero... este exemplo acima seria uma forma "diferente" de fazer a mesma coisa. Se quiser tentar para treinar, fique a vontade. No aguardo. -
VisualG Programa que deve ser usado: Visualg
Simon Viegas respondeu ao tópico de Daniel Zandonoto em Programação - iniciantes
Caro usuário, Seja bem-vindo ao Fórum do 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 Fórum 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 -
Olá a todos. Nesse caso terás uma redundância desnecessária, pois a prioridade está intrinsecamente relacionada a idade. Logo, não precisa da variável (não deve ter)... basta apenas verificar a sua idade e ver se encaixa na prioridade ou não. Simplificando: onde supostamente iria ter "se prioridade=1 faça", deveria ter "se idade>IDADE_PRIORIDADE faça". ADENDO: da mesma forma que normalmente se perguntaria a "data de nascimento", não a idade. A idade é fruto do cálculo com o dia atual, basta subtrair!... da mesma forma que a prioridade (idoso?) é baseado com a faixa de idade (65 anos) com a idade atual do eleitor (que foi por sua vez já calculado). No aguardo.
-
Pascal Multibanco em PaSCAL pls
Simon Viegas respondeu ao tópico de Gonçalo Matos em Programação - outros
Olá @Gonçalo Matos. Poste o que já conseguiu fazer e onde está com dúvidas. No aguardo. -
VisualG testar e-mail usando visualg
Simon Viegas respondeu ao tópico de Estefani Arce em Programação - iniciantes
Olá @Estefani Arce. Seja bem vinda ao Fórum do Clube do Hardware. Tente fazer com requisitos mínimos inicialmente, como apenas verificar se tem @ ou não. No aguardo. -
VisualG Resultado da Variavel Decimal
Simon Viegas respondeu ao tópico de Jensen em Programação - iniciantes
Olá. Acontece que o Visualg entende o "." como a ",", ou seja, serve para separar a parte das casas decimais. De um modo geral, as linguagens de programação seguem o padrão da cultura inglesa, onde utilizam o ponto como separador decimal. Ex.: 1500,23 aqui é 1500.23 lá (nos programas). Ao inserir um salário observe na "Área das variáveis", no canto canto direito do Visualg, que o valor armazenado fica com uma vírgula. O 1800 = 1800,0000000.... já 1.800 fica 1,80000000... Na prática, creio eu, que o número é armazenado com ".", e o Visualg mostra no painel como ",", pois é o natural do Brasil. Ao mesmo tempo que ao inserir com um número com ",", o Visualg converte para "." (já que muitos usuários do Brasil tendem a inserir "," como separador decimal, e o programa iria "bugar"). Resumindo: ao inserir o valor, não devem-se utilizar o "." para separar os números de 3 em 3. O ponto é utilizado no lugar na "," vírgula. -
VisualG Exercicio INSS Logica
Simon Viegas respondeu ao tópico de Lucas Assis Dias em Programação - iniciantes
Caro usuário, Seja bem-vindo ao Fórum do 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 Fórum 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 -
C espaçamento ao abrir executar um arquivo .bat
Simon Viegas respondeu ao tópico de Hiago Briano em C/C#/C++
Na forma correta como? tem como demonstrar como está? Se está reconhecimento como parâmetro, então não está "certo". Posta a tela de como chega e o código aqui para analisarmos. -
Olá @ineedahelp. 1) CÓDIGO BASE Seu código aqui nem está compilando (usando Dev++)... abaixo fiz algumas alterações e compilou, veja: LISTA *retira(LISTA *lista, int valor) { LISTA *p; //p=LISTA; p=lista; LISTA *ant=NULL; while((p!=NULL)&&(valor!=p->info)) { ant=p; p=p->prox; } if(p==NULL) { //return LISTA; return lista; } if (ant==NULL) { //LISTA=p->prox; lista=p->prox; } else { ant->prox=p->prox; } free(p); //return LISTA; return lista; } Vou supor que você enviou o código errado. Se for outra coisa, favor tentar me explicar. 2) TIPOS DE PASSAGEM DE PARÂMETROS Só para revisar: existe 2 tipos de passagens de parâmetros: ou por valor, ou por referência. Caso não saiba a diferença, favor dar uma pesquisada. Então: Pela que analisei, acontece que durante o inserirFinal() você está alterando um valor que veio por parâmetro, mas acontece que esse parâmetro está por valor, daí, ao terminar o procedimento, a variável original continuar com seu valor (perde as alterações que foram feitas no procedimento), veja: Lá onde sinalizei, esta variável lista está sendo alterada, mas essa atribuição é perdida quando terminada o procedimento, pois esta está como "valor", em detrimento da "referência". (a lista dentro do procedimento é uma mera cópia do valor da variável lista que externa). Para corrigir, apenas mude para referência, algo como: void inserirFinal(LISTA *&lista, int num) Testei aqui e funcionou. 3) OUTRAS ALTERAÇÕES Tem outros pontos que precisam ser analisados... como: não deixar inserir sem ter "criado" a lista; no inserirFinal(), você não está atualizando o novo->info, creio que seja necessário; no inserirFinal(), a lista aux e ant deveria ficar dentro do else, já que só serão utilizando lá. no inserirInicio(), não precisa ter retorno, ou seja, transforma em void também e lá coloca lista=novo no lugar do return novo. (nesse caso precisando também mudar lista para referência, inserindo um &). **** obs.: esses orientações são basicamente para o C++, não sei se tem diferença para o C (sou novo nesses mundos). Caso não funcione o inserirFinal() assim, terá que ver outras formas para corrigir, ou mesmo seguir a sugestão do @TYSQUARE89, onde retornaria lista e atualizaria lá fora... (lembrando que essa atualização só seria para o primeiro número). Resumindo: o problema está em atualizar a lista, ou você atualiza dentro da função ou atualiza fora (eu acho mais coerente atualizar dentro) No aguardo.
-
C espaçamento ao abrir executar um arquivo .bat
Simon Viegas respondeu ao tópico de Hiago Briano em C/C#/C++
Olá. Creio que seja necessário as aspas duplas no comando, ou seja, teria que chegar assim no CMD: "C:\arquivos\etiqueta Numero Serie padrão\ENSP.bat" Incluindo as aspas.... Por exemplo, tentado chegar numa pasta do Java, usando o tab, ficou assim: C:\>"c:\Program Files (x86)\Java\jre1.8.0_151\bin" Perceba que o Windows já insere as " quando uma pasta ou arquivo tem espaço... pois, creio eu, o espaço dá a entender que a palavra que vem depois seria um "parâmetro" do que está antes (em detrimento de ser "parte do que veio antes")... Resumindo... se fosse o caso, terá que ver como inserir as " no comando (chegar com as "), creio que deva ser com "\" + alguma coisa. No aguardo. -
VisualG imprimir qual o número foi digitado mais vezes?
Simon Viegas respondeu ao tópico de raffera em Programação - iniciantes
Caro usuário, Seja bem-vindo ao Fórum do 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 Fórum 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 -
Não sei quem copiou de quem... mas vide postagem:
-
Por favor, posta o código atual para analisarmos e também poder servi de base para outro usuário. Obs.: testes seu código atual, com números quadrados perfeitos funcionou normalmente, mas com 91 ficou apenas processando e não deu uma resposta. No aguardo.
-
Gere uma matriz 4x4 com valores no intervalo 1 a 20
Simon Viegas respondeu ao tópico de Otavio Pereira em C/C#/C++
Caro usuário, Seja bem-vindo ao Fórum do 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 Fórum 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
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