thinkabout Posted December 1, 2012 at 10:35 PM Report #485367 Posted December 1, 2012 at 10:35 PM (edited) Boa Noite, O que há errado aqui ? #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> /* Desenvolva um programa que determine os divisores de um número inteiro introduzido pelo utilizador. */ int main() { int valor,i,divisor; printf("Insira um valor para verificar os seus divisores: \n"); scanf("%d", &valor); for (i = 1; i < valor; i++) { divisor=valor%i==0; printf("E devisor %d \n", divisor); } return 0; } Exemplo do output: Nr inserido 5 - E devisor 1 E devisor 0 E devisor 0 E devisor 0 Edited December 3, 2012 at 11:22 PM by thinkabout
thoga31 Posted December 1, 2012 at 10:44 PM Report #485368 Posted December 1, 2012 at 10:44 PM Estás a atribuir à variável divisor a veracidade de uma condição, valor%i==0, e a cada iteração imprimes sempre uma mensagem a dizer "E divisor" seguido do valor dessa condição - 1 para verdadeiro, 0 para falso. Knowledge is free!
thinkabout Posted December 1, 2012 at 10:59 PM Author Report #485370 Posted December 1, 2012 at 10:59 PM Existe alguma maneira de eliminar ali aquele último printf ? int main() { int valor,i; printf("Insira um valor para verificar os seus divisores: \n"); scanf("%d", &valor); for (i = 1; i < valor; i++) { if (valor%i==0) { printf("E devisor %d \n", i); } } printf("E devisor %d \n", valor); return 0; }
thoga31 Posted December 1, 2012 at 11:04 PM Report #485371 Posted December 1, 2012 at 11:04 PM Sim, mudar a condição de término do ciclo for de modo a contemplar o valor de valor. Knowledge is free!
Solution thinkabout Posted December 1, 2012 at 11:10 PM Author Solution Report #485372 Posted December 1, 2012 at 11:10 PM Não estou a ver como, se meter o contador do for = 0 ele estoira porque depois vai tentar dividir por 0 Sim, mudar a condição de término do ciclo for de modo a contemplar o valor de valor. Feito , a bocado tentei meter 0 no contador do for, mas estoirava porque tentava dividir por 0. for (i = 0; i < valor; i++) Agora já corrigi para for (i = 1; i < valor+1; i++) int main() { int valor,i; printf("Insira um valor para verificar os seus divisores: \n"); scanf("%d", &valor); for (i = 1; i < valor+1; i++) { if (valor%i==0) { printf("E devisor %d \n", i); } } return 0; }
thoga31 Posted December 1, 2012 at 11:13 PM Report #485373 Posted December 1, 2012 at 11:13 PM Em vez de i < valor+1, porque não fizeste tão-somente i <= valor? Knowledge is free!
thinkabout Posted December 1, 2012 at 11:14 PM Author Report #485374 Posted December 1, 2012 at 11:14 PM Não me lembrei. 😞
thinkabout Posted December 1, 2012 at 11:45 PM Author Report #485376 Posted December 1, 2012 at 11:45 PM Segue aqui uma V2, no caso de queremos que o programa corra mais que uma vez. (falta blindar o programa caso o utilizador inserida um carácter) int main() { int valor,i; do { puts("Insira um valor para verificar os seus divisores: (insere 0 ou um valor negativo para terminar)"); scanf("%d", &valor); for (i = 1; i <= valor; i++) { if (valor%i==0) { printf("E devisor %d \n", i); } } } while (valor > 0); puts("Foi dada ordem para terminar"); return 0; }
thoga31 Posted December 1, 2012 at 11:53 PM Report #485377 Posted December 1, 2012 at 11:53 PM Isso não termina o programa se inserires valores negativos, e não o termina de igual forma se inserires um valor positivo - tens aí um belo molho de bróculos que te dá um loop infinito. Onde está a parte que termina o programa caso o utilizador insira 0 ou um nº negativo? Para que puseste um puts dentro de um while, e ainda para mais com a condição valor > 0? Knowledge is free!
thinkabout Posted December 2, 2012 at 12:02 AM Author Report #485378 Posted December 2, 2012 at 12:02 AM Eu testei terminar com o 0 e com valores negativos e termina. O puts meti para tirar o \n porque não estou a inserir nada de especial dentro do printf.
HappyHippyHippo Posted December 2, 2012 at 12:06 AM Report #485379 Posted December 2, 2012 at 12:06 AM (edited) qual o número entre valor / 2 e valor que é divisor de valor ?? Edited December 2, 2012 at 12:06 AM by HappyHippyHippo IRC : sim, é algo que ainda existe >> #p@p Portugol Plus
thinkabout Posted December 2, 2012 at 12:07 AM Author Report #485380 Posted December 2, 2012 at 12:07 AM qual o número entre valor / 2 e valor que é divisor de valor ?? Não entendi a questão.
HappyHippyHippo Posted December 2, 2012 at 12:09 AM Report #485381 Posted December 2, 2012 at 12:09 AM pois ... é uma questão de matemática ... se valor for 30, qual o valor entre valor / 2 (15) e valor (30) que é divisor de valor (30) ? IRC : sim, é algo que ainda existe >> #p@p Portugol Plus
thinkabout Posted December 2, 2012 at 12:17 AM Author Report #485382 Posted December 2, 2012 at 12:17 AM (edited) pois ... é uma questão de matemática ... se valor for 30, qual o valor entre valor / 2 (15) e valor (30) que é divisor de valor (30) ? Já entendi a questão... Agora não estou a ver é como vou aplicar a condição. 😕 https://www.youtube.com/embed/oe8tAU01YBw?feature=oembed Já agora, porque é quando meto o código o identação fica toda alinhada a esquerda ? Edited December 2, 2012 at 12:20 AM by thinkabout
HappyHippyHippo Posted December 2, 2012 at 12:21 AM Report #485383 Posted December 2, 2012 at 12:21 AM queres descobrir através da factorização ? tenta seguir o que ele faz ... desculpa mas não vou dizer como, isso é trabalho teu porque no video até que explica bem o que tens de fazer .. IRC : sim, é algo que ainda existe >> #p@p Portugol Plus
thinkabout Posted December 2, 2012 at 02:15 AM Author Report #485387 Posted December 2, 2012 at 02:15 AM queres descobrir através da factorização ? tenta seguir o que ele faz ... desculpa mas não vou dizer como, isso é trabalho teu porque no video até que explica bem o que tens de fazer .. Não, o exercício era só para aplicar o circulo for, não preciso de usar factorização. Penso que o código podia estar melhor de forma a ele não correr os valores todos, contudo não o consegui melhorar. 😞
HappyHippyHippo Posted December 2, 2012 at 09:52 AM Report #485392 Posted December 2, 2012 at 09:52 AM então basta pensar no que te disse antes : pois ... é uma questão de matemática ... se valor for 30, qual o valor entre valor / 2 (15) e valor (30) que é divisor de valor (30) ? IRC : sim, é algo que ainda existe >> #p@p Portugol Plus
thinkabout Posted December 2, 2012 at 11:26 AM Author Report #485402 Posted December 2, 2012 at 11:26 AM Penso que assim está melhor, já deito fora logo metade dos valores. (valor / 2) Agora só me faltava a segunda parte da explicação que está no video que é quando o I fosse superior a um dos divisores ele parar. #include <stdio.h> int main() { int valor,i; do { puts("Insira um valor para verificar os seus divisores: (insere 0 ou um valor negativo para terminar)"); scanf("%d", &valor); printf("E devisor %d \n", valor); for (i = valor/2; i > 0 && i <= valor ; i--) { if (valor%i==0) { printf("E devisor %d \n", i); } } } while (valor > 0); // (falta blindar o programa caso o utilizador inserida um carácter) puts("Foi dada ordem para terminar"); return 0; }
HappyHippyHippo Posted December 2, 2012 at 11:48 AM Report #485403 Posted December 2, 2012 at 11:48 AM Agora só me faltava a segunda parte da explicação que está no video que é quando o I fosse superior a um dos divisores ele parar. não sei onde foste tirar essa ideia, mas não foi do vídeo ... IRC : sim, é algo que ainda existe >> #p@p Portugol Plus
thinkabout Posted December 2, 2012 at 12:17 PM Author Report #485405 Posted December 2, 2012 at 12:17 PM (edited) No video ele começa por dividir por 1,2,3,4,5 quando chega ao 6, ele vai parar , diz que já encontrou todos. O ciclo vai-se executar 30 vezes em vez de só se executar 6 vezes. (no caso do 30) não tendo em conta o (valor / 2) https://www.youtube.com/embed/oe8tAU01YBw?start=46&feature=oembed Edited December 2, 2012 at 12:24 PM by thinkabout
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