<div>Gracias Steven. Me ayudo mucho. Sii, del N° 13 en adelante daba siempre error. Lo cambie y funciona aunque sigue siendo de principiante.</div>
<div> </div>
<div><font style="BACKGROUND-COLOR: #ffff99">#include <stdio.h></font></div>
<div><font style="BACKGROUND-COLOR: #ffff99">int EsPrimo(int N)<br>{<br> int Divisor;<br> int Contador;</font></div>
<div><font style="BACKGROUND-COLOR: #ffff99"> Divisor = 1;<br> Contador = 0;</font></div>
<div><font style="BACKGROUND-COLOR: #ffff99"> if (N > 0)<br> {<br> do<br> {<br> if (N % Divisor == 0)<br> Contador = Contador + 1;<br> Divisor = Divisor + 1;<br>
}<br> while (Divisor <= N);<br> if (Contador <= 2)<br> return 1;<br> }<br> return 0;<br>}</font></div>
<div><br><font style="BACKGROUND-COLOR: #ffff99">void main ()<br>{<br> int i;<br> printf("Ingrese numero: ");<br> scanf("%d", &i);<br> if(EsPrimo(i))<br> printf("El numero es primo");<br>
else<br> printf("El numero no es primo");</font></div>
<div><font style="BACKGROUND-COLOR: #ffff99"> getch();<br>}</font></div>
<div> </div>
<div>Saludos<br><br></div>
<div class="gmail_quote">2008/5/11 Steven Davidson <<a href="mailto:srd4121@njit.edu">srd4121@njit.edu</a>>:<br>
<blockquote class="gmail_quote" style="PADDING-LEFT: 1ex; MARGIN: 0px 0px 0px 0.8ex; BORDER-LEFT: #ccc 1px solid">Hola Ariel,<br>
<div class="Ih2E3d"><br>Ariel Tarifeño wrote:<br>> Estoy tratando de traducir un seudocodigo de la U pero me da muchos<br>> errores al compilar y no entiendo aun que esta mal.<br>><br><br></div>Si tienes errores de compilación, deberías darnos los mensajes que el<br>
compilador te muestra, al igual que el nombre y versión del compilador<br>que estás usando.<br><br>Veamos el código fuente.<br>
<div class="Ih2E3d"><br>> #include <stdio.h><br>> #include <conio.h><br>><br><br></div>Ten en cuenta que <conio.h> no es un fichero de cabecera estándar y por<br>tanto no todos los compiladores deben conocerlo ni la biblioteca<br>
asociada de "conio".<br>
<div class="Ih2E3d"><br>> int Factorial(int N)<br>> {<br>> int Fact;<br>> While (N > 0)<br><br></div>El vocablo correcto es 'while' (en minúsculas). Desconozco si realmente<br>lo escribiste así en el código fuente, o es una "conversión"<br>
automáticamente de tu correo-e.<br>
<div class="Ih2E3d"><br>> {<br>> Fact = Fact * N;<br>> N = N - 1;<br>> }<br>> return Fact;<br>> }<br><br></div>El error está en 'Fact'. Cuando declaras una variable local, ésta no<br>
contiene un valor conocido. De hecho, contiene cualquier valor que<br>estaba ahí en memoria. Por eso, decimos que contiene "basura". La regla<br>de oro en la programación es: "Si metes basura, te saldrá basura".<br>
<br>La solución es inicializar la variable 'Fact' para que contenga un valor<br>válido y esperado. En este caso, sugiero el valor de 1, porque así<br>coincide con el caso de 0! = 1 y además es el elemento neutro de la<br>
multiplicación; o sea,<br><br>Fact = 1 * N => Fact = N<br><br>Dicho esto, podrías usar un bucle 'for', en lugar de 'while'. Así puedes<br>escribir las operaciones iniciales del algoritmo y el control de 'N', en<br>
la cabecera de 'for'. Esto sería,<br><br>for( Fact=1; N>0; N-- ) Fact *= N;<br><br>Como puedes ver, también aconsejo usar los operadores que combinan<br>operaciones aritméticas y asignaciones.<br>
<div class="Ih2E3d"><br>><br>> int EsPrimo(int N)<br>> {<br>> If ((Factorial(N-1)+1) % N == 0)<br>> Return 1;<br><br></div>Nuevamente, los vocablos de C están en minúsculas, específicamente, 'if'<br>
y 'return'.<br><br>> else<br>> return 0;<br>> }<br><br>Aunque este código sea lógico, no es necesario. Si podemos enviar<br>cualquier número entero distinto de cero, y no tiene por qué ser un 1,<br>
entonces podemos reescribir el código como,<br><br>return (Factorial(N-1)+1) % N == 0;<br>
<div class="Ih2E3d"><br>><br>> void main ()<br>> {<br>> int i;<br>> clrscr();<br>> printf("Ingrese numero: ");<br>> scanf("%d", &i);<br>> if(EsPrimo(i))<br>
> printf("El numero es primo");<br>> else<br>> printf("El numero no es primo");<br>><br>> getch();<br>> }<br>><br><br></div>Este método es bastante interesante; lo desconocía por completo. De<br>
todos modos, debes tener en cuenta que 'int' tiene sus limitaciones.<br>Esto conlleva a un cálculo erróneo de 'Factorial()', en cuanto su<br>parámetro se eleve a partir de 12 (int=32 bits) y 21 (int=64 bits).<br>
<br><br>Espero que esto te ayude.<br><font color="#888888"><br>Steven<br></font>
<div>
<div></div>
<div class="Wj3C7c"><br><br><br>_______________________________________________<br>Lista de correo Cconclase <a href="mailto:Cconclase@listas.conclase.net">Cconclase@listas.conclase.net</a><br><a href="http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net" target="_blank">http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net</a><br>
Bajas: <a href="http://listas.conclase.net/index.php?gid=2&mnu=FAQ" target="_blank">http://listas.conclase.net/index.php?gid=2&mnu=FAQ</a><br></div></div></blockquote></div><br>