saramgsilva Posted October 21, 2005 at 06:00 PM Report #5633 Posted October 21, 2005 at 06:00 PM Eu era pra ter passado pra C++, so que nao tive tempo... e mas C esta contido em C++ ...e o codigo em sim nao tem grandes diferenças... agora o comentario que faço do j ser menor ou igual que i, esta correcto, é para reforçar a ideia...nao estejes a confundir que j seria divisor de i...pode ser ou nao!ainda bem que percebeste o programa... 😄 www.saramgsilva.com As minhas apps no WP7 Marketplace Youtube : Galinho - Windows Phone 7.5
zoltrix Posted October 23, 2005 at 10:11 AM Report #5668 Posted October 23, 2005 at 10:11 AM Boas. Descobri este site apenas ontem, increvi-me e tomei a liberdade de converter o programa do 'tofas' para c++ com classes. Já tinha uma coisa feita para verificar se era primo ou não e acrescentei apenas o novo método. Fica abaixo o código fonte com a implementação do 'tofas' no método descobre. File primo.rar File tofas.rar File header - primo.h //Classe Primo que permite o encapsulamento class Primo { // Dados privados da classe, só os métodos da classe acedem private: int num; public: //Construtor virtual primo(int _num); virtual descobre(int d_num); }; File primo.cpp #include <iostream> #include "primo.h" using namespace std; // Implementação do método Primo Primo :: primo(int _num)//recebe numero a testar { bool prime=true;//condição boolean inicializada em verdadeiro, o numero é primo até prova em contrário for (int i=2; i<_num; i++) { if ((_num % i) == 0)//afinal não é primo { prime=false;//indicação que não é primo break; } } cout << "\n"; cout << "\n"; if (!prime) cout << "O numero nao e' primo!\n";//teste da variavel boolean, - se não primo - else cout << " - O numero * " << _num << " * e' primo!!!" << endl; cout << "\n"; cout << "\n"; } Primo ::descobre(int d_num)// Implementação do método descobre { int j,m,count; for (j=1; j<d_num;j++)// j vai ser menor que o k dado { for (m=1, count=0;m<=j;m++) // m tem de ser menor ou igual { do { if ((j%m==0) && m!=j && m!=1)// procurar o nº de divisores count++; } while(count==1); }// fim do 2º for if(count==0 && j!=1) cout << " - O numero * " << j << " * e' primo" << endl; }// fim do 1º for cout << endl; //para separar do menu } File main.cpp #include <iostream> #include "primo.h" using namespace std; int main() { char menu;//variavel do menu bool letra=false;//boolan controle caracter de entrada bool sair=false;//boolean de saida Primo p;//declaração do objecto que utiliza a classe e manipula os dados através dos métodos while (!sair)// diferente de sair { cout << "***************************" << endl;//menu todo pipi cout << "*|-----------------------|*" << endl; cout << "*| Teste numero primo |*" << endl; cout << "*|-----------------------|*" << endl; cout << "*| (T)estar numero |*" << endl; cout << "*| (V)is num primos ate k|*" << endl; cout << "*| (S)air |*" << endl; cout << "*|-----------------------|*" << endl; cout << "***************************" << endl; cout << "\n"; cout << "-> "; cin >> menu; cout << "\n"; while(letra) { cout << "\n"; cout << "-> "; cin >> menu; cout << "\n"; if (menu =='t' || menu =='T' || menu == 's' || menu=='S' || menu=='v' || menu=='V') letra=true; } switch(menu)//baseado na condição que para c tudo o que for !=0 é verdadeiro { case ('t'): case ('T'): int numero; int erro; erro=0; cout << "Insira o numero: "; while (erro==0)// ciclo de { fflush(stdin);//limpeza do buffer do teclado erro = scanf("%d", &numero);//verificação de inteiro feito com base em C, ainda não encontrei um substituto para C++ //devolve 0 ou 1 - caso leia correctamente devolve 1 e torna-se verdadeiro if (erro==0) cout << "Tem de ser inteiro natural: \n"; } p.primo(numero);// implementação do objecto com chamada do método break; case ('v'): case ('V'): int k; int erro_v; erro_v=0; cout << "Insira o valor de k: "; while (erro_v==0)// ciclo de { fflush(stdin);//limpeza do buffer do teclado erro_v = scanf("%d", &k);//verificação de inteiro feito com base em C, ainda não encontrei um substituto para C++ //devolve 0 ou 1 - caso leia correctamente devolve 1 e torna-se verdadeiro if (erro_v==0) cout << "Tem de ser inteiro natural: \n"; } p.descobre(k); break; case ('s'): case ('S'): sair=true;// condição booleana de saída preenchida break; } } return 0; }
David Pintassilgo Posted October 23, 2005 at 10:55 AM Report #5671 Posted October 23, 2005 at 10:55 AM Bem vindo ao Forum! 🙂 Espero que te ajude em tudo o que precisares e que possas tb partecipar activamente com a nossa comunidade! 😄 ps: já agora,... ....tomei a liberdade de converter o programa do 'tofas' para c++ com não é do, mas sim da 🙂😛 :P ;) wellcome! 😄 cool stuffs to check. http://blog.zxcoders.com//
zoltrix Posted October 23, 2005 at 11:06 AM Report #5673 Posted October 23, 2005 at 11:06 AM Peço desculpa á tofas, parti do pressuposto "Programador experiente". 😄
vbmaster Posted October 23, 2005 at 02:45 PM Report #5686 Posted October 23, 2005 at 02:45 PM hey zoltrix, isso está excelente..... :shock: hei-de lá chegar um dia... 😄
saramgsilva Posted October 24, 2005 at 01:15 PM Author Report #5714 Posted October 24, 2005 at 01:15 PM obrigada zoltrix, é que o meu tempo livre tem sido pouco,e agora com a latada ainda pior...ja executei o teu programa...curti... o meu tem que ter algo pra parar, senao nao da pra ver nada...não analisei o codigo, mas com + calma vou faze-lo... deixo aqui outro desafio...que por acaso tenho que fazer...mas quem kiser tentar fazer...depois discutimos as resoluçoes: Seja S(k) o conjunto dos numeros primos inferiores a k. Podemos verificar se os numeros n, tal que k <= n<=k*k, sao primos testando se tem ou nao divisores emS(k). Problema: 1. Considere S(16) = {2, 3, 5, 7, 11, 13}. Escrever um programa determinar sucessivamente os numeros primos ate n max. o conjunto S(K) consigo encontra... é o que temos ate agora (criando um vector para guardar os primos...a que chamo S(k)... não esta aqui!!), nao consigo é calcular os n primos de k até k*k ... mais um desafio interessante!! www.saramgsilva.com As minhas apps no WP7 Marketplace Youtube : Galinho - Windows Phone 7.5
zoltrix Posted October 24, 2005 at 01:32 PM Report #5717 Posted October 24, 2005 at 01:32 PM Boas. Para fazeres parar o prog tens de inserir antes do return 0; fflush(stdin);//limpeza do buffer do teclado senão fica lá com o enter e não pára se não tiver isto ou então adicionas 2 getchar getchar();
saramgsilva Posted October 26, 2005 at 01:18 PM Author Report #5829 Posted October 26, 2005 at 01:18 PM o que eu tinha proposto: #include <iostream> using namespace std; #define MAX 100000 void imprime_vector(int p[], int n) { int i; for(i=0;i<n;i++) cout <<"numero primo:"<<p[i]<<endl; } int main() { int i,j,k,m, indice,n,conta_divisores, total ; int vaux[MAX], primos[MAX]; cout <<"Introduza o valor de k="; cin >>k; for(i=1, m=0; i<=k ;i++) // i vai ser menor que o k dado { for(j=1,conta_divisores=0; j<=i; j++) // j tem que ser inferior a i { do { if((i%j==0) && j!=i && j!=1) // aqui vou procurar o numero de divisores conta_divisores++; } while(conta_divisores==1); }// fim do 2º for if(conta_divisores==0 && i!=1) { primos[m]=i; m++;} };// fim do 1º for // imprimir o conjunto S(k) cout<<"o conjunto S(k):"<<endl; imprime_vector(primos,m); // agora quero calcular os numeros primos tais que k <= n <= k*k total=k*k-k; for(i=k;i<=k*k;i++) {vaux[i]=i;} n=m; for(i=0, indice=0; i<=total ;i++) { for(j=0,conta_divisores=0; j<n; j++) { do { if((vaux[i]%primos[j]==0)) conta_divisores++; } while(conta_divisores==1); }// fim do 2º for if(conta_divisores==0) {primos[m]=vaux[i]; m++; //printf("%d esta no %d indice\n",primos[m],m); } };// fim do 1º for cout<<endl<<"os n numero primos : k<= n<=k*k"<<endl; imprime_vector(primos+n,m-n); cout <<endl<<"o nmax="<<primos[m-1]<<endl; cout <<"prima um numero aleatorio para sair...."; cin >>i; // só para parar o programa.. return 0; } // fim do programa main se alguem quiser comentar... 😄 fica aqui o executavel: exe www.saramgsilva.com As minhas apps no WP7 Marketplace Youtube : Galinho - Windows Phone 7.5
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