Programación General > Pascal
No compila problema de ejemplo de Joyanes Aguilar
guqui1969:
Hola, gente, comencé hace poco en Pascal con el libro "Programación en Turbo/Pascal 7" 3ra edición de Luis Joyanes Aguilar, en el primer
ejemplo del libro, tengo el problemita con el código fuente que no funciona ni a palos, si alguna alma noble puede orientarme estaría muy agracedido. El tema es así:
Problema 1.1
Se desea obtener una tabla con las depreaciaciones acumuladas y los valores realdes de cada año, de un automóvil comprado en 1.800.000 pesetas en el año 1988, durante los seis años siguientes suponiendo un valor de recuperación o rescate de 120.000. Realizar el análisis del problema, conociendo la fórmula de
depreciación anual constante D para cada año de vida útil.
D = (coste - valor de recuperación) / vida útil
D = (1.800.000 - 120.000) / 6 = 1.680.000 / 6 = 280.000
La tabla siguiente muestra la salida solicitada.
Año Depreciación Depreciación Valor anual
acumulada
1 (1988) 280.000 280.000 1.520.000
2 (1989) 280.000 560.000 1.240.000
3 (1990) 280.000 840.000 960.000
4 (1991) 280.000 1.120.000 680.000
5 (1992) 280.000 1.400.000 400.000
6 (1993) 280.000 1.680.000 120.000
Pseudocódigo del programa 1.1
=============================
Previsiones de depreciación
Introducir coste
vida util
valor final de rescate (recuperacion)
imprimir cabeceras
Establecer el valor inicial del Año
Calcular depreciacion
mientras valor año =< vida util hacer
calcular depreciacion acumulada
calcular valor actual
imprimir una linea de la tabla
incrementar el valor del año
fin de mientras
----------------------------------------------------------------
--- Código: Pascal ---program Previsiones;{ Este programa obtiene una tabla de depreciaciones acumuladasy valores reales de cada año de un determinado producto. }var coste, depreciacion, valor_recuperacion, valor_actual, acumulada, anio, vida_util : integer;begin WriteLn ('Introduzca coste, valor recuperacion y vida util'); ReadLn (coste, valor_recuperacion, vida_util); WriteLn ('Introduzca anio actual'); ReadLn (anio); valor_actual := coste; depreciacion := (coste - valor_recuperacion) / vida_util; acumulada := 0; Write ('Anio': 7, 'Depreciacion':15, 'Dep. Acumulada':17); WriteLn ('valor_actual':14); while anio < vida_util do begin acumulada := acumulada + depreciacion; valor_actual := valor_actual - depreciacion; Write (Anio :8, Depreciacion :11:1, Acumulada:17:1); WriteLn (valor_actual:17:1); anio := anio + 1 ----------------------------------------------------------------
Los mensajes de error del compilador son los siguientes:
Compiler Messages
prob11.pas<17,49> Error: Incompatible types: got "Extended" expected "SmallInt"
prob11.pas<25,44> Error: Illegal use of ':'
prob11.pas<26,36> Error: Illegal use of ':'
prob11.pas<30> Fatal: There were 3 errors compiling module, stopping
prob11.pas<0> Fatal: Compilation aborted
-------------------------------------------------------------
Cualquier sugerencia, será bien recibida, gracias.
m0skit0:
¡Wenas! ¡Vaya follón de post, colega! :lol:
Usa las etiquetas de código y para los errores indica las líneas que te ponen las etiquetas de código, así nos enteraremos mejor y te ayudaremos mejor.
bermann:
--- Código: Pascal ---program Previsiones;{ Este programa obtiene una tabla de depreciaciones acumuladasy valores reales de cada año de un determinado producto. }var coste, depreciacion, valor_recuperacion, valor_actual, acumulada, anio, vida_util : integer;begin WriteLn ('Introduzca coste, valor recuperacion y vida util'); ReadLn (coste, valor_recuperacion, vida_util); WriteLn ('Introduzca anio actual'); ReadLn (anio); valor_actual := coste; depreciacion := (coste - valor_recuperacion) div vida_util; (*Aqui tienes que ocupar la funcion div, no /, ya que trabajas con numeros enteros*) acumulada := 0; Write ('Anio': 7, 'Depreciacion':15, 'Dep. Acumulada':17); (* Si aca quieres poner las variables, pues quitale las ' ' *) WriteLn ('valor_actual':14); (* Lo mismo que arriba*) while anio < vida_util do begin acumulada := acumulada + depreciacion; valor_actual := valor_actual - depreciacion; Write (Anio :8, Depreciacion :11:1, Acumulada:17:1); WriteLn (valor_actual:17:1); (*Estos resultados nunca te daran comas, recuerda que las variables las configuraste en integer*) anio := anio + 1 ----------------------------------------------------------------
guqui1969:
Antes que nada Bermann, muchísima gracias por tu ayuda, en serio. Te comento, estoy a un paso de resolverlo gracias a tu ayuda, lo que yo quiero lograr es que me aparezca esta tabla tal cual como aparece en el libro:
--- Código: Pascal ---Año Depreciación Depreciación Valor anual acumulada1 280.000 280.000 1.520.0002 280.000 560.000 1.240.0003 280.000 840.000 960.0004 280.000 1.120.000 680.0005 280.000 1.400.000 400.0006 280.000 1.680.000 120.000
Ya que el tema tenía que ver con la barra de división / sólo se aplica a valores reales, cambié integer por real y lo que me salió fue esto:
--- Código: Pascal ---Anio Depreciacion Dep. Acumulada1.0E+000 280000.0 280000.02.0E+000 280000.0 560000.03.0E+000 280000.0 840000.04.0E+000 280000.0 1120000.05.0E+000 280000.0 1400000.06.0E+000 280000.0 1680000.0
Perfecto, se acerca bastante, ahora bien no podía dejar de pasar la sugerencia de cambiar / por div, así que esta vez dejé todas
las variables con el tipo integer y puse div y el mensaje de error del compilador fue este:
prog11.pas<25,44> Error: Illegal use of ':'
prog11.pas<26,36> Error: Fatal: There were 2 errors compiling module, stopping
prog11.pas<0> Fatal: Compilation aborted
Evidentemente me estoy equivocando en una tontería, ahora lo que realmente me asombra es que se supone que este tipo (Joyanes Aguilar)
es un capo en lo suyo, de hecho tiene muchos libros de programación, ¿cómo es posible que cometa este tipo de errores?
eternity:
soy yo, o no veo todo el código?
Navegación
[#] Página Siguiente
Ir a la versión completa