• Jueves 28 de Marzo de 2024, 22:21

Autor Tema:  Programa Numeros Primos  (Leído 5996 veces)

Xacobeo

  • Nuevo Miembro
  • *
  • Mensajes: 2
    • Ver Perfil
Programa Numeros Primos
« en: Martes 14 de Noviembre de 2006, 13:23 »
0
Buenas,

Me he matriculado de nuevo en la FACULTAD DE INFORMÁTICA, y como primera practica de programación, tengo que calcular, el número primo, lo que pasa es que tengo problemas a la hora de ejecutarlo.

Dicho programa tiene que leer de un fichero, en los cuales hay números, da igual que tipo sea, y tendrá que indicar si es primo, o no es primo, pero a la hora d ejecutarlo en la última instrucción, el bucle me lo hace una vez más (dependiendo si cambio las condiciones), y a parte si el número es 0 o bien hay más espacios en blanco, "peta".

Program Numero_Primo (fichero,output);
 
Var
 Fichero: Text;
 Numero,  Coord_X, Coord_Y: Integer;
 final,Primo: Boolean;
 h:char;

 Function numeroprimo(numero:integer):boolean;
 var
  valor,resto_div: integer;
  begin
  valor := 1; resto_div :=1;
   if numero = 1 then
    primo := true


   else
    begin
      while resto_div <> 0 do
      begin
        valor := valor +1;
        resto_div:= (numero mod valor);
      end;
   if numero = valor then numeroprimo := true
   else numeroprimo := false;
 end;
end;

 Procedure salida_pantalla(numero1:integer;var primo:boolean);
 Begin
   writeln;
   Writeln('********************************************************');
   Writeln('* Nombre del Alumno: Jos‚ Antonio Barreiro Calvi¤o     *');
   Writeln('* Asignatura: Fundamentos de Programaci¢n (FP I)       *');
   Writeln('* Curso: ITIG (Ingenieria T‚cnica Inform tica Gesti¢n) *');
   Writeln('* N£mero de Matr¡cula: bd003                           *');
   Writeln('********************************************************');
   writeln;
   if primo = false then
     writeln (output,'El N£mero: ',numero1, ' no es n£mero primo en la pos X:', coord_x, ' pos Y:', coord_y)
   else
       writeln (output,'El N£mero: ',numero1, ' es n£mero primo en la pos X:', coord_x, ' pos Y:', coord_y);
  End;

 Begin
  primo := true; coord_x:=0; coord_y := 1;
  assign (fichero, 'numeros.txt');
  reset(fichero);
  repeat
   coord_x:=coord_x+1;
   read(fichero,numero);
   primo:=numeroprimo(numero);
   salida_pantalla (numero,primo);
   if eoln(fichero) then
        begin
         coord_x := 0; coord_y := 1;
        end;
    if  eof(fichero) then
     writeln;
     writeln('Se ha llegado al final de fichero. Pulse tecla ....');
   until (eof(fichero));
  close (fichero);
 End.

Alguna sugerencia !!!!!!

Gracias de antemano
El mensaje contiene 1 archivo adjunto. Debes ingresar o registrarte para poder verlo y descargarlo.

gui2485

  • Nuevo Miembro
  • *
  • Mensajes: 7
    • Ver Perfil
Re: Programa Numeros Primos
« Respuesta #1 en: Sábado 18 de Noviembre de 2006, 03:34 »
0
La verdad que 0 ganas de hacer un seguimiento ahora pero lo que haria yo es...

Leer numero;
Mirar si es primo con una funcion boolean que sirva para eso e indicar si es o no;
Pasar al siguiente numero y asi hasta el final de archivo;


Citar
Program NPrimo;

Uses Crt;

Type
        TDato=Integer;
        TArchivo:=ile Of TDato;


Function EsPrimo(Num:Tdato):Boolean;

Var
      Primo:Boolean;
      i:Integer;

Begin

Primo:=True;
i:=2;

While (Primo) AND (i<Num) Do
         Begin
         If Num Mod i = 0 Then Primo:=False;
         Inc(i);
         End;

EsPrimo:=Primo;

End;

//Bloque Principal---------

Var  Archivo:TArchivo;
       Contenido:Tdato;



Begin

Assign(Archivo,'c:\Archivo.dat');
Reset(Archivo);

While Not EOF(Archivo) Do

         Begin
         Read(Archivo,Contenido);
         If EsPrimo(Contenido) Then Writeln(Contenido);
         End;

Close(Archivo);

Readkey;

End.

 La verdad no lo probe... lo escribi aca... dps si tengo ganas hago un seguimiento del tuyo...

Xacobeo

  • Nuevo Miembro
  • *
  • Mensajes: 2
    • Ver Perfil
Re: Programa Numeros Primos
« Respuesta #2 en: Sábado 18 de Noviembre de 2006, 19:57 »
0
Buenas,

he probado el codigo fuente que me has enviado. gracias, pero al hacer la prueeba, al tuyo le pasa lo mismo que al mio. Al final cuenta uno más el bucle. o bien es del programa o del propio fichero.

Saludos,

_.B._

  • Miembro activo
  • **
  • Mensajes: 88
    • Ver Perfil
Re: Programa Numeros Primos
« Respuesta #3 en: Lunes 27 de Noviembre de 2006, 21:25 »
0
¡Saludos!
Al parecer era cuestión de orden de prioridades en las sentencias. Podrías hacer un par de corridas en frío para verificar que el orden es correcto.
Bueno, también había que tomar en cuenta la posibilidad de que leyera un número 0 al enviar un READ a un archivo sin números (al final del archivo si dejas espacios en blanco o saltos de línea).
Hice unas pruebas, y con estas modificaciones funciona:

Código: Text
  1. Program Numero_Primo (fichero,output);
  2.  
  3. Var
  4.   Fichero: Text;
  5.   Numero, Coord_X, Coord_Y: Integer;
  6.   final,Primo: Boolean;
  7.   h:char;
  8.  
  9. Function numeroprimo(numero:integer):boolean;
  10. var
  11.   valor,resto_div: integer;
  12. begin
  13.   valor := 1; resto_div :=1;
  14.   if numero = 1 then
  15.     primo := true
  16.   else
  17.     begin
  18.       while resto_div &#60;&#62; 0 do
  19.       begin
  20.         valor := valor +1;
  21.         resto_div:= (numero mod valor);
  22.       end;
  23.       if numero = valor then numeroprimo := true
  24.       else numeroprimo := false;
  25.     end;
  26. end;
  27.  
  28. Procedure salida_pantalla(numero1:integer;var primo:boolean);
  29. Begin
  30.   writeln;
  31.   Writeln('********************************************************');
  32.   Writeln('* Nombre del Alumno: Jos‚ Antonio Barreiro Calvi¤o *');
  33.   Writeln('* Asignatura: Fundamentos de Programaci¢n (FP I) *');
  34.   Writeln('* Curso: ITIG (Ingenieria T‚cnica Inform tica Gesti¢n) *');
  35.   Writeln('* N£mero de Matr¡cula: bd003 *');
  36.   Writeln('********************************************************');
  37.   writeln;
  38.   if primo = false then
  39.     writeln (output,'El N£mero: ',numero1, ' no es n£mero primo en la pos X:', coord_x, ' pos Y:', coord_y)
  40.   else
  41.     writeln (output,'El N£mero: ',numero1, ' es n£mero primo en la pos X:', coord_x, ' pos Y:', coord_y);
  42. End;
  43.  
  44. { Cuerpo Principal. }
  45. Begin
  46.   primo := true; coord_x:=0; coord_y := 1;
  47.   assign (fichero, 'numeros.txt');
  48.   reset(fichero);
  49.   repeat
  50.     coord_x:=coord_x+1;
  51.     read(fichero,numero);
  52.     primo:=numeroprimo(numero);
  53.     if (EOF(fichero)) and (numero = 0) then
  54.     begin
  55.       writeln;
  56.       writeln('Se ha llegado al final de fichero. Pulse tecla ....');
  57.     end
  58.       else
  59.       salida_pantalla (numero,primo);
  60.     if eoln(fichero) then
  61.     begin
  62.       coord_x := 0; coord_y := 1;
  63.     end;
  64.   until (eof(fichero)) and (numero = 0);
  65.   close (fichero);
  66. End.
  67.  

¡A programar! :comp:
¡Olmo, dame peras!
www.BernardoLG.net