<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>