• Sábado 21 de Diciembre de 2024, 15:26

Autor Tema:  No compila problema de ejemplo de Joyanes Aguilar  (Leído 6451 veces)

guqui1969

  • Nuevo Miembro
  • *
  • Mensajes: 5
    • Ver Perfil
No compila problema de ejemplo de Joyanes Aguilar
« en: Martes 12 de Mayo de 2009, 17:54 »
0
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
  1. program Previsiones;
  2. { Este programa obtiene una tabla de depreciaciones acumuladas
  3. y valores reales de cada año de un determinado producto. }
  4. var
  5.    coste,
  6.    depreciacion,
  7.    valor_recuperacion,
  8.    valor_actual,
  9.    acumulada,
  10.    anio, vida_util   : integer;
  11. begin
  12.    WriteLn ('Introduzca coste, valor recuperacion y vida util');
  13.    ReadLn  (coste, valor_recuperacion, vida_util);
  14.    WriteLn ('Introduzca anio actual');
  15.    ReadLn  (anio);
  16.    valor_actual := coste;
  17.    depreciacion := (coste - valor_recuperacion) / vida_util;
  18.    acumulada    := 0;
  19.    Write ('Anio': 7, 'Depreciacion':15, 'Dep. Acumulada':17);
  20.    WriteLn ('valor_actual':14);
  21.    while anio < vida_util do
  22.       begin
  23.          acumulada    := acumulada + depreciacion;
  24.          valor_actual := valor_actual - depreciacion;
  25.          Write (Anio :8, Depreciacion :11:1, Acumulada:17:1);
  26.          WriteLn (valor_actual:17:1);
  27.          anio := anio + 1
  28.  
----------------------------------------------------------------

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.
« última modificación: Martes 12 de Mayo de 2009, 18:46 por guqui1969 »

m0skit0

  • Miembro de PLATA
  • *****
  • Mensajes: 2337
  • Nacionalidad: ma
    • Ver Perfil
    • http://fr33kk0mpu73r.blogspot.com/
Re: No compila problema de ejemplo de Joyanes Aguilar
« Respuesta #1 en: Martes 12 de Mayo de 2009, 18:36 »
0
¡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

  • Nuevo Miembro
  • *
  • Mensajes: 20
    • Ver Perfil
Re: No compila problema de ejemplo de Joyanes Aguilar
« Respuesta #2 en: Miércoles 13 de Mayo de 2009, 23:50 »
0
Código: Pascal
  1. program Previsiones;
  2. { Este programa obtiene una tabla de depreciaciones acumuladas
  3. y valores reales de cada año de un determinado producto. }
  4. var
  5.    coste,
  6.    depreciacion,
  7.    valor_recuperacion,
  8.    valor_actual,
  9.    acumulada,
  10.    anio, vida_util   : integer;
  11. begin
  12.    WriteLn ('Introduzca coste, valor recuperacion y vida util');
  13.    ReadLn  (coste, valor_recuperacion, vida_util);
  14.    WriteLn ('Introduzca anio actual');
  15.    ReadLn  (anio);
  16.    valor_actual := coste;
  17.    depreciacion := (coste - valor_recuperacion) div vida_util; (*Aqui tienes que ocupar la funcion div, no /, ya que trabajas con numeros enteros*)
  18.    acumulada    := 0;
  19.    Write ('Anio': 7, 'Depreciacion':15, 'Dep. Acumulada':17);  (* Si aca quieres poner las variables, pues quitale las ' ' *)
  20.    WriteLn ('valor_actual':14); (* Lo mismo que arriba*)
  21.    while anio < vida_util do
  22.       begin
  23.          acumulada    := acumulada + depreciacion;
  24.          valor_actual := valor_actual - depreciacion;
  25.          Write (Anio :8, Depreciacion :11:1, Acumulada:17:1);
  26.          WriteLn (valor_actual:17:1); (*Estos resultados nunca te daran comas, recuerda que las variables las configuraste en integer*)
  27.          anio := anio + 1
  28.  
----------------------------------------------------------------

guqui1969

  • Nuevo Miembro
  • *
  • Mensajes: 5
    • Ver Perfil
Re: No compila problema de ejemplo de Joyanes Aguilar
« Respuesta #3 en: Jueves 14 de Mayo de 2009, 03:48 »
0
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
  1. Año        Depreciación     Depreciación      Valor anual
  2.                             acumulada
  3. 1              280.000            280.000         1.520.000
  4. 2              280.000            560.000         1.240.000
  5. 3              280.000            840.000           960.000
  6. 4              280.000          1.120.000           680.000
  7. 5              280.000          1.400.000           400.000
  8. 6              280.000          1.680.000           120.000
  9.  

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
  1. Anio     Depreciacion   Dep. Acumulada
  2. 1.0E+000   280000.0        280000.0
  3. 2.0E+000   280000.0        560000.0
  4. 3.0E+000   280000.0        840000.0
  5. 4.0E+000   280000.0       1120000.0
  6. 5.0E+000   280000.0       1400000.0
  7. 6.0E+000   280000.0       1680000.0
  8.  

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

  • Miembro activo
  • **
  • Mensajes: 78
  • Nacionalidad: ar
    • Ver Perfil
    • http://lameriendadejuan.blogspot.com/
Re: No compila problema de ejemplo de Joyanes Aguilar
« Respuesta #4 en: Jueves 14 de Mayo de 2009, 05:37 »
0
soy yo, o no veo todo el código?


guqui1969

  • Nuevo Miembro
  • *
  • Mensajes: 5
    • Ver Perfil
Re: No compila problema de ejemplo de Joyanes Aguilar
« Respuesta #5 en: Jueves 14 de Mayo de 2009, 13:29 »
0
Cita de: "eternity"
soy yo, o no veo todo el código?
Este es el código:
Código: Pascal
  1. program Previsiones;
  2. { Este programa obtiene una tabla de depreciaciones acumuladas
  3. y valores reales de cada a¤o de un determinado producto. }
  4. var
  5.    coste,
  6.    depreciacion,
  7.    valor_recuperacion,
  8.    valor_actual,
  9.    acumulada,
  10.    anio, vida_util   : integer;
  11. begin
  12.    WriteLn ('Introduzca coste, valor recuperacion y vida util');
  13.    ReadLn  (coste, valor_recuperacion, vida_util);
  14.    WriteLn ('Introduzca anio actual');
  15.    ReadLn  (anio);
  16.    valor_actual := coste;
  17.    depreciacion := (coste - valor_recuperacion) div vida_util;
  18.    acumulada    := 0;
  19.    Write ('Anio': 7, 'Depreciacion':15, 'Dep. Acumulada':17);
  20.    WriteLn ('valor_actual':14);
  21.    while anio <= vida_util do
  22.       begin
  23.          acumulada    := acumulada + depreciacion;
  24.          valor_actual := valor_actual - depreciacion;
  25.          Write (Anio :8, Depreciacion :11:1, Acumulada:17:1);
  26.          WriteLn (valor_actual:17:1);
  27.          anio := anio + 1
  28.       end
  29. end.
  30.  
y este el mensaje de error del compilador:

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

m0skit0

  • Miembro de PLATA
  • *****
  • Mensajes: 2337
  • Nacionalidad: ma
    • Ver Perfil
    • http://fr33kk0mpu73r.blogspot.com/
Re: No compila problema de ejemplo de Joyanes Aguilar
« Respuesta #6 en: Jueves 14 de Mayo de 2009, 16:21 »
0
Que yo sepa (hace tiempo que vi Pascal por última vez), no se puede poner :17:1 en un Write/WriteLn. Sólo puede un solo : seguido del tamaño del campo.

bermann

  • Nuevo Miembro
  • *
  • Mensajes: 20
    • Ver Perfil
Re: No compila problema de ejemplo de Joyanes Aguilar
« Respuesta #7 en: Viernes 15 de Mayo de 2009, 00:31 »
0
Ya esta, lo revise y compile yo en TurboPascal 7 y funciona perfecto:

Código: Pascal
  1. { Este programa obtiene una tabla de depreciaciones acumuladas
  2. y valores reales de cada a¤o de un determinado producto. }
  3. uses CRT;
  4. var
  5.    coste,
  6.    depreciacion,
  7.    valor_recuperacion,
  8.    valor_actual,
  9.    acumulada,
  10.    anio, vida_util   : integer;
  11. begin
  12.    ClrScr;
  13.    WriteLn ('Introduzca coste, valor recuperacion y vida util');
  14.    ReadLn  (coste, valor_recuperacion, vida_util);
  15.    WriteLn ('Introduzca anio actual');
  16.    ReadLn  (anio);
  17.    valor_actual := coste;
  18.    depreciacion := (coste - valor_recuperacion) div vida_util;
  19.    acumulada    := 0;
  20.    Write ('Anio': 7, 'Depreciacion':15, 'Dep. Acumulada':17);
  21.    WriteLn ('valor_actual':14);
  22.    while anio <= vida_util do
  23.       begin
  24.          acumulada    := acumulada + depreciacion;
  25.          valor_actual := valor_actual - depreciacion;
  26.          Write (Anio :8, Depreciacion :11, Acumulada:17);
  27.          WriteLn (valor_actual:17);
  28.          anio := anio + 1
  29.       end ;
  30.    Readkey;
  31. end.
  32.  


Espero que te sirva, le agregue la libreria CRT para que obtener la funcion ClrScr y ReadKey, de esta forma no se cierra antes de ver la tabla ;).

Espero que te sea de ayuda, cualquier otra duda consulta nada más.

guqui1969

  • Nuevo Miembro
  • *
  • Mensajes: 5
    • Ver Perfil
Re: No compila problema de ejemplo de Joyanes Aguilar
« Respuesta #8 en: Viernes 15 de Mayo de 2009, 01:31 »
0
Mirá, acabo de probar el código que modificaste y también me compila perfecto, pero cuando lo ejecuto desde la línea de comandos en la ventana del DOS (uso Windows 2000 Professional), pasa esto, me sale el mensajito para que ingrese los valores de costo, valor recuperación y vida útil, naturalmente que ingreso los mismos valores que tengo en el libro: 1800000 120000 6 y me sale esto:

Runtime error 201 at $00401B6
  $004014B6
  $00406EA0

Yo uso Free Pascal 2.2.4 que es la última, ¿debería usar Turbo Pascal 7 en vez de Free Pascal? Voy a probarlo y te cuento, ¡qué lucha, por el amor de Dios!

m0skit0

  • Miembro de PLATA
  • *****
  • Mensajes: 2337
  • Nacionalidad: ma
    • Ver Perfil
    • http://fr33kk0mpu73r.blogspot.com/
Re: No compila problema de ejemplo de Joyanes Aguilar
« Respuesta #9 en: Viernes 15 de Mayo de 2009, 01:36 »
0
Cita de: "bermann"
Ya esta, lo revise y compile yo en TurboPascal 7
Haciendo la corrección que puse yo. Muy bien, tienes más morro que el cerdo de la gripe A. ¡Enhorabuena! Hala, a disfrutar del finde.

guqui1969

  • Nuevo Miembro
  • *
  • Mensajes: 5
    • Ver Perfil
Re: No compila problema de ejemplo de Joyanes Aguilar
« Respuesta #10 en: Viernes 15 de Mayo de 2009, 02:19 »
0
Bermann, tu código corregido ESTÁ PERFECTO, lo hice andar, pero con EditPad PRO + FreePascal, y ahora sí anda, así que el tema está en mi máquina, gracias compañero!!!! :good:

bermann

  • Nuevo Miembro
  • *
  • Mensajes: 20
    • Ver Perfil
Re: No compila problema de ejemplo de Joyanes Aguilar
« Respuesta #11 en: Viernes 15 de Mayo de 2009, 02:45 »
0
Ojo, si estas usando integers, por lo menos en TurboPascal existe un límite de una variable integer es MaxInt=32700 y pico, por lo cual para programas que ocupan números más grandes se debería ocupar reales. Aclaro:

Cita de: "m0skit0"
Que yo sepa (hace tiempo que vi Pascal por última vez), no se puede poner :17:1 en un Write/WriteLn. Sólo puede un solo : seguido del tamaño del campo.

si puedes poner
Código: Pascal
  1. Write(var:10:5);
  2. WriteLn(var:10:5);
  3.  

mientras var sea una variable númerica(no lo he probado con integer), donde el primer número(en el ejemplo es 10) indica la cantidad de espacios que ocupará la variable, y el segundo número(en el ejemplo es 5) indica la cantidad de digitos después de la coma decimal.

luiscornejo

  • Nuevo Miembro
  • *
  • Mensajes: 2
    • Ver Perfil
alguien me puede verr con este codigo
« Respuesta #12 en: Domingo 24 de Febrero de 2013, 15:05 »
0
alguien podria ayudarme con este codigo me tira error 201
PROGRAM TP1;
USES CRT;
TYPE
AUX =RECORD
ID:LONGINT;
C1:BYTE;
C2:BYTE;
C3:BYTE;
C4:BYTE;
END;
REGISTROP=RECORD
ID:LONGINT;
NOMBRE:STRING[50];
TIPO:BYTE;
MONEDAS:SINGLE;
EXPERIENCIA:LONGINT;
FECHAALTA:LONGINT;
END;
 PERSONAJES=FILE OF REGISTROP;
 REGISTROH=RECORD
 ID:LONGINT;
 C1:BYTE;
 C2:BYTE;
 C3:BYTE;
 C4:BYTE;
 FECHA:LONGINT;
 END;
 HABILIDADES=FILE OF REGISTROH;
REGISTRON =RECORD

ID:LONGINT;
NIVEL:WORD;
EXPE:LONGINT;
MONEDAS:SINGLE;
FECHAN:LONGINT;

END;
NIVELES= FILE OF REGISTRON;
REGISTROV =RECORD
ID:LONGINT;
C1:WORD;
C2:WORD;
C3:WORD;
C4:WORD;END;
VECTOR=ARRAY [1..200] OF REGISTROV;

 PROCEDURE ABRIR_ARCHIVOS(VAR PER:PERSONAJES;VAR HAB:HABILIDADES;VAR NIV:NIVELES);
 BEGIN
 ASSIGN(PER,'PERSONAJES.DAT');
 ASSIGN(HAB,'HABILIDADES.DAT');
 ASSIGN(NIV,'NIVELES.DAT');
 RESET(PER);
 RESET(HAB);
 RESET(NIV);
 END;
 PROCEDURE INICIALIZAR_VECTOR(VAR VEC:VECTOR;VAR N:BYTE);
 var i:byte;
 BEGIN
 N:=0;
 FOR I:=1 TO 200  DO
  BEGIN
   VEC.ID:=0;
   VEC.C1:=0;
   VEC.C2:=0;
   VEC.C3:=0;
   VEC.C4:=0;
  END;
 END;
PROCEDURE  INICIALIZAR (VAR PER:PERSONAJES;VAR HAB:HABILIDADES;VAR NIV:NIVELES;VAR VEC:VECTOR;VAR N:BYTE);
 BEGIN
   ABRIR_ARCHIVOS(PER,HAB,NIV);
   INICIALIZAR_VECTOR(VEC,N);
end;


PROCEDURE LEC_ESP(VAR NIV:NIVELES;VAR RN:REGISTRON;VAR FINN:BOOLEAN);
BEGIN
 IF NOT( EOF(NIV)) THEN
  BEGIN
   READ(NIV,RN);
   FINN:=FALSE;
  END
 ELSE
  FINN:=TRUE;
 END;
PROCEDURE LISTADO1(VAR NIV:NIVELES;VAR RN:REGISTRON);
var TMON:SINGLE;
TEXP:LONGINT;
TNIV:BYTE;
NMM:BYTE;
ANT,ANTE,BUSCARBIN:LONGINT;
finn:boolean;
BEGIN
WRITELN('ID    NIVEL MAX    NIVEL MAX MON     EXPE_TOT');
 TEXP:=0;
 LEC_ESP(NIV,RN,FINN);

   TNIV:=RN.NIVEL;
 WHILE NOT(FINN) DO
  BEGIN
   ANT:=RN.ID;
     TMON:=RN.MONEDAS;
   WHILE NOT (FINN) AND (RN.ID=ANT) DO
    BEGIN

     TEXP:=TEXP + RN.EXPE;
     IF (TMON<=RN.MONEDAS) THEN
     BEGIN
      TMON:=RN.MONEDAS;
        NMM:=RN.NIVEL;
     END;
     IF (TNIV<RN.NIVEL) THEN
       TNIV:=RN.NIVEL;
       LEC_ESP(NIV,RN,FINN);
    END;

    WRITELN(ANT,'       ',TNIV,'             ',NMM,'               ',TEXP);
    TEXP:=0;
    TNIV:=0;
  END; CLOSE(NIV);
END;
PROCEDURE LEC_ESPH(VAR HAB:HABILIDADES;VAR RH:REGISTROH;VAR FINH:BOOLEAN);
BEGIN
 IF NOT( EOF(HAB)) THEN
  BEGIN
   READ(HAB,RH);
   FINH:=FALSE;
  END
 ELSE
  FINH:=TRUE;
 END;
PROCEDURE  AGREGAR(VAR VEC:VECTOR;N:BYTE;VAR HAB:HABILIDADES;VAR RH:REGISTROH);
var i:byte;
BEGIN
 I:=N+1;
 WHILE( I>1) AND(VEC[I-1].ID<RH.ID) DO
  BEGIN
   VEC.ID:=VEC[I-1].ID;
   DEC(I);
   END;
   VEC.ID:=RH.ID;
   VEC.C1:=RH.C1;
   VEC.C2:=RH.C2;
   VEC.C3:=RH.C3;
   VEC.C4:=RH.C4;

   END;

PROCEDURE BUSQUEDA(VAR VEC:VECTOR;VAR N:BYTE;VAR HAB:HABILIDADES;VAR RH:REGISTROH;VAR POS:BYTE;VAR ENCONTRADO:BOOLEAN);
var INI,FIN,MEDIO:byte;
 BEGIN
  INI:=1;
  FIN:=N;
  POS:=0;
  ENCONTRADO:=FALSE;
   WHILE (INI<=FIN) AND(NOT ENCONTRADO) DO
    BEGIN
     MEDIO:=(INI+FIN)DIV 2;
     IF( VEC[MEDIO].ID)=(RH.ID) THEN
      BEGIN
       ENCONTRADO:=TRUE;
       POS:=MEDIO;
      END
     ELSE
     BEGIN
      IF VEC[MEDIO].ID<RH.ID THEN
      BEGIN
       INI:=MEDIO+1;
       END
      ELSE
      BEGIN
       FIN:=MEDIO-1;
       END;
  END;
END;END;
PROCEDURE LISTADO2(VAR HAB:HABILIDADES;VAR RH:REGISTROH;VAR VEC:VECTOR;VAR N:BYTE);
var finh,encontrado:boolean;pos:byte;
 BEGIN
  LEC_ESPH(HAB,RH,FINH);

   WHILE NOT(FINH) DO
    BEGIN
     BUSQUEDA(VEC,N,HAB,RH,POS,ENCONTRADO);
     IF (NOT ENCONTRADO)THEN
      BEGIN

       AGREGAR(VEC,N,HAB,RH);
         N:=N+1;

      END ;
      VEC[POS].C1:= VEC[POS].C1+RH.C1;
      VEC[POS].C2:= VEC[POS].C2+RH.C2;
      VEC[POS].C3:= VEC[POS].C3+RH.C3;
      VEC[POS].C4:= VEC[POS].C4+RH.C4;


     LEC_ESPH(HAB,RH,FINH);
   END;
  CLOSE(HAB);
END;
PROCEDURE PROCESAR (VAR HAB:HABILIDADES;VAR NIV:NIVELES;VAR VEC:VECTOR;VAR N:BYTE;var rn:registron;var rh:registroh);
BEGIN
LISTADO1(NIV,RN);
LISTADO2(HAB,RH,VEC,N);
END;

PROCEDURE LEC_ESPP(VAR PER:PERSONAJES;VAR RP:REGISTROP;VAR FINP:BOOLEAN);
BEGIN
 IF NOT( EOF(PER)) THEN
  BEGIN
   READ(PER,RP);
   FINP:=FALSE;
  END
 ELSE
  FINP:=TRUE;
 END;

PROCEDURE MOSTRAR(VAR PER:PERSONAJES;VAR RP:REGISTROP;VAR VEC:VECTOR; N:BYTE);
 var finp:boolean;i:byte;
 BEGIN
  WRITELN('LISTADO 2');
  WRITELN('ID    C1   C2    C3   C4');
  LEC_ESPP(PER,RP,FINP);
  WHILE NOT(FINP) DO
  BEGIN

  FOR I:=1 TO N DO
    BEGIN
     IF RP.ID=VEC.ID THEN
     BEGIN

     WRITELN(VEC.ID,'  ',RP.NOMBRE,'  ',VEC.C1,'  ',VEC.C2,'    ',VEC.C3,'   ',VEC.C4);READLN;
     END;END;LEC_ESPP(PER,RP,FINP);
END; END;

VAR
PER:PERSONAJES;
RP:REGISTROP;
HAB:HABILIDADES;
RH:REGISTROH;
NIV:NIVELES;
RN:REGISTRON;
N:BYTE;
VEC:VECTOR;
BEGIN

INICIALIZAR(PER,HAB,NIV,VEC,N);
PROCESAR(HAB,NIV,VEC,N,rn,rh);
MOSTRAR(PER,RP,VEC,N);
END.