nakuro Posted December 2, 2006 at 04:53 PM Report #68309 Posted December 2, 2006 at 04:53 PM Boas Estou com um problema com este exercício: Faça um programa que preencha cada posição de um vector (10 números inteiros), com 10 números introduzidos pelo utilizador, depois devera perguntar ao utilizador de deseja visualizar números primos ou não primos utilizando para isso a letras p e n respectivamente.O programa deverá então mostrar os números primos ou não primos conforme a opção dos utilizador. Já estive a fazer o código, só que depois de introduzir os 10 números ele da erro e fecha: #include <stdio.h> int main() { int array[10], array2[10], array3[10], i,j, h, t, calc; char esc; calc=1; t=0; h=0; for (i=0; i<=9;i++) { printf ("introduza os numeros"); scanf ("%d", &array[ i ]); } for (i=0; i<=9;i++) { for ((j=array[ i ]);j--,calc!=0;) { calc=array[ i ]%j; } j=j+1; if (j==1) { array2[ t ]=array[ i ]; t=t+1; } else { array3 [ h ]=array[ i ]; h=h+1; } calc=1; } printf ("para visualizar os numeros primos pressione P , e os nao primos pressione N"); scanf ("%c", &esc); fflush (stdin); if (esc=='p') { for (i=0; i<t; i++) { printf ("os numeros primos são:%d\n", array2[ i ]); } } else { for (j=0;j<h;j++) { printf ("os numeros nao primos sao%d\n", array3[ j ]); } } system("PAUSE"); return 0; } Agradecia uma ajuda 😛 Cumprimentos
Hipnoted Posted December 2, 2006 at 05:06 PM Report #68312 Posted December 2, 2006 at 05:06 PM Bem-vindo ao fórum nakuro! 😛 Antes de mais nada tenta usar o GeSHi (Uma ComboBox que tens nos menus em acima, seleccionas a linguagem e colocas o código entre as tags) para colocar o código. Fica mais legível. 😛 Quanto ao teu problema, não sei que é isso no 2º ciclo for Tens outro for lá dentro mas podias testar se é Primo ou não através de uma condição if . Eu refiro-me mais a esta condição: for ((j=array[ i ]);j--,calc!=0;) Acho que está um pouco confusa. "Nunca discutas com um idiota. Eles arrastam-te até ao seu nível e depois ganham-te em experiência"
nakuro Posted December 2, 2006 at 05:27 PM Author Report #68314 Posted December 2, 2006 at 05:27 PM #include <stdio.h> int main() { int array[10], array2[10], array3[10], i,j, h, t, calc; char esc; calc=1; t=0; h=0; for (i=0; i<=9;i++) { printf ("introduza os numeros"); scanf ("%d", &array[ i ]); } for (i=0; i<=9;i++) { if (array[ i ]!=1) { for ((j=array[ i ]);j--,calc!=0;) { calc=array[ i ]%j; } j=j+1; if (j==1) { array2[ t ]=array[ i ]; t=t+1; } else { array3[ h ]=array[ i ]; h=h+1; } calc=1; } } printf ("para visualizar os numeros primos pressione P , e os nao primos pressione N"); fflush (stdin); scanf ("%c", &esc); fflush (stdin); if (esc=='p') { printf ("os numeros primos sao:"); for (i=0; i<t; i++) { printf ("%d\n", array2[ i ]); } } else { printf ("os numeros nao primos sao:"); for (j=0;j<h;j++) { printf ("%d\n", array3 [ j ]); } } system("PAUSE"); return 0; } Já entendi o erro no programa, quando no preenchimento dos vectores ele ler o valor 1 crasha, tentei incluir um if no pricipio mas não resultou. quanto ao: for ((j=array[ i ]);j--,calc!=0;) ta uma bocado confuso LoL, o j vai tomar o vlor da posiçõ do array, depois decrementa 1 valor a esse valor e faz a condição e o calculo. Tou a calcular se é numero primo de uma maneira esquisita, ainda sou novo nisto :nono1:, é assim: tenho o numero 5 ppor exemplo: e o programa vai fazer: 5%4 5%3 5%2 5%1 se nesta a verificação for 0 então o valor do decremento é 1, que quer dizer que ele só foi divisel por 1 ao longo do programa...um bocado confuso ate pa mim 😛 offtopic:uma curiosidade Já agora hipnoted tu andas na estgf ? eu ando lá 😛
Hipnoted Posted December 2, 2006 at 05:35 PM Report #68315 Posted December 2, 2006 at 05:35 PM offtopic:uma curiosidade Já agora hipnoted tu andas na estgf ? eu ando lá 😛 Eh eh ... Yap, ando na ESTGF. 😛 Mas como soubeste? "Nunca discutas com um idiota. Eles arrastam-te até ao seu nível e depois ganham-te em experiência"
nakuro Posted December 2, 2006 at 05:38 PM Author Report #68316 Posted December 2, 2006 at 05:38 PM http://www.portugal-a-programar.pt/forums/topic/0-find-topic/?do=findComment&comment=15713 Descobri isto na net e foi á conta disto que descobri o forum. 😁 Ah o programa já funciona, acho eu, ainda não testei bem, o codigo certo é o codigo que tem no post anterior. Obrigado pela atençao 😁
Warrior Posted December 2, 2006 at 06:12 PM Report #68320 Posted December 2, 2006 at 06:12 PM /*NOT TESTED*/ int primo(int k) { int i; char found=0; for (i=2;i<=k*k;i++) { if ((k%i)==0) { found=1; break; } } return (found==1)?1:0; }
Hipnoted Posted December 2, 2006 at 06:41 PM Report #68324 Posted December 2, 2006 at 06:41 PM /*NOT TESTED*/ int primo(int k) { int i; char found=0; for (i=2;i<=k*k;i++) { if ((k%i)==0) { found=1; break; } } return (found==1)?1:0; } Não me parece muito bom para aprendizagem o uso de break´s. Normalmente quem se está a iniciar em C e algoritmia deve evitar esse tipo de código. 😛 "Nunca discutas com um idiota. Eles arrastam-te até ao seu nível e depois ganham-te em experiência"
Rui Carlos Posted December 2, 2006 at 06:48 PM Report #68328 Posted December 2, 2006 at 06:48 PM /*NOT TESTED*/ int primo(int k) { int i; char found=0; for (i=2;i<=k*k;i++) { if ((k%i)==0) { found=1; break; } } return (found==1)?1:0; } concordo com o Hipnoted, ainda para mais quando tens a variável 'found' que permite saber quando deves parar o cilco. outro pormenor, não devia ser 'i<=sqrt(k)' em vez de 'i<=k*k'? Rui Carlos Gonçalves
nakuro Posted December 2, 2006 at 07:35 PM Author Report #68344 Posted December 2, 2006 at 07:35 PM eu ainda não tou muito familiarizado com algumas maneiras de fazer o codigo, ainda tou nos principios 😛
Hipnoted Posted December 2, 2006 at 09:29 PM Report #68371 Posted December 2, 2006 at 09:29 PM eu ainda não tou muito familiarizado com algumas maneiras de fazer o codigo, ainda tou nos principios 😛 É por isso mesmo que eu disse aquilo. Se o teu professor vir um break no meio dum for corta de cima a baixo. Warrior, não tomes isto como uma ofensa ou algo do género. 😛 "Nunca discutas com um idiota. Eles arrastam-te até ao seu nível e depois ganham-te em experiência"
TheDark Posted December 3, 2006 at 03:46 AM Report #68408 Posted December 3, 2006 at 03:46 AM outro pormenor, não devia ser 'i<=sqrt(k)' em vez de 'i<=k*k'? Pois devia, ou então mais simplesmente 'i*i <= k' Desaparecido.
Warrior Posted December 3, 2006 at 08:26 AM Report #68414 Posted December 3, 2006 at 08:26 AM Sim, eu nao testei o código, devia ser i*i<=k sim. Quanto ao break, é daquelas coisas.. de facto não é um hábito muito bom, mas este vem em nome da velocidade. Podemos removê-lo que o programa funciona exactamente igual, mas mais lento. Pelo outro lado, a outra alternativa, for (i=2;(i*i<=k) && (!found);i++) talvez complicasse demais.. Não deixo de concordar com vocês. Só deve usar breaks quem sabe o que está a fazer, e muitos professores cortam quando os vêm por isso mesmo.
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