Administración de sistemas informáticos
Lenguajes de programación
{PRACTICA1 DE LA UNIDAD1
Este programa sirve para ejemplificar lo que ocurre cuando
se exceden los límites de los enteros durante una asignación
( := , readln ).
Observemos que al tratar de almacenar un valor que exceda uno de los
límites, el valor que se almacenar no es el correcto.
Ejemplificaremos con variables tipo BYTE (enteros en el rango 0 --> 255).
Este tipo de enteros se almacenan en 1 byte.
El cero decimal se almacena internamente como el binario 0000 0000
El 255 decimal se almacena como el binario 1111 1111.
Realicemos una operación como la siguiente (siendo B1 una variable
tipo byte ):
B1:=250+10
250 equivale a 1111 1010
+ 10 equivale a + 0000 0000
____ _________
260 1 0000 0100
\_______/
Como B1 es una variable Estos ocho bits son
de tipo BYTE solo puede los únicos que se
almacenar un valor representado conservan por lo que
en ocho bits por lo que éste el resultado de la
bit no se almacena y se pierde operación ser 4
NOTA: Si el resultado de la operación lo almacenamos en una
variable que tenga un espectro de valores suficiente
como INTEGER o WORD, por ejemplo, se conservar en
forma completa.
}
program p3u3;
uses wincrt;
var
b1,b2,b3:byte;
i1:integer;
w:char;
begin
clrscr;
write('Dame un valor');
readln(b1);
write('Escribe otro valor');
readln(b2);
b3:=b1+b2;
i1:=b1+b2;
writeln('valor almacenado en la variable tipo byte: ',b3);
writeln('valor almacenado en la variable tipo entero: ',i1);
w:=readkey;
end.
{PRACTICA 2 DE LA UNIDAD 1
TIPOS STRING Y CHAR.
Estos tipos de datos permiten almacenar letras, dígitos, espacios,
caracteres especiales y en general cualquier caracter de la tabla
ASCII.
Los datos de estos tipos pueden asignarse mediante una instrucción
READLN o mediante := (de la misma manera que los tipos numéricos).
Cuando la asignación es interna ( := ) el dato debe encerrarse
entre apóstrofos (').
Además con estos datos puede realizarse lo que se conoce como
concatenación ( + ), que consiste en unir varios datos de estos
tipos para formar un dato nuevo único.
Practique con el programa que tenemos a continuación.
}
program string_y_char;
uses wincrt;
var
c1,w:char;
s1:string[20];
s2:string[12];
s3:string[34];
pila,paterno,materno,completo1,completo2:string;
begin
clrscr;
c1:='*';
s1:=' Este mensaje estaba';
s2:='en pedazos *';
s3:=c1+s1+' '+s2;
writeln(s3);
writeln('Escribe tu nombre de pila: ');
readln(pila);
writeln('Escribe tu apellido paterno: ');
readln(paterno);
writeln('Escribe tu apellido materno: ');
readln(materno);
completo1:=pila+' '+paterno+' '+materno;
completo2:=paterno+' '+materno+' '+pila;
writeln('Tu nombre completo es: ',completo1);
writeln('Tu nombre por apellidos es: ',completo2);
w:=readkey;
end.
{PRACTICA 3 DE LA UNIDAD 1
MAS SOBRE DATOS STRING Y CHAR.
Si tratamos de almacenar un valor STRING de longitud mayor
que la definida para la variable, sólo se almacenarán los
primeros caracteres (según el caso). De la misma manera,
si se trata de almacenar un dato de longitud mayor a un caracter
en una variable de tipo CHAR, sólo se almacenará el primero de
los caracteres.
Si un dato STRING contiene espacios al inicio o al final, también
serán almacenados, ya que igual que cualquier otro caracter de la
tabla ASCII, ocupan un byte de la memoria.
Se puede hacer referencia a un caracter individual de un STRING
si se escribe el nombre de la variable y entre paréntesis cuadrados
la posición correspondiente al caracter deseado. La posición cero
de un STRING corresponde al número de caracteres que contiene el
dato almacenado en la variable.
}
program string_y_char2;
uses wincrt;
var
c,w:char;
frase:string[10];
posicion:integer;
begin
clrscr;
write('Escribe uno o más caracteres: ');
readln(c);
writeln('El dato que quedó almacenado en la variable es: ',c);
write('Escribe una frase: ');
readln(frase);
writeln('La frase almacenada es: ',frase);
writeln('El primer caracter de la frase es: ',frase[1]);
write('¨Que posición deseas del dato? ');
readln(posicion);
write('El dato de la posición ',posicion,' es ',frase[posicion]);
w:=readkey;
end.
{PRACTICA 4 DE LA UNIDAD 1
Objetivo.- Adquirir los conocimientos básicos respecto a evaluación
de expresiones aritméticas.
Medio.- Prueba de los operadores de división.
}
program operadores_de_division;
uses crt;
var
w:char;
entero1,entero2,entero3:integer;
real1,real2,real3:real;
begin
clrscr;
write('Escribe un valor entero: ');
readln(entero1);
write('Escribe otro valor entero: ');
readln(entero2);
entero3:=entero1 div entero2;
writeln('Divisi¢n ENTERA almacenada en variable INTEGER: ',entero3);
real2:=entero1 div entero2;
writeln('Divisi¢n ENTERA almacenada en variable REAL: ',real1);
real1:=entero1 / entero2;
writeln('Divisi¢n REAL almacenada en variable REAL: ',real1);
{La siguiente expresión generaría un error debido a que
se emplea un operador REAL (que genera un resultado REAL)
y el resultado se trata de asignar a una variable ENTERA.
COMPRUEBELO!
entero3:=entero1 / entero2;
}
{Las siguientes expresiones generan error debido a que se
intenta usar un operador ENTERO a una expresión que involucra
operandos REALES:
real3:= real1 div entero1;
real3:=real1 mod entero1;
}
w:=readkey;
end.
{PRACTICA 5 DE LA UNIDAD 1
Objetivo.- Adquirir los conocimientos básicos respecto a evaluación
de expresiones aritméticas.
Medio.- Uso de paréntesis}
program uso_de_parentesis;
uses wincrt;
var
r1,r2,r3,r4,r5,r6,r7,r8:real;
w:char;
x,y,z:integer;
begin
clrscr;
write('ESCRIBE EL VALOR DE X: ');
readln(x);
write('ESCRIBE EL VALOR DE Y: ');
readln(y);
write('ESCRIBE EL VALOR DE Z: ');
readln(z);
r1:=x+y*z;
r2:=x+(y*z);
r3:=(x+y)*z;
r4:=x+y/z;
r5:=(x+y)/z;
r6:=x/y*z;
r7:=(x/y)*z;
r8:=X/(Y*Z);
writeln('EL RESULTADO DE X+Y*Z ES: ',r1:10:4);
writeln('EL RESULTADO DE X+(Y*Z) ES: ',r2:10:4);
writeln('EL RESULTADO DE (X+Y)*Z ES: ',r3:10:4);
writeln('EL RESULTADO DE X+Y/Z ES: ',r4:10:4);
writeln('EL RESULTADO DE (X+Y)/Z ES: ',r5:10:4);
writeln('EL RESULTADO DE X/Y*Z ES: ',r6:10:4);
writeln('EL RESULTADO DE (X/Y)*Z ES: ',r7:10:4);
writeln('EL RESULTADO DE X/(Y*Z) ES: ',r8:10:4);
w:=readkey;
end.
{PRACTICA 6 DE LA UNIDAD 1
Objetivo.- Aprender a utilizar algunas de las funciones básicas
interconstruidas de pascal}
program funciones_basicas;
uses wincrt;
var
s1,s2:string;
r1,r2:real;
b1:byte;
c1,c2,w:char;
begin
clrscr;
{Funciones realizadas con datos string}
write('ESCRIBE UNA FRASE: ');
readln(s1);
writeln('LA LONGITUD DE LA FRASE ES: ',length(s1));
s2:=copy(s1,2,3);
writeln('TRES CARACTERES APARTIR DEL SEGUNDO SON: ',s2);
writeln;
{Funciones relacionadas con datos char}
write('ESCRIBE EL ASCII DECIMAL DE ALGUN CARACTER: ');
readln(b1);
writeln('EL CARACTER EQUIVALENTE ES: ',chr(b1));
write('ESCRIBE UN CARACTER CUALQUIERA: ');
readln(c1);
writeln('EL ASCII EQUIVALENTE ES: ',ord(c1));
write('ESCRIBE UNA LETRA MINUSCULA: ');
readln(c2);
writeln('SU EQUIVALENTE EN MAYUSCULA ES: ',upcase(c2));
writeln;
{Funciones realizadas con datos numericos}
write('ESCRIBE EL VALOR NUMERICO REAL,POSITIVO O NEGATIVO: ');
readln(r1);
writeln('SU CUADRADO ES: ',sqr(r1):15:7);
writeln('SU VALOR ABSOLUTO ES: ',abs(r1):15:7);
writeln('SU EQUIVALENTE TRUNCADO ES: ',trunc(r1):15);
writeln('SU EQUIVALENTE REDONDEADO ES: ',round(r1):15);
{Si r1 contiene un valor negativo, la instrucción siguiente ocasiona
un error (Tome nota mental del mensaje), además, observe los
resultados de las instrucciones anteriores}
r2:=sqrt(r1);
writeln('SU RAIZ CUADRADA ES: ',r2:15:7);
w:=readkey;
end.
{PRACTICA 7 DE LA UNIDAD 1
Este programa es para ejemplificar todas las funciones aritmeticas que nos
brinda Pascal para el manejo de datos numericos}
program funciones_aritmeticas;
uses wincrt;
var
numente:integer;
numreal:real;
w:char;
const
linea='================================================================================';
begin
clrscr;
writeln(linea);
writeln('Este programa calculara todas las funciones aritméticas a partir de 2 datos ':76);
writeln(linea);
writeln('Introduce 2 valores entero/real: ':42);
readln(numente,numreal);
writeln(' I--ENTERO--I I--REAL--I ');
writeln('El valor ABSOLUTO de ambos numeros es: ',ABS(numente):15,ABS(numreal):22);
writeln('El ARCO TANGENTE de los numeros es: ',ARCTAN(numente):15,ARCTAN(numreal):22);
writeln('El COSENO de cada uno de los valores es: ',COS(numente):15,COS(numreal):22);
writeln('El EXPONENCIAL de los numeros es: ',EXP(numente):15,EXP(numreal):22);
writeln('El valor FRACCIONARIO de los datos es: ',FRAC(numente):15,FRAC(numreal):22);
writeln('El valor solo ENTERO de los datos es: ',INT(numente):15,INT(numreal):22);
writeln('El valor ALEATORIO a partir del dato es: ',RANDOM(numente):15);
writeln('El REDONDEO de los numeros es: ',ROUND(numente):15,ROUND(numreal):22);
writeln('El SENO calculado por cada numero es: ',SIN(numente):15,SIN(numreal):22);
writeln('El CUADRADO de ambos numeros dados es: ',SQR(numente):15,SQR(numreal):22);
writeln('La RAIZ CUADRADA de los numeros es: ',SQRT(numente):15,SQRT(numreal):22);
writeln('El INCREMENTO de la unidad es: ',SUCC(numente):15);
writeln('El TRUNCAMIENTO de los numeros es: ',TRUNC(numente):15,TRUNC(numreal):22);
writeln('El DECREMENTO de la unidad es: ',PRED(numente):15);
writeln('El LOGARITMO NATURAL calculado es: ',LN(numente):15,LN(numreal):22);
writeln;
writeln('OPRIME LA TECLA <ENTER> PARA CONTINUAR...':79);
w:=readkey;
end.
{PRACTICA 1 DE LA UNIDAD 2
Hasta ahora, los ejercicios que hemos realizado son programas
muy sencillos: el orden de ejecución de las instrucciones es
el básico, de la primera a la ultima según su orden físico.
Pero a partir de ahora debemos aprender a programar soluciones
a problemas que requieren el uso de instrucciones que alteran
el orden natural de ejecución de un programa.
La primera instrucción que aprenderemos es la instrucción IF.
Esta instrucción equivale al símbolo:
Escribamos un programa que resuelva lo siguiente:
Supongamos que en nuestro país las empresas deben pagar sus
impuestos dependiendo del monto de sus utilidades. Si la
empresa tiene utilidades mayores a $50,000.00 el Impuesto
a pagar será un 40 % de las utilidades, de lo contrario, el
Impuesto será un 35 % de las utilidades de la empresa
y dar como resultado el Impuesto que debe pagar.
Nota: Este ejemplo muestra el "IF LOGICO" (por cada salida
un proceso).
Maestro: Dibuje el Diagrama de flujo.
La sintaxis de IF es la siguiente:
IF expresión booleana THEN
instrucción
ELSE
instrucción;
Una expresión booleana es aquella que da como resultado FALSO o
VERDADERO.
Los operadores básicos que se usan en estas expresiones son:
< , > , = , <= , >= , <>}
program if_then_else;
uses wincrt;
var
utilidad,impuesto,porcimp:real;
begin
clrscr;
writeln('** Este programa calcula el Impuesto **');
writeln(' que deben pagar las empresas.');
writeln;
write('Escriba la utilidad de la empresa: ');
readln(utilidad);
writeln;
if utilidad>50000.00 then
porcimp:=0.4
else
porcimp:=0.35;
impuesto:=utilidad*porcimp;
writeln('El impuesto a pagar es: ',impuesto:10:2);
readkey;
end.
{PRACTICA 2 DE LA UNIDAD 2
Más ejercicios con IF_THEN_ELSE
Este programa calcula el sueldo semanal de un empleado
Cada hora tiene un valor de 4 pesos, si pasa de 40 horas
Laboradas, la hora extra tiene un valor de 6 pesos}
program empleado;
uses wincrt;
var
ht,sueldot:real;
w:char;
begin
clrscr;
writeln('** este programa calcula el sueldo semanal de un empleado ** ');
writeln;
write('escriba las horas trabajadas en la semana');
readln(ht);
if ht<=40 then
sueldot:=ht*4.00
else
sueldot:=(40*4.00)+((ht-40)*6.00);
writeln('el sueldo a pagar es: ', sueldot:7:2);
w:=readkey;
end.
{PRACTICA 3 DE LA UNIDAD 2
Este programa calcula cuantos billetes de 1000, 500, 200, 100, 50
y cuantas monedas de 10, 5 y 1 peso existen en una cantidad}
program cantidad;
uses wincrt;
var
cant1:longint;
cant2,cant3,cant4,cant5,cant6,cant7,cant8,cant9,cant10:integer;
w:char;
begin
clrscr;
write('Dame la cantidad a calcular: ' );
readln(cant1);
if cant1>=1000 then
begin
cant2:=cant1 div 1000;
cant1:=cant1 mod 1000;
end;
if cant1>=500 then
begin
cant3:=cant1 div 500;
cant1:=cant1 mod 500;
end;
if cant1>=200 then
begin
cant4:=cant1 div 200;
cant1:=cant1 mod 200;
end;
if cant1>=100 then
begin
cant5:=cant1 div 100;
cant1:=cant1 mod 100;
end;
if cant1>=50 then
begin
cant6:=cant1 div 50;
cant1:=cant1 mod 50;
end;
if cant1>=20 then
begin
cant7:=cant1 div 20;
cant1:=cant1 mod 20;
end;
if cant1>=10 then
begin
cant8:=cant1 div 10;
cant1:=cant1 mod 10;
end;
if cant1>=5 then
begin
cant9:=cant1 div 5;
cant1:=cant1 mod 5;
end;
if cant1>=1 then
begin
cant10:=cant1 div 1;
cant1:=cant1 mod 1;
end;
writeln('La cantidad en billetes de a 1000 es: ', cant2);
writeln('La cantidad en billetes de a 500 es: ', cant3);
writeln('La cantidad en billetes de a 200 es: ', cant4);
writeln('La cantidad en billetes de a 100 es: ', cant5);
writeln('La cantidad en billetes de a 50 es: ', cant6);
writeln('La cantidad en monedas de a 20 es: ', cant7);
writeln('La cantidad en monedas de a 10 es: ', cant8);
writeln('La cantidad en monedas de a 5 es: ', cant9);
writeln('La cantidad en monedas de a 1 es: ', cant10);
w:=readkey;
end.
{PRACTICA 4 DE LA UNIDAD 2
Este programa calcula el costo del porte de una carta
Si la peso es menor o igual a 100 gramos se multiplicará por 0.29
En caso contrario cada gramo extra se multiplicara por 0.04}
program costo_carta;
uses wincrt;
var
peso,costo:real;
w:char;
begin
clrscr;
writeln('Cual es el peso de la carta (la medida es en gramos): ');
readln(peso);
if peso<=1then
costo:=peso*0.29
else
costo:=(1*0.29)+((peso-1)*0.04);
writeln('El costo del peso de la carta es: ', costo:8:2);
w:=readkey;
end.
{PRACTICA 5 DE LA UNIDAD 2
Este programa calcula el costo de la prima de un seguro
Si es varón y la edad es menor a 25 pagará 1000 pesos
Si es varón y la edad es mayor o igual a 25 pagará 700 pesos
Si es mujer y la edad menor a 21 pagará 800 pesos
Si es mujer y la edad es mayor o igual a 21 pagará 500 pesos}
program seguros;
uses wincrt;
var
s,w:char;
e,p:integer;
begin
clrscr;
writeln('Cual es tu sexo (V)aron o (M)ujer: ');
readln(s);
writeln('Cual es tu edad ');
readln(e);
if s='v' then
if e<25 then
p:=1000
else
p:=700
else
if e<21 then
p:=800
else
p:=500;
writeln('La prima a pagar es: ', p);
w:=readkey;
end.
{PRACTICA 6 DE LA UNIDAD 2
Este program escribe el código fuente para imprimir la letra correspondiente a las calificaciones de los estudiantes}
program cal;
uses wincrt;
var
l,w:char;
cal1:real;
begin
clrscr;
writeln('Cual es la calificación obtenida (0-100): ');
readln(cal1);
if cal1 >= 90 then
l:='a'
else
if (cal1>=80) and (cal1<90) then
l:='b'
else
if (cal1>=70) and (cal1<80) then
l:='c'
else
if (cal1>=60) and (cal1<70) then
l:='d'
else
if cal1<60 then
l:='e';
writeln('La calificación del alumno es: ', l);
w:=readkey;
end.
{PRACTICA 7 DE LA UNIDAD 2
Objetivo.- Conocimiento de la instrucción CASE expresión OF
Sintáxis.- CASE expresion OF
Caso 1: instrucción;
Caso 2: instrucción;
.............................
ELSE instrucción;
END;
Notas.- Los casos pueden ser una lista de valores o expresiones
Separadas por comas o un rango separado por puntos suspensivos}
program case_of;
uses wincrt;
var
i:integer;
c:char;
begin
clrscr;
write('Escribe un valor numérico: ');
readln(i);
case i of
-32768..-1: writeln('Escribiste un valor negativo: ');
1..32767: writeln('Escribiste un valor positivo: ');
0 : writeln('Escribiste un cero ');
{en este caso podemos usar ELSE}
end;
writeln;
writeln('Presiona cualquier tecla: ');
c:=readkey;
case c of
chr(7), chr(13) : begin
writeln('No estoy seguro ');
writeln('si presionaste ');
writeln('ESCAPE o ENTER ');
end;
chr(8) :writeln('Presionaste BACKSPACE ');
'A'..'Z' :writeln('Presionaste una LETRA MAYUSCULA ');
chr(97).. chr(122) :writeln('Presionaste una letra minúscula ');
'0'..'9' :writeln('Presionaste un DIGITO ');
else
writeln('NO SE QUE PRESIONASTE ');
end;
end.
{PRACTICA 8 DE LA UNIDAD 2
Este programa calcula los datos de los lados desconocidos de un triángulo rectángulo según el teorema de pitágoras}
program pitagoras;
uses wincrt;
var
a,b,c,ca,cb,cc:real;
od:byte;
w:char;
begin
clrscr;
writeln('**Triangulo Rectángulo** ');
writeln('1.-Primer caso (calcular hipotenusa) ');
writeln('2.-Segundo caso (calcular cateto) ');
writeln('3.-ninguno ');
write('Seleccione la opción deseada (1,2,3): ');
readln(od);
case od of
1:begin
writeln('Escribe la medida del cateto menor: ');
readln(a);
writeln('Escribe la medida del cateto mayor: ');
readln(b);
ca:=sqr(a);
cb:=sqr(b);
c:=sqrt(ca+cb);
writeln('La hipotenusa tiene una medida de: ', c:15:2);
end;
2:begin
writeln('Escribe la medida de la hipotenusa: ');
readln(c);
writeln('Escribe la medida del cateto: ');
readln(a);
cc:=sqr(c);
ca:=sqr(a);
b:=sqrt(c-a);
writeln('La medida del otro cateto es: ', b:15:2);
end;
3:begin
writeln('**fin del programa** ');
end;
end;
w:=readkey
end.
{PRACTICA 9 DE LA UNIDAD 2
Desde luego podemos implementar contadores con los
ciclos REPEAT y WHILE, pero la forma más eficiente y sencilla
en Pascal es mediante un ciclo FOR.
La sintaxis es la siguiente:
FOR <variable ordinal>:=<inicial> TO ó DOWNTO <final> DO
instrucción;
Los valores ordinales son aquellos que solo tienen un valor
sucesor y uno predecesor, por ejemplo, los valores INTEGER, CHAR,
SHORTINT, LONGINT, BYTE, WORD, incluso BOOLEAN, etc.
}
program ciclo_for;
uses wincrt;
var
i:integer;
c:char;
begin
clrscr;
writeln('A continuación se imprimen los números del 1 al 10: ');
for i:=1 to 10 do
writeln(i);
writeln('Presione cualquier tecla . . .');
readkey;
writeln('Ahora al revés: ');
for i:=10 downto 1 do
writeln(i);
writeln('Presione cualquier tecla . . .');
readkey;
writeln('A continuación se imprimen las letras de la A a la M: ');
for c:='A' to 'M' do
writeln(c);
writeln('Presione cualquier tecla . . .');
readkey;
writeln('Ahora al revés: ');
for c:='M' downto 'A' do
writeln(c);
writeln('Presione cualquier tecla . . .');
readkey;
writeln(' A continuación imprimimos una tabla ASCII: ');
for i:=1 to 255 do
begin
if i mod 20=0 then
begin
writeln('Presione cualquier tecla . . . ');
readkey;
end;
writeln(i,' ', chr(i));
end;
readkey;
end.
{PRACTICA 10 DELA UNIDAD 2
Este programa imprime la tabla del 5 por medio del ciclo for}
program ciclo_for;
uses wincrt;
var
x,i:integer;
w:char;
begin
clrscr;
for i:=1 to 10 do
begin
x:=5*i;
writeln('5','*',i,'=',x );
end;
w:=readkey;
end.
{PRACTICA 11 DELA UNIDAD 2
Este programa imprime la tabla del 5 por medio del ciclo while}
program ciclo_while;
uses wincrt;
var
i,x:integer;
w:char;
begin
clrscr;
i:=0;
while i<10 do
begin
i:=i+1;
x:=5*i;
writeln('5','*',i,'=',x);
end;
w:=readkey;
end.
{PRACTICA 12 DELA UNIDAD 2
Este programa imprime la tabla del 5 por medio del ciclo repeat}
Program ciclo_repeat;
uses wincrt;
var
x,i:integer;
w:char;
begin
clrscr;
i:=0;
repeat
i:=i+1;
x:=5*i;
writeln('5','*',i,'=',x );
until i=10;
w:=readkey;
end.
{PRACTICA13 DELA UNIDAD 2
Este programa calcula una secuencia de números
1,2,4,8,16,32,64,128 y 256 e imprimirá la suma de los números}
Program suma;
uses wincrt;
var
i,x,y:integer;
w:char;
begin
clrscr;
i:=1;
for x:=1 to 9 do
begin
y:=y+i;
write(i,',');
i:=i*2
end;
writeln('la suma es: ',y);
w:=readkey;
end.
{PRACTICA 14 DE LA UNIDAD 2
Este programa ejemplifica el uso de los ciclos REPEAT.
Estos ciclos son aquellos que en nuestros diagramas de flujo
Tienen la condición al final del cuerpo del ciclo.
Maestro dibuje un Diagrama de Flujo.
La sintaxis de la instrucción es la siguiente:
REPEAT
< instrucción>;
. . . . .
. . . . .
. . . . .
< instrucción>;
UNTIL <condición>;
Unos de los ejemplos más usuales se ejemplifica a continuación}
Program validacion;
uses wincrt;
var
cal:integer;
sexo,edociv:char;
begin
{Ejercicio 1: Condicionar un dato a un rango de valores
(validación)}
repeat
clrscr;
write('Escribe tu calificación de la unidad I: ');
readln(cal);
until (cal>=0) and (cal<=100);
{Ejercicio 2: Pausas durante un programa}
write('Presione cualquier tecla...');
repeat until keypressed;
{Ejercicio 3: Una forma más presentable de Validación}
repeat
clrscr;
gotoxy(1,10);
write('Escribe tu calificación de la unidad I: ');
readln(cal);
until (cal>=0) and (cal<=100);
{Ejercicio 4: Validación de valores CHAR o STRING}
repeat
clrscr;
gotoxy(1,12);
write('Sexo Femenino o Masculino (F/M): ');
readln(sexo);
until (sexo='F') or (sexo='M');
{Ejercicio 5: Validación de valores CHAR o STRING (una mejor)}
repeat
clrscr;
gotoxy(1,14);
write('Estado civil, S)oltero o C)asado (S/C): ');
readln(edociv);
edociv:=upcase(edociv);
until (edociv='S') or (edociv='C');
end.
{PARACTICA 15 DE LA UNIDAD 2
Este programa calcula el factorial de un numero cualquiera}
program factorial;
uses wincrt;
var
i,sum,num:integer;
w,resp:char;
begin
repeat
write('Número al que desea obtener el factorial: ');
readln(num);
sum:=1;
if num =0 then
sum:=1
else
begin
for i:= num downto 1 do
sum:=sum*i
end;
writeln('El Factorial de ',num, ' es ' , sum);
write('Desea otro número S/N ');
readln(resp);
resp:=upcase(resp);
until resp='N';
w:=readkey;
end.
{PRACTICA 16 DELA UNIDAD 2
Este programa captura una serie de edades, terminará de capturar hasta que presione
La tecla 0 (cero) sin tomarla en cuenta como edad.
Imprime las edades capturadas , así como la edad mayor, menor, el promedio de edades
Y la suma de las edades.}
Program prom;
uses wincrt;
var
me,m,c,s,n:byte;
p:real;
w:char;
begin
me:=200;
m:=0;
c:=0;
s:=0;
clrscr;
repeat
gotoxy(10,4);
write('Edad: ');
gotoxy(40,4);
write('Edad 0 para salir ');
gotoxy(20,4);
readln(n);
if n>m then
m:=n;
if n<me then
if n>0 then
me:=n;
s:=s+n;
gotoxy(50,c+5);
write(n);
c:=c+1; gotoxy(20,4);
write(' ');
until n=0;
gotoxy(50,c+5);
write(s);
p:=s/(c-1);
gotoxy(30,12);
write('El mayor es: ', m);
gotoxy(30,13);
write('El menor es: ', me);
gotoxy(30,14);
write('El promedio es: ', p:8:2);
writeln;
w:=readkey;
end.
{PRACTICA 17 DE LA UNIDAD 2
Este programa captura una cantidad de “N” edades y maneja un rango :
1-10
11-20
21-30
31-40
>40
El programa imprime, la cantidad de edades que estuvieron en cada rango}
program edades;
uses wincrt;
var
a,b,c,d,e,f,i,n:integer;
w:char;
begin
a:=0; b:=0; c:=0; d:=0; f:=0;
clrscr;
writeln('¿Cuántas edades vas a capturar: ');
readln(n);
for i:=1 to n do
begin
writeln('Edad ',i, ' ');
readln(e);
if (e>=1) and (e<=10) then a:=a+1;
if (e>=11) and (e<=20) then b:=b+1;
if (e>=21) and (e<=30) then c:=c+1;
if (e>=31) and (e<=40) then d:=d+1;
if (e>=41) then f:=f+1;
end;
writeln('De 1-10: ' ,a);
writeln('De 11-20: ' ,b);
writeln('De 21-30: ' ,c);
writeln('De 31-40: ' ,d);
writeln('Mayores que 40: ' ,f);
w:=readkey;
end.
{PRACTICA 1 DE LA UNIDAD 3
ARREGLOS.
Un arrreglo es una Estructura de Datos, es decir, una disposición ordenada de datos, permite almacenar elementos del MISMO TIPO y manejar el grupo de datos como un todo, o cada elemento en forma individual según se requiera.
Todas las variables que hemos estudiado hasta ahora, han sido de un tipo simple, o sea que consiste de una celda INDIVIDUAL de memoria que solo puede contener un valor a la vez, las variables del tipo ARREGLO, como lo indicamos en el párrafo anterior, pueden contener más de un valor a la vez.
Podemos enumerar las características que deben tener los arreglos y los programas que requieran uso de arreglos:
Los arreglos constan de una colección de celdas de memoria cada una de las cuales puede contener un dato individual.
Un arreglo puede compararse con un edificio de oficinas, el nombre del edificio equivale al NOMBRE del arreglo. Cada oficina equivale a un ELEMENTO del arreglo. Además cada oficina tiene un número asignado que corresponde a su posición dentro del edificio, y sirve como identificación de la oficina. El número de la oficina equivale al INDICE de cada elemento del arreglo.
Durante la declaración de variables, se le debe informar a PASCAL el nombre, el tipo de los datos que va a contener y los índices inferior y superior del arreglo.
El INDICE debe ser un valor de tipo ordinal (INTEGER, SHORTINT, CHAR, ETC.).
Cuando se desea hacer referencia a un arreglo en forma conjunta solo se requiere indicar su NOMBRE. Si se desea en cambio, referirse a un elemento en particular, debe hacerse con el NOMBRE del arreglo seguido de paréntesis rectangulares (corchetes) y entre ellos el INDICE del ELEMENTO deseado.
Se recomienda usar la Directiva del Compilador {$R+} que permite que PASCAL responda con un mensaje de error cuando se intente hacer referencia a un elemento del arreglo, con un índice fuera del rango declarado.
Si no usamos esa directiva, Pascal nunca revisa que el índice sea válido antes de calcular una dirección de memoria equivalente al índice, por lo que sí éste no está en el rango definido, podemos destruir (si hacemos una asignación) un valor almacenado en la memoria correspondiente a otra variable o al programa mismo. El daño mínimo puede consistir en considerar (al consultar, usar, etc) como perteneciente al arreglo un valor que no lo es. En este programa al final realizamos un pequeño ejercicio para comprobar lo anterior.
Los arreglos pueden tener más de una expresión de índice, por ejemplo, cuando se desea manejar en un arreglo una matriz, se puede definir una variable tipo ARRAY con dos expresiones de índice.}
program arreglos;
uses wincrt;
var
nombre:array[1..30] of char;
c,i:integer;
resp:char;
begin
clrscr;
write(' Escribe tu nombre (coloca un punto al final para finalizar): ');
c:=0;
repeat
c:=c+1;
nombre[c]:=readkey;
write(nombre[c]);
until nombre[c]='.';
writeln;
writeln('La primera letra de tu nombre es: ',nombre[1]);
write('Deseas consultar una posición de tu nombre S/N?: ');
resp:=upcase(readkey);
while resp='S' do
begin
writeln('Qué posición deseas? ');readln(i);
writeln('El elemento de la posición ',i,' es ',nombre[i]);
writeln('Deseas consultar otra posición de tu nombre S/N? ');
resp:=upcase(readkey);
end;
end.
{PRACTICA 2 DE LA UNIDAD 3
El siguiente programa captura una lista de ”N” calificaciones, calcula el promedio de ese
Grupo, imprime cuantas calificaciones hubo mayores que el promedio}
{$R+}
program prom2;
uses wincrt;
var
cal:array[1..100]of integer;
i,c,sum,n:integer;
w:char; prom:real;
begin
clrscr;
write('De cuantas personas es el grupo: ');
readln(n);
sum:=0;
for i:=1 to n do
begin
write('Dame la calificación: ');
readln(cal[i]);
sum:=sum+cal[i];
end;
prom:=sum/n;
c:=0;
for i:=1 to n do
begin
if cal[i]>prom then
c:=c+1;
end;
writeln('El promedio es: ' ,prom:4:2);
writeln('Se encontraron ' ,c , ' calificaciones mayores que el promedio ');
w:=readkey;
end.
{PRACTICA 3 DE LA UNIDAD 3
El siguiente programa captura una frase cualquiera que se desee
Imprimirá la cantidad de letras que existien en esa frase}
{$R+}
program letras;
uses wincrt;
var
frase:string;
i:integer;
c,w,unaletra:char;
cont:array ['A'..'Z'] of byte;
begin
clrscr;
for c:='A' to 'Z' do
cont [c]:=0;
write('Escribe una frase: ');
readln(frase);
for i:=1 to length(frase)do
begin
unaletra:=upcase(frase[i]);
if(unaletra>='A') and (unaletra<='Z') then
inc(cont[unaletra]);
end;
for c:='A' to 'Z' do
begin
if cont[c]<>0 then
writeln(cont[c], ' Letras ' ,c);
end;
w:=readkey;
end.
{PRACTICA 4 DE LA UNIDAD 3
Este programa realiza la suma de 2 vectores de igual dimensión e imprime el resultado}
{$R+}
program suma;
uses wincrt;
var
i:integer;
a,b,c:array [1..5] of integer;
w:char;
begin
clrscr;
for i:=1 to 5 do
begin
write('Dame el valor ' ,i, 'del vector a ');
readln(a[i]);
end;
clrscr;
for i:=1 to 5 do
begin
write('Dame el valor ' ,i, ' del vector b ');
readln(b[i]);
end;
for i:=1 to 5 do
c[i]:=a[i]+b[i];
gotoxy(19,8);write('El resultado de la suma de los vectores es: ');
writeln;writeln;writeln;
for i:=1 to 5 do
begin
gotoxy(20+3*i,12);write(c[i]);
end;
w:=readkey;
end.
{PRACTICA 5 DE LA UNIDAD 3
Este programa realiza la resta de 2 vectores de igual dimensión e imprime el resultado}
{$R+}
program resta;
uses wincrt;
var
i:integer;
a,b,c:array [1..5] of integer;
w:char;
begin
clrscr;
for i:=1 to 5 do
begin
write('Dame el valor ' ,i, 'del vector a ');
readln(a[i]);
end;
clrscr;
for i:=1 to 5 do
begin
write('Dame el valor ' ,i, ' del vector b ');
readln(b[i]);
end;
for i:=1 to 5 do
c[i]:=a[i]-b[i];
gotoxy(19,8);write('El resultado de la resta de los vectores es: ');
writeln;writeln;writeln;
for i:=1 to 5 do
begin
gotoxy(20+3*i,12);write(c[i]);
end;
w:=readkey;
end.
{PRACTICA 6 DE LA UNIDAD 3
Este programa realiza la multiplicación de 2 vectores de igual dimensión e imprime el resultado}
{$R+}
program multiplicacion;
uses wincrt;
var
i,p:integer;
a,b,c:array [1..5] of integer;
w:char;
begin
clrscr;
for i:=1 to 5 do
begin
write('Dame el valor ' ,i, 'del i vector ');
readln(a[i]);
end;
clrscr;
for i:=1 to 5 do
begin
write('Dame el valor ' ,i, ' del i vector ');
readln(b[i]);
end;
clrscr;
gotoxy(22,4);write('El producto de los vectores es: ');
writeln;writeln;
p:=0;
for i:=1 to 5 do
p:=p+a[i]*b[i];
gotoxy(36,8);write(p);
w:=readkey;
end.
{PRACTICA 7 DE LA UNIDAD 3
Este programa genera una matriz de 5 x 5 }
{$R+}
program matrices;
uses wincrt;
var
i,j:integer; w:char;
num:array[1..5,1..5] of integer;
begin
clrscr;
for i:=1 to 5 do
for j:=1 to 5 do
begin
write('Número: ' ,i, ' ' ,j, ' ');
readln(num[i,j]);
end;
clrscr;
for i:=1 to 5 do
for j:=1 to 5 do
begin
gotoxy(i,j+2);
write(num[i,j]);
end;
w:=readkey;
end.
{PRACTICA 8 DE LA UNIDAD 3
Este programa captura los nombres en un vector, y las calificaciones en una matriz
Imprime el nombre, sus calificaciones y el promedio por alumno}
{$R+}
program calificaciones;
uses wincrt;
var i,j:integer; sum:real; w:char;
nom:array[1..2] of string;
prom:array [1..2] of real;
cal:array[1..2,1..2] of real;
nombre:string;
begin
for i:=1 to 2 do
begin
clrscr;
write('Nombre: ' ,i, ' ');
readln(nom[i]);
sum:=0;
for j:=1 to 2 do
begin
write('Calificación: ' ,i, ' ' ,j, ' ');
readln(cal[i,j]);
sum:=sum+cal[i,j];
end;
prom[i]:=sum/2;
end;
clrscr;
for i:=1 to 2 do
begin
write(nom[i]:2);
for j:=1 to 2 do
write(cal[i,j]:5:2,' ');
write(prom[i]:5:2);
writeln;
end;
w:=readkey;
end.
{PRACTICA 9 DE LA UNIDAD 3
El siguiente programa captura una lista de nombres y los ordena en forma ascendente
Por el método de burbuja, e imprime el vector ordenado}
{$R+}
program ordenacion;
uses wincrt;
var
nom:array[1..100] of string [40];
t:string[40];
i,j,n:integer;
begin
clrscr;
write('Cuántos nombres deseas capturar ');
readln(n);
for i:=1 to n do
begin
write('Dame el nombre ' ,i, ' ');
readln(nom[i]);
end;
for i:=1 to n-1 do
begin
for j:=i+1 to n do
begin
if nom[i] > nom[j] then
begin
t:=nom[i];
nom[i]:=nom[j];
nom[j]:=t;
end;
end;
end;
for i:=1 to n do
writeln(nom[i]);
readkey;
end.
{PRACTICA 10 DE LA UNIDAD 3
Este programa imprime la siguiente matriz:
0 | |||
0 | |||
0 | |||
0 |
}
program diagonal_invertida;
uses wincrt;
var
i,j:integer;
w:char;
begin
clrscr;
for i:=1 to 4 do
for j:=1 to 4 do
begin
if (i+j=5) then
begin
gotoxy(i,j);
write('0');
end;
end;
w:=readkey;
end.
{PRACTICA 11 DE LA UNIDAD 3
Este programa imprime la siguiente matriz:
0 | ||||
0 | 0 | |||
0 | 0 | |||
0 | 0 | |||
0 |
}
program rombo_de_ceros;
uses wincrt;
var
i,j:integer; w:char;
begin
clrscr;
for i:=1 to 5 do
for j:=1 to 5 do
begin
if (i+j=4) then
begin
gotoxy(i,j);
write('0');
end;
if (i+j=8) then
begin
gotoxy(i,j);
write('0');
end;
if (i*j=8) then
begin
gotoxy(i,j);
write('0');
end;
end;
w:=readkey;
end.
{PRACTICA 1 DE LA UNIDAD 4
Esta función permite elevar un valor real a una potencia real.
Por ejemplo:
6.3 elevado a la 3.1
Para resolverlo emplearemos la fórmula
LogE(3.1)*6.3
}
program funcionpotencia;
uses wincrt;
var
w:char;
r1,r2:real;
function pot(x,y:real):real;
begin
pot:=exp(ln(x)*y);
end;
begin
clrscr;
writeln('2 Elevado al cubo es: ' ,pot(2,3):4:2);
r1:=pot(3,9);
writeln('3 Elevado a la potencia 9 es: ' ,r1:8:2);
r2:=pot(9,0.5);
writeln('La raiz cuadrada de 9 es: ' ,r2:4:2);
writeln('2 Elevado a la potencia 0 es: ' ,pot(2,0):4:2);
w:=readkey;
end.
{PRACTICA 2 DE LA UNIDAD 4
Este programa eleva al cubo cualquier número entero utilizando funciones}
program elevcub;
uses wincrt;
var
x:integer; w:char;
function cubo(x:integer):integer;
begin
cubo:=x*x*x;
end;
begin
clrscr;
writeln('Cual es el número a elevar ');
readln(x);
writeln('El cubo del número es: ' ,cubo(x));
w:=readkey;
end.
{PRACTICA 3 DE LA UNIDAD 4
Este programa convierte un valor string cualquiera en su equivalente en mayúscula.
NOTA: La solución propuesta para este problema no es satisfactoria, ya que, no convierte a mayúsculas las áéíóúñ. }
program funcionconvertirmayusculas;
uses wincrt;
var
nombre:string;
function funcnom(nom:string):string;
var
i:integer;
begin
for i:=1 to length(nom) do
begin
nom[i]:=upcase(nom[i]);
funcnom:=nom;
end;
end;
begin
clrscr;
writeln(funcnom('Lenguaje Pascal '));
write('Escribe tu nombre: ');
readln(nombre);
writeln('Tu nombre en mayúsculas es: ' ,funcnom(nombre));
writeln(funcnom('Verónica Nuñez '));
readkey;
end.
{PRACTICA 4 DE LA UNIDAD 4
Este ejercicio ilustra la forma en que Pascal implementa la Recursividad Simple.
Un ejemplo típico de Recursividad Simple es el del cálculo del factorial de un número.
La definición del factorial de un número cualquiera (entero positivo) dice: El factorial de un número cualquiera es igual al número mismo multiplicado el factorial de su número predecesor. Además por definición el factorial de 0 es 1.
X! = x * (x-1)!
Lo anterior es una definición RECURSIVA, los lenguajes de Programación nos permiten implementar soluciones usando este tipo de definiciones. Lo único que se requiere adicionalmente a la definición recursiva, es una condición de terminación (UN VALOR CONOCIDO), en este caso, el factorial de 0 es 1.
Como lo veremos en nuestro ejemplo, dentro de la definición del subprograma, como este se LLAMA A EJECUCION A SI MISMO; la variable asociada al nombre de una función NO PUEDE USARSE COMO ACUMULADOR, ya que Pascal entendería que se está haciendo referencia al nombre de la función en forma recursiva.
Otra forma de Recursividad, denominada por algunos autores como `COMPLEJA', es permitida por Pascal. La forma más sencilla de ésta forma de Recursividad es la siguiente (suponiendo que A y B, son subprogramas):
Sub_Prog_A llama a Sub_Prog_B y Sub_Prog_B llama a Sub_Prog_A
Recordemos que en la Recursividad Simple:
Sub_Prog_A llama a Sub_Prog_A}
program recursividad;
uses wincrt;
var
x:shortint;
function fact(x:shortint):real;
begin
if x=0 then
fact:=1
else
fact:= x * fact(x-1);
end;
var
n:shortint;
begin
clrscr;
writeln('El factorial de 0 es: ' ,fact(0):10:2);
writeln('El factorial de 5 es: ' ,fact(5):10:2);
writeln('El factorial de 7 es: ' ,fact(7):10:2);
write('De qué numero deseas obtener el factorial? ');
readln(n);
writeln('El factorial de ',n, ' es: ' ,fact(n):10:2);
readkey;
end.
{PRACTICA 5 DE LA UNIDAD 4
Este programa centra una frase, se utiliza la funcion gotoxy}
program cantrar;
uses wincrt;
var
frase:string; w:char;
function centrarfra(frase:string):integer;
begin
centrarfra:=(80-(length(frase)))div 2;
end;
begin
clrscr;
writeln('Escribe una frase ');
readln(frase);
gotoxy(centrarfra(frase),10);
writeln(frase);
w:=readkey;
end.
{PRACTICA 6 DE LA UNIDAD 4
El siguiente programa calcula el promedio y nos envía como resultado si está bien, regular o mal}
program enteros;
uses wincrt;
var
x,y,z:integer; w:char;
function promcal(x,y,z:integer):string;
var
prom:real; cad:string;
begin
prom:=(x+y+z)/3;
if prom>85 then cad:='bien';
if (prom>=70) and (prom<85) then cad:='regular';
if prom<70 then cad:='mal';
promcal:=cad;
end;
begin
clrscr;
writeln('Dame la calificación 1: ');
readln(x);
writeln(''Dame la calificación 2: ');
readln(y);
writeln(''Dame la calificación 3: ');
readln(z);
writeln('tu promedio estuvo: ' ,promcal(x,y,z));
w:=readkey;
end.
{PRACTICA 7 DE LA UNIDAD 4
MAS PRACTICAS SOBRE FUNCIONES:
Debera indicar cual es el resultado del siguiente programa}
program ejercicio;
uses wincrt;
var
a,b,c:integer;
function ejecuta(x,y:integer):integer;
var
w,i:integer;
begin
w:=1;
for i:=1 to y do
w:=w*x;
ejecuta:=w;
end;
begin
clrscr;
a:=3;
b:=4;
c:=ejecuta(a,b);
writeln(a,' ',b,' ',c);
b:=ejecuta(b,a);
writeln(a,' ',b,' ',c);
a:=ejecuta(a,a);
writeln(a,' ',b,' ',c);
end.
{PRACTICA 8 DE LA UNIDAD 4
Más prácticas sobre funciones:
Este programa realiza : la captura del día del mes de nacimiento así como el mes,
Y nos devuelve como resultado el ciclo de estación del año}
program estaciones;
uses wincrt;
var
m,d:integer;
w:char;
function esta(d,m:integer):string;
begin
case m of
1,2:esta:='INVIERNO';
3:begin
if d<21 then
esta:='INVIERNO'
else
esta:='PRIMAVERA';
end;
4,5:esta:='PRIMAVERA';
6:begin
if d<21 then
esta:='PRIMAVERa'
else
esta:='VERANO';
end;
7,8:esta:='VERANO';
9:begin
if d<21 then
esta:='VERANO'
else
esta:='OTOÑO';
end;
10,11:esta:='OTOÑO';
12:begin
if d<21 then
esta:='OTOÑO'
else
esta:='INVIERNO';
end;
end;
end;
begin
clrscr;
writeln('dia de nacimiento ');
readln(d);
writeln('mes de nacimiento de tipo numerico ');
readln(m);
writeln('tu naciste en: ' ,esta(d,m));
w:=readkey;
end.
{PRACTICA 9 DE LA UNIDAD 4
CUADERNO DE PRACTICAS
MATERIA: LENGUAJE DE PROGRAMACION I
UNIDAD
I
ELEMENTOS DEL LENGUAJE DE PROGRAMACION
UNIDAD
I I
ESTRUCTURAS DE CONTROL
UNIDAD
I I I
ESTRUCTURAS DE DATOS
UNIDAD
I V
FUNCIONES
Descargar
Enviado por: | Cova |
Idioma: | castellano |
País: | México |