Vous êtes sur la page 1sur 71

UTN

FACULTAD REGIONAL
BUENOS AIRES

INFORMATICA

ALUMNO:
LEGAJO:
PROFESOR:
Ing. Zanon
CURSO I1092
CICLO LECTIVO 2008

1.- Realizar un diagrama que permita ingresar cinco nmeros, en cinco


registros diferentes e imprimir aquellos valores mayores al primero
C
A
CR:=0
While CR<4 Do
B
B>A
B
CR:=CR+1

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

4.- Realizar un diagrama que permita ingresar 10 nmeros, en cinco registros


diferentes (a razn de 2 por registro) e imprima el promedio.

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.

*-El importe total recaudado.


C
TFACT:=0
CFACT:=0
IMP
IMP>=0
TFACT:=TFACT+IMP
CFACT:=CFACT+1
IMP
TFACT , CFACT
F

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

8.- Ingresar los tres coeficientes de una ecuacin de 2 grado (A, B, y C ); y


diagramar un proceso que determine e imprima los coeficientes ledos y las
dos races de la ecuacin formada. En caso de tratarse de races
imaginarias, informarlo con una leyenda aclaratoria.
Diagrama variante 1: Leer N ternas de valores.
Diagrama variante 2: Leer N ternas de valores y finalizar si aparecen 2
races imaginarias.
Diagrama variante 3: Leer N ternas de valores y finalizar si aparecen 2
races imaginarias consecutivas.
C
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
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

9.- Diagramar un procedimiento que ingrese un valor Y e imprima su factorial.


C
Y
Y>0
FACT:=FACT*Y
Y:=Y-1
Y=0
FACT: 1
FACT: , FACT

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

11.- Realizar un diagrama que ingrese tres nmeros enteros N1 ; N2 y L,


luego calcule e imprima la sumatoria de los nmeros enteros comprendidos
entre N1 y N2, con incrementos de L. [N = L] (N1 es menor a N2; y N2 - N1
es divisible por L). Excluidos los extremos.
Diagrama variante 1: Imprimir la sumatoria y el promedio.
Diagrama variante 2: Incluir Los extremos [N1 y N2]
C
N1,N2,L
WHILE (N1>N2) AND ((N2-N1)MOD L)<>0
N1,N2,L
S:=0
X:=N1+L
WHILE X<N2

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

13.- Diagramar un procedimiento que ingrese inicialmente el valor de una


resistencia patrn y su tolerancia porcentual (por ejemplo: 350 5%) y a
continuacin ingrese 1058 mediciones de valores de resistencias, a razn de 2
por registro y finalmente determine e imprima el porcentaje de resistencias
que se encuentran dentro de la tolerancia.
C
RP , TP
TP:=(TP*RP)/100
MAX:=RP+TP
MIN:=RP-TP
C:=0
FOR 1 TO 529 DO
A,B
(A>MIN AND A<MAX) OR A=MIN OR A=MAX

C:=C+1
(A>MIN AND A<MAX) OR A=MIN OR A=MAX
C:=C+1
(C*100)/1058
F

14.- Diagramar un procedimiento que ingrese inicialmente el valor nominal de


una resistencia y a continuacin 358 registros con ternas de valores medidos
sobre una misma resistencia cada uno, debiendo imprimirse el N de
orden de la terna que presente la caracterstica de tener el promedio de
valores ms prximo al valor nominal.
C
VNR
MIN:=VNR
UB:=0
FOR H:=1 TO 358 DO
R1,R2,R3
D:=ASB(((R1+R2+R3)/3)-VNR)
D<MIN
MIN:=D
UB:=H
UB
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

PT:=0 PT:=1 PT:=3


PJE:=PJE+PT
NE , CR
NEANT , PJE
BAND:=0 v PJE<MINPJE

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

17.- Un club vende rifas, y desea realizar el control de la venta de las


mismas. Para ellos dispone de:
a) Un registro con la cantidad de cuotas que deben estar pagas a la fecha
del proceso.
b) Un conjunto de registros (uno por cada rifa vendida) ordenados por
Apellido y nombre del comprador y N de rifa, conteniendo:
Apellido y nombre del Comprador , N de rifa , N de la ltima cuota paga.
El ltimo registro de este lote tiene ZZZZ como Apellido y nombre del
comprador.
Realizar un diagrama y la correspondiente codificacin PASCAL de un
programa que determine e imprima:
1.- El Apellido y nombre de los compradores morosos (que adeuden al
menos una cuota).
2.- El Apellido y nombre del comprador que registre la mayor cantidad de
cuotas impagas , considerando todas las rifas que ha comprado.
3.- Sabiendo que la rifa se puede abonar en 9 cuotas como mximo, indicar
la cantidad de rifas que se encuentran totalmente pagas a la fecha del
proceso.
C
CUOTAS
NA , NR , UC
MAX:=0
TRP:=0
WHILE NA<>ZZZZ
NAANT:=NA
TAD:=0

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)

19.- Una empresa, comercializa 100 artculos diferentes.


A los efectos de controlar sus existencias y sus ventas, dispone de un
conjunto de registros con 100 artculos ordenados por N de artculo con:
a: El primer registro que contiene el N de artculo y la cantidad inicial de
unidades en existencia. (STOCK)
b: Los siguientes registros contienen el N de artculo y la cantidad de
unidades vendidas (un registro por cada venta de ese artculo)
El ltimo registro de este archivo contiene un cero (0) como N de artculo
Realizar un diagrama y la codificacin PASCAL de un programa que
determine e imprima:
1.- Los N y la existencia final de cada artculo.
2.- Al finalizar el proceso imprimir el N de artculo que registr la menor
cantidad de unidades totales vendidas (de entre aquellos que registraron
ventas).
3.- Si algn artculo quedara con saldo negativo, se deber imprimir
inmediatamente un mensaje que as lo indique y detener el proceso.
C
CA , B
WHILE CA<>0 AND B>=0
ST:=B
CARTANT:=CA
CTUV:=0
CA , B
WHILE CARTANT=CA
UV:=B
CTUV:=CTUV+UV
ST:=ST-B

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.

EJERCICIOS DE PROGRAMACIN PASCAL


20.- PROGRAMA EJEMPLO N 1
Dada la siguiente codificacin, hacer el diagrama y escribir el enunciado del
problema que resuelve.
LNEA CDIGO
1 PROGRAM PERFECTO;
2 (* determina si un numero dado es perfecto *)
3 VAR num,sig,suma: Integer;
4 BEGIN
5
READLN (num);
6
suma := 0;
7
sig := 1;
8
WHILE sig < num DO
9
BEGIN
10
IF num MOD sig=0 THEN (*siguiente divisor de num *)
11
suma :=suma + sig ;
12
sig := sig + 1
13
END;
14
IF suma = num THEN
15
WRITELN (num,' Nmero perfecto')
16
ELSE
17
WRITELN (num,' NO es nmero perfecto')
18 END.
Comprueba si la suma de todos los nmeros anteriores a ese numero num
y que adems sean divisores del mismo, el igual al mismo nmero. A un
nmero que cumpla estas condiciones lo llama PERFECTO.
C
num
suma:=0
sig:=1

WHILE sig < num


(num MOD sig)=0
suma:=suma+sig
sig:=sig+1
suma=num
num , PERFECTO num , NO PERFECTO
F
21.- Cada sentencia de pascal se separa de otra por un punto y coma ( ; ).
Explicar porque, en el programa ejemplo N 1, no existe el punto y coma
despus me las sentencias de las lneas 12 y 15.
Porque no es necesario antes de un END colocar un punto y coma pero si
debe ponerse en este. Tampoco se coloca punto y coma antes de un ELSE.
22.- Indique en todos los casos en que se utilizan; la coma, los dos puntos,
el punto y coma, y el punto como reglas de puntuacin en las codificaciones
Pascal.
COMA: se usa para separar las variables que son del mismo tipo en la
declaracin y para separar texto de variables, o variables de variables, en
impresiones.
DOS PUNTOS: se usa cuando se declara el tipo de variable y para realizar
asignaciones junto con el = a variables.
PUNTO Y COMA: se usa para separar las sentencias.
PUNTO: se usa cuando quiero ver un campo de un registro, para definir un
subrango y para finalizar el programa (END.).
23.- Indicar cules de los siguientes, son identificadores vlidos en PASCAL,
cuales no lo son y porqu.
RUTA66
Y.P.F.
cuando?
PASCAL
RUTA 66 River2Boca2
X26
pascal

YPF

Ayer=Hoy

X2.6

2XX6

IDENTIFICADORES VALIDOS: RUTA66, PASCAL, X26, pascal, YPF, A,


River2Boca2
Los dems, no pueden ser identificadores porque no deben tener puntos o
smbolos y deben empezar con una letra.
24.- Clasifique los siguientes identificadores como: Palabras Reservadas,
Palabras Clave [ o semireservadas, o predefinidas] o ninguno de los dos
grupos.
BEGIN
integer
else
input beguin WHILE
els
read
FORd
proGRAm
SIG
sig
cos
for
INTEGUER MOD
write
readln

PALABRAS RESERVADAS: BEGIN, else, WHILE, read, for, write, readln, integer
PALABRAS CLAVE: cos, MOD
NINGUNO: beguin, els, FORd, proGRAm, SIG, sig, INTEGUER

25.- Enuncie que hace el siguiente programa:


Program ADIVINE;
Var a,b:Integer;
Begin
Read (a);
Read(b);
While b<>0 Do
Begin
If b<a Then
Write (b);
Read (b)
End
End.
Compara las variables a y b y mientras b sea diferente de 0, imprimir los
valores del mismo que sean mayores a la variable a.
26.- Escriba las siguientes constantes en la notacin de punto flotante de
Pascal:

6.6258 x 10-34 = 6.6258 E-34


0=0
4.0 = 4 E0
0.216 x 1012 = 2.16 E+11
904560 = 9.04560 E+5
= 5 E-1
-0.000003 = -3 E-6

27.- Suponiendo la siguiente declaracin:


VAR
i , k : Integer;
x , y : Real;

Determinar si las siguientes expresiones son incorrectas, si lo son, porque.


Caso contrario, el tipo de resultado que se obtiene de la correcta evaluacin
de cada una:
a) x * (Trunc(3.14) +k
b) (x + 3 ) div i
c) ( i + k ) / 2
d) Round(3.14) + k
e) sqr(k + 3)
f) i + x * 3.0
REAL
g) Cos ( I ) mod 2
h) Abs(x + 5) 48
i) (k div i) * (3 + x) REAL
j) Sqrt( -x * 6)
numero negativo,

REAL
REAL
REAL

INCORRECTO No se puede hacer raiz de un

28.- Para las siguientes expresiones matemticas, escriba las


correspondientes expresiones reales en PASCAL
b
a+b
1) a + -- + d
2) ------3) a2 - b2
c
c*d
2
4) a + ------2
b+ --c

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))

29.- Explicar que hace el siguiente programa PASCAL:


Program QUE_HACE;
Var
n , j : Integer; kd : Integer;
Begin
read(n);
kd := 0 ; j := 2 ;

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

31.- Suponiendo que se han declarado las siguientes variables:


Var
i , k : Integer;
x , y : real;
Cuales de las siguientes asignaciones PASCAL son correctas, cuales no lo
son y porque:
a) x := (x + 3) div y
enteros.
b) k := k * trunc(3.14159)
c) x = x + 2
d) k := sin(x) + 5
k no ser entero.
e) y := round(x)
f) y := k + 3 * i
g) k := x + 2
y k es entero
h) k+1 := k

INCORRECTO La sentencia div es solo para


CORRECTO
INCORRECTO Debera ser x:=x+2
INCORRECTO La funcin seno da un real y
CORRECTO
CORRECTO
INCORRECTO La suma da un numero real
INCORRECTO Deberia ser k:=k+1

32.- Con referencia al ejercicio anterior, cual ser el valor de la variable de


la izquierda despus de ejecutarse la sentencia de asignacin indicada, si
las variables contienen inicialmente los valores sealados a continuacin:

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

33.- Podemos asignar una expresin entera a una variable real?


y una expresin real a una variable entera?
Si, porque los enteros son nmeros reales.
No, porque no todos los reales son enteros.

34.- Que clase de parmetros pueden aparecer en una lista de datos a


ingresar?
Y en una lista de salida.?
Pueden utilizarse los procedimientos: write, writeln, read y readln con
cualquier tipo de datos?
En ambos casos pueden aparecer: integer, real, file, record, array, boolean,
subrangos.
No, por ejemplo, no puedo usar readln para leer un archivo.
35.- En el siguiente segmento de un programa PASCAL:
IF x <= 0
THEN
IF x < 0
THEN
sentencia 1
ELSE
sentencia 2;
Si tenemos en cuenta la identacin indicada, ste segmento se
ejecutar acorde a esa identacion ?
Dibuje el diagrama correspondiente a la codificacin.
No, porque dentro del segundo IF se ejecutaran las dos sentencias
correspondientes a los estados.
X<=0
X<0
SENTENCIA1

SENTENCIA2

36.- Realizar un diagrama y la codificacin de un programa que ingrese por


teclado 6 registros con un valor numrico cada uno y determine e imprima la
sumatoria y el promedio de los valores ingresados, y todos aquellos valores,
de entre los que se ingresaron, que son mayores al promedio.
C
S:=0
FOR H:=1 TO 6 DO
A
V[H]:=A
S:=S+A
P:=S/6
FOR H:=1 TO 6 DO
V[H]>P
V[H]
F

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.

37.- Se ingresa por teclado un valor de N 250. A continuacin hay un


archivo PRIMERO.DAT de N registros conteniendo un valor numrico real
cada uno que se cargarn en un vector A, y un segundo archivo
SEGUNDO.DAT, tambin de N registros conteniendo un valor numrico real
cada uno que formarn al vector B.
Realizar un diagrama y su correspondiente codificacin en lenguaje Pascal,
que lea los datos indicados y cargue los vectores, luego genere un vector
UNIN en el que cada uno de sus componentes se genere de la siguiente
forma:
UNIN[1]=A[1]+B[N]; UNIN[2]=A[2]+B[N-1]; ...UNIN[N]=A[N]+B[1]
Imprimir los 3 vectores con identificacin.
C
N
ASSIGN (PRIM,C: PRIMERO.DAT)
ASSIGN (SEG, C: SEGUNDO.DAT)
RESET (PRIM)
RESET (SEG)
FOR H:=1 TO N
PRIM,REG
SEG,REG
A[H]:=PRIM.A
B[H]:=SEG.A
FOR H:=1 TO N
UNION[H]:=A[H]+B[N-H+1]
A[H] , B[H] , UNION[H]
F

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.

39.- Se dispone de un conjunto de 23 registros, cada uno con un valor entero,


ya ordenado en forma creciente. A continuacin Leer un registro adicional,
tambin con un valor entero. Se debe escribir un diagrama y la
correspondiente codificacin que leyendo estos registros en el orden indicado,
genere un vector de 24 elementos donde el valor adicional se encuentre
ubicado en el lugar que le corresponda en el vector de forma tal que quede
tambin ordenado en forma creciente
C
FOR H:=1 TO 23
A
V[H]:=A
B
I:=1
WHILE (V[I]<B) AND (I<=23)
V2[I]:=V[I]
I:=I+1
V2[I]:=B
FOR H:=(I+1) TO 23
V2[H+1]:=V[H]
F

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.

43.- Una cooperativa de servicios telefnicos, desea confeccionar un


programa que realice los clculos de los montos que cada abonado debe

pagar y sus respectivas facturas; para lo cual dispone de un archivo de 20


registros, cada uno de los cuales con la siguiente informacin en cada uno
de los campos:
# CDIGO DE TARIFA (5 caracteres alfanumricos)
# CANTIDAD DE PULSOS LIBRES DEL ABONO
# IMPORTE DEL ABONO
# IMPORTE DEL PULSO EXCEDENTE
El importe de cada factura se debe calcular en base al cdigo de tarifa,
sumndole al importe del abono, el que corresponda por los pulsos
excedentes [si los hubiera].
Dispone tambin de otro archivo con los registros de los abonados
conteniendo en cada campo los siguientes datos:
# NUMERO DE ABONADO.
# CDIGO DE TARIFA.
# CANTIDAD DE PULSOS TOTALES REGISTRADOS.
Se debe diagramar y codificar un programa que procese estos archivos e
imprima para cada abonado: la factura con su N, el importe del abono, la
cantidad de llamadas libres, los pulsos excedentes [si los hubiese o un cero
en caso contrario] y el importe total a abonar por el mismo. Se informar
adems el total a facturar por cada categora.
C
ASSIGN (TARIFAS , C:\TARIFAS.DAT)
ASSIGN (ABONADO , C:\ABONADO.DAT)
RESET (TARIFAS)
RESET (ABONADO)
FOR H:=1 TO 20
TARIFAS , RTAR
TFACT[H]:=0
CT[H]:=RTAR.CT
CPL[H]:=RTAR.CPL
IAB[H]:=RTAR.IAB
IPE[H]:=RTAR.IPE
NF:=0
WHILE NOT EOF (ABONADO)
ABONADO , RABON
POS:=1
WHILE CT[POS]<>RABON.CTAR AND POS<=20
POS:=POS+1
CT[POS]=RABON.CTAR
PEXC:=RABON.CPTR-CPL[POS]
PEXC>0
IFACT:=IAB[POS]+(PEXC*IPE[POS])

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.

Se desea automatizar un sistema de consulta que ingrese un n de artculo


y una cantidad que corresponde a una venta.
Realizar un diagrama y la correspondiente codificacin PASCAL que
mediante la consulta de la lista de precios:
a) Imprima el importe de la venta.
b) En caso de no poder hacer el clculo, imprima un mensaje de error.
NOTA: Resolver el mismo problema considerando al cdigo de artculo como
un string[8]. [Utilizar un procedimiento que realice bsqueda secuencial y
luego otro que utilice bsqueda dicotmica.]
C
ASSIGN (LISTA , C:\LISTA.DAT)
RESET (LISTA)
FOR H:=1 TO 300
LISTA , RLIS
VCA[H]:=RLIS.CA
VPU[H]:=RLIS.PU
DESEA CONSULTAR
RESP
WHILE RESP=SI DO
CART , CANT
ART:=1
WHILE CART<>VCA[ART] AND ART<=300
ART:=ART+1
CART=VCA[ART]
IMPORTE:=VPU[ART]*CANT
IMPORTE
RESP
F

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.

45.- Se debe realizar un proceso de desagio (reduccin de montos por


aplicacin de la ley de conversin del Peso al Austral) para los plazos fijos
efectuados en una compaa financiera. Para llevarlo a cabo se dispone de
un archivo con 199 registros con:
a) Fecha de aplicacin (DDMMAA)
b) Coeficiente de desagio
El primero corresponde a la fecha de vencimiento 16-06-85 y el ltimo a la
fecha 31-12-85.

A continuacin se dispone de otro lote de registros con la informacin de


cada plazo fijo, ordenado por su N con:
a) N del plazo fijo
b) Fecha de vencimiento (DDMMAA)
c) Importe a cobrar.
Realizar el diagrama y la codificacin PASCAL de un programa que
determine e imprima:
1.- Los datos ledos de cada plazo fijo y el nuevo importe actualizado a
abonar al vencimiento.
2.- Al finalizar el proceso se informarn correlativamente todos los datos
(N, fecha e importe) de los plazos fijos que no pudieron desagiarse por
tener una fecha de vencimiento posterior al 31-12-85 (no hay mas de 300
en esas condiciones)
C
ASSIGN (DESAGIO , C:\DESAGIO.DAT)
ASSIGN (PLAZOFIJO , C:\PLAZOFIJO.DAT)
RESET (DESAGIO)
RESET (PLAZOFIJO)
FOR H:=1 TO 199
DESAGIO , RDES
VFECHA[H]:=RDES.FA
VCOEF[H]:=RDES.COE
J:=0
PLAZOFIJO , RPF
WHILE RPF.NPF<>0
I:=1
WHILE VFECHA[I]<>RPF.FV AND I<=199
I:=I+1
VFECHA[I]=RPF.FV
IMP:=RPF.IM*VCOEF[I]

J:=J+1

RPF.NPF , RPF.FV , IMP

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)

b) El segundo, BOLETOS.DAT, donde por cada boleto vendido se graba


un registro con los siguientes datos:
Nmero de estacin de Partida (1 a 20)
Nmero de estacin de Llegada (1 a 20)
Realizar el diagrama y codificacin de un programa que leyendo los datos
de ambos archivos determine e imprima:
1.- El nmero de estacin por la que paso la mayor cantidad de
pasajeros, no considerndose los ascensos y descensos en las estaciones.
2.- El promedio de Km / pasajero.
Diagrama variante 1
b) Por cada boleto vendido se registran los siguientes datos:
Nmero de estacin de Partida (1 a 20)
Nmero de estacin de Llegada (1 a 20)
Cdigo de Recorrido (1 :Ida; 2: Ida y Vuelta)
C
ASSIGN (DISTANCIA , C:\DISTANCIA.DAT)
ASSIGN (BOLETOS , C:\BOLETOS.DAT)
RESET (DISTANCIA)
RESET (BOLETOS)
FOR H:=1 TO 19
DISTANCIA , RDIST
VDIST[H]:=RDIST.DIST
EST[H]:=0
EST[20]:=0
CPAS:=0
ESTMAX:=0
KMS:=0
WHILE NOT EOF (BOLETOS)
BOLETOS , RBOL
CPAS:=CPAS+1
RBOL.EP>RBOL.EL
AUX:=RBOL.EP
RBOL.EP:=RBOL.EL
RBOL.EL:=AUX
FOR I:=(EP+1) TO (EL-1)
EST[I]:=EST[I]+1
FOR J:=(EP) TO (EL-1)
KMS:=KMS+VDIST[J]
PROM:=KMS/CPAS
FOR H:=1 TO 20
EST[H]>ESTMAX
ESTMAX:=EST[H]
POS:=H
POS , PROM

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)

47.- Realizar un diagrama y la correspondiente codificacin en lenguaje


Pascal que permita determinar e imprimir la grilla de largada de una carrera
automovilstica en la que se inscribieron 58 participantes y participan 30
como mximo.
Se dispone solamente de un archivo con la siguiente informacin:
NUMERO DE AUTO (3 dgitos) TIEMPO DE UNA VUELTA
Se graba un registro por cada una de las vueltas que completa un auto en
las pruebas de clasificacin por lo que para cada auto puede aparecer uno,

varios o ningn registro. Se deber informar al finalizar, la cantidad de


participantes que no clasificaron No lograron girar ninguna vuelta en las
pruebas de clasificacin.
Si clasifican mas de 30, se imprimir un listado aparte, con el ttulo:
SUPLENTES
C
ASSIGN (TIEMPOS , C:\TIEMPOS.DAT)
RESET (TIEMPOS)
ULT:=0
WHILE NOT EOF (TIEMPOS)
TIEMPOS , RT
POS:=1
ULT>=POS AND POS<58 AND NAUTO[POS]<>RT.NA
POS:=POS+1
ULT<POS
NAUTO[POS]:=RT.NA

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

FOR I:=1 TO ULT

NAUTO[H] , TMIN [H]

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

VECTOR2=ARRAY [1..58] OF REAL;


TIEMPOS:ARCH;
RT:REGTI;
NAUTO,AUX2:VECTOR1;
TMIN,AUX:VECTOR2;
ULT,POS,H,NPART:0..58;
ASSIGN (TIEMPOS,'C:\TIEMPOS.DAT');
RESET (TIEMPOS);
ULT:=0;
WHILE NOT EOF (TIEMPOS) DO
BEGIN
READ (TIEMPOS,RT);
POS:=1;
WHILE ULT>=POS AND POS<58 AND NAUTO[POS]<>RT.NA DO
POS:=POS+1;
IF ULT<POS THEN
BEGIN
NAUTO[POS]:=RT.NA;
TMIN[POS]:=RT.TV;
ULT:=POS
END
ELSE
BEGIN
IF NAUTO[POS]=RC.NA THEN
BEGIN
IF TMIN[POS]>RT.TV THEN
TMIN[POS]:=RT.TV
ELSE;
END
ELSE
WRITELN ('ERROR')
END
END;
NPART:=58-ULT;
WRITELN (NPART);
FOR H:=1 TO (ULT-1) DO
BEGIN
FOR I:=(H+1) TO ULT DO
BEGIN
IF TMIN[H]>TMIN[I] THEN
BEGIN
AUX:=TMIN[H];
TMIN[H]:=TMIN[I];
TMIN[I]:=AUX;
AUX2:=NAUTO[H];
NAUTO[H]:=NAUTO[I];
NAUTO[I]:=AUX2
END
ELSE
END
END;
IF ULT>30 THEN
BEGIN
FOR H:=1 TO 30 THEN
WRITELN (NAUTO[H],TMIN[H]);
WRITELN ('SUPLENTES');
FOR H:=31 TO ULT
WRITELN (NAUTO[H],TMIN[H])
END
ELSE
BEGIN
FOR H:=1 TO 30 THEN
WRITELN (NAUTO[H],TMIN[H])
END;
CLOSE (TIEMPOS)

END.

48.- Realizar un diagrama y la correspondiente codificacin en lenguaje


Pascal que permita determinar e imprimir la identificacin de los
participantes que integrarn la largada de una carrera automovilstica.
Se cuenta para ello con un lote de datos con los 58 inscriptos para las
pruebas de clasificacin, cada registro tiene los siguientes datos:
APELLIDO Y NOMBRE (30 caracteres)
ESCUDERIA (10 caracteres),
MARCA(10 caracteres),
NMERO DE AUTO (1 A 100),

GRUPO SANGUINEO (4 caracteres)


En la carrera pueden participar solamente 30 corredores (los que empleen
los menores tiempos en las pruebas de clasificacin; las mismas se realizan
bajo las siguientes reglas:
a) Solo pueden clasificar aquellos que no salgan a la pista para
clasificar en mas de 7 oportunidades.
b) Se considerarn solamente las vueltas completas al circuito.
c) Se debe considerar el menor tiempo de una vuelta para la
clasificacin.
Se genera un registro por cada vuelta que completa un participante
conteniendo:
NMERO DE AUTO, NMERO DE VUELTA y TIEMPO EMPLEADO.
Se imprimir un listado ordenado segn la ubicacin que le corresponder a
cada corredor y en caso de exceder los 30, un listado con los suplentes. (si
un participante no complet ninguna vuelta, no se incluye en ste ltimo
listado.
Informar la cantidad de autos que presenta cada escudera.
C
ASSIGN (AUTOS , C:\AUTOS)
ASSIGN (VUELTAS , C:\VUELTAS)
RESET (AUTOS)
RESET (VUELTAS)
ULTESC:=0
FOR H:=1 TO 58
AUTOS , RA
ESC:=1
WHILE ULTESC<=ESC AND RA.ESC<>VESC[ESC] AND ESC<=58
ESC:=ESC+1
ULTESC>ESC
VESC[ESC]:=1
ULTESC:=ESC
ERROR

RA.ESC=VESC[ESC]
VESC[ESC]:=VESC[ESC]+1
ULT:=0

WHILE NOT EOF (VUELTAS)


VUELTAS , RV
POS:=1
WHILE ULT<=POS AND RV.NA<>VAUTOS[POS] AND POS<=58
POS:=POS+1
ULT>POS
RV.NV<=7

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

FOR H:=1 TO ULT

VAUTOS[H] , VTIEMPO[H] VAUTOS[H] , VTIEMPO[H]


SUPLENTES
FOR H:=31 TO ULT
VAUTOS[H] , VTIEMPO[H]
FOR H:=1 TO ULTESC
VESC[H]
CLOSE (AUTOS)
CLOSE (VUELTAS)
F

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)

49.- En una unidad de entrenamiento militar de comandos, hay 1259


efectivos entrenados, los que han sido calificados de 1 a 10, en cada una de
las 15 especialidades [Por ejemplo: 1: Asalto, 2: Francotirador, 3: Armas
Especiales, ,15: Paracaidistas] .
Se genera un archivo con un registro para cada uno de los egresados, los
siguientes datos: Apellido y nombres, legajo, notas obtenidas en cada
especialidad.
La diferentes unidades operativas, solicitan a la unidad de entrenamiento,
mediante listados con los datos de los mejores de cada especialidad, la
cantidad de comandos y la especialidad.
Se debe desarrollar un programa que, leyendo la informacin del archivo y
luego las solicitudes, seleccione e imprima los listados con los datos de los
comandos seleccionados de acuerdo a las pautas dadas (cantidad y mejores

notas de la especialidad requerida), sabiendo adems que un efectivo no


puede volver a asignarse a una unidad operativa, si ya fue asignado a otra.
Si la cantidad requerida, no puede ser satisfecha, se asignaran los que estn
disponibles y un mensaje indicando la cantidad faltante.
C
ASSIGN (EGR , C:\EGR.DAT)
RESET (EGR)
FOR H:=1 TO 1259
EGR , REGR
VEGR[H].AN:=REGR.NAP
VEGR[H].LEG:=REGR.LE
VEGR[H].VNOT[1]:=REGR.E1
VEGR[H].VNOT[2]:=REGR.E2
VEGR[H].VNOT[3]:=REGR.E3
VEGR[H].VNOT[4]:=REGR.E4
VEGR[H].VNOT[5]:=REGR.E5
VEGR[H].VNOT[6]:=REGR.E6
VEGR[H].VNOT[7]:=REGR.E7
VEGR[H].VNOT[8]:=REGR.E8
VEGR[H].VNOT[9]:=REGR.E9
VEGR[H].VNOT[10]:=REGR.E10
VEGR[H].VNOT[11]:=REGR.E11
VEGR[H].VNOT[12]:=REGR.E12
VEGR[H].VNOT[13]:=REGR.E13
VEGR[H].VNOT[14]:=REGR.E14
VEGR[H].VNOT[15]:=REGR.E15
TOTAL:=1259
K:=1
BAND:=0

WHILE BAND=0 AND K<=1258 DO


NESP , CANT
FOR H:K TO 1258
FOR I:=(H+1) TO 1259
VEGR[H].VNOT[NESP]<VEGR[I].VNOT[NESP]
AUX:=VEGR[H]
VEGR[H]:=VEGR[I]
VEGR[I]:=AUX
TOTAL:=TOTAL-CANT

TOTAL<0
F:=ABS(TOTAL-CANT)
FOR J:=K TO 1259

FOR J:=K TO (K+CANT-1)

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;

BEGIN ASSIGN (EGR,'C:\EGR.DAT');


RESET (EGR);
FOR H:=1 TO 1259 DO
BEGIN
READ (EGR,REGR);
VEGR[H].AN:=REG.NAP;
VEGR[H].LEG:=REGR.LE;
VEGR[H].VNOT[1]:=REGR.E1;
VEGR[H].VNOT[2]:=REGR.E2;
VEGR[H].VNOT[3]:=REGR.E3;
VEGR[H].VNOT[4]:=REGR.E4;
VEGR[H].VNOT[5]:=REGR.E5;
VEGR[H].VNOT[6]:=REGR.E6;
VEGR[H].VNOT[7]:=REGR.E7;
VEGR[H].VNOT[8]:=REGR.E8;
VEGR[H].VNOT[9]:=REGR.E9;
VEGR[H].VNOT[10]:=REGR.E10;
VEGR[H].VNOT[11]:=REGR.E11;
VEGR[H].VNOT[12]:=REGR.E12;
VEGR[H].VNOT[13]:=REGR.E13;
VEGR[H].VNOT[14]:=REGR.E14;
VEGR[H].VNOT[15]:=REGR.E15
END;
TOTAL:=1259;
K:=1;
BAND:=0;
WHILE BAND=0 AND K<=1258 DO
BEGIN
READLN (NESP,CANT);
FOR H:=K TO 1258 DO
BEGIN
FOR I:=(H+1) TO 1259 DO
BEGIN
IF VEGR[H].VNOT[NESP]<VEGR[I].VNOT[NESP] THEN
BEGIN
AUX:=VEGR[H];
VEGR[H]:=VEGR[I];
VEGR[I]:=AUX
END
ELSE
END
END;
TOTAL:=TOTAL-CANT;
IF TOTAL<0 THEN
BEGIN
F:=ABS(TOTAL-CANT);
FOR J:=K TO 1259 DO
BEGIN
WRITELN (VEGR[J].AN,VEGR[J].LEG);
FOR A:=1 TO 15 DO
WRITELN (VEGR[J].VNOT[A])
END;
WRITELN ('FALTAN',F);
BAND:=1
END
ELSE
BEGIN
FOR J:=K TO (K+CANT-1) DO
BEGIN
WRITELN (VEGR[J].AN,VEGR[J].LEG);
FOR A:=1 TO 15 DO
WRITELN (VEGR[J].VNOT[A])

END
END;
K:=K+CANT

END.

END;
CLOSE (EGR)

50.-Una empresa, con una cantidad mxima de 2500 artculos, dispone de


un conjunto de registros (uno por cada artculo) con los siguientes datos en
cada uno:
*N de artculo (8 dgitos). *Cantidad de unidades en stock.
*Precio unitario de la venta. * N de proveedor.
El ltimo registro del lote tiene un N de artculo = -1 y solo se ha colocado
para indicar el fin del archivo, no debiendo procesarse.
A continuacin hay otro conjunto de registros con la siguiente
informacin en cada uno:
* N de cliente (1 a 999)
* Fecha de la venta (DDMMAA).
* N de artculo.
* Cantidad de unidades.
Cada registro corresponde a la venta de un artculo y no tiene ningn
orden, finalizando el archivo con un n de cliente = 0.
Realizar el diagrama y la codificacin PASCAL de un programa que
determine e imprima al finalizar el proceso:
1) Para los clientes que como mnimo compraron en 3 meses, el siguiente
listado:
IMPORTE DE VENTAS POR CLIENTE POR MES
NUMERO DE
MES

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]

FOR A:=1 TO (K-1)


FOR B:=(A+1) TO K
VCLI3[A].NC>VCLI3[B].NC
AUX:=VCLI3[A]
VCLI3[A]:=VCLI3[B]
VCLI3[B]:=AUX
FOR H:=1 TO CART
VART[H].ST<0

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;

BEGIN ASSIGN (ARTICULO,'C:\ARTICULO.DAT');


ASSIGN (VENTAS,'C:\VENTAS');
RESET (ARTICULO);
RESET (VENTAS);
CART:=0;
READ (ARTICULO,RART);
WHILE RART.CA<>(-1) DO
BEGIN
CART:=CART+1;
VART[CART]:=RART;
READ (ARTICULO,RART)
END;
ULTC:=0;
ERR:=0;
READ (VENTAS,RVEN);
WHILE RVEN.NC<>0 DO
BEGIN
CLI:=1;
WHILE ULT>=CLI AND VCLI[CLI].NC<>RVEN.NCL DO
CLI:=CLI+1;

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.

Vous aimerez peut-être aussi