Programación General > Pascal
Programa Numeros Primos
(1/1)
Xacobeo:
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
gui2485:
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.
--- Fin de la cita ---
La verdad no lo probe... lo escribi aca... dps si tengo ganas hago un seguimiento del tuyo...
Xacobeo:
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._:
¡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 ---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; { Cuerpo Principal. }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); if (EOF(fichero)) and (numero = 0) then begin writeln; writeln('Se ha llegado al final de fichero. Pulse tecla ....'); end else salida_pantalla (numero,primo); if eoln(fichero) then begin coord_x := 0; coord_y := 1; end; until (eof(fichero)) and (numero = 0); close (fichero);End.
¡A programar! :comp:
Navegación
Ir a la versión completa