Programación General > Pascal

 No compila problema de ejemplo de Joyanes Aguilar

(1/3) > >>

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

[0] Índice de Mensajes

[#] Página Siguiente

Ir a la versión completa