Ir ao conteúdo
  • Cadastre-se

Bruno Benedetti

Membro Júnior
  • Posts

    11
  • Cadastrado em

  • Última visita

Tudo que Bruno Benedetti postou

  1. Consegui! Usei o [99999999] e dessa vez não travou! Na realidade ele travou em um numero bem alto com 7 dígitos o que está bom pra mim. Segue as prints da mudança na rapidez do algorítimo. Os dois foram abertos ao mesmo tempo, na esquerda o antigo (testando todos números) e na direita o novo (só os primos). http://prnt.sc/a5tar8 http://prnt.sc/a5tav3 http://prnt.sc/a5tb0z @CiroboyBR Vou estudar isso sim, até ja fiz uns testes e pelo visto vai ficar bem mais rápido e não vai travar quando chegar em um numero muito alto. Valeu a ajuda de todos!
  2. @CiroboyBR eu não quero descobrir um número, se fosse isso eu usaria o último algoritmo que postei. Eu quero calcular todos os primos. Portanto a primeira maneira está descartada. Referente a segunda maneira, eu não sei mexer com txt em C, pois sou iniciante, então vou pesquisar sobre isso e posto aqui se deu certo! Ja o terceiro método que você falou estoura a memória rapidamente, portanto não é eficaz, pode testar, meu PC faz ele parar de funcionar em menos de 5 segundos.
  3. @CiroboyBR Não é um numero infinito, são infinitos números em uma mesma int. Eu vou calcular os primos, como fiz nesse algorítimo: #include <stdio.h> #include <stdlib.h> //system #include <stdio.h> // \numero para acentos #include <string.h> /* Desenvolvido por Bruno Perin Benedetti */ int main (void){ int numero1,numeroprimo,numerotest,verificador; float numeroprimotest; inicio: printf ("____________________N\351MEROS PRIMOS____________________ \n"); printf ("Sequencia de numeros primos!\n"); numeroprimo = 1; primo: numeroprimo = numeroprimo + 1; numero1 = 1; teste: numero1 = numero1 + 1; numeroprimotest = numeroprimo; if (numero1 < numeroprimotest){ numeroprimotest = numeroprimotest / numero1; numerotest = numeroprimotest; numeroprimotest = numeroprimotest - numerotest; if (numeroprimotest == 0){ goto primo; }else{ goto teste; } }else{ printf ("O n\243mero %i \202 primo \n",numeroprimo); goto primo; } system ("PAUSE"); return 0; } Só que quero melhorar ele. Nesse caso ele divide o numero que eu quero saber se é primo por todos os números maiores que 2, e portanto ele divide por números que n fazem sentido, não tem porque eu dividir por 4 se eu ja dividi por 2 e não deu primo, entendeu?? Então eu vou armazenando os primos no int e só dividindo pelos primos e com isso eu irei economizar muito processamento e conseguir calcular mais rápido. Pois os primos podem dividir todos os números que não sejam primos, entendeu? @CiroboyBR Esse a pessoa digita o numero e ele diz se é primo ou não, e se não quando divisores tem e quais são eles. Mas aqui também, o algorítimo é mais lento porque ele divide por todos números possíveis e não pelos primos já descobertos. #include <stdio.h> #include <stdlib.h> //system #include <stdio.h> // \numero para acentos #include <string.h> /* Desenvolvido por Bruno Perin Benedetti */ int main (void){ int numero1,numeroprimo,numerotest,verificador; float numeroprimotest; inicio: printf ("____________________N\351MEROS PRIMOS____________________ \n"); printf ("Digite um n\243mero natural maior que um para verifica\207\306o:\n"); scanf ("%i", &numeroprimo); numero1 = 2; numeroprimotest = numeroprimo; verificador = 0; teste: if (numero1 < numeroprimotest){ if (numeroprimotest > 1){ numeroprimotest = numeroprimotest / numero1; numerotest = numeroprimotest; numeroprimotest = numeroprimotest - numerotest; }else{} if (numeroprimotest == 0){ printf ("O n\243mero %i \202 divis\241vel por %i. \n",numeroprimo, numero1); numero1 = numero1 + 1; numeroprimotest = numeroprimo; verificador = verificador + 1; goto teste; }else{ numero1 = numero1 + 1; numeroprimotest = numeroprimo; goto teste; } }else{ if (numeroprimo == 1 || numeroprimo == 0){ printf ("Digite um n\243mero v\240lido!\n"); system("pause"); system("cls"); goto inicio; }else{ if (verificador > 0){ printf ("Verifica\207\306o conclu\241da, o n\243mero %i \202 divis\241vel por %i n\243mero(s). \n",numeroprimo, verificador); }else{ printf ("O n\243mero %i \202 primo! \n", numeroprimo); } } } system ("PAUSE"); return 0; }
  4. @FelipePetropolis Eu tinha feito esse teste, e tinha funcionado perfeitamente, mas quando coloquei 1000 no lugar do 100 ele travou... Achei que como se repetiu 100 vezes sem travar ele não iria mais. Então realmente o [0] não funciona. Vou pesquisar o que você disse dos vetores dinamicamente alocados e tentar resolver com isso. Quando terminar retorno aqui o código inteiro! O método de vetores dinamicamente alocados não funciona, ele enche a memória rapidamente. O método que vai funcionar é o de listas encadeadas, mas pelo que estou vendo é bem complicado, porém vou tentar! #include <stdio.h> #include <stdlib.h> //system #include <stdio.h> // \numero para acentos #include <string.h> int main (void){ int i; int numero1; int letra1[0]; i = 1; numero1 = 1; while (letra1[i] != 100){ numero1 = 1 +numero1; i = 1 + i; letra1[i] = numero1; printf ("%i\n",letra1[i]); } printf ("%i\n", letra1[15]); system ("PAUSE"); return 0; }
  5. @Michael Douglas_787885 na real não. Se eu fizer isso logo depois de dar o comando pra ele ficar dois e dar um printf ele vai estar como dois. Como falei antes, eu testei, e ele se comporta como um [infinito]. O [0] é diferente de um [2] que não armazena nada no [3], entendeu?
  6. É que assim, eu vou armazenar MUUUUUITOS números e não quero escrever int magica [999999] então optei pelo [0] pra resolver o problema. E testando ele funcionou, ele armazena infinitamente, se eu armazenar algo no mágica [191629] ele vai armazenar, e é isso que eu preciso, algo algo que armazene muitos números sem um limite definido.
  7. Alguem sabe me dizer o porquê do magica[1] virar um numero absurdamente grande do nada, sendo que algumas linhas antes coloquei pra ele ser igual a dois. Percebi que se eu excluir a "numeroprimotest = numeroprimo;" ele para com o bug. Eu estou desconfiado que esse "int magica [0]" não pode ser usado porque invade a memória do float da linha debaixo, se for isso, alguém sabe como armazenar números infinitamente em um int? Se não existir pode ser em um char também! #include <stdio.h> #include <stdlib.h> #include <stdio.h> #include <string.h> int main (void){ int numeroprimo,numerotest,i,a; int magica[0]; float numeroprimotest; inicio: printf ("____________________N\351MEROS PRIMOS____________________ \n"); printf ("Sequencia de numeros primos!\n"); magica[1] = 2; a = 2; numeroprimo = 1; primo: numeroprimo = numeroprimo + 1; numeroprimotest = numeroprimo; i = 1; printf ("%i \n", magica[1]); ... system ("PAUSE"); return 0; }
  8. Outra coisa, se eu digitar um algorítimo começado em 0 na tua programação ele da a resposta errada, como corrigir isso?
  9. http://forum.clubedohardware.com.br/forums/topic/1136809-cifra-de-cesar-em-c-com-espa%C3%A7o/ Da uma olhada nesse post, ele quer fazer praticamente a mesma coisa que você, a cifra de Cesar. Mas se quiser algo com uma chave mais complexa procure sobre o enigma nazista. Na cifra de Cesar as letras são trocadas todas por outra a determinada distancia, ou duas a duas, no khanacademy tem uma parte sobre isso, da uma olhada https://pt.khanacademy.org/computing/computer-science/cryptography .
  10. MUTIO SHOW!!!!!! Cara, nao entendi uma coisa, porque o while ta dps do system ("PAUSE")? É pra só dar return 0 se eu tiver digitado 0 na int senha?
  11. Fiz esse código dês do inicio para brute force de 3 números, a logica esta boa? Comecei a programar não faz nem uma semana, então se puderem me ajudar agradeço! ----------------------------------------------------------------------------------------------------------------------------------------------------- #include <stdio.h> #include <stdlib.h> #include <conio.h> /* Brute force */ int main(void) { int senha; int senhatest; DE_NOVO: system("cls"); printf ("Digite uma senha de 3 digitos\n"); scanf ("%i", &senha); if ((senha) > 999 || (senha < 0)) goto DE_NOVO; int caractere1 = -1; int caractere2 = 0; int caractere3 = 0; while (caractere1 < 10) { caractere1 = ++caractere1; caractere2 = 0; caractere3 = 0; senhatest = (1 * caractere3) + (10 * caractere2) + (100 * caractere1); if (senhatest != senha) { while (caractere2 < 10) { caractere2 = ++caractere2; caractere3 = 0; senhatest = (1 * caractere3) + (10 * caractere2) + (100 * caractere1); if (senhatest != senha) { while (caractere3 <= 10) { senhatest = (1 * caractere3) + (10 * caractere2) + (100 * caractere1); if (senhatest != senha) { caractere3 = ++caractere3; } else { printf ("Descobri, \602 %i \n", senhatest); caractere3 = 11; caractere2 = 11; caractere1 = 11; } } } else { printf ("Descobri, \602 %i \n", senhatest); } } } else { printf ("Descobri, \602 %i \n", senhatest); } } system ("PAUSE"); return 0; } -----------------------------------------------------------------------------------------------------------------------------------------------------

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

×
×
  • Criar novo...