Inacabado Posted December 8, 2015 at 07:58 PM Report Share #590485 Posted December 8, 2015 at 07:58 PM (edited) Muito boa noite a todos. Já vai algum tempo que não participo no forum, pois tenho andado ocupado com coisas... no entanto, espero que tudo esteja pelo melhor com toda a gente! Estive e fazer um programa para encontrar números primos no qual resolvi usar funções para treinar, no entanto o código está-me a dar um comportamento estranho, o qual nem previa, nem consigo descobrir a causa. O código é o que segue: #include <iostream> using namespace std; int checkPrime(int); int main() { int n,i,a; cout << "insira o numero o qual pretende saber se é ou não número primo: \n"; cin >> n; i=checkPrime(n); if (i==0) cout << i << " não é um número primo!\n"; else cout << i << " É um número primo!\n"; return 0; } int checkPrime(int a) { int i,p=0; for(i=2;i<=a/2;i++) { if(a==2) return p=1; else if(a%i==0) return p; else return p=1; } } O comportamento estranho é que me está a dar sempre independentemente do número n que coloque é este: insira o numero o qual pretende saber se é ou não número primo: n 1 É um número primo! Ou seja independetemente do numero n que coloque diz-me sempre que inseri 1!!! Agradecia imenso a vossa ajuda neste caso. Abraço a todos e boa noite mais uma vez! Edited December 8, 2015 at 08:03 PM by Inacabado Link to comment Share on other sites More sharing options...
HappyHippyHippo Posted December 8, 2015 at 08:25 PM Report Share #590487 Posted December 8, 2015 at 08:25 PM (edited) Duas coisas: o que retorna a funcao que criaste? Porque e que estas a fazer output do resultado da funcao em vez do numero verificado? PS: a funcao esta errada Edited December 8, 2015 at 08:26 PM by HappyHippyHippo IRC : sim, é algo que ainda existe >> #p@p Portugol Plus Link to comment Share on other sites More sharing options...
Inacabado Posted December 8, 2015 at 09:28 PM Author Report Share #590492 Posted December 8, 2015 at 09:28 PM (edited) Porque e que estas a fazer output do resultado da funcao em vez do numero verificado? corrigido esse era tão óbvio que me passou! o que retorna a funcao que criaste?PS: a funcao esta errada Está-em a escapar qualquer coisa mas honestamente não consigo perceber porque é que a função está errada! A função faz (em comentado): int checkPrime(int a)// função de inteiros que recebe um inteiro a { int i,p=0;// variável i para iteracção, variável p inicializada a 0 para nenhum primo encontrado for(i=2;i<=a/2;i++)//i vai até a/2 porque a partir daí o número é certamente primo { if(a==2) return p=1;// se a igual a 2 retorna o valor de 1 porque 2 é primo; foi encontrado 1 número primo. else if(a%i==0)// a a dividir por i resto zero então é divisivel por inteiro situado entre 2 e a return p;// por isso retorna 0 pois não é primo... else return p=1;// caso contrário o número é primo e devolve 1 } } Não percebo mesmo o que está mal. Será que deveria usar um float??? Obrigado Hippo. Edited December 8, 2015 at 09:30 PM by Inacabado Link to comment Share on other sites More sharing options...
Inacabado Posted December 8, 2015 at 09:44 PM Author Report Share #590494 Posted December 8, 2015 at 09:44 PM Alterei ligeiramente código para: #include <iostream> using namespace std; int checkPrime(int); int main() { int n,i,a; cout << "insira o numero o qual pretende saber se é ou não número primo: \n"; cin >> n; i=checkPrime(n); if (i==0) { cout << n << " não é um número primo!\n"; } else if (i==1) { cout << n << " É um número primo!\n"; } return 0; } int checkPrime(int a) { int i,p=1; for(i=2;i<=a/2;i++) { if(a%i==0) return p=0; break; } return p; } Não me dá mais aquele comportamento, mas algo está mal com este codigo/função até porque ao inserir o número 45 ele dá-me o mesmo como número primo, o que está claramente errado pois 45 é divisivel por 3 ou 15 por exemplo... Link to comment Share on other sites More sharing options...
HappyHippyHippo Posted December 8, 2015 at 10:15 PM Report Share #590495 Posted December 8, 2015 at 10:15 PM para que serve o uso das chavetas num código ? como é avaliado o código de uma estrutura de controlo caso não é usado as chavetas ? IRC : sim, é algo que ainda existe >> #p@p Portugol Plus Link to comment Share on other sites More sharing options...
Inacabado Posted December 8, 2015 at 10:42 PM Author Report Share #590497 Posted December 8, 2015 at 10:42 PM (edited) Certo já alterei o código eram realmente as chavetas! Código correcto da função: int checkPrime(int a) { int i,p=1; for(i=2;i<=a/2;i++) { if(a%i==0) { p=0; break; } } return p; } para que serve o uso das chavetas num código ? como é avaliado o código de uma estrutura de controlo caso não é usado as chavetas ? O uso das chavetas num código serve para isolar esse pedaço de código a fim de obter resultados pretendidos dentro desse bloco de código. Se apenas tiver uma instrução não há necessidade de usar as chavetas. Caso não se use as chavetas para diferenciar blocos de instrução fica tudo baralhado e obtêm-se muito possivelmente erros que não se estavam á espera. No meu caso quando inseria o 45 e me dava como número primo isso era porque ele lia tudo seguido, não diferenciava e saia logo na primeira volta por causa do break. Código correcto: #include <iostream> using namespace std; int checkPrime(int); int main() { int n,i,a; cout << "insira o numero o qual pretende saber se é ou não número primo: \n"; cin >> n; i=checkPrime(n); if (i==0) { cout << n << " não é um número primo!\n"; } else if (i==1) { cout << n << " É um número primo!\n"; } return 0; } int checkPrime(int a) { int i,p=1; for(i=2;i<=a/2;i++) { if(a%i==0) { p=0; break; } } return p; } Obrigado Hippo, obrigado por todos os que nos ajudas; abraço Edited December 8, 2015 at 10:46 PM by Inacabado Link to comment Share on other sites More sharing options...
HappyHippyHippo Posted December 8, 2015 at 11:20 PM Report Share #590500 Posted December 8, 2015 at 11:20 PM No meu caso quando inseria o 45 e me dava como número primo isso era porque ele lia tudo seguido, não diferenciava e saia logo na primeira volta por causa do break. isto é para todos aqueles que ignoram uma resposta a um tópico que não é mais do que uma pergunta: a pergunta é para direccionar o criador do tópico para o problema em questão. ignorar a pergunta é meio caminho andado para não obter ajuda no fórum. IRC : sim, é algo que ainda existe >> #p@p Portugol Plus 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