You are on page 1of 50

Programacion en Pascal

Programacion en Pascal

"SI MANEJAS UN LENGUAJE DE PROGRAMACION, ENTONCES LOS MANEJAS A


TODOS"
Bueno, este es un material con todos los conceptos basicos acerca
del lenguaje y de la manera de programar en Pascal, espero que les
sirva, abajo puse unos videos a modo de complentar esta apunte...
Antes de empezar quiero dejar en claro que este post es una
reedicion del post original que publique hace unos dias, en este
post dejo un par de libros que recomiendo (ambos subidos por mi) y
que para mi son muy buenos, sencillos y con mucha didactica en el
tema, aparte casi al final del post he agregado algunos ejercisios
resueltos asi como tambien unos videos para complementar la teoria
y con el fin de que sea un poco mas entendible el material del
post.
Los libros los dejo en el "Primer comentario" para que lo
descarguen..
Aclaro que este es un material para principiantes, con todos los
conceptos basicos...sirven y ayudan muchisimo para la gente que
esta empezando a programar o que esta estudiando alguna carrera
que ionvolucre la programacion...Mucha suerte gente y miles de
exitos!!!

Comenzaremos por dar algunas definiciones bsicas que nos ayudarn


a comprender el alcance de este trabajo.
Problema Situacin planteada que queremos resolver.
Algoritmo Secuencia finita de acciones con las que podemos
resolver el problema.
Segn el Teorema de la Programacin Estructurada todo problema
computacional puede resolverse mediante la aplicacin de tres
tipos de acciones fundamentales que llamaremos "Estructuras de
Control de Flujo de Datos".
Estas acciones son las siguientes:
-Ejecutar una accin, luego otra, luego otra,... (lo llamamos
accin simple)
-Decidir entre ejecutar una u otra accin en funcin de que se
cumpla o no una determinada condicin (lo llamamos accin
condicional)
-Ejecutar repetidas veces la misma accin mientras se cumpla una
determinada condicin (lo llamamos accin iterativa).

Estructuras de Control de Flujo de Datos


Accin Simple
Esta es la ms bsica de las estructuras. Se considera accin
simple a las acciones de leer (por teclado o desde un archivo),
escribir (por pantalla, impresora o en un archivo) y asignar.
Graficamente lo representamos de la siguiente manera:
Lectura (o entrada) Leemos (por teclado) un valor y lo
almacenamos en la variable a.

Asignacin Asignamos el valor de la variable a a la variable b.

Escritura (o salida) Mostramos (por pantalla o impresora) la


frase Hola Mundo seguida del valor que contenga la variable b.

Variables y Tipos de Datos


Una variable representa un espacio de memoria (RAM) en el cual
podemos almacenar temporalmente valores.
Podemos tener valores numricos, alfanumricos, lgicos y
definidos por el programador. Es decir: valores de diferentes
tipos (de datos).
Si hablamos del valor 123 estamos hablando de un valor numrico
entero. Podemos decir entonces que 123 es un entero. En cambio, si
hablamos del valor 12.3 estamos hablando de un valor numrico
real.
Tambin podemos hablar del valor Hola Mundo. En este caso
estamos hablando de un valor alfanumrico. Decimos que este valor
es una cadena de caracteres o simplemente una cadena.
Otro valor alfanumrico podra ser "123 Hola Mundo 456" que
contiene caracteres letras y nmeros. Es alfanumrico.
Obviamente no es lo mismo el valor 123 que 123. El primero es un
valor alfanumrico (est encerrado entre comillas) mientras que el
segundo es un entero.
Otro tipo de datos es el dato lgico o booleano. Los datos
booleanos solo pueden contener valores lgicos: verdadero o falso
(true o false).
Resumiendo
diferentes
numricos,
(pero esto

lo anterior diremos que podemos tener variables de


tipos de datos. Los tipos de datos pueden ser
alfanumricos, booleanos o definidos por el programador
lo veremos ms adelante).

Las variables se identifican con un nombre (o identificador). El


nombre de la variable debe comenzar con una letra. No puede tener
espacios ni caracteres especiales.
Nombres vlidos son:
fechaNac
fecNac
f
iFechaNac
Nombres incorrectos son:
fecha nacimiento // no puede haber un espacio
fecha-nacimiento // el caracter " - " se utiliza para restar
12fecha // debe comenzar con una letra

fecha+nacimiento // el caracter " + " se utiliza para sumar


Comenzando a Programar
Con lo estudiado hasta aqu estamos en condiciones de resolver el
siguiente problema.
Problema 1.0
Se requiere un programa que permita ingresar el nombre de una
persona y que luego escriba la leyenda Hola Mundo seguida del
nombre ingresado.

Anlisis
Primero emitimos un mensaje indicando al usuario que debe ingresar
su nombre (utilizamos la accin simple escritura). Para leer el
nombre utilizamos la accin simple de lectura. El usuario ingresa
por teclado su nombre, lo leemos y lo almacenamos en la variable
nom. Luego utilizamos la accin simple de escritura para mostrar
la cadena Hola Mundo seguida del valor que contiene la variable
nom. Las letras C y F encerradas en un crculo indican donde
comienza y donde finaliza el programa.
Codificacin del Algoritmo
El grfico que acabamos de analizar representa el algoritmo que
resuelve el problema planteado.
Para que una computadora pueda interpretar y ejecutar este
algoritmo debemos codificarlo en algn lenguaje de programacin.
En este apunte utilizaremos el lenguaje de programacin Pascal.
Para programar en Pascal tenemos que escribir el cdigo fuente

(sentencias e instrucciones que veremos a continuacin) en un


archivo de texto con extensin .pas.
problema1.0.pas
1:
2:var nom:string[20];
3:begin
4: // escribe este mensaje por pantalla
5: write('Ingrese su nombre: ');
6:
7: // lee un valor y lo guarda en la variable nom
8: // (el usuario debe escribir su nombre por teclado)
9: readln(nom);
10:
11: // escribe (en pantalla) la cadena 'Hola Mundo'
12: // seguida del valor que contiene la variable nom
13: writeln('Hola Mundo ',nom);
14:end.
15:
El cdigo comienza con la definicin de la variable nom. Pascal es
un leguaje fuertemente tipado por lo que todos los recursos que
vayamos a utilizar en el programa (variables, funciones, etc)
deben ser previamente especificados, indicando explicitamente su
tipo de datos. En el caso de la variable nom su tipo de datos es
string (alfanumrico, cadena de caracteres). En particular lo
definimos como string[20] (arbitrareamente) por lo tanto en la
variable nom podremos almacenar cadenas de a lo sumo 20
caracteres.
Luego, podemos ver que el programa est encerrado entre las
palabras begin y end. Se dice que begin-end encierran un bloque de
cdigo. Cada sentencia termina con punto y coma salvo el end
final que termina con punto.
Dentro del cdigo podemos escribir comentarios para ayudarnos a
comprender mejor el programa. Los comentarios deben comenzar con
doble barra.
No es una buena prctica utilizar caracteres especiales dentro de
un archivo de cdigo. Es decir: no debemos usar acentos ni "ees"
en los comentarios ni en ninguna parte del cdigo fuente.
Nota: el cdigo anterior es compatible con Free
Pascalhttp://www.freepascal.org/. Difiere en algunos detalles con
Borland Turbo Pascal. En este apunte utilizaremos Free Pascal.
Para editar y compilar el programa vamos a necesitar utilizar una

herramienta de desarrollo: Una IDE ("Entorno Integrado de

Desarrollo"

. Utilizaremos EditPad PRO + FreePascal.

Accin Condicional o Estructura de Decisi


La estructura de decisin permite decidir entre ejecutar un
conjunto de acciones u otro en funcin una expresin lgica. Es
decir: una expresin que tenga valor de verdad
Representamos la accin condicional de la siguiente manera

Cuando el algoritmo (o programa) llega a una accin condicional


debe evaluar la expresin lgica (ubicada en la parte superior).
Si esta tiene valor de verdad true (verdadero) entonces se
ejecutan las acciones que se encuentran en la parte izquierda de
la estructura. Si la expresin resulta false (falsa) entonces se
ejecutan las acciones ubicadas a la derecha.
Problema 1.1
Leer un valor e indicar si el valor ingresado es mayor que 10.

Anlisis

Leemos el valor en la variable v. Luego con una accin condicional


evaluamos si el valor de v es mayor que 10. Si resulta verdadero
(esto depende de lo que ingrese el usuario) entonces se ejecuta la
parte izquierda de la estructura y se muestra un mensaje indicando
que el valor ingresado es mayor que 10.
Si la condicin resulta falsa entonces podemos asegurar que el
valor NO es mayor que 10. Pero no sabemos si es menor o igual.
Esto lo estudiaremos en el prximo problema.
problema1.1.pas
1:
2:var v:integer;
3:begin
4: // leemos un valor por teclado
5: writeln('Ingrese un valor: ');
6: readln(v);
7:
8: // si v (el valor leido) es mayor que 10 entonces
9: if( v>10 ) then begin
10: writeln('El valor mayor que 10');
11: end else begin // si v no es mayor que 10...
12: writeln('El valor NO es mayor que 10');
13: end;
14:end.
15:
La accin condicional se codifica con la sentencia if (ver lnea
9). Esta sentencia evala la expresin lgica ubicada dentro de
los parntesis y decide (en funcin de que resulte true o false)
que bloque de cdigo ejecutar. Si la expresin v>10 resulta
verdadera entonces se ejecuta la lnea 10, si no (else) se ejecuta
la lnea 12.
Notemos que tanto la lnea 10 como la lnea 12 estn encerradas en
bloques begin-end. Por eso hablamos de "bloques de cdigo". Dentro
un bloque de cdigo puede haber ms de una instruccin como
veremos en los prximos ejemplos.
Problema 1.2
Idem anterior pero indicar si el valor ingresado es mayor, menor o
igual que 10.

Anlisis
Para resolver este problema leemos v y preguntamos si es mayor que
10. Si resulta verdadero entonces podemos mostrar ese resultado.
Si no es mayor entonces puede ser igual o menor. Tenemos que
preguntar por alguna de estas posibilidades. Preguntamos si v=10.
Si es verdadero entonces ya sabemos que se ingres el valor 10. Si
es falso entonces (como no es mayor ni es igual) resulta que v es
menor que 10.
Utilizamos estructuras de desicin anidadas (o "ifes" anidados).
problema1.2.pas
1:
2:var v:integer;
3:begin
4: write('Ingrese un valor: ');
5: readln(v);
6: if( v>10 ) then begin // es mayor
7: writeln('El valor mayor que 10');
8: end else begin // es igual
9: if( v=10 ) then begin
10: writeln('Es igual a 10');
11: end else begin // es menor
12: writeln('Es menor que 10');
13: end;
14: end;
15:end.
16:

En este problema vemos estructuras de desicin anidadas (o "ifes

anidados"

pero an as los bloques de cdigo encerrados en los

if-else tienen una nica accin. El if de la lnea 6 encierra una


nica accin writeln. Su else encierra una nica accin if que a
su vez encierra una nica
in, tanto p
verdadero (lnea 10) como por falso (lnea 12). Problema
1.3
er tres valores numricos. Indicar cual es mayor, med

Anlisis
Leemos los tres valores y comenzamos a comparar. Preguntamos si
a>b. Si esto se verifica entonces preguntamos si a>c. Si esto
tambin se verifica resulta que a>b y a>c. No hay dudas de que a
es el mayor. Luego tenemos que comparar b y c para ver cual esta
en segundo y en tercer lugar.
Si resulta que a>b pero no se verifica que a>c (o sea que c es
mayor que a) ser c el mayor, a el medio y b el menor.
Por otro lado, si no se verifica que a>b preguntamos si b>c. Si
esto es as entonces el mayor ser b (ya que b es mayor que a y b
es mayor que c). Preguntamos si a>c y ya podremos deducir cual
est en segundo y tercer lugar.
Para finalizar, si es falso que b>c entonces el mayor ser c,
medio b y menor a.
problema1.3.pas
1:
2:var a,b,c:integer;
3:begin
4: write('Ingrese tres valores: ');
5:
6: // lee los 3 valores numericos

7: // separados por espacio en blanco


8: readln(a,b,c);
9:
10: if( a>b ) then begin
11: if( a>c ) then begin
12: writeln('Mayor:',a);
13: if( b>c ) then begin
14: writeln('Medio:',b);
15: writeln('Menor:',c);
16: end else begin
17: writeln('Medio:',c);
18: writeln('Menor:',b);
19: end;
20: end else begin
21: writeln('Mayor:',c);
22: writeln('Medio:',a);
23: writeln('Menor:',b);
24: end;
25: end else begin
26: if( b>c ) then begin
27: writeln('Mayor:',b);
28: if( a>c ) then begin
29: writeln('Medio:',a);
30: writeln('Menor:',c);
31: end else begin
32: writeln('Medio:',c);
33: writeln('Menor:',a);
34: end;
35: end else begin
36: writeln('Mayor:',c);
37: writeln('Medio:',b);
38: writeln('Menor:',a);
39: end;
40: end;
41:end.
42:
En este cdigo vemos bloques if-else con ms de una instruccin.
El if de la lnea 10 tiene una nica instruccin (un if que
comienza en la lnea 11 y finaliza en la lnea 24). El if de la
lnea 11 tiene dos instrucciones: un writeln y un if que a su vez
tiene dos instrucciones por verdadero (lneas 14 y 15) y otras dos
por falso (lneas 17 y 18).
Operadores Lgicos
Una proposicin es una expresin que tiene valor de verdad (true o
false). Es decir: puede verificarse o no.
Los siguientes ejemplos son proposiciones y por lo tanto tienen
valor de verdad.

Una semana tiene 7 das (true)


7 es nmero primo (true)
2 es mayor que 5 (false)
4 = 2+3 (false)
Podemos utilizar operadores lgicos para realizar operaciones
entre proposiciones y as obtener nuevas proposiciones con sus
correspondientes valores de verdad.
Los operadores lgicos son: AND, OR y NOT.
Las siguientes tablas muestran el valor de verdad de la
proposicin que resulta luego de operar dos proposiciones p y q
con los diferentes operadores lgicos.

Veamos otra solucin para el problema 1.3 (versin 2)

Anlisis
La solucin es similar: varios if anidados, pero en este caso
utilizamos operadores lgicos para evaluar ms de una condicin en
un mismo if.

Comenzamos preguntando si a>b AND a>c para asegurarnos de que a es


el mayor valor. Teniendo esto seguro (entramos por la parte
izquierda de la estructura) tenemos que ver cual es el valor medio
y cual es el menor.
Si a no es el mayor (ingresamos por la parte derecha de la
estructura) preguntamos si b es el mayor (b>a AND b>c). Si esto es
as entonces comparamos a con c para ver quien est en segundo y
tercer lugar. Si no (si b no es el mayor) entonces por descarte el
mayor ser c. Luego tambin comparamos a y b para ver quien es
medio y menor.
Otra diferencia con la solucin anterior es que en este caso
estamos utilizando tres variables temporales: mayor, medio y menor
para asignar los valores a medida que podemos deducir que posicin
tienen. Luego simplemente mostramos el valor de estas variables
para informar los resultados.
problema1.3v2.pas
1:
2:var a,b,c,mayor,medio,menor:integer;
3:begin
4: write('Ingrese tres valores: ');
5: readln(a,b,c);
6:
7: // pregunto si a es el mayor
8: if( (a>b) AND (a>c) ) then begin
9: mayor:=a;
10: // como a es el mayor, comparo b con c
11: if( b>c ) then begin
12: medio:=b;
13: menor:=c;
14: end else begin
15: medio:=c;
16: menor:=b;
17: end;
18: end else begin
19: // a no es el mayor, pregunto si el mayor es b
20: if( (b>a) AND (b>c) ) then begin
21: mayor:=b;
22: // el mayor es b, comparo a con c
23: if( a>c ) then begin
24: medio:=a;
25: menor:=c;
26: end else begin
27: medio:=c;
28: menor:=a;
29: end;
30: end else begin
31: // el mayor no es a ni es b. Entonces es c
32: mayor:=c;
33: // solo queda comparar a con b

34: if( a>b ) then begin


35: medio:=a;
36: menor:=b;
37: end else begin
38: medio:=b;
39: menor:=a;
40: end;
41: end;
42: end;
43:
44: // muestro los resultados obtenidos
45: writeln('Mayor: ', mayor);
46: writeln('Medio: ', medio);
47: writeln('Menor: ', menor);
48:end.
49:
Accin iterativa o Estructura de Repeticin
La tercer y ltima estructura de control de flujo de datos es la
estructura de repeticin (o iterativa). Existen tres estructuras
interativas: while, repeat-until y for.
El while, lo representamos de la siguiente manera:

Decimos que mientras se verifique la condicin indicada en la


parte superior de la estructura se repetirn las acciones que se
encuentran dentro del cuerpo principal de la misma
(secuencialmente).
Como existe la posibilidad de que la condicin no se cumpla al
momento de llegar al while y que no se ingrese al ciclo ni
siquiera la primera vez se dice que el while es una estructura
repetitiva de 0-n (cero a ene) ya que puede iterar desde cero
hasta n veces.
Problema 1.4

Imprimir por pantalla los primeros n nmeros positivos (el valor n


se ingresa por teclado).

Anlisis
La estrategia para solucionar este problema consiste utilizar una
variable i con el valor inicial 1 (primer nmero positivo) e ir
mostrando e incrementando su valor mientras este sea menor o igual
al valor ingresado por el usuario (n).
Supongamos que el usuario ingresa un valor n=3. Al llegar al ciclo
de repeticin la condicin "i es menor o igual a n" resultar
verdadera ya que i vale 1 (dado que lo asignamos antes de ingresar
al ciclo) y n vale 3 (es lo que estamos asumiendo). Entonces el
programa ingresa al ciclo y muestra el valor de la variable i. A
continuacin vemos la asignacin i <-- i+1. Esto debe leerse as:
a i le asigno el valor que i tena ms 1. Es decir que si i
vala 1 entonces ahora a i le asignamos 1 (lo que tena) +1
dejando su valor en 2. Es decir: incrementamos el valor de i. Como
no hay mas acciones para ejecutar dentro del ciclo, el prximo
paso es volver a evaluar la condicin para ver si se contina
verificando.
En la siguiente iteracin i vale 2 y n vale 3. Todava se verifica
que "i es menor o igual a n". Se vuelve a ingresar al ciclo y se
imprime el valor de i (2). Luego se incrementa i y as hasta que
no se cumpla la condicin.
problema1.4.pas
1:
2:var i,n: integer;

3:begin
4: // leo un valor por teclado
5: write('Ingrese un valor: ');
6: readln(n);
7:
8: // inicializo la variable i con el valor 1
9: i:=1;
10:
11: // itero mientras que i sea menor o igual a n
12: while( i<=n ) do begin
13:
14: // muestro el valor de i
15: writeln(i);
16:
17: // incremento el valor de i
18: i:=i+1;
19: end;
20:end.
21:
Ciclo repeat-until
Lo representamos as:

El ciclo repeat-until es un ciclo de 1 a n. Para ingresar al ciclo


no hay condicin por lo tanto las acciones que se encuentran
dentro del ciclo se realizarn al menos una vez. Luego de la
ltima accin (en este caso accin3) se evala la condicin que se
encuentra en la parte posterior de la estructura.

El ciclo iterar hasta que se verifique la condicin ("repeat-

until" significa "repetir-hasta"

Tenemos que tener clara la diferencia entre el ciclo while y el


ciclo repeat-until. El primero repite mientras, en cambio el
segundo repite hasta que se cumpla la condicin
Veamos como podemos resolver el problema 1.4 utilizando un ciclo
repeat-until en lugar de un ciclo while

Basicamente la diferencia est en la condicin del ciclo. Antes


iteraba "mientras que i sea menor o igual que n". Ahora itera
"hasta que i sea mayor que n".
problema1.4v2.pas
1:
2:var i,n: integer;
3:begin
4: write('Ingrese un valor: ');
5: readln(n);
6: i:=1;
7:
8: repeat
9: writeln(i);
10: i:=i+1;
11: until( i>n );
12:end.
13:
Ciclo for.

Este es otro ciclo iterativo de 0 a n iteraciones. Se representa


as:

El ciclo for funciona con una variable de control (en el grfico


es la variable i) que toma un valor inicial (h) y un valor final
(t). La variable de control se incrementa automaticamente en cada
iteracin tomando el valor h en la primer iteracin, h+1 en la
segunda y t en la ltima. As, el ciclo dar exactamente t-h+1
iteraciones.
Como vemos en el grfico tenemos dos opciones para representarlo.
Podemos utilizar cualquiera de las dos.
Veamos como lo aplicamos en el problema 1.4

Vemos que en este caso el uso de un ciclo for simplifica la


solucin del problema. Simplemente leemos el valor n y luego
entramos en un ciclo for con la variable i incrementndose desde 1
hasta n.
Dentro del ciclo solo tenemos que mostrar el valor de i. Ya no es

necesario incrementarla porque el mismo ciclo la incrementa


automaticamente.
problema1.4v3.pas
1:
2:var i,n: integer;
3:begin
4: write('Ingrese un valor: ');
5: readln(n);
6: for i:=1 to n do begin
7: writeln(i);
8: end;
9:end.
10:
Contadores y Acumuladores
Para explicar estos temas analizaremos el siguiente problema.
Problema 1.5
Leer un conjunto de valores que corresponden a las edades de un
grupo de personas, indicar:
a - Cuantas personas (sus edades) se ingresaron.
b - Cuantas son mayores de edad (21 aos o ms).
c - Edad promedio de las personas.
El conjunto de valores finaliza cuando se ingresa una edad menor
que cero.

Anlisis
La estructura principal de este algoritmo consiste en un ciclo
repetitivo que itera mientras la edad leida (e) sea mayor o igual
que cero (ya que se ingresar un valor negativo para indicar el
fin de datos). Se lee la edad antes de ingresar al while y antes
de cerrarlo.
Para calcular cuantas personas se ingresaron (punto a) utilizamos
la variable cantPersonas. Esta variable se inicializa con cero
(cantPersonas:=0) antes de ingresar al while, y dentro del while
(por cada iteracin) la incrementamos asignndole el valor que
tena ms 1. (cantPersonas:=cantPersonas+1).
La variable cantPersonas incrementa su valor en 1 por cada
iteracin del while. A su vez, el while itera tantas veces como
edades vlidas de personas se ingresen. Decimos entonces que
cantPersonas es un contador que cuenta (en este caso) la cantidad
de personas cuyas edades se ingresaron. O bien: cantPersonas es el
contador de personas.
Es muy importante notar que el contador debe inicializarse en cero
ya que para incrementar su valor hacemos referencia al valor que
tena ms 1. En el momento inicial (primera iteracin) debe valer
cero.
Para calcular cuantas personas son mayores de 21 aos (punto b)
utilizamos otro contador (mayores) solo que antes de incrementarlo
preguntamos si la edad leida es mayor o igual que 21.
Para calcular el promedio de las edades grupo (punto c)
necesitamos dos datos: la cantidad de edades ingresadas y la
sumatoria de las edades. La cantidad de edades ingresadas ya la
tenemos en la variable cantPersonas. Por lo tanto necesitamos
obtener la sumatoria de las edades. Para esto utilizamos un
acumulador.
A la variable sumEdades (que inicializamos en cero) le
incrementamos su valor en cada iteracin del while. Pero no lo
incrementamos en 1. Le asignamos lo que tena ms el valor de la
variable e (la edad).
Decimos entonces que sumEdades es un acumulador que acumula (en
este caso) las edades leidas. O simplemente: sumEdades es el

acumulador de edades.
Al finalizar el while tenemos en cantPersonas la cantidad de
personas del conjunto, en mayores la cantidad de personas mayores
de 21. Luego a edadProm le asignamos sumEdades/cantPersonas para
calcular la edad promedio del conjunto.
problema1.5.pas
1:
2:var e,mayores,cantPersonas, sumEdades:integer;
3: edadProm:real;
4:begin
5: mayores:=0;
6: cantPersonas:=0;
7: sumEdades:=0;
8:
9: write('Ingrese Edad:');
10: readln(e);
11:
12: while( e >= 0 ) do begin
13: // contador de edades ingresadas
14: cantPersonas:=cantPersonas+1;
15:
16: // acumulador de edades
17: sumEdades:=sumEdades+e;
18:
19: if( e >= 21 ) then begin
20: mayores:=mayores+1;
21: end;
22:
23: write('Ingrese Edad:');
24: readln(e);
25: end;
26:
27: edadProm:=sumEdades/cantPersonas;
28: writeln('Cantidad de Personas: ',cantPersonas);
29: writeln('Mayores de 21: ',mayores);
30: writeln('Edad Promedio: ',edadProm);
31:end.
32:
Resumiendo, decimos que una variable es un contador cuando
incrementamos su valor en una unidad.
cont:=cont+1

Decimos que una variable es un acumulador cuando incrementamos su


valor en una cantidad variable.
acum:=acum+n
donde n es una variable cuyo valor puede variar.

Problemas Resueltos:

----------------------------------------------------------------------------------------------------------------------Escribir un programa en Pascal que sume dos nmeros:


a = 4 b = 3
PROGRAM EJER01;
var a,b,c:INTEGER;
BEGIN
{Empezamos con lo bsico, un programa que escribe la suma de 2
numeros en pantalla}
a:=4;
b:=3;
{Se asigna un valor cualquiera a las variables "a" y "b"}
c:=a+b;
WRITE (c); {Muestra en pantalla el valor de la suma}

END.

PROGRAM EJER1B;
USES CRT; {Lo usamos para poder borrar la pantalla}
VAR a,b,c:INTEGER;
BEGIN
ClrScr; {Limpiamos la pantalla}
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);
END.

Escribir un programa en Pascal que sume, reste, multiplique y


divida dos nmeros:

----------------------------------------------------------------------------------------------------------------------x = 10 y = 2
PROGRAM EJER02;
USES CRT; {Nos va a permitir limpiar la pantalla junto con

ClrScr}
VAR x,y:INTEGER;
VAR suma,rest,mult,divi:INTEGER;

BEGIN
x:=10;
y:=2;
suma:=x + y;
rest:=x - y;
mult:=x * y;
divi:=x div y;
{Con estas 4 variables realizamos las cuatro operaciones
aritmticas fundamentales: suma, resta, multiplicacin y
divisin}
ClrScr; {Limpia la pantalla}
WRITE ('SUMA:'); WRITELN (suma);
WRITE ('RESTA:'); WRITELN (rest);
WRITE ('MULTIPLICACION:'); WRITELN (mult);
WRITE ('DIVISION:'); WRITE (divi);
END.

PROGRAM EJER2B;
USES CRT;
VAR x,y:REAL;
VAR suma,rest,mult:REAL;
VAR divi:REAL;
{suma, resta, multiplica y divide 2 numeros reales}

BEGIN
WRITELN ('Este programa suma, resta, multiplica y divide:');
WRITELN ('Escriba dos numeros reales');
WRITELN (' ');

Read(x);
Read(y);
suma:=x + y;
rest:=x - y;
mult:=x * y;
divi:=x / y;
ClrScr;
WRITE ('SUMA:'); WRITELN (suma:3:0);
WRITE ('RESTA:'); WRITELN (rest:3:0);
WRITE ('MULTIPLICACION:'); WRITELN (mult:3:0);
WRITE ('DIVISION:'); WRITE (divi:5:2);
END.

PROGRAM EJER02;
USES CRT;
VAR x,y:INTEGER;
VAR suma,rest,mult,divi:INTEGER;
BEGIN
x:=10;
y:=2;
suma:=x + y;
rest:=x - y;
mult:=x * y;
divi:=x div y;

ClrScr;
WRITE('SUMA:'); WRITELN(suma);
WRITE('RESTA:'); WRITELN(rest);
WRITE('MULTIPLICACION:'); WRITELN(mult);
WRITE('DIVISION:'); WRITELN(divi);
END.

Escribir un programa en Pascal que calcule el rea de un


rectngulo:

----------------------------------------------------------------------------------------------------------------------lado1 = 3 lado2 = 4
rea del rectngulo=lado1 * lado2
PROGRAM EJER03;
USES CRT;
VAR lado1,lado2:INTEGER;
VAR area:INTEGER;
BEGIN
{Este programa nos va a servir para calcular el area de un
rectngulo}
{Damos valores para las variables}
lado1:=3;
lado2:=4;

area:=lado1*lado2; {Calculamos el area}


ClrScr;
WRITE ('AREA DEL RECTANGULO: '); WRITE (area); {Lo mostramos en
pantalla}
END.

PROGRAM EJER3B;
USES CRT;
VAR lado1,lado2:REAL;
VAR 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:'); WRITE (area:5:2);
END.

Escribir un programa en Pascal que calcule el rea de un


tringulo:

----------------------------------------------------------------------------------------------------------------------base = 7 altura = 4 rea del tringulo = (base * altura)/2

PROGRAM EJER04;
USES CRT;
VAR base,altura:REAL;
VAR area:REAL;
BEGIN
base:=7;
altura:=4;
area:=(base * altura) / 2;
ClrScr;
WRITE ('AREA DEL TRIANGULO: '); WRITE (area:5:2);
{:5:2 sirve para dar el formato de salida al numero, 5 posiciones
y 2 decimales}
END.

PROGRAM EJER4B;
USES CRT;
VAR base,altura:REAL;
VAR area:REAL;
BEGIN
{Este programa sirve para calcular el area de un triangulo}
ClrScr;
WRITELN ('PARA CALCULAR EL AREA DE UN TRIANGULO:');

WRITELN (' ');


WRITE ('ESCRIBE LA BASE: '); READLN (base);
WRITE ('ESCRIBE LA ALTURA: '); READLN (altura);
WRITELN (' ');
area:=(base * altura) / 2;
WRITE ('EL AREA DEL TRIANGULO ES: '); WRITE (area:5:2);
END.

Escribir un programa que calcule la longitud y el rea de una


circunferencia:

----------------------------------------------------------------------------------------------------------------------radio = 4 longitud de la circunferencia = 2 * PI * radio


rea de la circunferencia = PI * radio2
PROGRAM EJER05;
USES CRT;
VAR radio:REAL;
VAR longitud,area:REAL;
BEGIN
radio:=4;
longitud:=2*3.1416*radio;
area:=3.1416*radio*radio;
ClrScr;

WRITE ('LONGITUD DE LA CIRCUNFERENCIA:'); WRITELN (longitud:5:2);


WRITE ('AREA DE LA CIRCUNFERENCIA:'); WRITE (area:5:2);
END.

----------------------------------------------------------------------------------------------------------------------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
PROGRAM EJER06;
USES CRT;
VAR espacio,tiempo:REAL;
VAR velocidad:REAL;
BEGIN
espacio:=2;
tiempo:=5;
velocidad:=(espacio*1000)/(tiempo*60);
ClrScr;
WRITE ('VELOCIDAD DEL PROYECTIL:');
WRITE (velocidad:5:2); WRITE ('m/s');
END.

PROGRAM EJER6B;

USES CRT;
VAR espacio,tiempo,espacio2,tiempo2:REAL;
VAR 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)/(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.

PROGRAM EJER06;
USES CRT;

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

----------------------------------------------------------------------------------------------------------------------Escribir un programa en Pascal que calcule el volumen de una


esfera:
radio = 3 volumen de la esfera = 4/3 * PI * radio3
PROGRAM EJER07;
USES CRT;
VAR radio:REAL;
VAR volumen:REAL;
BEGIN
radio:=3;
volumen:=(4/3)*3.1416*(radio*radio*radio);
ClrScr;

WRITE ('VOLUMEN DE LA ESFERA:'); WRITE(volumen);


END.

PROGRAM EJER7B;
USES CRT;
VAR radio:REAL;
VAR volumen:REAL;
BEGIN
{Este programa calcula el volumen de una esfera}
ClrScr;
WRITELN ('PARA CALCULAR EL VOLUMEN DE LA ESFERA ESCRIBA EL RADIO:
');
READLN (radio);
volumen:=(4/3)*3.1416*(radio*radio*radio);
WRITE ('VOLUMEN DE LA ESFERA: '); WRITE(volumen:5:2);
END.

PROGRAM EJER07;
USES CRT;
VAR radio:REAL;
VAR volumen:REAL;
BEGIN
radio:=3;
volumen:=(4/3)*3.1416*(radio*radio*radio);
ClrScr;
WRITE('VOLUMEN DE LA ESFERA: '); WRITE(volumen);

END.

----------------------------------------------------------------------------------------------------------------------Escribir un programa en Pascal que evale la siguiente


expresin:
(a+7*c)/(b+2-a)+2*b a = 3,b = 6,c = 4
PROGRAM EJER08;
USES CRT;
VAR a,b,c:REAL;
VAR resultado:REAL;
BEGIN
a:=3;
b:=6;
c:=4;
resultado:=(a+7*c)/(b+2-a)+2*b;
ClrScr;
WRITE ('RESULTADO:'); WRITE (resultado:5);
END.
PROGRAM EJER8B;
USES CRT;
VAR a,b,c:REAL;
VAR resultado:REAL;
BEGIN

{Este programa calcula una expresion algebraica}


ClrScr;
WRITELN ('Este programa sirve para calcular la siguiente
expresion:');
WRITELN ('(a+7*c)/(b+2-a)+2*b');
WRITELN (' ');
WRITE ('Introduzca a: '); READLN (a);
WRITE ('Introduzca b: '); READLN (b);
WRITE ('Introduzca c: '); READLN (c);
resultado:=(a+7*c)/(b+2-a)+2*b;
WRITELN (' ');
WRITE ('RESULTADO: '); WRITE (resultado:5:2);
END.

PROGRAM EJER08;
USES CRT;
VAR a,b,c:REAL;
VAR resultado:REAL;
BEGIN
a:=3;
b:=6;
c:=4;
resultado:=(a+7*c)/(b+2-a)+2*b;
ClrScr;
WRITE('RESULTADO: '); WRITE(resultado:5);
END.

----------------------------------------------------------------------------------------------------------------------Escribir un programa en Pascal que evale la siguiente


expresin:

(a+7*c)/(b+2-a)+2*b a = 3,b = 6,c = 4


PROGRAM EJER08;
USES CRT;
VAR a,b,c:REAL;
VAR resultado:REAL;
BEGIN
a:=3;
b:=6;
c:=4;
resultado:=(a+7*c)/(b+2-a)+2*b;
ClrScr;
WRITE ('RESULTADO:'); WRITE (resultado:5);
END.
PROGRAM EJER8B;
USES CRT;
VAR a,b,c:REAL;
VAR resultado:REAL;
BEGIN
{Este programa calcula una expresion algebraica}

ClrScr;
WRITELN ('Este programa sirve para calcular la siguiente
expresion:');
WRITELN ('(a+7*c)/(b+2-a)+2*b');
WRITELN (' ');
WRITE ('Introduzca a: '); READLN (a);
WRITE ('Introduzca b: '); READLN (b);
WRITE ('Introduzca c: '); READLN (c);
resultado:=(a+7*c)/(b+2-a)+2*b;
WRITELN (' ');
WRITE ('RESULTADO: '); WRITE (resultado:5:2);
END.

PROGRAM EJER08;
USES CRT;
VAR a,b,c:REAL;
VAR resultado:REAL;
BEGIN
a:=3;
b:=6;
c:=4;
resultado:=(a+7*c)/(b+2-a)+2*b;
ClrScr;
WRITE('RESULTADO: '); WRITE(resultado:5);
END.

-------------------------------------------------------------------------------

----------------------------------------Escribir un programa en Pascal que evale la siguiente


expresin:

(a+5) * 3 / 2 * b - b a = 3,b = 6
PROGRAM EJER09;
USES CRT;
VAR a,b:REAL;
VAR resultado:REAL;
BEGIN
a:=3;
b:=6;
resultado:=((a+5)*3) / (2*b-b);
ClrScr;
WRITE ('RESULTADO: '); WRITE(resultado:5:2);
END.

PROGRAM EJER9B;
USES CRT;
VAR a,b:REAL;
VAR resultado:REAL;
BEGIN
{Este programa calcula el resultado de una expresion algebraica}
ClrScr;

WRITE ('PARA CALCULAR LA SIGUIENTE EXPRESION: ');


WRITELN ('((a+5)*3) / (2*b-b)');
WRITELN (' ');
WRITE ('Escriba a: '); READ (a);
WRITE ('Escriba b: '); READ (b);
WRITELN (' ');
resultado:=((a+5)*3) / (2*b-b);
WRITE ('RESULTADO: '); WRITE(resultado:5:2);
END.

----------------------------------------------------------------------------------------------------------------------Escribir un programa en Pascal que evale la siguiente


expresin:
(-b + (b2-4*a*c)/(2*a)
(es la solucin positiva de una ecuacin de 2 grado)
PROGRAM EJER10;
USES CRT;
VAR a,b,c:REAL;
VAR resultado:REAL;
BEGIN
a:=6;
b:=6;
c:=1;
resultado:=(-b+sqrt(sqr (b) - 4*a*c))/(2*a);

ClrScr;
WRITE ('RESULTADO:'); WRITE(resultado:5:2);
END.

PROGRAM EJER10B;
USES CRT;
VAR a,b,c:REAL;
VAR resultado:REAL;
BEGIN
{Calcula la incognita positiva de una ecuacion de 2 grado}
ClrScr;
WRITE ('Para calcular la incognita positiva de una ecuacion');
WRITE (' de segundo grado escriba todas las variables:');
WRITELN (' ');
WRITELN (' ');
WRITE ('Escriba a: '); READLN (a);
WRITE ('Escriba b; '); READLN (b);
WRITE ('Escriba c; '); READLN (c);
WRITELN (' ');
resultado:=(-b +sqrt(sqr (b) - 4*a*c))/(2*a);
WRITE ('RESULTADO: '); WRITE(resultado:5:2);
END.

----------------------------------------

-------------------------------------------------------------------------------Escribir un programa en Pascal que calcule el rea y el volumen


de un cilindro:
A = (2 * (PI * r2)) + ((2 * PI * r) * h)
V = (PI * r2) * h
PROGRAM EJER11;
USES CRT;
VAR radio,altura:REAL;
VAR area,volumen:REAL;
BEGIN
radio:=3;
altura:=6;
area:= (2 * (3.1416 * radio * radio)) + ((2 * 3.1416 * radio) *
altura);
volumen:= (3.1416 * radio * radio) * altura;
{podriamos cambiar "radio*radio" por "sqr(radio)" para hacer el
cuadrado del radio}
ClrScr;
WRITE ('AREA DEL CILINDRO:'); WRITE (area); WRITELN (' m2');
WRITE ('VOLUMEN DEL CILINDRO:'); WRITE (volumen); WRITE (' m3');
END.

PROGRAM EJER11B;
USES CRT;

VAR radio,altura:REAL;
VAR area,volumen:REAL;
BEGIN
{Calcula el area y el volumen de un cilindro}
ClrScr;
WRITELN ('CALCULA EL AREA Y VOLUMEN DE UN CILINDRO');
WRITELN (' ');
WRITE ('Escriba el radio: '); READLN (radio);
WRITE ('Escriba la altura: '); READLN (altura);
WRITELN (' ');
area:= (2 * (3.1416 * radio * radio)) + ((2 * 3.1416 * radio) *
altura);
volumen:= (3.1416 * radio * radio) * altura;
WRITE ('AREA DEL CILINDRO: '); WRITE (area:5:2); WRITELN (' m2');
WRITE ('VOLUMEN DEL CILINDRO: '); WRITE (volumen:5:2); WRITE ('
m3');
END.

PROGRAM EJER11;
USES CRT;
VAR r,h:REAL;
VAR a,v:REAL;
BEGIN
{AREA Y VOLUMEN DE UN CILINDRO}
ClrScr;
WRITE('RADIO DEL CILINDRO: '); READLN(r);

WRITE('ALTURA DEL CILINDRO: '); READLN(h);


a:=(2*(3.1416*sqr(r))) + ((2*3.1416*r)*h);
v:=(3.1416*sqr(2))*h;
ClrScr;
WRITE('AREA DEL CILINDRO: '); WRITELN(a:5:2);
WRITE('VOLUMEN DEL CILINDRO: '); WRITELN(v:5:2);
END.

----------------------------------------------------------------------------------------------------------------------Bueno, a continuacon dejo algunos videos que pueden ayudar a


entender un poco mas este lenguaje de programacion:

link: http://www.youtube.com/watch?v=JoF5rfzzo_o

link: http://www.youtube.com/watch?v=tsDfGBlHFfs&feature=related

link: http://www.youtube.com/watch?v=R0HXdnj0weg&feature=related

link: http://www.youtube.com/watch?v=gq723jqgqAo&feature=related

link: http://www.youtube.com/watch?v=LihWEUNJ25k&feature=related

link: http://www.youtube.com/watch?v=iqUfBehhcgM&feature=related

link: http://www.youtube.com/watch?v=NnmZQsOP2MU&feature=related

link: http://www.youtube.com/watch?v=F1ohJmqC7b8&feature=related

link: http://www.youtube.com/watch?v=-JA4PhZX9Lg&feature=related

link: http://www.youtube.com/watch?v=1G2yCtp7-xc&feature=related
Bueno gente, espero que les sirva, mas a los que se estan
iniciando en la programacion, creo este material les viene de
pelos, comenten, acepto criticas constructivas, siempre y cuando
sean con respeto, los comentarios fuera de lugar o irrespetuosos
seran borrados, bloqueados o denunciados, gracias!!!!

You might also like