Documentos de Académico
Documentos de Profesional
Documentos de Cultura
PROGRAM suma_de_dos_numeros;
CONST pi = 3.1415926;
Es posible declarar varias constantes sucesivamente, puede ser una por renglón o varias en
un solo renglón. Cuando se hace esto, la palabra CONST solo se pone una sola vez como
cabecera y a continuación todas las constantes por definir. Ejemplo:
CONST
PI = 3.1415926;
Nombre = 'Juan Gutiérrez';
Unidad = 1;
Después de haber realizado todas las declaraciones se puede iniciar con el programa
principal. (Es posible, antes del programa, declarar las funciones y procedimientos, pero
eso se analizará posteriormente).
El programa principal inicia con la palabra reservada BEGIN y termina con la palabra
END., esta última con un punto al final.
Cada línea de código, enunciado, sentencia o instrucción completa que se escriba deberá
terminar con un punto y coma ";".
IDENTACIÓN.
COMENTARIOS.
Al programar es conveniente agregar comentarios para poder saber que función tiene cada
parte del código, en caso de que no se utilice durante algún tiempo. Además se facilita el
trabajo a otros programadores que puedan utilizar el archivo fuente.
En Pascal se coloca los comentarios entre llaves o también entre los símbolos (* para
empezar el comentario y *) para terminar el comentario.
IDENTIFICADORES.
Un identificador es un nombre que referencia a una constante, una variable, una estructura
de datos, una función o una etiqueta en un programa. Está constituido por una secuencia
(sin espacios) de letras, dígitos y caracteres de subrayado. El identificador debe comenzar
por una letra o el carácter de subrayado, aunque este último suele quedar reservado para el
sistema. La longitud en caracteres de los identificadores varía según el compilador, pero lo
más usual son 32 caracteres, para Pascal se puede utilizar el identificador en mayúsculas o
minúsculas, por ejemplo: EDAD, edad, Edad, son identificadores válidos e idénticos.
Para la escritura del identificador no se debe emplear las palabras clave o reservadas del
lenguaje (son palabras que tienen un significado especial y que no se pueden utilizar para
otros propósitos), ver tabla 1.4.
TIPOS DE DATOS.
Los diferentes objetos de información con los que un programa Pascal trabaja se conocen
colectivamente como datos. Todos los datos tienen un tipo asociado con ellos.
La asignación de tipos a los datos tienen dos objetivos principales:
a. Detectar errores de operaciones en programas.
b. Determinar cómo ejecutar las operaciones.
Pascal se conoce como un lenguaje “fuertemente tipeado” (strongly-typed), esto significa
que todos los datos utilizados deben tener sus tipos declarados explícitamente y el lenguaje
limita la mezcla de tipos en las expresiones.
Los datos son cifras originales que por sí solas tienen poco significado. Son los conceptos
básicos o elementales como el nombre de las cosas o personas, las cantidades, etc.
Tipos enteros: En esta categoría Pascal cuenta con 5 tipos diferentes (tabla 1.5), cada uno
abarca un rango específico de valores y utilizan una diferente cantidad de memoria
dependiendo de ese rango. Naturalmente el trabajar con rangos menores nos ofrece una
mayor velocidad y menor espacio en memoria, pero si se utilizan enteros largos se cuenta
con mayor precisión.
Tipos reales: Los números reales son aquellos que cuentan con una parte decimal. En
Pascal se cuenta con varios tipos de datos reales (ver tabla 1.6), pero no se puede utilizar,
más que el tipo real, en máquinas que no cuenten con un coprocesador matemático.
Los números reales deben llevar por fuerza al menos un dígito de cada lado del punto
decimal así sea éste un cero. Como ejemplo, el número 5 debe representarse como: 5.0, el
.5 como 0.5, etc.
En este tipo de datos se utiliza la notación científica, que es igual a la de las calculadoras, el
dígito que se encuentra a continuación de la E representa la potencia a la que se elevará el
número 10 para multiplicarlo por la cantidad a la izquierda de dicha E:
Tipo carácter (Char): El tipo Char depende del código de caracteres empleado por la
máquina. El más utilizado es el código ASCII. Una variable o constante tipo Char puede
contener un solo carácter especificado entre apóstrofes. Ejem. 'a' 'M'
Tipo Lógico (Boolean): Pueden tomar dos valores True (verdadero) False (falso). El
identificador estándar boolean define una variable de este tipo.
Tipo Cadena (String): Una cadena (string) es una secuencia de caracteres que tiene una
longitud máxima de 255 caracteres. Los caracteres que componen la cadena se delimitan
con apóstrofes. Ejemplo: 'abcd' longitud de la cadena 4, '' cadena vacía o nula.
Una variable de cadena se define utilizando la palabra reservada String y el tamaño físico
máximo que pueda alcanzar durante la ejecución del programa.
Ejemplo:
Var
Varcad: String[80]; {almacena hasta 80 caracteres}
Nombre: String; {almacena hasta 255 caracteres}
Reglas:
1. Una variable en el lado derecho de una sentencia de asignación debe tener un valor
antes de que la sentencia de asignación se ejecute, o sea, hasta que un programa le da
valor a una variable, esa variable no tiene valor. Ejemplo: y:= x+1
Si x no tiene un valor antes de ejecutar la línea anterior se produce un error lógico o
ambigüedad. A una variable que no se le ha dado valor se dice que no se ha
inicializado.
2. En la izquierda de una sentencia de asignación solo pueden existir variables. No es
válida la sentencia: SalarioBruto-deducciones:=34.015
Contador: Consiste en usar la variable como un verificador del número de veces que
se realiza un proceso, observe que para el ejemplo el incremento es de uno en uno,
pero puede ser otro valor siempre y cuando sea constante.
En Pascal, el incremento del variable contador se realiza así:
a:=a+1;
a:= c+b*2/4;
area:= (base*altura)/2; {La variable area almacena el resultado de la expresión que está a la
derecha}
En Pascal, los datos que se pueden leer son: enteros, reales, caracteres o cadenas. No se
puede leer un boolean o un elemento de tipo enumerado. Los datos estructurados, arrays,
registros o conjuntos, no se pueden leer globalmente y se suele recurrir a diseñar
procedimientos específicos.
Otra diferencia importante surge del siguiente análisis: supongamos que se quieren leer
desde teclado una serie de números enteros y reales, mediante las sentencias:
readln(int1, re1);
readln(int2);
donde int1 y int2 son variables tipo entero (integer), y re1 es una variable tipo real (real).
73 98.45 62 ENTER
45 ENTER
Cuando la computadora lee 73, lo coloca en la variable int1, luego lee el 98.45 (todo en la
misma línea, separados por un espacio) y lo coloca en re1. Pero como se trata de un readln
(read line) ignora todo el resto que esté en la misma línea (en este caso ignora al 62), y hace
un avance de carro (es decir, pasa a la línea siguiente). Al leer la línea siguiente coloca al
45 en int2. El resultado es:
int1 = 73
re1 = 98.45
int2 = 45
Ahora suponga que se tiene los mismos datos de entrada, pero con las siguientes sentencias:
read(int1, re1);
readln(int2);
En este caso lee el 73 y lo coloca en int1, luego lee el 98.45 y lo coloca en re1. Como se
trata de un read, no hace avance de línea, y pasa a ejecutar la sentencia siguiente (o sea el
readln). Al ejecutar el readln siguiente carga en int2 al número 62, porque el read anterior
no había hecho avance de línea, y por consiguiente el número 45 no se almacena en
ninguna variable. El resultado es:
int1 = 73
re1 = 98.45
int2 = 62
Donde “El resultado es:” es un mensaje que se desea aparezca literalmente en pantalla y r
es una variable que contiene un valor.
La diferencia consiste en que WRITE, muestra lo que está entre paréntesis en la pantalla y
el curso se queda en la misma línea; en tanto que WRITELN, muestra lo que está entre
paréntesis y hace que el cursor pase a la siguiente línea.
OPERADORES ARITMÉTICOS.
5 + 2
3.1 + 2.5
7 (valor entero)
5.6 (valor real)
5 – 2
3.1 - 2.5
3 (valor entero)
0.6 (valor real)
El operador multiplicación (*) realiza la multiplicación de dos operandos numéricos.
5 * 2
3.1 * 2.5
10 (valor entero)
7.75 (valor real)
El operador división real (/) realiza la división real entre dos operandos numéricos.
5 / 2
3.1 / 2.5
6 / 2
El operador división entera (div) realiza la división entera entre dos operandos
numéricos enteros.
5 div 2
3.1 div 2.5
El operador división entera (div) no puede operar con operandos numéricos reales. Por
tanto, al evaluar las expresiones de este ejemplo se obtienen los valores:
2 (valor entero)
ERROR (no se puede evaluar; ambos operandos deben ser valores enteros)
El operador módulo (mod) realiza la división entera entre dos operandos numéricos
enteros, devolviendo el resto de la misma.
5 mod 2
3.1 mod 2.5
Al igual que el operador división entera (div), el operador módulo (mod) tampoco puede
operar con operandos numéricos reales. De modo que, en este caso, los resultados son:
1 (valor entero)
ERROR (no se puede evaluar; ambos operandos deben ser valores enteros)
FUNCIONES MATEMÁTICAS.
OPERADORES RELACIONALES.
Los Operadores Relacionales (ver tabla 1.9) permiten realizar la comparación entre dos
expresiones aritméticas con la finalidad de tomar una decisión en función del resultado de
dicha comparación; dicho resultado tiene un valor booleano: verdadero o falso.
Las condiciones pueden ser compuestas o complejas a partir de varias condiciones simples
mediante el uso de los operadores lógicos.
OPERADORES LÓGICOS.
Operador Significado
AND Y Lógico
OR O Lógico
NOT Negación Lógica
Los resultados de evaluar una condición compuesta para el operador AND y para el
operador OR se muestra en la tabla 1.11:
P Q P AND Q P OR Q
F F F F
F V F V
V F F V
V V V V
P NOT P
F V
V F
Programas con Estructura Secuencial.
PROGRAM suma;
USES
Crt;
VAR
‘Variables de Entrada
a,b:integer;
‘Variables de Salida
c:integer;
BEGIN
Clrscr;
‘Entrada de Datos
Writeln ('Este programa suma dos numeros:');
Writeln (' ');
Write ('Introduzca un numero: ');
Readln (a);
Write ('Introduzca otro numero: ' );
Readln (b);
Writeln (' ');
‘Proceso
c:=a+b;
‘Salida de Datos
Write ('La suma es = ');
Write (c);
Readkey
END.
En primer lugar suponga que n es 100, observe que la suma de dos términos equidistantes
es constante:
1 , 2 , 3 , 4 . . . . . . . . . 97 , 98 , 99 , 100
Con los 100 números se pueden formar 50 pares, de forma que la solución final viene dada
por el producto 101 * 50 = 5050, de esta forma si n es igual a 100, entonces 101 es (n+1) y
50 es n/2; por lo tanto la suma de los n primeros números enteros es s = n * (n+1) / 2.
PROGRAM suma_n;
USES
Crt;
VAR
‘Variables de
d Entrada
n:real;
‘Variables de
d Salida
s:real;
BEGIN
N
clrscr;
‘Entrada de Datos
Write('n:');;
Read(n);
‘Proceso
s:=(n+1)* *n/2;
‘Salida de Datos
D
Write('La suma=
s ',s);
Readkey
END.
4. Da
adas la basee y la altura de un triáng
gulo rectánggulo, determ
mine el área y el perímettro
del triángulo.
perficie de un
La sup u triángulo se obtiene multiplicando
m o la base poor la altura (ddonde la altuura
es un segmento perpendicula
p ar que partee de la basse hasta lleggar al vértice opuesto)) y
dividieendo en dos..
Y el cálculo
c del perímetro
p es el resultado de sumar toodos los ladoos
del tríaangulo, así:
Perímetro=
= base + altu
ura + hipoten
nusa
PROGR
GRAM Area;
USES
Crt;
VAR
‘Variables de
d Entrada
altura,base
e:Real;
‘Variables de
d Salida
area, ,perím
ímetro:Real;
‘Variables de
d Proceso
hipotenusaa:Real;
BEGIN
N
Clrscr;
‘Entrada de Datos
Write('Ingrrese la base:
e:');
Readln(basse);
Writeln('Ing
ngrese la altuura:');
Readln(altu
tura);
‘Proceso
area:=(basse*altura)/2;2;
hipotenusaa:= sqrt(sqr((base)+sqr(a(altura));
perimetro::=base+altur ura+ hipotenu
nusa;
‘Salida de Datos
D
Writeln('Arrea del triáng
gulo= ',area
a:2:2);
erimetro del triángulo= ',perimetro:2
Writeln('Pe , 2:2);
Readkey
END.
5. Esscribir un pro
ograma que calcule el volumen
v de uuna esfera:
El volu
umen de unaa esfera vien
ne dado por la
l ecuación:
3
Volumen = 4/3 * PI * radio
r
a b
Se sabe que un determinante se representa como:
c d
ax by c
Sea el sistema:
dx ey f
c b a c
f e d f
x e y
a b a b
d e d e
Finalmente:
x=((c*e)-(b*f))/ ((a*e)-(b*d));
y=((a*f)-(c*d))/ ((a*e)-(b*d));
PROGRAM determinante;
USES
Crt;
VAR
‘Variables de Entrada
a,b,c,d,e,f:real;
‘Variables de Salida
x,y:real;
BEGIN
Clrscr;
‘Entrada de Datos
Writeln ('Introduzca los valores de la matriz 3x3');
Writeln (' ');
Write ('a: '); Readln (a);
Write ('b: '); Readln (b);
Write ('c: '); Readln (c);
Write ('d: '); Readln (d);
Write ('e: '); Readln (e);
Write ('f: '); Readln (f);
‘Proceso
x=((c*e)-(b*f))/ ((a*e)-(b*d));
y=((a*f)-(c*d))/ ((a*e)-(b*d));
‘Salida de Datos
Writeln ('x= ', x:0:2, ' y= ', y:0:2);
Readkey
END.
Esta es la forma tradicional en que se realiza la suma, por ejemplo: realizar la suma de 57 +
69.
Esto significa que L=5, M=7, N=6 y O=9, el valor de K resulta de la suma de M+O que es
igual a 16, pero como K es de un solo dígito entonces se tiene que separar en dos partes (la
unidad y la decena); la unidad obtenida es el valor de K y la decena es el valor que se
acarrea para la próxima suma. El valor de J es el resultado de sumar L + N y el valor
acarreado, el resultado es 12; de igual manera se hace el procedimiento anteriormente
descrito y se obtiene para J el valor de 2 y para I el valor de 1.
PROGRAM suma;
USES
Crt;
VAR
‘Variables de Entrada
l,m,n,o:integer;
‘Variables de Salida
i,j,k:integer;
BEGIN
clrscr;
‘Entrada de Datos
Write('l:'); Readln(l);
Write('m:'); Readln(m);
Write('n:'); Readln(n);
Write('o:'); Readln(o);
‘Proceso
k:=((m+o) mod 10);
j:=((l+n) + ((m+o) div 10)) mod 10;
i:=((l+n) + ((m+o) div 10)) div 10;
‘Salida de Datos
Writeln ('i=', i);
Writeln ('j=', j);
Writeln ('k=', k);
Readkey
END.
PROGRAM salario;
USES
Crt;
VAR
‘Variables de Entrada
t_manana, t_noche, t_festivos:integer;
‘Variables de Salida
total:real;
BEGIN
Clrscr;
‘Entrada de Datos
Write ('Introduzca las horas trabajadas por dia, en cada turno, ');
writeln (' para calcular el sueldo semanal.'); Writeln ('');
Write ('Horas del turno de mañana: '); Readln (t_manana);
Write ('Horas del turno de noche: '); Readln (t_noche);
Write ('Horras del turno
o de dias fesstivos: '); R Readln (t_feestivos);
Writeln ('');
);
‘Proceso
total:=(600
000 * t_mana ana) + (800000 * t_noche) e) + (10000 * t_festivos)
s);
‘Salida de Datos
D
Write ('El sueldo
s sema anal es de: ',ttotal:0:2);
Readkey
END.
9. Da
ado un par de
d puntos x1
1,y1 y x2,y2
2 que conforrman un seggmento de línnea recta y un
valor xi, deterrminar el va
alor correspo
ondiente a
yi (interpolaciión lineal) y la distanciia entre el
pu
unto x1,y1 y el
e punto xi,yyi.
Usand
do triánguloss semejantes, se tiene:
Y Y1
Y Y2 Y
Y1
X X1
X X2 XX1
Y Y1
Y2
Y Y1
* X X1
X X1
X2
Para el
e cálculo de la distancia entre el pun
nto x1,y1 y eel punto xi,yii, se utiliza lla fórmula:
d Y Y12 X X12
PROGRAM interpolar;
USES
Crt;
VAR
‘Variables de Entrada
x1,y1,x2,y2,x: real;
‘Variables de Salida
y,d: real;
BEGIN
Clrscr;
‘Entrada de Datos
Write('x1:');
Readln(x1);
Write('x2:');
Readln(x2);
Write('y1:');
Readln(y1);
Write('y2:');
Readln(y2);
Write('x:');
Readln(x);
‘Proceso
y:= (y2-y1)/(x2-x1)*(x-x1)+y1;
d:=sqrt((y-y1)*(y-y1)+(x-x1)*(x-x1));
‘Salida de Datos
Writeln('el valor de y=', y:0:2);
Writeln(' la distancia=', d:0:2);
Readkey
END.
10. Dada una cantidad de bolívares indique cuántas monedas de 500, 100, 50, 20 y 10
bolívares representan esa cantidad.
Las monedas se deben ir cambiando en orden decreciente, por ejemplo si son 13885 Bs, se
obtienen 27 monedas de 500 y queda como resto 385 Bs., que convertidos en monedas de
100 son 3 y quedan 85 Bs, al final queda 1 moneda de 50, 1 de 20, 1 de 10 y 5 bolívares
restantes obtenidos del residuo de la última división.
PROGRAM monedas;
USES
Crt;
VAR
‘Variables de Entrada
bs: integer;
‘Variables de Salida
m500, m100, m50, m20, m10: integer;
‘Variables de Proceso
r:integer;
BEGIN
Clrscr;
‘Entrada de Datos
Write ('cantidad de bolivares:');
Readln (bs);
‘Proceso
m500:=bs div 500;
r:= bs mod 500;
m100:=r div 100;
r:=r mod 100;
m50:=r div 50;
r:= r mod 50;
m20:=r div 20;
r:= r mod 20;
m10:=r div 10;
r:= r mod 10;
‘Salida de Datos
Writeln ('monedas de 500= ', m500);
Writeln ('monedas de 100= ', m100);
Writeln ('monedas de 50= ', m50);
Writeln ('monedas de 20= ', m20);
Writeln ('monedas de 10= ', m10);
Writeln ('monedas restantes= ', r);
Writeln ('pulse una tecla para salir');
Readkey
END.
11. Convertir un número real, que representa horas, a su equivalente en horas, minutos,
segundos y décimas de segundos.
PROGRAM Convertir;
USES
CRT;
VAR
num: real;
h:real
‘Variables de Salida
min,seg,dec: real;
BEGIN
Writeln('Ingresar el Número que represente las Horas');
Readln(num);
‘Proceso
h:=num;
min:=num*60;
seg:=num*3600;
dec:=num*36000;
‘Salida de Datos
Writeln('La Equivalencia en horas es : ',num:10:2);
Writeln('La Equivalencia en minutos es : ',min:10:2);
Writeln('La Equivalencia en segundos es: ',seg :10:2);
Writeln('La Equivalencia en décimas es : ',dec :10:2);
Readkey;
END.
EJERCICIOS PROPUESTOS.
X Z
a) R Z ( X M ) Sen( X )
2X Z
B ( A B) 2 4 AC
b) P
2B
1
c) D ABSen(C )
2
B
d) Z A
CD
A B
e) F
CD
B
A
f) E C
E
D
F
a) a mod b * c + 1 _____
b) a mod (b * c) +1 _____
c) 24 / c * 4 _____
f) 48 / (c * 2) *4 _____
g) 7 – a mod (3 + b) _____
h) a mod – b *c _____
Suponga que Indi, Com y Prueba son variables lógicas, ¿Qué valor se le asigna a cada
variable cuando se evalúa la expresión:
Edad Calif a) b)
12 18
19 12
19 16
12 12
Ejercicios propuestos de estructura secuencial.
1.- Indique el tipo de dato que se puede asignar a los siguientes datos: nombre, apellido,
edad, estatura, estado civil, sexo, sueldo, promedio, porcentaje, código, impuesto.
2.- Dados dos números, realizar la operación aritmética según los símbolos +, -, *, /.
3.- Realice el cálculo del área y del perímetro del círculo.
4.- Dadas las longitudes de los lados de un triángulo, determine el área del triángulo
basándose en el semiperímeto: Área p * (p - a) * (p - b) * (p - c) donde p=(a + b + c)/2
5.- Para determinar el área de un polígono de vértices conocidos se tiene; por ejemplo, si es
de 3 lados:
- A = (½) * (x1*y2 + x2*y3 + x3*y1 - x1*y3 - x3*y2 - x2*y1)
x1 y1 -
1 x2 y2 - Calcular el área de un polígono.
A
2 x3 y3
x1 y1
6.- En una caja de dimensiones L x L x L se introduce una pelota de radio L/2. Determinar
el volumen vacío entre la caja y la esfera.
4
Vol cubo L3 Vol esfera * r 3
3
7.- En una caja de dimensiones L x L x h se introduce un cilindro de radio L/2 y altura h.
Determinar el volumen vacío entre la caja y el cilindro.
Vol cubo L * L * h Vol cilindro * r 2 h
8.- Realice el cálculo del determinante y de los valores de x, y, z; para un sistema de tres
ecuaciones y tres incógnitas.
9.- Dado un valor x de tres digitos, deteminar el promedio de sus dígitos y es la unidad
igual a la decena.
10.- Dados L, M, N tres números enteros positivos de un sólo digito, calcule el producto de
un número de dos cifras por un número de una cifra de esta manera:
L M
* N
I J K