ejercicios laboratorio jul

Upload: cecilia-gomez

Post on 11-Oct-2015

23 views

Category:

Documents


0 download

TRANSCRIPT

EJERCITACIN EN PASCAL: Cada ejercicio debe ser copiado/escrito en la versin de Pascal que posean y luego compilarlo, probarlo y decorarloLaboratorio 1Escribir un programa en Pascal que sume dos nmeros: a = 4b = 3PROGRAM 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 = 10y = 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);READLNEND.

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 * lado2PROGRAM 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 = 7altura = 4rea del tringulo = (base * altura)/2

Laboratorio 2Escribir 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; BEGINWRITELN('V V');WRITELN(' V V ');WRITELN(' V V ');WRITELN(' V V ');WRITELN(' V ');END;PROCEDURE letra_S;BEGINWRITELN('SSSSSSS');WRITELN('S');WRITELN('SSSSSSS');WRITELN(' S');WRITELN('SSSSSSS');END;PROCEDURE num_2;BEGINWRITELN('2222222');WRITELN(' 2');WRITELN('2222222');WRITELN('2');WRITELN('2222222');END;BEGIN {empezamos el programa principal}ClrScr;REPETIRletra_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 ; BEGINIF (llueve = 'N') AND (hace_viento = 'N') THENhace_buen_dia : = TRUEELSEhace_buen_dia : = FALSE ;END ;

BEGIN WRITELN (' RIIING !! ') ;WRITELN (' Que dia es hoy ? ') ;READLN (dia) ; CASE dia OFlunes, 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,ELSEWRITELN(' 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 esel 15% del total} Cantidad := cantidad - descuento; {la cantidad finales 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;VarEntero 1 ,entero2 : integer;Procedure intercambio (var pfl ,p12:integer);VarAux:integer; {variable local uso exclusivo en procedimiento}BeginAux:=pfl;Pfl:pf2;Pfl: auxEnd;beginclrscr; {*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 3Escribir 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 CodError0 then begin error(CodError); busca_clave:=false end else begin Read(archivo,registro); While (not(Eof(archivo)) and (claveregistro.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.claveclave)) 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 CodError0 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 CodError0 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 CodError0 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.