Académique Documents
Professionnel Documents
Culture Documents
FACULTAD REGIONAL
BUENOS AIRES
INFORMATICA
ALUMNO:
LEGAJO:
PROFESOR:
Ing. Zanon
CURSO I1092
CICLO LECTIVO 2008
2.- Realizar un diagrama que permita ingresar dos nmeros enteros e imprima
un texto que indique si la resta del primero menos el segundo ser positiva,
negativa o cero.
C
A,B
A
>B
=B
<B
>0
<0
3.- Dado un archivo de 100 registros numricos, leerlos uno a uno, informar
finalmente si estaban o no en orden creciente.
C
A
CR:=1
WHILE CR<100 DO
B
B>A
A:=B
CR:=5000
CR:=CR+1
CR=5000
DES.
ORD.
F
C
SUMA:=0
FOR H:=1,5
A,B
SUMA:=SUMA+A+B
SUMA/10
F
5.- Realizar un diagrama que permita ingresar los importes de las facturas que
emite un comercio, cuando se ingrese un importe negativo (inexistente)
finalizar el ingreso e informar:
*-La cantidad de facturas emitidas.
6.- Realizar un diagrama que permita ingresar 100 nmeros reales cualquiera,
determine e imprima los valores mximo y mnimo del conjunto y el orden de
ingreso de cada uno.
C
A
MAX:=A
MIN:=A
POSMAX:=1
POSMIN:=1
FOR H:=2,100
A
MAX<A
MAX:=A
MIN>A
POSMAX:=H
MIN:=A
POSMIN:=H
MAX , POSMAX
MIN, POSMIN
F
7.- Dado un archivo con 200 registros; cada uno de los cuales contiene un
campo numrico, se debe diagramar un proceso que lea ste archivo y
a] Imprima la sumatoria de los valores positivos.
b] Imprima la productoria de los valores negativos.
c] Imprima la cantidad de ceros que se lean.
C
SUMA:=0
PROD:=1
CC:=0
BAN:=0
FOR H:= 1,200
A
A
>0
<0
SUMA:=SUMA+A
=0
PROD:=PROD*A
CC:=CC+1
BAND:=1
BAND:=1
SUMA , PROD , CC
SUM , NO HAY A- , CC
F
D:=B*B-(4*A*C)
A,B,C
D<0
RAICES IMAG.
X1:=-B+(sqrt(D)/2*A)
X2:=-B-(sqrt(D)/2*A)
X1 , X2
F
VARIANTE 1
C
N
FOR H:=1 TO N DO
A,B,C
D:=B*B-(4*A*C)
A,B,C
D<0
RAICES IMAG.
X1:=-B+(sqrt(D)/2*A)
X2:=-B-(sqrt(D)/2*A)
X1 , X2
VARIANTE 2
C
N
I:=1
RAICES:=0
WHILE (RAICES<=2) AND (N>=I)
A,B,C
D:=B*B-(4*A*C)
A,B,C
D<0
RAICES:=RAICES+1
X1:=-B+(sqrt(D)/2*A)
RAICES IMAGINARIAS
X2:=-B-(sqrt(D)/2*A)
X1 , X2
I:=I+1
F
VARIANTE 3
C
I:=1
H:=0
RAICES:=0
N
WHILE (H:=0) AND (N>=I)
A,B,C
D:=B*B-(4*A*C)
A,B,C
D<0
RAICES:=RAICES+1
X1:=-B+(sqrt(D)/2*A)
RAICES=2
X2:=-B-(sqrt(D)/2*A)
H:=1
X1 , X2
RAICES:=0
I:=I+1
F
10.- Realizar un diagrama que permita ingresar por teclado un valor N>0 y
que calcule e imprima
Una tabla con los valores de "x" e "y" que surgen de la siguiente funcin: Y
= 5 * X - 6 para valores de X comprendidos entre [-3 y N ] con pasos de 3
[X=3]
Con un encabezamiento que diga:
Valores de x
Valores de y
...
...
b) Determine e imprima la cantidad de valores de "y" que se encuentran en
el intervalo:
14 < y <= 46
c) al finalizar imprima cuantos fueron menores a 100.
C
N
WHILE N<=0
N
VALORES X , VALORES Y
X:=-3
C1:=0
C2:=0
WHILE X<=N
Y:=(5*X)-6
(Y>14) AND (Y<=16)
C1:=C1+1
Y<100
C2:=C2+1
X,Y
C1 , C2
F
S:=S+X
X:=X+L
S
F
VARIANTE 1
C
N1,N2,L
WHILE (N1>N2) AND ((N2-N1)MOD L)<>0
N1,N2,L
S:=0
C:=0
X:=N1+L
WHILE X<N2
S:=S+X
X:=X+L
C:=C+1
C>0
S , (S/C)
ERROR
F
VARIANTE 2
C
N1,N2,L
WHILE (N1>N2) AND ((N2-N1)MOD L)<>0
N1,N2,L
S:=0
X:=N1
WHILE X<=N2
S:=S+X
X:=X+L
S
12.- Leer un archivo de 3452 registros cada uno de los cuales contiene 6
campos numricos, el primero de ellos corresponde a un N de legajo y los
cinco restantes a los promedios generales de cinco aos de estudio. Se debe
diagramar un procedimiento que calcule cada promedio general y determine e
imprima los dos mejores y a que legajos correspondieron. No hay dos
promedios iguales.
C
NLEG , P1 , P2 , P3 , P4 , P5
PROM:=(P1+P2+P3+P4+P5)/5
MAXP:=PROM
NLEGMAX:=NLEG
NLEG , P1 , P2 , P3 , P4 , P5
PROM:=(P1+P2+P3+P4+P5)/5
MAXP<PROM
MAXP2:=MAXP
MAXP2:=PROM
NLEGMAX2:=NLEGMAX
NLEGMAX:=NLEG
MAXP:=PROM
NLEGMAX:=NLEG
FOR H=3 , 3452
NLEG , P1 , P2 , P3 , P4 , P5
PROM:=(P1+P2+P3+P4+P5)/5
PROM>MAXP
MAXP2:=MAXP
PROM>MAXP2
NLEGMAX2:=NLEGMAX
MAXP2:=PROM
MAXP:=PROM
NLEGMAX2:=NLEG
NLEGMAX:=NLEG
F
C:=C+1
(A>MIN AND A<MAX) OR A=MIN OR A=MAX
C:=C+1
(C*100)/1058
F
15.- Leer un archivo con 2000 registros, cada uno de ellos debera contener
un campo numrico entero, positivo y distinto de cero, por error se han
incluido registros iguales a cero, y que no deben ser tenidos en cuenta para
calcular e imprimir el promedio. Debern imprimirse la ubicacin de los ceros
dentro del lote, y al finalizar la cantidad de ceros ledos.
C
S:=0
C:=0
CC:=0
FOR H=1 TO 2000 DO
A
A>0
C:=C+1
A=0
S:=S+A
CC:=CC+1
H
S/C , CC
CORTE DE CONTROL
16.- En un torneo de ftbol participan K equipos. Cada uno juega K-1
partidos. Por cada equipo se dispone de un conjunto de registros con:
N de equipo y cdigo de resultado del partido jugado (1: Perdido [0
puntos]; 2:Empatado [1 punto]; 3:Ganado [3 puntos]).
Los registros correspondientes a cada equipo se ubican uno a continuacin
de otro. El valor de K se encuentra en el registro que precede al lote (el
primero).
Realizar un diagrama y la codificacin PASCAL de un programa que
determine e imprima:
1.- Para cada equipo, su n y el puntaje obtenido
2.- N del equipo que totaliz la menor cantidad de puntos
Diagrama variante 1: No todos los equipos jugaron los K-1 partidos; el ltimo
registro tiene como cdigo de equipo = 0.
Diagrama variante 2: No se conoce la cantidad de equipos, el archivo
finaliza con un equipo = 0
C
BAND:=0
K
FOR NE:= 1,K
PJE:=0
FOR M:=1,K-1
CR
=1
=2
=3
PTOS:=0
PTOS:=1
PTOS:=3
PJE:=PJE+PTOS
NE , PJE
BAND=0 v PJE<MIN
BAND:=100
MIN:=PJE
NEMIN:=NE
NEMIN , MIN
F
VARIANTE 1 Y 2
C
BAND:=0
NE , CR
WHILE NE<>0 DO
NEANT:=NE
PJE:=0
WHILE NE=NEANT DO
CR
=1
=2
=3
BAND:=1
MINPJE:=PJE
NEMIN:=NEANT
NEMIN , MINPJE
F
CODIFICACION
PROGRAM EJERCICIO16;
USES CRT;
VAR
BAND:INTEGER;
K:INTEGER;
NE:INTEGER;
PTOS:0..3;
M:INTEGER;
CR:1..3;
PJE:INTEGER;
MIN:INTEGER;
NEMIN:INTEGER;
BEGIN BAND:=0;
READLN (K);
FOR NE:=1 TO K
BEGIN
PJE:=0;
FOR M:=1 TO (K-1)
BEGIN
CASE CR OF
1:PTOS:=0;
2:PTOS:=1;
3:PTOS:=3
ELSE
END;
PJE:=PJE+PTOS
END;
WRITELN (NE,PJE);
IF BAND=0 OR PJE<MIN THEN
BEGIN
BAND:=100;
MIN:=PJE;
NEMIN:=NE
ELSE
END;
WRITELN (NEMIN,MIN)
END.
PROGRAM EJERCICIO16VAR1Y2;
USES CRT;
VAR
BAND:INTEGER;
NEANT:INTEGER;
NE:INTEGER;
PT:0..3;
M:INTEGER;
CR:1..3;
PJE:INTEGER;
MINPJE:INTEGER;
NEMIN:INTEGER;
BEGIN BAND:=0;
READLN (NE,CR);
WHILE NE<>0 DO
BEGIN
NEANT:=NE;
PJE:=0;
WHILE NE=NEANT DO
BEGIN
CASE CR OF
1: PT:=0;
2: PT:=1;
3: PT:=3;
ELSE
END;
PJE:=PJE+PT;
READLN (NE,CR)
BAND:=1;
MINPJE:=PJE;
NEMIN:=NEANT
ELSE
END;
WRITELN (NEANT,PJE);
IF BAND=0 AND PJE<MINPJE
THEN
END;
WRITELN (NEMIN,MINPJE)
END.
BEGIN
WHILE NA:=NAANT
CUOTAS>UC
TAD:=TAD+(CUOTAS-UC)
UC=0
TRP:=TRP+1
NA , NR , UC
TAD>0
NA
TAD>MAX
MAX:=TAD
MAXD:=NAANT
MAXD , TRP
F
CODIFICACION
PROGRAM
EJERCICIO17;
USES CRT;
VAR
CUOTAS:INTEGER;
NA:STRING[30];
NR:INTEGER;
UC:1..9;
MAX:INTEGER;
TRP:INTEGER;
NAANT:STRING[30];
TAD:INTEGER;
MAX:INTEGER;
MAXD:STRING[30];
BEGIN READLN (CUOTAS);
READLN (NA,NR,UC);
MAX:=0;
TRP:=0;
WHILE NA<>'ZZZZ' DO
BEGIN
NAANT:=NA;
TAD:=0;
WHILE NA=NAANT DO
BEGIN
IF CUOTAS>UC THEN
TAD:=TAD+(CUOTAS-UC)
ELSE
BEGIN
IF UC=0 THEN
TRP:=TRP+1
ELSE
END;
READLN (NA,NR,UC)
END;
IF TAD>0 THEN
BEGIN
WRITELN (NA);
IF TAF>MAX THEN
BEGIN
MAX:=TAD;
MAXD:=NAANT
END
ELSE
END
END
END.
END;
WRITELN (MAXD,TRP)
18.- Una empresa con 18 sucursales, desea realizar una estadstica, para
ello se dispone de un conjunto de registros (1 a 4 registro por cada
empleado) con:
- N de sucursal ; N de Empleado; Cdigo de Importe (1:Sueldo
bsico; 2:Premio por produccin, 3:-Antigedad, 4:- Premio por
presentismo); Importe.
Se colocan juntos los registros correspondientes a cada sucursal y dentro de
cada sucursal, los de cada empleado. Cada sucursal se separa de la
siguiente por un registro con ceros.
Realizar el diagrama y la codificacin PASCAL de un programa que
determine e imprima:
1.- Cuantos empleados cobran un sueldo bruto ( 1 + 2 + 3 + 4 ) menor a
$500.2.- Cuantos empleados cobran Premio de produccin.
3.- El promedio de premios por sucursal. (suma de los Importes de premios /
cantidad de empleados por Sucursal)
4.- Cuanto dinero debe enviarse a cada sucursal para abonar sueldos.
C
SPPROD:=0
TE<500:=0
FOR H=1,18
NS , NE , CI , IMP
NSANT:=NS
SIPREM:=0
TES:=0
WHILE NS=NSANT DO
NEANT:=NE
SBRUTO:=0
TES:=TES+1
WHILE NE=NEANT DO
CI
=1
=2
=3
SPROD:=SPROD+1
=4
SIPREM:=SIPREM+IMP
SIPREM:=SIPREM+IMP
SBRUTO:=SBRUTO+IMP
NS , NE , CI , IMP
SBRUTO<500
TE<500:=TE<500+1
TSUELSUC:=TSUELSUC+SBRUTO
SIPREM/TES
TSUESUC
TE<500
SPPROD
F
CODIFICACION
PROGRAM
EJERCICIO18;
USES CRT;
VAR
SPPROD:INTEGER;
TE<500:INTEGER;
H:1..18;
NS,NE,CI:INTEGER;
IMP:REAL;
NSANT:INTEGER;
SIPREM:REAL;
TES:INTEGER;
SBRUTO:REAL;
TSUELSUC:REAL;
NEANT:INTEGER;
BEGIN SPPROD:=0;
TE<500:=0;
FOR H:=1 TO 18 DO
BEGIN
READLN (NS,NE,CI,IMP);
NSANT:=NS;
SIPREM:=0;
TES:=0;
WHILE NS=NSANT DO
BEGIN
NEANT:=NE;
SBRUTO:=0;
TES:=TES+1;
WHILE NE=NEANT DO
BEGIN
CASE CI OF
2: BEGIN
SPPROD:=SPPROD+1;
SIPREM:=SIPREM+IMP
END;
4: SIPREM:=SIPREM+IMP
END;
SBRUTO:=SBRUTO+IMP;
READLN (NS,NE,CI,IMP)
END;
IF SBRUTO<500 THEN
TE<500:=TE<500+1
ELSE;
TSUELSUC:=TSUELSUC+SBRUTO
END;
WRITELN (SIPREM/TES);
WRITELN (TSUESUC)
END.
END;
WRITELN (TE<500);
WRITELN (SPPROD)
CA , B
ST<0
CARTANT , STOCK NEGATIVO
CARTANT , ST
(MIN>CTUV) AND (CTUV>0)
MIN:=CTUV
NAMIN:=CARTANT
CA=0
NAMIN
CODIFICACION
PROGRAM
EJERCICIO19;
USES CRT;
VAR
CA,B,ST,CARTANT,UV,CTUV,MIN,NAMIN:INTEGER;
BEGIN READLN (CA,B);
WHILE CA<>0 AND B>=0 DO
BEGIN
ST:=B;
CARTANT:=CA;
CTUV:=0;
READLN (CA,B);
WHILE CARTANT=CA DO
BEGIN
UV:=B
CTUV:=CTUV+UV;
ST:=ST-B
READLN (CA,B)
END;
IF ST<0 THEN
WRITELN (CARTANT,'STOCK NEGATIVO')
ELSE
BEGIN
WRITELN (CARTANT,ST);
IF (MIN>CTUV) AND (CTUV>0) THEN
BEGIN
MIN:=CTUV;
NAMIN:=CARTANT
END
ELSE
END
END;
IF CA=0 THEN
WRITELN (NAMIN)
ELSE
END.
YPF
Ayer=Hoy
X2.6
2XX6
PALABRAS RESERVADAS: BEGIN, else, WHILE, read, for, write, readln, integer
PALABRAS CLAVE: cos, MOD
NINGUNO: beguin, els, FORd, proGRAm, SIG, sig, INTEGUER
REAL
REAL
REAL
a*b
5) -----c-d3
b
a - ---3
7) --------c+d
1)
2)
3)
4)
5)
6)
7)
8)
x4
6) -4!
8) eseno (x + y)
a+(b/c)+d
(a+b)/(c*d)
(a*a)-(b*b)
a+(2/(b+(2/c)))
(a*b)/(c-(d*d*d))
(x*x*x*x)/(4*3*2*1)
(a-(b/3))/(c+d)
e EXP(sen(x+y))
while j<n do
begin
if n mod j = 0 then
kd := kd + 1;
j := j + 1
end;
write (kd)
end.
Calcula la cantidad de divisores del nmero n, obviando el 1 y el mismo
numero n.
30.- Efectuar una prueba de escritorio del programa del ejercicio anterior
con los siguientes datos: n = 5 ; 6; 25; -3; 2.4
n
5
j
2
3
4
5
kd
0
0
0
0
n
-3
j
2
kd
0
n
6
j
2
3
4
5
6
kd
0
1
2
n
25
j
2
3
4
5
6
..
25
kd
0
0
0
1
a) No funciona
b) k:=2
c) No funciona
d) No funciona
e) x:=5.82
f) k:=2;i=3
g) No funciona
h) No funciona
6
11
SENTENCIA2
CODIFICACION
PROGRAM
EJERCICIO36;
USES CRT;
TYPE VECTOR=ARRAY [1..6] OF REAL;
VAR
V:VECTOR;
H:1..6;
A,S,P:REAL;
BEGIN S:=0;
FOR H:=1 TO 6 DO
BEGIN
READLN (A);
V[H]:=A;
S:=S+A
END;
WRITELN (S/6);
FOR H:=1 TO 6 DO
BEGIN
IF V[H]>P THEN
WRITELN (V[H])
ELSE
END
END.
CODIFICACION
PROGRAM
EJERCICIO37;
USES CRT;
TYPE VECTOR=ARRAY [1..250] OF REAL;
REGISTRO=RECORD
A:REAL
END;
FILE=FILE OF [1..250] OF REGISTRO;
VAR
A,B,UNION:VECTOR;
REG:REGISTRO;
PRIM,SEG:FILE;
N,H:1..250;
BEGIN READLN(N);
ASSIGN (PRIM,'C:\PRIMERO.DAT');
ASSIGN (SEG,'C:\SEGUNDO.DAT');
RESET (PRIM);
RESET (SEG);
FOR H:=1 TO N DO
BEGIN
READ (PRIM,REG);
READ (SEG,REG);
A[H]:=PRIM.A;
B[H]:=SEG.A
END;
FOR H:=1 TO N DO
BEGIN
UNION[H]:=A[H]+B[N-H+1];
WRITELN (A[H],B[H],UNION[H])
END
END.
38.- Se dispone de un archivo de 123 registros, cada uno con un valor real,
ordenado en forma creciente. A continuacin ingresar por teclado un valor
adicional, del mismo tipo que los anteriores. Se debe escribir un diagrama y la
correspondiente codificacin, tal que leyendo estos datos en el orden
indicado, determine e imprima un mensaje que indique: si el elemento
adicional coincide con alguno de los anteriores, con cual; Si esta comprendido
entre dos, entre cuales; o un texto que indique si es menor al primero o mayor
que el ltimo.
C
FOR H:=1 TO 123
A
V[H]:=A
B
I:=1
WHILE (I<=123) AND (B>V[1])
I:=I+1
I=124
MAYOR AL ULTIMO
V[I]=B
IGUAL AL,
I , NUM
COMPRENDIDO
I=1
MENOR AL
PRIMERO
ENTRE,V[I],V[I-1]
CODIFICACION
PROGRAM
EJERCICIO38;
USES CRT;
TYPE VECTOR=ARRAY [1..123] OF REAL;
VAR
V:VECTOR;
A,B:REAL;
H,I:1..124;
BEGIN FOR H:=1 TO 123 DO
BEGIN
READLN (A);
V[H]:=A
END;
READLN (B);
I:=1;
WHILE (I<=123) AND (B>V[1]) DO
I:=I+1;
IF I=124 THEN
WRITELN ('MAYOR AL ULTIMO')
ELSE
BEGIN
IF V[I]=B THEN
WRITELN ('IGUAL AL',I,'NUM')
ELSE
BEGIN
IF I=1 THEN
WRITELN ('MENOR AL PRIMERO')
ELSE
WRITELN ('COMPRENDIDO ENTRE',V[I],V[I-1])
END
END
END.
CODIFICACION
PROGRAM EJERCICIO39;
USES CRT;
TYPE VECTOR=ARRAY [1..24] OF INTEGER;
VAR
V,V2:VECTOR;
H,I:1..23;
B:INTEGER;
BEGIN FOR H:=1 TO 23 DO
BEGIN
READLN (A);
V[H]:=A
END;
READLN (B);
I:=1;
WHILE (V[I]<B) AND (I<=23) DO
BEGIN
V2[I]:=V[I];
I:=I+1
END;
V2[I]:=B;
FOR H:=(I+1) TO 23 DO
V2[H+1]:=V[H]
END.
40.- Leer un conjunto de 100 registros cada uno con un valor real, se pide
escribir un diagrama y un programa que lo ordene en forma creciente sobre
si mismo.
Diagrama variante 1 Escribir un programa que ordene primero un archivo
interno sobre si mismo
Diagrama variante 2 Diagramar otro que lo haga sobre un archivo externo.
C
FOR H:=1 TO 100
A
V[H]:=A
FOR J:=1 TO 99
FOR W:=(J+1) TO 100
V[W]>V[J]
AUX:=V[J]
V[J]:=V[W]
V[W]:=AUX
F
CODIFICACION
PROGRAM
EJERCICIO40;
USES CRT;
TYPE VECTOR=ARRAY [1..100] OF REAL;
VAR
V,AUX:VECTOR;
A:INTEGER;
H,J,W:1..100;
BEGIN FOR H:=1 TO 100 DO
BEGIN
READLN (A);
V[H]:=A
END;
FOR J:=1 TO 99 DO
BEGIN
FOR W:=(J+1) TO 100 DO
BEGIN
IF V[W]>V[J] THEN
BEGIN
AUX:=V[J];
V[J]:=V[W];
V[W]:=AUX
END
ELSE
END
END
END.
41.- Una empresa desea escribir un programa para generar una lista de
precios de a lo sumo 590 artculos para lo cual se ingresan los siguientes
datos por teclado:
Cdigo de artculo (6 caracteres alfanumricos);
Precio de compra (real)
Porcentaje de ganancia para ese artculo.
Las ternas de datos se ingresan e cualquier orden y para indicar el fin de
datos se ingresa un cdigo de artculo = "000000".
Se pide diagramar un procedimiento y escribir un programa que: Imprima la
lista de precios en dos columnas, una con el cdigo del artculo y la otra con
el precio de venta (que se calcula como : Precio de compra *(1 + Porcentaje
de Ganancia / 100), ordenada en forma creciente por cdigo de artculo.
C
I:=0
CA , PC , PG
WHILE CA<>0000
I:=I+1
CAR[I]:=CA
PVEN[I]:=PC*(1+(PC/100))
CA , PC , PG
FOR H:=1 TO (I-1)
FOR J:=(H+1) TO I
CAR[H]>CAR[J]
AUX:=CAR[J]
CAR[J]:=CAR[H]
CAR[H]:=AUX
AUX2:=PVEN[J]
PVEN[J]:=PVEN[H]
PVEN[H]:=AUX2
FOR A:=1 TO I
CAR[A] , PVEN[A]
F
CODIFICACION
PROGRAM
EJERCICIO41;
USES CRT;
TYPE VCA=ARRAY [1..590] OF STRING[6];
VPRE=ARRAY [1..590] OF REAL;
VAR
CAR,AUX:VCA;
PVEN,AUX2:VPRE;
CA:STRING[6];
PC,PG:REAL;
I,H,A,J:1..590;
BEGIN I:=0;
READLN(CA,PC,PG);
WHILE CA<>0000 DO
BEGIN
I:=I+1;
CAR[I]:=CA;
PVEN[I]:=PC*(1+(PC/100));
READLN (CA,PC,PG)
END;
FOR H:=1 TO (I-1) DO
BEGIN
FOR J:=(H+1) TO I DO
BEGIN
IF CAR[H]>CAR[J] THEN
BEGIN
AUX:=CAR[J];
CAR[J]:=CAR[H];
CAR[H]:=AUX;
AUX2:=PVEN[J];
PVEN[J]:=PVEN[H];
PVEN[H]:=AUX2
END
ELSE
END
END;
FOR A:=1 TO I DO
WRITELN (CAR[A],PVEN[A])
END.
42.- Una empresa produce 208 artculos diferentes los que se comercializan
por medio de 25 distribuidores. Realizar un diagrama y la correspondiente
codificacin de un programa que lea la siguiente informacin:
a)Un archivo PRECIOS.DAT donde cada registro contiene 2 campos:
uno que representan un cdigo de artculo (5 Caracteres alfanumricos) y el
otro su precio unitario (4 enteros y 2 decimales)
b)Otro archivo VENTAS.DAT, con un registro por cada venta realizada
por un distribuidor, con los siguientes datos:
CDIGO DE DISTRIBUIDOR (1 A 25),
CDIGO DE ARTCULO y
CANTIDAD DE UNIDADES
Luego de finalizado el ingreso de estos datos se imprimir una lista con los
nmeros de distribuidor y el importe de sus ventas, ordenada por N de
distribuidor.
Diagrama variante 1: CDIGO DE DISTRIBUIDOR (string [8])
C
ASSIGN (PRE, C: PRECIOS.DAT)
ASSIGN (VEN, C: VENTAS.DAT)
RESET (PRE)
RESET (VEN)
FOR I:=1 TO 208
PRE , RPRE
ART[I]:=RPRE.CA
PRE[I]:=RPRE.PREC
FOR H:=1 TO 25
VENTAS[H]:=0
ULT:=0
WHILE NOT EOF (VEN)
VEN , RVEN
DIST:=1
WHILE (ULT>=DIST) AND (DISTR[DIST]<>RVEN.CD) AND DIST<=25
DIST:=DIST+1
ULT<DIST
DISTR[DIST]:=RVEN.CD
FOR I:=1 TO 208
DISTR[DIST]=RVEN.CD
FOR I:=1 TO 208
ART[I]=RVEN.CA
ART[I]=RVEN.CA
VENTAS[DIST]:=RVEN.CANT*PRE[I]
+RVEN.CANT*PRE[I]
VENTAS[DIT]:=VENTAS[DIST]
ULT:=ULT+1
FOR W:=1 TO ULT
DISTR[W] , VENTAS[W]
F
CODIFICACION
PROGRAM
EJERCICIO42;
USES
CRT;
TYPE
REGPRE=RECORD
CA:STRING[5];
PREC:REAL
END;
REGVEN=RECORD
CD:1..25;
CA:STRING[5];
CANT:INTEGER
END;
VECTOR1=ARRAY [1..208] OF STRING[5];
VECTOR2=ARRAY [1..208] OF REAL;
VECTOR3=ARRAY [1..25] OF INTEGER;
VECTOR4=ARRAY [1..25] OF REAL;
ARCH1=FILE [1..208] OF REGPRE;
ARCH2=FILE OF REGVEN;
VAR
PRE:ARCH1;
VEN:ARCH2;
RPRE:REGPRE;
RVEN:REGVEN;
ART:VECTOR1;
PRE:VECTOR2;
DISTR:VECTOR3;
VENTAS:VECTOR4;
ULT,DIST,H,W:0..25;
I:1..208;
BEGIN ASSIGN (PRE,'C:\PRECIOS.DAT');
ASSIGN (VEN,'C:\VENTAS.DAT');
RESET (PRE);
RESET (VEN);
FOR I:=1 TO 208 DO
BEGIN
READ (PRE,RPE);
ART[I]:=RPRE.CA;
PRE[I]:=RPRE.PREC
END;
FOR H:=1 TO 25 DO
VENTAS[H]:=0;
ULT:=0
WHILE NOT EOF (VEN) DO
BEGIN
READ (VEN,RVEN);
DIST:=1;
WHILE (ULT>=DIST) AND (DISTR[DIST]<>RVEN.CD) AND DIST<=25 DO
DIST:=DIST+1;
IF ULT<DIST THEN
BEGIN
DISTR[DIST]:=RVEN.CD;
FOR I:=1 TO 208 DO
BEGIN
IF ART[I]=RVEN.CA THEN
VENTAS[DIST]:=RVEN.CANT*PRE[I]
ELSE;
ULT:=ULT+1
END
END
ELSE
BEGIN
IF DISTR[DIST]=RVEN.CD THEN
FOR I:=1 TO 208 DO
BEGIN
IF ART[I]=RVEN.CA THEN
VENTAS[DIST]:=VENTAS[DIST]+RVEN.CANT*PRE[I]
ELSE
END
ELSE
END
END;
FOR W:=1 TO ULT DO
WRITELN (DISTR[W],VENTAS[W])
END.
ERROR
IFACT:=IAB[POS]
PEXC:=0
NF:=NF+1
NF , RABON.ABON , IAB[POS] , CP[POS] , PEXC , IFACT
TFACT[POS]:=TFACT[POS]+IFACT
FOR H:=1 TO 20
CT[H] , TFACT[H]
F
CODIFICACION
PROGRAM
EJERCICIO43;
USES
CRT;
TYPE
REGTAR=RECORD
CT:STRING[5];
CPL:INTEGER;
IAB:REAL;
IPE:REAL
END;
REGABON=RECORD
ABON:INTEGER;
CTAR:STRING[5];
CPTR:INTEGER
END;
ARCH1=FILE OF REGTAR;
ARCH2=FILE OF REGABON;
VECTOR1=ARRAY [1..20] OF REAL;
VECTOR2=ARRAY [1..20] OF INTEGER;
VECTOR3=ARRAY [1..20] OF STRING[5]
VAR
TARIFAS:ARCH1;
ABONADO:ARCH2;
RTAR:REGTAR;
RABON:REGABON;
TFACT,IAB,IPE:VECTOR1;
CT:VECTOR3;
CPL:VECTOR2;
NF,POS,PEXC:INTEGER;
IFACT:REAL;
H:1..20;
BEGIN ASSIGN (TARIFAS,'C:\TARIFAS.DAT');
ASSIGN (ABONADO,'C:\ABONADO.DAT');
RESET (TARIFAS);
RESET (ABONADO);
FOR H:=1 TO 20 DO
BEGIN
READ (TARIFAS,RTAR);
TFACT[H]:=0;
CT[H]:=RTAR.CT;
CPL[H]:=RTAR.CPL;
IAB[H]:=RTAR.IAB;
IPE[H]:=RTAR.IPE
END;
NF:=0;
WHILE NOT EOF (ABONADO) DO;
BEGIN
READ (ABONADO,RABON);
POS:=1;
WHILE CT[POS]<>RABON.CTAR AND POS<=20 DO
POS:=POS+1;
IF CT[POS]=RABON.CTAR DO
BEGIN
PEXC:=RABON.CPTR-CPL[POS];
IF PEXC>0 THEN
IFACT:=IAB[POS]+(PEXC*IPE[POS])
ELSE
BEGIN
IFACT:=IAB[POS];
PEXC:=0
END
ELSE
WRITELN ('ERROR')
END;
NF:=NF+1;
WRITELN (NF,RABON.ABON,IAB[POS],CP[POS],PEXC,IFACT);
TFACT[POS]:=TFACT[POS]+IFACT
END.
END;
FOR H:=1 TO 20
WRITELN (CT[H],TFACT[H])
44.- Dada una lista de precios en papel, constituida por 300 renglones, cada
uno de los cuales contiene:
a) N de artculo (de 1 a 300).
b) Precio unitario del artculo.
CODIFICACION
PROGRAM
EJERCICIO43;
USES CRT;
TYPE REGLIS=RECORD
CA:1..300;
ERROR
PU:REAL
END;
ARCH=FILE OF REGLIS;
VECTOR1=ARRAY [1..300] OF INTEGER;
VECTOR2=ARRAY [1..300] OF REAL;
VAR
LISTA:ARCH;
RLIS:REGLIS;
VCA:VECTOR1;
VPU:VECTOR2;
H,ART,CART:1..300;
RESP:STRING[2];
CANT:INTEGER;
IMPORTE:REAL;
BEGIN ASSIGN (LISTA,'C:\LISTA.DAT');
RESET (LISTA);
FOR H:=1 TO 300 DO
BEGIN
READ (LISTA,RLIS);
VCA[H]:=RLIS.CA;
VPU[H]:=RLIS.PU
END;
WRITELN ('DESEA CONSULTAR?');
READLN (RESP);
WHILE RESP='SI' DO
BEGIN
READLN (CART,CANT);
ART:=1;
WHILE CART<>VCA[ART] AND ART<=300 DO
ART:=ART+1;
IF CART=VCA[ART] THEN
BEGIN
IMPORTE:=VPU[ART]*CANT;
WRITELN (IMPORTE)
END
ELSE
WRITELN ('ERROR');
READLN (RESP)
END
END.
J:=J+1
VVENCP[J]:=RPF
FOR H:=1 TO J
VVENCP[H].NPF , VVENCP[H].FV , VVENCP[H].IM
CLOSE (DESAGIO)
CLOSE (PLAZOFIJO)
F
CODIFICACION
PROGRAM
EJERCICIO45;
USES CRT;
TYPE REGDES=RECORD
FA:INTEGER;
COE:REAL
END;
REGPF=RECORD
NPF:INTEGER;
FV:INTEGER;
IM:REAL
END;
ARCH1=FILE OF REGDES;
ARCH2=FILE OF REGPF;
VECTOR1=ARRAY [1..199] OF INTEGER;
VECTOR2=ARRAY [1..199] OF REAL;
VECTOR3=ARRAY OF REGPF;
VAR
DESAGIO:ARCH1;
PLAZOFIJO:ARCH2;
RDES:REGDES;
RPF:REGPF;
VFECHA:VECTOR1;
VCOEF:VECTOR2;
VVENCP:VECTOR3;
H,I,J:1,,199
IMP:REAL;
BEGIN ASSIGN (DESAGIO,'C:\DESAGIO.DAT');
ASSIGN (PLAZOFIJO,'C:\PLAZOFIJO.DAT');
RESET (DESAGIO);
RESET (PLAZOFIJO);
FOR H:=1 TO 199 DO
BEGIN
READ (DESAGIO,RDES);
VFECHA[H]:=RDES.FA;
VCOEF[H]:=REDS.COE
END;
J:=0;
READ (PLAZOFIJO,RPF);
WHILE RPF.NPF<>0 DO
BEGIN
I:=1;
WHILE VFECHA[I]<>RPF.FV AND I<=199 DO
I:=I+1;
IF VFECHA[I]=RPF.FV THEN
BEGIN
IMP:=RPF.IM*VCOEF[I];
WRITELN (RPF.NPF,RPF.FV,IMP)
END
ELSE
BEGIN
J:=J+1;
VVENCP[J]:=RPF
END
END;
FOR H:=1 TO J DO
WRITELN (VVENCP[H].NPF,VVENCP[H].FV,VVENCP[H].IM);
CLOSE (DESAGIO);
CLOSE (PLAZOFIJO)
END.
46.- Una lnea ferroviaria cubre un trayecto (en ambos sentidos) entre 2
puntos, con 18 estaciones intermedias. Las estaciones estn numeradas de
1 a 20, incluidas ambas cabeceras (1 y 20).
Para obtener informacin estadstica se debe procesar la siguiente
informacin, de dos archivos:
a) El primero con 19 registros, cada uno de los cuales contiene la
distancia (en Km) entre 2 estaciones consecutivas. (DIST.DAT)
CLOSE (DISTANCIA)
CLOSE (BOLETOS)
F
CODIFICACION
PROGRAM
EJERCICIO46;
USES CRT;
TYPE REGDIST=RECORD
DIST:REAL
END;
REGBOL=RECORD
EP:1..20;
EL:1..20
END;
ARCH1=FILE OF REGDIST;
ARCH2=FILE OF REGBOL;
VECTOR1=ARRAY [1..20] OF
REAL;
VECTOR2=ARRAY [1..20] OF
INTEGER;
VAR
DISTANCIA:ARCH1;
BOLETOS:ARCH2;
RDIS:REGDIST;
RBOL:REGBOL;
VDIST:VECTOR1;
EST:VECTOR2;
ESTMAX,H,POS:1..20;
CPAS:INTEGER;
KMS,PROM:REAL;
BEGIN ASSIGN
(DISTANCIA,'C:\DISTANCIA.DAT');
ASSIGN
(BOLETOS,'C:\BOLETOS.DAT');
RESET (DSTACIA);
RESET (BOLETOS);
FOR H:=1 TO 19 DO
BEGIN
READ
(DISTANCIA,RDIST);
VDIST[H]:=RDIST.DIST;
EST[H]:=0
END;
THEN
EST[20]:=0;
CPAS:=0;
ESTMAX:=0;
KMS:=0;
WHILE NOT EOF (BOLETOS) DO
BEGIN
READ (BOLETOS,RBOL);
CPAS:=CPAS+1;
IF RBOL.EP>RBOL.EL
BEGIN
AUX:=RBOL.EP;
RBOL.EP:=RBOL.EL;
RBOL.EL:=AUX
END
ELSE;
FOR I:=(EP+1) TO (EL-1)
DO
THEN
EST[I]:=EST[I]+1;
FOR J:=EP TO (EL-1) DO
KMS:=KMS+VDIST[J]
END;
PROM:=KMS/CPAS;
FOR H:=1 TO 20 DO
BEGIN
IF EST[H]>ESTMAX
BEGIN
END
ELSE
END.
EST:=EST[H];
POS:=H
END;
WRITELN (POS,PROM);
CLOSE (DISTANCIA):
CLOSE (BOLETOS)
NAUTO[POS]=RC.NA
TMIN[POS]:=RT.TV
TMIN[POS]>RT.TV
ULT:=POS
TMIN[POS]:=RT.TV
ERROR
NPART:=58-ULT
NPART
FOR H:=1 TO (ULT-1)
FOR I:=(H+1) TO ULT
TMIN[H]>TMIN[I]
AUX:=TMIN[H]
TMIN[H]:=TMIN[I]
TMIN[I]:=AUX
AUX:=NAUTO[H]
NAUTO[H]:=NAUTO[I]
NAUTO[I]:=AUX
ULT>30
FOR H:=1 TO 30
NAUTO[I] , TMIN[I]
SUPLENTES
FOR H:=31 TO ULT
NAUTO[H] , TMIN[H]
CLOSE (TIEMPOS)
F
CODIFICACION
PROGRAM
EJERCICIO47;
USES
CRT;
TYPE
REGTI=RECORD
NA:0..999;
TV:REAL
END;
ARCH=FILE OF REGTI;
VECTOR1=ARRAY [1..58] OF INTEGER;
VAR
BEGIN
END.
RA.ESC=VESC[ESC]
VESC[ESC]:=VESC[ESC]+1
ULT:=0
RV.NA=VAUTOS[POS]
VAUTOS[POS]:=RV.NA
VTIEMPO[POS]:=RV.TI
ULT:=POS
RV.NA<=7
VTIEMPO[POS]<RV.TI
VTIEMPO[POS]:=RV.TI
FOR I:=1 TO (ULT-1)
FOR J:=(I+1) TO ULT
VTIEMPO[I]>VTIEMPO[J]
AUX:=VTIEMPO[I]
ERROR
VTIEMPO[I]:=VTIEMPO[J]
VTIEMPO[J]:=AUX
AUX:=VAUTOS[I]
VAUTOS[I]:=VAUTOS[J]
VAUTOS[J]:=AUX
ULT>30
FOR H:=1 TO 30
CODIFICACION
PROGRAM
EJERCICIO48;
USES CRT;
TYPE REGAU=RECORD
NAP:STRING[30];
ESC:STRING[10];
MARCA:STRING[10];
NA:1..100;
GRU:STRING[4]
END;
REGVUE=RECORD
NA:1..100;
NV:INTEGER;
TI:REAL
END;
ARCH1=FILE OF REGAU;
ARCH2=FILE OF REGVUE;
VECTOR1=ARRAY [1..58] OF STRING[10];
VECTOR2=ARRAY [1..58] OF INTEGER;
VECTOR3=ARRAY [1..58] OF REAL;
VAR
AUTOS:ARCH1;
VUELTAS:ARCH2;
RA:REGAU;
RV:REGVUE;
VESC:VECTOR1;
VAUTOS,AUX2:VECTOR2;
VTIEMPO,AUX:VECTOR3;
ULTESC,ULT,ESC,POS,I,J,H:0..58;
BEGIN ASSIGN (AUTOS,'C:\AUTOS');
ASSIGN (VUELTAS,'C:\VUELTAS');
RESET (AUTOS);
RESET (VUELTAS);
ULTESC:=0;
FOR H:=1 TO 58 DO
BEGIN
READ (AUTOS,RA);
ESC:=1;
WHILE ULTESC<=ESC AND RA.ESC<>VESC[ESC] AND ESC<=58 DO
ESC:=ESC+1;
IF ULTESC>ESC THEN
BEGIN
VESC[ESC]:=1;
ULTESC:=ESC
END
ELSE
IF RA.ESC=VESC[ESC] THEN
VESC[ESC]:=VESC[ESC]+1
ELSE
WRITELN ('ERROR')
END;
ULT:=0;
WHILE NOT EOF (VUELTAS) DO
BEGIN
READ (VUELTAS,RV);
POS:=1;
WHILE ULT<=POS AND RV.NA<>VAUTOS[POS] AND POS<=58 DO
POS:=POS+1;
IF ULT>POS THEN
BEGIN
IF RV.NV<=7 THEN
BEGIN
VAUTOS[POS]:=RV.NA;
VTIEMPO[POS]:=RV.TI;
ULT:=POS
END
ELSE
END
ELSE
BEGIN
IF RV.NA=VAUTOS[POS] THEN
BEGIN
IF RV.NA<=7 THEN
BEGIN
IF VTIEMPO[POS]<RV.TI THEN
VTIEMPO[POS]:=RV.TI
ELSE
END
ELSE
END
ELSE
WRITELN ('ERROR')
END.
END
END;
FOR I:=1 TO (ULT-1) DO
BEGIN
FOR J:=(I+1) TO ULT DO
BEGIN
IF VTIEMPO[I]>VTIEMPO[J] THEN
BEGIN
AUX:=VTIEMPO[I];
VTIEMPO[I]:=VTIEMPO[J];
VTIEMPO[J]:=AUX;
AUX2:=VAUTOS[I];
VAUTOS[I]:=VAUTOS[J];
VAUTOS[J]:=AUX2
END
ELSE
END
END;
IF ULT>30 THEN
BEGIN
FOR H:=1 TO 30 THEN
WRITELN (VAUTOS[H],VTIEMPO[H]);
WRITELN ('SUPLENTES');
FOR H:=31 TO ULT
WRITELN (VAUTOS[H],VTIEMPO[H])
END
ELSE
BEGIN
FOR H:=1 TO 30 THEN
WRITELN (NAUTO[H],TMIN[H])
END;
FOR H:=1 TO ULTESC DO
WRITELN (VESC[H]);
CLOSE (AUTOS);
CLOSE (VUELTAS)
TOTAL<0
F:=ABS(TOTAL-CANT)
FOR J:=K TO 1259
VEGR[J].AN , VEGR[J].LEG
VEGR[J].AN , VEGR[J].LEG
FOR A:=1 TO 15
FOR A:=1 TO 15
VEGR[J].VNOT[A]
VEGR[J].VNOT[A]
FALTAN , F
BAND:=1
K:=K+CANT
CLOSE (EGR)
F
CODIFICACION
PROGRAM
EJERCICIO49;
USES CRT;
TYPE REGEGR=RECORD
NA:STRING[30];
LEG:INTEGER;
VNOT:ARRAY [1..15] OF INTEGER
END;
ARCH=FILE OF REGEGR;
VECTOR1=ARRAY [1..1259] OF REGEGR;
VAR
EGR:ARCH;
REGR:REGEGR;
VEGR:VECTOR1;
H,I,TOTAL,K,CANT,F:1..1259;
NESP,A:1..15;
END
END;
K:=K+CANT
END.
END;
CLOSE (EGR)
CLIENTE
==============================================
===========
1
2
3
11
12
NNN NNN.NN NNN.NN NNN.NN
NNN.NN
NNN.NN
Ordenado por nmero de cliente.
2) Para los artculos con existencia nula o negativa:
LISTADO DE ARTCULOS CON EXISTENCIA INSUFICIENTE
NUMERO DE ARTICULO
PROVEEDOR
NNNNNNNN
NNNNN
3) Para los nmeros de artculo errneos (o inexistentes):
LISTADO DE ARTCULOS ERRNEOS
NUMERO DE ARTICULO
NUMERO DE CLIENTE
CANTIDAD VENDIDA
NNNNNNNN
NNNNN
NNNNN
4) Determinar a que cliente le corresponde el mximo importe mensual de
venta.
Nota: Los artculos rechazados no superan los 300.
C
ASSIGN (ARTICULO , C:\ARTICULO.DAT)
ASSIGN (VENTAS , C:\VENTAS.DAT)
RESET (ARTICULO)
RESET (VENTAS)
CART:=0
ARTICULO , RART
WHILE RART.CA<>-1
CART:=CART+1
VART[CART]:=RART
ARTICULO , RART
ULTC:=0
ERR:=0
VENTAS , RVEN
WHILE RVEN.NC<>0
CLI:=1
WHILE ULTC>=CLI AND VCLI[CLI].NC<>RVEN.NCL
CLI:=CLI+1
ULTC<CLI
VCLI[CLI].NC:=RVEN.NCL
FOR H:=1 TO 12
VCLI[H].IMPMES[H]:=0
ULTC:=CLI
BAND:=0
I:=1
WHILE BAND=0 AND I<=CART
RVEN.CA=VART[I].NA
BAND:=1
I:=I+1
BAND=1
MES:=((RVEN.F div 100)mod 100)
ERR:=ERR+1
VCLI[CLI].IMPMES[MES]:=VCLI[CLI].IMPMES[MES]+
VERR[ERR].NA:=RVEN.CA
VART[I].PU*RVEN.CANT
VERR[ERR].NC:=RVEN.NCL
VART[I].ST:=VART[I].ST-RVEN.CANT
VERR[ERR].CAN:=RVEN.CANT
VENTAS , RVEN
MAX:=0
K:=0
FOR J:=1 TO ULTC
CMES:=0
FOR H:=1 TO 12
VCLI[J].IMPMES[H]>0
CMES:=CMES+1
VCLI[J].IMPMES[H]>MAX
MAX:=VCLI[J].IMPMES[H]
NCMAX:=VCLI[J].NC
CMES>=3
K:=K+1
VCLI3[K]:=VCLI[J]
VART[H].NA , VART[H].NPR
FOR H:=1 TO ERR
VERR[H].NA , VERR[H].NC , VERR[H].CAN
FOR A:=1 TO K
VCLI3[A].NC
FOR H:=1 TO 12
VCLI[A].IMPMES[H]
NCMAX
CLOSE (ARTICULO)
CLOSE (VENTAS)
F
CODIFICACION
PROGRAM
EJERCICIO50;
USES CRT;
TYPE REGART=RECORD
CA:STRING[8];
ST:INTEGER;
PU:REAL;
NP:INTEGER
END;
REGVEN=RECORD
NCL:1..999;
F:INTEGER
CA:STRING[8];
CANT:INTEGER
END;
REGCLI=RECORD
NC:INTEGER;
IMPMES:ARRAY [1..12] OF REAL
END;
REGERR=RECORD
NA:STRING[8];
NC:1..999;
CAN:INTEGER
END;
ARCH1=FILE OF REGART;
ARCH2=FILE OF REGVEN;
VECTOR1=ARRAY [1..2500] OF REGART;
VECTOR2=ARRAY OF REGCLI;
VECTOR3=ARRAY OF REGERR;
VAR
ARTICULO:ARCH1;
VENTAS:ARCH2;
RART:REGART;
RVEN:REGVEN;
VART:VECTOR1;
VCLI,VCLI3,AUX:VECTOR2;
VERR:VECTOR3;
CART,ULTC,ERR,CLI,BAND,H,I,K,J,CMES,MES,NCMAX,A,B:INTEGER;
MAX:REAL;
IF ULTC<CLI THEN
BEGIN
VCLI[CLI].NC:=RVEN.NCL;
FOR H:=1 TO 12 DO
VCLI[H].IMPMES[H]:=0;
ULTC:=CLI
END
ELSE;
BAND:=0;
I:=1;
WHILE BAND=0 AND I<=CART DO
IF RVEN.CA=VART[I].NA THEN
BAND:=1
ELSE
I:=I+1;
IF BAND=1 THEN
BEGIN
MES:=((RVEN.F div 100)mod 100);
VCLI[CLI].IMPMES[MES]:=VCLI[VLI].IMPMES[MES]
+VART[I].PU*RVEN.CANT;
VART[I].ST:=VART[I].ST-RVEN.CANT
END
ELSE
BEGIN
ERR:=ERR+1;
VERR[ERR].NA:=RVEN.CA;
VERR[ERR].NC:=RVEN.NCL;
VERR[ERR].CAN:=RVEN.CANT
END;
READ (VENTAS,RVEN)
END;
MAX:=0;
K:=0;
FOR J:=1 TO ULTC DO
BEGIN
CMES:=0;
FOR H:=1 TO 12 DO
IF VCLI[J].IMPMES[H]>0 THEN
BEGIN
CMES:=CMES+1;
IF VCLI[J].IMPMES[H]>MAX THEN
BEGIN
MAX:=VCLI[J].IMPMES[H];
NCMAX:=VCLI[J].NC
END
ELSE
END;
IF CMES>=3 THEN
BEGIN
K:=K+1;
VCLI3[K]:=VCLI[J]
END
ELSE
END;
FOR A:=1 TO (K-1) DO
BEGIN
FOR B:=(A+1) TO K DO
BEGIN
IF VCLI3[A].VC>VCLI3[B].NC THEN
BEGIN
AUX:=VCLI3[A];
VCLI3[A]:=VCLI3[B];
VCLI3[B]:=AUX
END
ELSE
END
END;
FOR H:=1 TO CART DO
IF VART[H].ST<0 THEN
WRITELN (VART[H].NA,VART[H].NPR)
ELSE;
FOR H:=1 TO ERR DO
WRITELN (VERR[H].NA,VERR[H].NC,VERR[H].CAN);
FOR A:=1 TO K DO
BEGIN
WRITELN (VCLI3[A].NC);
FOR H:=1 TO 12 DO
WRITELN (VCLI3[A].IMPMES[H])
END;
WRITELN (NCMAX);
CLOSE (ARTICULO);
CLOSE (VENTAS)
END.