Pascal/Turbo Pascal - Procedimientos(no se leer)

 
Vista:

Procedimientos(no se leer)

Publicado por Yeilos (12 intervenciones) el 07/12/2004 13:48:34
Hola, tengo q acer un programa(con un fixero de texto) y dentro que haya: en la primera linea un caracter: que sea c si es cuadrado, t si es triangulo y r si es rectangulo. despues sus correspondientes medidas para calcular el area, o sea:
c 5
t 4 7 (en estos ojo q hay q leer dos datos)
r 6 9
para LEER los datos de 1 linea tengo que hacer un subprograma(precedimiento yo tengo)
para el cuadrado, rectangulo y triangulo, otro,(cada uno el suyo) yo en cuadrado he usado una function y en los otro un procedure.

Desde el programa principal se determinara cual es la figura de area mayor.(asiq tb he de tener en cuenta si es c, t o lo q sea)usando el subprograma de lectura y segun la figura llamar al subprograma correspondiente.

Esque no tengo ni idea! y lo peor, xq lo otro weno pero...NO ME SALE EL SUBPROGRAMA DE LEER, NO LEE NADA!! ayudarme x favor

Mi programa x si sirve
PROGRAM Prc2a (F,Output);

VAR
F:text;
N1,N2,N3:integer;
Mayor:Integer;
PROCEDURE leer (Var Fich:text; Var Dim1,Dim2,Dim3:Integer);
Var
car:char;
BEGIN
while not eof(Fich) do
While not eoln(Fich) do
begin
repeat
read(Fich,car);
until car<>' ';
If car='c' then read(Fich,Dim1);
end;
end;

FUNCTION cuadrado (C:integer):integer;

BEGIN
cuadrado:=C*C;
End;

BEGIN
Assign(F,'A:\datosp2.txt');
Reset(F);
leer(F);
cuadrado(N1);
write(N1);
close(F)
End.

Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Procedimientos(no se leer)

Publicado por Ivanchuk (1 intervención) el 07/12/2004 19:24:43
Me parece que necesito anteojos, es que no entiendo el codigo :S. Mira hacete una function que lea una linea y luego un case para saber a que procedimiento llamar, si entendi bien creo.
function LeeLinea(var F: Text): string;
var temp: string;
begin
ReadLn(F, temp);
LeeLinea:= temp;
end;
Cuando vuelve de LeeLinea metes el case:
case StrDevuelto[1] of
'c': Area1:=Cuadrado;
't': Area1:=Triangulo;
'r': Area1:=Rectangulo;
end;
if Area1>AreaMax then
begin
AreaMax:= Area1;
Figura:= StrDevuelto[1];{Para saber que tipo de figura es la mas grande}
end;
Por supuesto esto dentro de un bucle con un Eof(F) y AreaMax incializado a cero. Luego en las function del case calculas el area de la figura correspondiente. Como ya tenes la linea leida podes usar funciones de la unidad Strings, fijate en la ayuda. Vas a necesitar convertir los string a valores numericos para calcular el area, podes usar la funcion Val. De ultima usa la funcion Seek si queres moverte por el archivo. Es lo que entendi, espero que te haya sido de ayuda. Saludos.....
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Procedimientos(no se leer)

Publicado por Yeilos (12 intervenciones) el 08/12/2004 15:50:20
Esq no pueo usar las unidades pascal ad+ q no se q para q sirve eso xD
He conseguido(aciendo un lio q ni mentero que lea los numeros. Pero no me ace la comparacion en el programa principal, xq creo q cree q el fixero NO termina. os lo pongo; gracias

PROGRAM Prc2a (F,Output);

VAR
F:text;
N1,N2,N3:Real;
Mayor:Real;
L1,L2,L3:char;

PROCEDURE hasta (var Fichero:Text; var char:char);
BEGIN
repeat
read(Fichero,char)
until char<>' ';
end;

FUNCTION cuadrado (C:Real):Real;

BEGIN
cuadrado:=C*C;
End;

PROCEDURE rectangulo (R1,R2:Real; Var Rt:Real);
BEGIN
Rt:=R1*R2;
End;

PROCEDURE triangulo (T1,T2:Real; Var Tt:Real);
BEGIN
Tt:=T1*T2/2;
End;

PROCEDURE leer (Var Fich:text; var Dim1,Dim2,Dim3:Real; letra1,letra2,letra3:char);
Var
car:char;
num,num1,num2:Real;
BEGIN
While not eof(Fich) Do
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Procedimientos(no se leer)

Publicado por Yeilos (12 intervenciones) el 08/12/2004 15:51:51
He tenio q dividirlo en 2, aunq sa escrito la ultima parte.
BEGIN
hasta(Fich,car);(esto es mio y solo lee, ta bien)
If car='c' then
begin
letra1:=car;
read(Fich,car);
read(Fich,num);
cuadrado(num);
Dim1:=num;
writeln;
end;
If car='r' then
begin
letra2:=car;
read(Fich,car);
read(Fich,num);
read(Fich,car);
read(Fich,num1);
rectangulo(num,num1,num2);
Dim2:=num2;
writeln;
end;
If car='t' then
begin
letra3:=car;
read(Fich,car);
read(Fich,num);
read(Fich,num1);
triangulo(num,num1,num2);
Dim3:=num2;
writeln;
end;
end;
if eof then writeln; (SI pongo la variable o kito todo, el programa se cierra al ejecutar)
end;

BEGIN
Assign(F,'A:\datosp2.txt');
Reset(F);
leer(F,N1,N2,N3,L1,L2,L3);
Mayor:=N1;
If N2>=Mayor then Mayor:=N2;
If N3>=Mayor then Mayor:=N3;
writeln(Mayor);
close(F)
End
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar