Flames Posted March 4, 2012 Report Share Posted March 4, 2012 Boa noite, será que alguem conhece um algoritmo ----->sem utilizar arrays<----- para ver se um numero está contido noutro? Por exemplo numero 1234 dado pelo utilizador depois testando o numero 23 podemos ver que está contido já o numero 9 não está... Eu sei que conseguimos alcançar cada numero fazendo divisoes sucessivas por 10 e buscar o resto e tal (já desenvolvi até um programa que faz a inversao) mas como alcanço por exemplo 1, 12,123,1234 dessa forma? Algo como prefixos... Não espero que me fornecam qualquer programa apenas traços gerais de como chegar a isso :S Obrigado desde já. Link to comment Share on other sites More sharing options...
KTachyon Posted March 4, 2012 Report Share Posted March 4, 2012 Com divisões inteiras por 10. “There are two ways of constructing a software design: One way is to make it so simple that there are obviously no deficiencies, and the other way is to make it so complicated that there are no obvious deficiencies. The first method is far more difficult.” -- Tony Hoare Link to comment Share on other sites More sharing options...
pmg Posted March 4, 2012 Report Share Posted March 4, 2012 Sugestao: sabes ver se uma string esta contida noutra? Usa o mesmo metodo para ver se um numero esta contido noutro ... se necessario depois de converteres um ou os dois numeros para strings. Porque e que sugiro isto: 1) porque, de facto, estas a procura de strings, nao de numeros. Lembra-te que os numeros, internamente na memoria do computador, estao "escritos" em base 2. 2) porque, muito provavelmente, pelo menos um dos numeros comeca a vida como string e nao precisas de o converter para inteiro. What have you tried? Não respondo a dúvidas por PM A minha bola de cristal está para compor; deve ficar pronta para a semana. Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código! Link to comment Share on other sites More sharing options...
Flames Posted March 4, 2012 Author Report Share Posted March 4, 2012 Sugestao: sabes ver se uma string esta contida noutra? Usa o mesmo metodo para ver se um numero esta contido noutro ... se necessario depois de converteres um ou os dois numeros para strings. Porque e que sugiro isto: 1) porque, de facto, estas a procura de strings, nao de numeros. Lembra-te que os numeros, internamente na memoria do computador, estao "escritos" em base 2. 2) porque, muito provavelmente, pelo menos um dos numeros comeca a vida como string e nao precisas de o converter para inteiro. Mas mesmo "transformando" em string's vou testar em termos de array o que eu não pretendia... Link to comment Share on other sites More sharing options...
pmg Posted March 4, 2012 Report Share Posted March 4, 2012 Mas mesmo "transformando" em string's vou testar em termos de array o que eu não pretendia... Ah! Pois. Entao tens que usar a sugestao do KTachyon (nao te esquecas que podes usar % para calcular o resto da divisao). What have you tried? Não respondo a dúvidas por PM A minha bola de cristal está para compor; deve ficar pronta para a semana. Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código! Link to comment Share on other sites More sharing options...
kodiak Posted March 4, 2012 Report Share Posted March 4, 2012 Sugestao: sabes ver se uma string esta contida noutra? Usa o mesmo metodo para ver se um numero esta contido noutro ... se necessario depois de converteres um ou os dois numeros E em ansi c como e faz a conversão de inteiros para strings? Acho que o itoa não dá.. Link to comment Share on other sites More sharing options...
Flames Posted March 4, 2012 Author Report Share Posted March 4, 2012 Estou com um problema por exemplo numero 123 se for buscar o resto por 10 consigo alcancar o 3... Depois divido por 10 consigo alcancar o 12 blabla por ai fora até a divisao ser igual a 0 só que existe um numero que fica sempre fora o --->23<---. E quantos mais digitos pior fica. Por exemplo 1234 fica de fora para o teste o 23 e 34 como resolvo este problema? Já ando a volta disto a um tempo :S Link to comment Share on other sites More sharing options...
pmg Posted March 4, 2012 Report Share Posted March 4, 2012 E em ansi c como e faz a conversão de inteiros para strings? Acho que o itoa não dá.. Em C89, com sprintf(); a partir de C99, com snprintf(). What have you tried? Não respondo a dúvidas por PM A minha bola de cristal está para compor; deve ficar pronta para a semana. Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código! Link to comment Share on other sites More sharing options...
pmg Posted March 4, 2012 Report Share Posted March 4, 2012 Estou com um problema por exemplo numero 123 se for buscar o resto por 10 consigo alcancar o 3... Depois divido por 10 consigo alcancar o 12 blabla por ai fora até a divisao ser igual a 0 só que existe um numero que fica sempre fora o --->23<---. E quantos mais digitos pior fica. Por exemplo 1234 fica de fora para o teste o 23 e 34 como resolvo este problema? Já ando a volta disto a um tempo :S Tens que ver o resto por 10, por 100, por 1000, etc ... para cada numero obtido atraves da divisao do original por 1, 10, 100, 1000, ... What have you tried? Não respondo a dúvidas por PM A minha bola de cristal está para compor; deve ficar pronta para a semana. Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código! Link to comment Share on other sites More sharing options...
kodiak Posted March 5, 2012 Report Share Posted March 5, 2012 Estou com um problema por exemplo numero 123 se for buscar o resto por 10 consigo alcancar o 3... Depois divido por 10 consigo alcancar o 12 blabla por ai fora até a divisao ser igual a 0 só que existe um numero que fica sempre fora o --->23<---. E quantos mais digitos pior fica. Por exemplo 1234 fica de fora para o teste o 23 e 34 como resolvo este problema? Já ando a volta disto a um tempo :S Se colocares aqui algum do código que tens, seria muito mais fácil.... Link to comment Share on other sites More sharing options...
Flames Posted March 5, 2012 Author Report Share Posted March 5, 2012 Se colocares aqui algum do código que tens, seria muito mais fácil.... estava a tentar nao meter aqui codigo que nao cabe na cabeca a ninguem... double vercontido(n,contido){ double i,j,inver; for (i=1;i<=4;i++){ for (j=1;j<=4;j++){ inver=n%pow(10,j); if (inver==contido) return 1; else return 0; } n=n/pow(10,i); } } esta-me a dar erro no pow :S outra coisa é aquele ciclo estou a parar em 4 para testar como sei quando terminar ambos os ciclos é que me esta a fazer confusao :S Ja está devidamente identado acho eu xp Link to comment Share on other sites More sharing options...
pmg Posted March 5, 2012 Report Share Posted March 5, 2012 double vercontido(n,contido){ double i,j,inver; for (i=1;i<=4;i++) for (j=1;j<=4;j++) inver=n%pow(10,j); if (inver==contido) return 1; else return 0; n=n/pow(10,i); } Atencao, atencao A indentacao do teu codigo e a estrutura do mesmo nao sao equivalentes. Estruturalmente o "if (inver)" esta fora dos ciclos "for", embora a indentacao leve a pensar o contrario. What have you tried? Não respondo a dúvidas por PM A minha bola de cristal está para compor; deve ficar pronta para a semana. Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código! Link to comment Share on other sites More sharing options...
Flames Posted March 5, 2012 Author Report Share Posted March 5, 2012 Atencao, atencao A indentacao do teu codigo e a estrutura do mesmo nao sao equivalentes. Estruturalmente o "if (inver)" esta fora dos ciclos "for", embora a indentacao leve a pensar o contrario. ja indentei o codigo em cima... Link to comment Share on other sites More sharing options...
pmg Posted March 5, 2012 Report Share Posted March 5, 2012 ja indentei o codigo em cima... Ok 😄 Agora o erro é no "if". Quer seja verdade quer seja falso a funcao acaba e devolve 1 ou 0. Nao executa mais nenhuma volta de nenhum ciclo. Sugestao: nao facas o "return 0;" senao no final dos ciclos. Se a funcao chegar ao final dos ciclos é porque nao encontrou nenhum "sub numero". What have you tried? Não respondo a dúvidas por PM A minha bola de cristal está para compor; deve ficar pronta para a semana. Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código! Link to comment Share on other sites More sharing options...
Flames Posted March 5, 2012 Author Report Share Posted March 5, 2012 Ok 😄 Agora o erro é no "if". Quer seja verdade quer seja falso a funcao acaba e devolve 1 ou 0. Nao executa mais nenhuma volta de nenhum ciclo. Sugestao: nao facas o "return 0;" senao no final dos ciclos. Se a funcao chegar ao final dos ciclos é porque nao encontrou nenhum "sub numero". algo como : double vercontido(n,contido){ double i,j,inver; for (i=1;i<=4;i++){ for (j=1;j<=4;j++){ inver=n%pow(10,j); if (inver==contido) return 1; } n=n/pow(10,i); } return 0; } Desculpa já agora porque é que me dá este erro "invalid operands to binary %" eu sei que tem a haver com o inver=n%pow(10,j) mas não sei porque ja alterei o tipo mil e uma vez e mesmo assim :S Link to comment Share on other sites More sharing options...
pmg Posted March 5, 2012 Report Share Posted March 5, 2012 algo como ... [return 0; no fim da funcao] Yaaa 😄 Porque é que me dá este erro "invalid operands to binary %"? Eu sei que tem a haver com o inver = n % pow(10, j) ... Porque o "%" so esta definido para numeros inteiros e os teus operandos ("n" e pow(10, j)) sao numeros de virgula flutuante. A ideia para resolver o problema é essa, mas tens que a adaptar as manias do computador. What have you tried? Não respondo a dúvidas por PM A minha bola de cristal está para compor; deve ficar pronta para a semana. Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código! Link to comment Share on other sites More sharing options...
Flames Posted March 5, 2012 Author Report Share Posted March 5, 2012 Yaaa 😄 Porque o "%" so esta definido para numeros inteiros e os teus operandos ("n" e pow(10, j)) sao numeros de virgula flutuante. A ideia para resolver o problema é essa, mas tens que a adaptar as manias do computador. Como vou saber até que ciclo parar? Ou seja era necessario contar quantos numeros é constituido o numero dado pelo utilizador... Tenho que fazer um ciclo que me dê essa contagem para devolver para a outra funcao (int vercontido(int n,int contido) e assim ja saber até que %10, %100... o meu for vai.? #include <stdio.h> #include <stdlib.h> #include <math.h> int vercontido(int n, int contido); int main() { int numero=1234; int contido=23; if (vercontido(numero,contido)) printf("Esta contido\n"); else printf("Nao esta contido"); return 0; } int vercontido(int n,int contido){ int i,j,x=0; int aux_n=n; int aux2; for (i=1;i<=4;i++){ for (j=1;j<=4;j++){ aux2=pow(10,j); x=aux_n%aux2; if (x==contido) return 1; } aux_n=n/pow(10,i); } return 0; } Link to comment Share on other sites More sharing options...
pmg Posted March 5, 2012 Report Share Posted March 5, 2012 Hmmm ... a medida que vais dividindo o numeor por 10 ele vai ficando mais pequeno. Com divisoes suficientes ha-de chegar a 0 🙂 E o aux2 ... a medida que o j aumenta, o aux vai ficando maior. Com aumentos suficientes ele fica tao grande que o resultado do modulo nunca muda 😄 What have you tried? Não respondo a dúvidas por PM A minha bola de cristal está para compor; deve ficar pronta para a semana. Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código! Link to comment Share on other sites More sharing options...
Flames Posted March 5, 2012 Author Report Share Posted March 5, 2012 Hmmm ... a medida que vais dividindo o numeor por 10 ele vai ficando mais pequeno. Com divisoes suficientes ha-de chegar a 0 🙂 E o aux2 ... a medida que o j aumenta, o aux vai ficando maior. Com aumentos suficientes ele fica tao grande que o resultado do modulo nunca muda 😄 No final ficou assim o código 🙂 #include <stdio.h> #include <stdlib.h> #include <math.h> int vercontido(int n, int contido); int main() { int numero=1234567; int contido=4; if (vercontido(numero,contido)) printf("Esta contido\n"); else printf("Nao esta contido"); return 0; } int vercontido(int n,int contido){ int i,j,x=0; int aux_n=n; int aux2; for (i=1;aux_n>0;i++){ for (j=1;x!=aux_n;j++){ aux2=pow(10,j); x=aux_n%aux2; if (x==contido) return 1; } aux_n=n/pow(10,i); x=0; } return 0; } Link to comment Share on other sites More sharing options...
pmg Posted March 6, 2012 Report Share Posted March 6, 2012 No final ficou assim o código 🙂 Muito bom! So uma coisita ... para chatear ... a tua funcao diz que 0 nao esta contido em 0 😄 E, uma sugestao: se os numeros a verificar nunca podem ser negativos eu faria os argumentos da funcao serem unsigned. What have you tried? Não respondo a dúvidas por PM A minha bola de cristal está para compor; deve ficar pronta para a semana. Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código! Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now