Felipe Amadio

Membros
  • Content Count

    49
  • Joined

  • Last visited

Community Reputation

0 Neutro

About Felipe Amadio

  1. Cara, é bem facil isso... não vou escrever em termos de linguagem c, porque tou enferrujado e não trabalho com listas encadeadas faz tempo, mas escrevo em portugues e você traduz pra c, ok? loop passando por toda a lista declara um *p_ant, e *p_prox, que são um apontadores temporarios no primeiro elemento, você não faz nada, só armazena o valor do endereco dele em *p_ant e passa pro proximo elemento com p=p->prox nos outros elementos, armazena o valor do p->prox do elemento atual em *p_prox, o p->prox do elemento atual vira o *p_ant, e passa ao proximo elemento com p = p_prox deve funcionar!
  2. Então, não sei exatamente se eu to falando besteira, mas enfim... eu estou precisando criar um Windows Base Application. No meu entendimento, e o que eu quero dizer com isso, seria um programa para se rodar em windows, com interfaces grafica e tudo mais, do jeito mais simples possivel! sei la, um programa que você pode criar um arquivo novo, salvar, e abrir, isso no menu dai tem algumas abas aonde você tem um botao que lhe permite adicionar informações, e tals... No meu caso, seria um programa para gerenciar modelos matemáticos, e cada uma dessas abas que eu disse seria responsável por gerenciar uma etapa do desenvolvimento do modelo matemático, e voce pode abrir, salvar e criar um novo modelo matematico, criando inclusive uma extensao pra ele e tudo mais... Então, é possível fazer isso em linguagem C? se não, qual linguagem é aconselhavel...? muito obrigado (aos moderadores, caso essa pergunta esteja em lugar errado, me desculpem....)
  3. Bom, o problemas está nessa parte... não sei se você entendeu o conceito, mas vou mostrar aonde tão os erros: no "laço 1" falta a abertura de chaves do primeiro for! do jeito que está, dentro do primeiro for só tem o comando "nulo = 1" e o outro for não está dentro dele! então está eminentemente errado, tem que arrumar e colocar as chaves de abertura e fechamento E depois, está certo, o laco 2 está perfeito! é só arrumar a posição das chaves do primeiro laço que deve funcionar. (pra conferir, pensa na execução do programa: no primeiro laco, o primeiro for da conta de analizar todas as linhas, enquanto que o segundo varre as linhas por si só. Antes de varrer cada linha, voce diz que nulo = 1, e varre a linha inteira, procurando por elementos não nulos. ->if (a[j] != 0) Se depois de varrer uma linha inteira, voce não tiver encontrado nenhum elemento não nulo, voce então incrementa o contador. Eu sei que não precisa, e muita gente não usa, mas, pelo menos quando usar os for, eu sugiro colocar as chaves, sempre! pra facilitar o entendimento... mas, enfim, no laço 2 você só usou as chaves onde precisava, e está correto!)
  4. Cara, você não pode fazer isso que voce fez! De fazer a soma das 3 primeiras linhas e das 3 primeiras colunas! Pois se a matriz tiver 2 linhas, então você está usando elementos não definidos nessa matriz! simplesmente use para "somaInicial" o valor da primeira linha, e isso já basta! as outras somas, de fato, nem estão sendo usadas no seu programa, então sugiro que você não as realize! tire todos esses for que fazem as somas dessas somainicial1, 2, 3, 4, 5! deixe só o primeiro, da "somainicial". Depois, voce não está analisando o caso das linhas! você somente verifica se todas as colunas estão consistentes! E voce, apesar de realizar a soma da diagonal principal e da secundaria, voce não está comparando esses valores com somaInicial! Quanto ao loop infinito, não sei dizer aonde ele ocorre! como seu programa possui poucos "for's", sugiro que voce espalhe alguns system("pause") pelo seu programa, um em cada for, pelo menos, a antes de cada system("pause") coloque um printf para o programa exibir as variaveis do critério de parada do loop! só pra entender por que não está parando...
  5. Olha, isso que você colocou, "A" tipo não existe! Pelo que eu entendi, linha nula seria ter todos os elementos da linha nulos, e "A" tipo... sei la, não faz muito sentido! Sugiro, a titulo de curiosidade, que você faca um printf("%d", A[i]); só pra ver o que aparece! não sei dizer o que isso significa, mas não é o que voce estava querendo dizer! A ideia que eu sugiro aqui, é a mesma que eu coloquei ali no seu outro post. Vou postar um "codigo" explicado em linguagem normal, não em c. For (percorrendo todas linhas) { nulo = 1 // variavel indicadora de passagem que indica, a principio, que todos os elementos da linha ou coluna que eu irei analisar são nulos. 1 = sim for (percorrendo todas as colunas - aqui, alem de "j<colunas", pode ter um "j<colunas && nulo = 1") if (A[i][j] =! 0) nulo = 0 //aqui, achei um elemento não nulo, e posso parar de percorrer essa linha ( ou coluna) if (nulo==1) cont = cont + 1; //aqui, apos percorrer uma coluna inteira - nesse caso - e se nulo ainda vale 1, então toda a coluna é nula, e eu posso aumentar o contador de "elementos nulos" } for (percorrendo todas as colunas) { nulo = 1 for (percorrendo todas as linhas) if (A[i][j] =!0) nulo = 0; if (nulo ==1) cont = cont + 1; } E... acho que é isso! imagino que de pra entender... qualquer coisa, pergunta ae! abraço
  6. Cara, tem alguns problemas ai que eu já identifiquei... Eu não conhecia o operando "+=", mas, pelo que eu percebi, seria isso: "a = a + b " é igual a " a += b", certo? se for isso, acho que ta errada a utilização do +=... !! E... nesse caso, percebe, você ta percorrendo a matriz INTEIRA, e armazenando tanto em "somaLinhas" como em "somaColunas" o valor de todos os elementos da matriz somados! e não é isso que você tem que fazer! Como TODAS as somas de linhas tem que ser iguais, eu sugeriria algo assim, com "magico" sendo uma variavel indicadora de passagem. O pensamento é partir do principio que esse é, sim, um quadrado mágico, e, caso encontrarmos alguma condição que diga o contrario, podemos parar de fazer todas as contas e dizer que o quadrado não é magico! portanto, o que eu sugeriria pro caso da "somaLinhas" (e que pra "somaColunas" seria equivalente): magico = 1; // 1 = SIM -> estou supondo que o quadrado é magico nmagico = 0; //nmagico vai ser o meu "numero magico". Vou supor que a primeira soma da primeira linha é o nmagico. Se for um quadrado magico, minha suposicao não estará errada! for(j=0; j<colunas; j++) { nmagico = nmagico + mat1[0][j]; } for (i=1; i<linhas && magico==1; i++) { somaLinhas = 0; for(j=0; j<colunas; j++) { somaLinhas = somaLinhas + mat1[i][j]; } if (nmagico != somaLinhas) magico = 0; // Aqui, descobri que o quadrado não é magico, e mudo a variavel indicadora de passagem para 0 ( 0 = não ) } Daí, a partir desse ponto, você não precisa mais do primeiro for que eu fiz, pra achar o nmagico. Caso todas as "somaLinha" sejam iguais a "nmagico", você passa pras colunas, faz a soma dos elementos das colunas, no final de cada soma compara com "nmagico", e não se esqueça de zerar "somaColunas" antes de iniciar cada soma! Depois disso, soma a diagonal principal, e... bom, pra diagonal secundaria temos um probleminha! Pra começar, e voltando um pouco, se estamos falando de quadrados, não precisamos de uma variavel "linhas" e outra "colunas", uma vez que esse numero é igual! portanto, apenas pegar um "n" para o quadrado, e usar esse numero como o numero maximo de linhas e de colunas já é o suficiente! Dai, é só percorrer a matriz toda e perguntar if (i==j) somaDP += mat1[i][j]; if(j=i-2) somaDS=+mat1[i][j]; Então, essa segunda condicao ta errada, não? a conficao certa seria if (j + i= n) // ou if (j = n-i) Não sei de onde você tirou esse "j = i-2", mas enfim, o certo seria isso daí que eu postei! E, de resto, voce pode colocar, como adendo, em todas as condições analisadas, um " && magico ==1", pois caso voce ache, em algum ponto do programa, que não é um quadrado mágico, então todas as comparações e contas podem ser deixadas de lado, e na hora de imprimir se é um quadrado magico ou não, basta perguntar "if (magico ==1)"
  7. google -> "c ocultar janela" -> http://scriptbrasil.com.br/forum/index.php?showtopic=130707
  8. Humm... entendi... é, a calculadora do windows arredonda, né... então acho que não vai ser util pra essa sua finalidade! Meu... tenta ver outras linguagens... eu só programo em c, e tenho quase certeza de que não dá, não! da uma buscada nos outros foruns... enfim, é isso ae...
  9. Cara, essas duvidas foi você realmente quem redigiu? Sendo iniciante em programação? Enfim, você não pensou nada no problema? não definiu nada? Po, aposto que muitos que vão ler este tópicos terão varias ideias, mas o principal é você tê-las! Não acho justo e nem acho que faça sentido você colocar um problema, não abordar nenhuma solução pra ele, e ficar esperando! Eu tenho sim algumas ideias de como realizar isso, mas acho que quem tem que ter as ideias é voce! Então, eu vou dar algumas ideias. Voce deve ter uma estrutura que represente cada posição, e vai retirando e adicionando elementos em cada estrutura, de acordo com os coomandos. Sugiro 2 coisas para voce usar como estruturas -Vetores (na verdade, como serão N vetores, então pode ser uma matriz, inicialmente de 25 x 25 posições, já que 25 é o tamnaho maximo) -Listas Encadeadas. Voce sabe o que são listas encadeadas? já ouviu falar? sabe como funciona? De uma procurada, são estruturas bem poderosas, que permitem uma manipulação muito mais "livre" do que vetores ou matrizes.
  10. Cara, não, isso daí é bizarro demais! hehehehehehehe Não sei dizer exatamente até onde vai uma variavel "unsigned long int", que acho que seria a maior variável de todas, mas com 1 bilhão de numeros, é bem claro que c não chega lá! O VALOR de um long int chega ai na casa de alguns bilhões, mas é o valor! e não um bilhao de numeros!! Eu fiz pela calculadora do windows, na vigésima interação, cheguei ao seguinte valor: 6,7411401254990734022690651047042 * 10^315652 ! Pra fazer qualquer iteração acima disso, a calculadora do windows ta demorando alguns minutos...! se eu chegar além disso, eu aviso! [EDIT] Aí, 23 iteração, demorou 10 min, parei por aqui, preciso trabalhar! hahahahahha 2,0650635398358879243991194945817 * 10^1.262.611 já com 1 milhão de digitos! com 30 iterações, deve chegar na casa do trilhão!
  11. Agora copiei o codigo e, pela primeira vez, rodei ele! heheheheheh A coisa é o seguinte, voce precisa zerar as variaveis cada vez que você termina de achar um decimal! A variavel "aux" você ta zerando logo antes do loop que usa ela... a variavel temp, não!!! o loop 2 e o 3 usam a variavel temp, então, ou no final do loop dos decimais, ou logo antes do loop 2, coloque um temp = 0; isso funciona! (estranho é que ele não ta parando quando o resto vale 0! sempre quando chega na 10a casa decimal! mas enfim, isso não é realmente um problema! é só falar que o seu programa tem uma precisão pre-estabelecida! voce pode até pedir pro usuario digitar a precisao que ele quer, antes de tudo... dai você manda o con_decimais ir até o cont_decimais_maximo, que é o valor que o usuario entrou!
  12. Então, as atualizações que eu fiz ali são justamente pra dar conta! essas são as contas que cada loop deve fazer, no caso de 1 / 8: loop1: 1/8 = 0 loop2: 0*8 = 0 loop3: 1%8 = 1 loop4: 10*1 = 10 loop5: 10/8 = 1 loop2: 1*8 = 8 (esse 1, que muda sempre, é decimal achado anteriormente! no caso, é o seu c) loop3: 10%8 = 2 (esse 10 é o resto da divisao anterior, multiplicado por 10! no seu programa, é o aux) loop4: 10*2 = 20 loop5: 20/8 = 2 daí, por isso eu citei as seguinte atualizações: inteiro = c; n1 = aux; tendeu?
  13. Vamos la, de novo! O intuito, agora, é a criação de um loop pra ir realizando um decimal após o outro, até que o resto da divisão seja zero, e daí terminamos o numero! Bom, vamos lá: Loop1: acha a parte inteira LOOP GRANDE (está faltando): esse loop vai achar todos os decimais! nele voce coloca como condição pra ele parar quando o ultimo resto for zero! ou então pra ele parar depois de rodar 10 vezes, ou algo assim. Pois, no caso de uma dizima, ele não vai parar nunca, e isso não é desejado! então coloca algo tipo uma variavel de controle, ou um numero maximo de iteracoes dentro do loop grande, teremos os loops 2, 3, 4 e 5! Voce só precisa verificar e atualizar as variaveis pra ficar nesse loop de decimais sem problemas... então, ficaria algo assim: declaracoes de variavel + daclaracao de "cont_decimais" aquisição dos dados do usuario loop1 cont_decimais = 0; while(resto!=0 || cont_decimais <10) { loop2 loop3 loop4 loop5 inteiro = c; n1 = aux; cont_decimais ++; } Acho que essas são as duas atualizações necessárias pro seu programa entrar nesse loop e rodar, tudo certo! tenta ai, mas agora deve dar certo! Então, na hora de imprimir o numero, sugiro que, logo apos achar a parte inteira, você de um printf("%d,"inteiro); A partir dai, coloca no final do loop um printf("%d"c; E, a medida que ele for achando os decimais, ele vai imprimindo, e imprimindo...
  14. vou responder no seu código, mais ou menos, ta? só pra começar, de novo, você não substituiu os %i por %d! isso pode ser essencial! substitua! inteiros são lidos e escritos com %d, e não com %i !!
  15. pra começar, você deve usar %d para inteiros, e não %i! não sei nem como isso rodou! depois, na impressão, você ta imprimindo printf("Resultado: %i,%i",cont); você ta imprimendo antes da virgula o cont, e depois da virgula algo não definido! repare! você colocou dois %i e somente uma variavel! logo, o proprio computador ta "escolhendo" qual variavel imprimir, e parece que no seu caso, ele imprimiu primeiro cont, que valia 1, depois a virgula, que ta ali expressa no seu printf, e depois um numero aleatorio, que deve ter sido o 5118880!!