Вы находитесь на странице: 1из 14

EJERCITACIN EN PASCAL:

Cada ejercicio debe ser copiado/escrito en la versin de Pascal que posean y luego compilarlo, probarlo y
decorarlo
Laboratorio 1
Escribir un programa en Pascal que sume dos nmeros:
a = 4 b = 3
PROGRAM EJER1;
var a,b,c:INTREGER;
BEGIN
a:=4;
b=3;
{Se asigna un valor cualquiera a las variables "a" y "b"}
c:=a+b;
WRITELN(c);
READLN;
END.


PROGRAM EJER2;
VAR a,b,c:INTEGER;
BEGIN
WRITELN ('Este programa suma dos numeros:');
WRITELN (' ');
WRITE ('Introduzca un numero: ') READLN (a);
WRITE ('Introduzca otro numero: ' ); READLN (b);
WRITELN (' ');
c=a+b;
WRITE ('EL RESULTADO ES: ');
WRITE (c);
READln;
END;

Escribir un programa en Pascal que sume, reste, multiplique y divida dos nmeros:
x = 10 y = 2

PROGRAM EJER3;
VAR x,y:INTEGER;
suma,rest,mult,divi:INTEGER;
BEGIN
x:=10;
y:=2
suma:=x + y;
rest:=x - y;
mult:=x * y;
divi:=x / y;
WRITE ('SUMA:'); WRITELN (suma);
WRITE ('RESTA:'); WRITELN (rest);
WRITE ('MULTIPLICACION:'); WRITELN (mult)
WITRE ('DIVISION:'); WRITELN (divi);
READLN
END.

PROGRAM EJER4;
VAR x,y:REAL;
suma,rest,mult:REAL;
divi:REAL;
BEGIN
WRITELN ('Este programa suma,resta,multiplica y divide:');
WRITELN ('Escriba dos numeros reales');
WRITELN (' ');
RIAD (x);
RIAD (y);
suma:=x + y;
rest:=x - y;
mult:=x * y;
divi:=x / y;
WRitE ('SUMA:'); WRITELN (suma:3:0);
WRITE ('RESTA:'); WRITELN (rest:3:0);
WRITE ('MULTIPLICACION:'); WRITELN (mult:3:0);
WRITE ('DIVISION:'); WRITE (divi:5:2);
READLN;
END.

Escribir un programa en Pascal que calcule el rea de un rectngulo:
lado1 = 3 lado2 = 4 rea del rectngulo=lado1 * lado2

PROGRAM EJER5;
USES CRT;
VAR lado1,lado2:INTEGER;
area:INTEGER;
BEGIN
/*Este programa nos va a servir para calcular el area de un rectngulo*/
lado1:=3;
lado2:=4;
area:=lado1*lado2; :Calculamos el area:
ClrScr;
WRITE ('AREA DEL RECTANGULO: '); WRITE (area); {Lo mostramos en pantalla}
READKEY;
END.

PROGRAM EJER6;
USES CRT;
VAR lado1,lado2:REAL;
area:REAL;
BEGIN
{Este programa calcula el area de un rectangulo}
ClrScr;
WRITELN ('Escriba los lados del rectangulo');
READ (lado1);
READ (lado2);
WRITELN (' ');
area:=lado1*lado2;
WRITE ('AREA DEL RECTANGULO:'); WRITELN (area:5:2);
READKEY;
END.
{ACA SE TERMINA EL PRIMER LABORATORIO, SE PLANTEA EL SIGUIENTE EJERCICIO COMO TAREA, PARA
QUE LO RESUELVAN Y LO TRAIGAN PENSADO PARA INICIAR EL SEGUNDO LABORATORIO}

EJER7: Escribir un programa en Pascal que calcule el rea de un tringulo:
base = 7 altura = 4 rea del tringulo = (base * altura)/2

Laboratorio 2
Escribir un programa en Pascal que calcule la velocidad de un proyectil que recorre 2 Km en 5 minutos.
Expresar el resultado en metros/segundo. Velocidad = espacio/tiempo

PROGAM EJER8;
USES CRT;
VAR espacio,tiempo:REAL;
velocidad:INTEGER;
BEGIN
espacio:=2;
tiempo:=5;
velocidad:=(espacio*1000/(tiempo*60);
ClrScr;
WRITE ('VELOCIDAD DEL PROYECTIL:');
WRITE (velocidad:5:2) WRITELN ('m/s');
READKEY;
END.

PROGRAM EJER9;
USES CRT;
VAR espacio,tiempo,espacio2,tiempo2:REAL;
velocidad,velocidad2:REAL;
BEGIN
{Este programa calcula la velocidad de un cuerpo}
ClrScr;
WRITE ('Para calcular la velocidad debe escribirlo en unidades ');
WRITE ('del sistema internacional');
WRITELN (' ');
WRITE ('Escriba el espacio recorrido: '); READLN (espacio);
WRITE ('Escriba el tiempo transcurrido: '); READLN (tiempo);
WRITELN (' ');
velocidad:=(espacio) div (tiempo);
WRITE ('VELOCIDAD DEL PROYECTIL: ');
WRITE (velocidad:5:2); WRITELN (' m/s');
WRITELN (' ');
WRITELN ('Si lo desea en Km/h introduzca los datos: ');
WRITELN (' ')
WRITE ('Escriba el espacio recorrido: '); READLN (espacio2);
WRITE ('Escriba el tiempo transcurrido: '); READLN (tiempo2);
WRITELN (' ');
velocidad2=(espacio2)/(tiempo2);
WRITE (velocidad2:5:2); WRITE (Km/h );
END.

Escribir un programa en Pascal que calcula la siguiente expresin trigonomtrica para un valor
angular de 90 (sen x * cos x)/(tan x)
PROGRAM EJER10;
VAR resultado, x:REAL;
BEGIN
WRITE ('PARA CALCULAR LA EXPRESION: (sin(x) * cos(x)) / tan(x)');
WRITELN (' INTRODUZCA EL VALOR DE X EN RADIANES: ');
READLN (x);
WRITELN ('');
resultado:=(sen(x) * cos(x)) / (sen(x) / cos(x));
WRITE ('El resultado de la expresion (senx * cosx /tagx) es igual a: ');
WRITELN (resultado:5:2);
READLN;
END.
Escribir un programa en Pascal que determine si un nmero ledo desde el teclado es par o impar

PROGRAM EJER11;
VAR num:INTEGER;
BEGIN
WRITE ('Introduzca un numero entero: '); READLN (num);
IF num = 0 THEN
WRITE ('El numero introducido no es par ni impar, es 0');
ELSE IF ((num mod 2) = 0) THEN
WRITE ('El numero introducido es par');
ELSE
WRITE ('El numero introducido es impar');
END.
Escribir un programa en Pascal que dado un nmero del 1 a 7 escriba el correspondiente nombre
del da de la semana.

PROGRAM EJER12;
USES CRT;
VAR num:INTEGER;
BEGIN
ClrScr;
WRITE ('Escriba un numero para ver con que dia corresponde: ');
READLN (num);
IF num=1 THEN
WRITE ('Lunes'),
IF num=2 THEN
WRITE ('Martes'),
IF num=3 THEN
WRITE ('Miercoles'),
IF num=4 THEN
WRITE ('Jueves');
IF num=5 THEN
WRITE ('Viernes');
IF num=6 THEN
WRITE ('Sabado');
IF num=7 THEN
WRITE ('Domingo');
END.


PROGRAM EJER12B;
USES CRT;
VAR num_dia_sem:INTEGER;
BEGIN
ClrScr;
WRITE('Dia de la semana (numero) -> '); READLN(num_dia_sem);
CASE num_dia_sem do
1: WRITELN('Lunes');
2: WRITELN('Martes');
3: WRITELN('Miercoles');
4: WRITELN('Jueves');
5: WRITELN('Viernes');
6: WRITELN('Sabado');
7: WRITELN('Domingo');
ELSE
WRITELN('No es un dia de la semana');
END;
READKEY;
END.

Escribir un programa en Pascal que realice un bucle con While y muestre en pantalla del 1 al 10.
PROGRAM EJER13;
USES CRT;
VAR x:INTEGER;
BEGIN
x:=0;
ClrScr;
WHILE X < 10 OF
BEGIN;
x:=x+1;
WRITELN (x);
READLN;
END;
READKEY;
END.

Escribir un programa en Pascal que realice un bucle con Repeat y muestre en pantalla del 1 al 10.
PROGRAM EJER13B;
USES CRT;
VAR x:INTEGER;
BEGIN
x:=0;
ClrScr;
REPETIR
x:=x+1;
WRITELN (x);
UNTIL x=10;
READKEY;
END.

Escribir un programa en Pascal que realice un bucle con For y muestre en pantalla del 1 al 10.
PROGRAM EJER13C;
USES CRT;

VAR x:INTEGER;
BEGIN
ClrScr;
FOR x:=1 TO 10 DO
WRITELN (x)
READKEY;
END.

Escribir un programa en Pascal que sume dos cadenas. (los datos vienen en el cuerpo del ejercicio).
PROGRAM EJER14;
USES CRT;
VAR tit_pel1:STRING;
tit_pel2:STRING;
tit_pel3:STRING;
BEGIN
tit_pel1:='ALIEN';
tit_pel2:='VS';
tit_pel3:='DEPREDADOR';
ClrScr;
WRITELN ('TITULOS DE PELICULAS');
WRITELN (tit_pel1);
WRITELN (tit_pel2 + tit_pel3);
END.
Escribir un programa en Pascal que cuente las maysculas de una cadena de caracteres.

PROGRAM EJERC15;
USES CRT;
CONST cadena:STRING=('EstO es PROGraMAcion');
VAR i, mayus:INTEGER;
BEGIN
ClrScr;
FOR i:=1 TO LENGTH(cadena) DO
BEGIN
IF cadena[i] = UPCASE(cadena[i]) THEN
mayus:=mayus + 1;
IF cadena[i]=' ' THEN
mayus:=mayus - 1;
END
WRITELN ('El numero de mayusculas es: ', mayus);
READKEY;
END.

Escribir un programa que muestre en pantalla VS2 realizado por nosotros (usar PROCEDURE).
PROGRAM Ejer16 (INPUT, OUTPUT);
Uses Crt;
PROCEDURE letra_V;
BEGIN WRITELN('V V');
WRITELN(' V V ');
WRITELN(' V V ');
WRITELN(' V V ');
WRITELN(' V ');
END;
PROCEDURE letra_S;
BEGIN
WRITELN('SSSSSSS');
WRITELN('S ');
WRITELN('SSSSSSS');
WRITELN(' S');
WRITELN('SSSSSSS');
END;
PROCEDURE num_2;
BEGIN
WRITELN('2222222');
WRITELN(' 2');
WRITELN('2222222');
WRITELN('2 ');
WRITELN('2222222');
END;
BEGIN {empezamos el programa principal}
ClrScr;
REPETIR
letra_V; WRITELN;
letra_S; WRITELN;
num_2;
UNTIL READKEY;
END.

Escribir un programa que, utilizando funciones semeje un despertador para todos los das de la semana.
PROGRAM Despertador ( INPUT, OUTPUT ) ;
TYPE
dias_de_la_semana = (lunes,martes,miercoles,jueves,
viernes, sabado, domingo) ;
VAR
dia : dias_de_la_semana ;
llueve, hace_viento : CHAR ;

FUNCTION Hace_buen_dia : BOOLEAN ;
BEGIN
IF (llueve = 'N') AND (hace_viento = 'N')
THEN
hace_buen_dia : = TRUE
ELSE
hace_buen_dia : = FALSE ;
END ;

BEGIN
WRITELN (' RIIING !! ') ;
WRITELN (' Que dia es hoy ? ') ;
READLN (dia) ;
CASE dia OF
lunes, martes, miercoles, jueves, viernes:
WRITELN (' LEVANTATE, HAY QUE IR A TRABAJAR ') ;
sabado, domingo :
BEGIN
WRITELN (' Llueve (S/N) ? ') ;
READLN (llueve) ;
WRITELN (' Hace viento (S/N) ? ') ;
READLN (hace_viento) ;
IF hace_buen_dia
THEN
WRITELN ( ' LEVANTATE Y A DISFRUTAR DEL DIA,
ELSE
WRITELN(' TRANQUILO, PUEDES SEGUIR TUMBADO' )
END ;
END ;
END .

Escribir un programa que, utilizando procedimientos con parmetros, lea desde el teclado las
unidades y el precio que quiere comprar, y en funcion de las unidades introducidas le haga un
descuento o no.
PROGRAM Ejer17 (INPUT, OUTPUT);
Uses Crt;
CONST
Desc = 15; {le haremos un 15% de descuento}
VAR
Unidades, precio: INTEGER;
Total, cantDesc: REAL;
PROCEDURE descuento (VAR cantidad, descuento: REAL; porciento: INTEGER);
BEGIN
Descuento := cantidad * porciento/100; {el descuento es
el 15% del total}
Cantidad := cantidad - descuento; {la cantidad final
es la cantidad - el descuento}
END;
BEGIN
ClrScr;
WRITE('Introduzca el numero de unidades: ');
READLN(unidades);
WRITELN;
WRITE('Introduzca el precio: ');
READLN(precio);
WRITELN;
Total := precio * unidades; {Calculamos el total}
IF (unidades > 5) THEN descuento (total, cantDesc, desc) {aplicamos el descuento}
ELSE cantDesc := 0;
WRITELN('Total: ',total:5:2,' Descuento: ',cantdesc:5:2); {escribimos en pantalla el total y el descuento}
REPEAT Until Keypressed;
END.

Escribir un programa que, utilizando procedimientos, con parmetros, intercambie los valores de dos
variables.
Program intercambio;
Uses crt;
Var
Entero 1 ,entero2 : integer;
Procedure intercambio (var pfl ,p12:integer);
Var
Aux:integer; {variable local uso exclusivo en procedimiento}
Begin
Aux:=pfl;
Pfl:pf2;
Pfl: aux
End;
begin
clrscr; {*borrado de pantalla*}
Write ('introduzca 2 variables enteras: ');
Readln(entero1,entero2);
Writeln ('valores de las variables antes de la llamada');
Writeln ('Entero 1 = ',enterol,'entero 2 = ',entero2);
intercambio (enterol,entero2); {llamada al procedimiento}
Writeln ('Valor de las variables despus de la llamada');
Writeln ('entero 1 = ',enterol,'entero 2 = ',entero2);
end;
{ACA SE TERMINA EL SEGUNDO LABORATORIO}
En el tercero empezaremos con archivos secuenciales.
Laboratorio 3
Escribir un programa que permite visualizar en pantalla el contenido de un archivo de texto.
PROGRAM Ejer18;
Var
ArchText: Text;
Ch: Char;
begin
Assign(ArchText,'memoria.txt');
Reset(ArchText);
{Visualiza el archivo en la pantalla}
while not Eof(ArchText) do
begin
Read(ArchText,Ch);
Write(Ch)
end;
Close(ArchText)
end.

El siguiente programa realiza las operaciones de altas,bajas y consultas del control
de empleados por medio de acceso secuencial a un archivo con tipo

PROGRAM secuencial;
Const
esc = #27;
Type
datos = record
clave : string[3];
nombre : string[30];
puesto : string[20];
sueldo : real;
end;
Var
archivo :file of datos;
registro :datos;
tecla :char;


procedure error(error:integer);
begin
Case error Of
152:Write('UNIDAD NO PREPARADA');
162:Write('FALLA EN EL HARDWARE');
104:Write('ARCHIVO NO ABIERTO PARA ENTRADA');
100:Write('ERROR DE LECTURA EN DISCO');
150:Write('PROTEGIDO CONTRA ESCRITURA');
2 :Write('EL ARCHIVO NO EXISTE')
end;
readln()

end;

function busca_clave(clave:string):Boolean;
Var
CodError:integer;
begin
{$I-}
Reset(archivo);
CodError:=IOResult;
{$I+}
if CodError<>0 then
begin
error(CodError);
busca_clave:=false
end
else
begin
Read(archivo,registro);
While (not(Eof(archivo)) and (clave<>registro.clave)) Do
Read(archivo,registro);
if(clave=registro.clave) then
busca_clave:=true
else
busca_clave:=false;
Close(archivo)
end;
end;

{tipo 1 eliminar un registro,
tipo 2 se efecto una modificacin}
procedure padre_hijo(clave:string;tipo:byte;aux:datos);
Var
copia : file of datos;
begin
Assign(copia,'hijo.dat');
Rewrite(copia);
Reset(archivo);
{proceso de intercambio padre hijo}

While not(Eof(archivo)) Do
begin
Read(archivo,registro);
if ((registro.clave<>clave)) then
Write(copia,registro);
if((registro.clave=clave) and (tipo=2)) then {caso modificacin}
Write(copia,aux); {escritura en hijo}
end;
Close(copia);Close(archivo);
Erase(archivo); {borra el padre}
Rename(copia,'empleados.dat') {renombra 'hijo.dat'con 'empleado.dat'}
end;

procedure altas;
Var
otro :char;
CodError:integer;
begin
{$I-}
Reset(archivo);
CodError:=IOResult;
{$I+}
Case CodError Of
{Caso cero el archivo ya existe, ubicarse en el ultimo
registro, para aadir registros nuevos}
0: Seek(archivo,FileSize(archivo));
{caso dos el archivo no existe, se crea con Rewrite, listo
para escritura}
2: Rewrite(archivo)
{caso contrario existe un error}
else
begin
error(CodError);
exit; {Salta al fin del procedimiento}
end
end;
With registro Do
begin
Repeat
Writeln('Altas de empleados');
Writeln('Clave : ');
ReadLn(clave);
Writeln('Nombre : ');
ReadLn(nombre);
Writeln('Puesto : ');
ReadLn(puesto);
Repeat
{$I-} {validacin de entrada de datos}
writeln('Sueldo : ');
ReadLn(sueldo);
{$I+}
until IOResult=0;
Write(archivo,registro);
{Escribe los datos del registro en el archivo}
writeln('Desea dar otra alta s/n? ');
readln(otro)
until otro in ['n','N',Esc]
end;
Close(archivo)
end;

procedure bajas;
Var
otro :char;
clave :string[3];
CodError:integer;
begin
{$I-}
Reset(archivo);
CodError:=IOResult;
{$I+}
if CodError<>0 then
begin
error(CodError);
exit
end;
Close(archivo);
Repeat

Writeln('Bajas de empleados');
Write('Clave : ');
ReadLn(clave);
if busca_clave(clave) then
begin
Write('Nombre : ');
Writeln(registro.nombre);
Write('Puesto : ');
Writeln(registro.puesto);
Write('Sueldo : ');
Writeln(registro.sueldo:6:2);
Write('Desea eliminarlo s/n? ');
Readln(otro);
if otro in['s','S'] then
begin
padre_hijo(clave,1,registro);
Writeln('Registro Eliminado...')
end;
end
else
begin
Writeln('La clave no existe...')
end;
Writeln('Desea dar otra baja s/n? ');
readln(otro)
until otro in ['n','N',Esc]
end;

{Procedimiento para modificacin de los campos de un archivo}
procedure cambios;
Var
otro :char;
clave :string[3];
CodError:integer;
aux :datos;
begin
{$I-}
Reset(archivo);
CodError:=IOResult;
{$I+}
if CodError<>0 then
begin
error(CodError);
exit
end;
Close(archivo);
Repeat
Writeln('Modificaciones de empleados');
Writeln('Si no desea modificar presione Enter');
Write('Clave : ');
ReadLn(clave);
if busca_clave(clave) then
begin
move(registro,aux,SizeOf(aux));
Write('Nombre : ');Writeln(registro.nombre);
Write('Nuevo nombre : ');ReadLn(aux.nombre);
if(length(aux.nombre)=0) then
begin
aux.nombre:=registro.nombre;
WriteLn(aux.nombre);
end;
Write('Puesto : ');Writeln(registro.puesto);
Write('Nuevo puesto : ');ReadLn(aux.puesto);
if(length(aux.puesto)=0) then
begin
aux.puesto:=registro.puesto;
WriteLn(aux.puesto);
end;
write('Sueldo : ');Writeln(registro.sueldo:6:2);
Repeat
{$I-} {validacin de entrada de datos}
Write('Nuevo sueldo : ');ReadLn(aux.sueldo);
{$I+}
until (IOResult=0);
if(aux.sueldo=0) then
begin
aux.sueldo:=registro.sueldo;
WriteLn(aux.sueldo:6:2);
end;
Write('Las modificaciones estn correctas s/n? ');
readln(otro);
if otro in['s','S'] then
begin
padre_hijo(clave,2,aux);
Writeln('Registro modificado...')
end;
end
else
begin
Writeln('La clave no existe...')
end;
writeln('Desea realizar otra modificacin s/n? ');
readln(otro)
until otro in ['n','N',Esc]
end;
procedure consultas;
Var
CodError:integer;
begin
{$I-}
reset(archivo);
CodError:=IOResult;
{$I+}
if CodError<>0 then
error(CodError)
else
begin
With registro Do
begin
while not(Eof(archivo)) Do
begin

Read(archivo,registro);
Writeln('Consulta de empleados');
Writeln('Clave : ');
Writeln(clave);
Write('Nombre : ');
Writeln(nombre);
Write('Puesto : ');
Writeln(puesto);
write('Sueldo : ');
Writeln(sueldo:6:2);
Write('Presione una tecla...');
readln();
end
end;
Close(archivo);
end
end;

begin
Assign(archivo,'empleado.dat');
Repeat

Writeln('Control de empleados');
Writeln('1. Altas');
Writeln('2. Bajas');
Writeln('3. Cambios');
writeln('4. Consultas');
Writeln('5. Salir (Esc)');
Writeln('Opcion [ ]');
readln(tecla);
case tecla of
'1' :altas;
'2' :bajas;
'3' :cambios;
'4' :consultas
end
until tecla in ['5',esc];
readln();
end.

Вам также может понравиться