Está en la página 1de 148

Programar es el arte de planear y crear soluciones lgicas a los problemas planteados

LENGUAJES DE PROGRAMACIN:
Objetivos:
1.
2.

Conocer los diferentes tipos de lenguajes de programacin que existen


Diferenciar las caractersticas de los tipos de lenguajes de programacin de Alto Nivel.

Definicin:
Un lenguaje de programacin es aquel que permite al usuario crear programas que sern entendidos por el
ordenador (Computadora) con el objetivo de realizar alguna tarea.
Clasificacin de los leguajes de programacin:
A grandes rasgos podemos clasificar los lenguajes de programacin en tres categoras:
1. Lenguaje de Mquina.
2. Lenguaje Ensamblador.
3. Lenguaje de Bajo Nivel.
4. Lenguajes de Alto Nivel.
Lenguaje de Mquina:
Son aquellos cuyas instrucciones son entendidas por el ordenador si la necesidad de traduccin alguna. Sus
instrucciones no son ms que ristras de ceros y unos (bits). (Modelo Binario). Estas especifican las operaciones a
realizar, los registros del procesador y celdas de memoria implicados, etc.
Obviamente este tipo de lenguajes sern fciles de comprender para un ordenador pero muy difciles para el
hombre. Esta razn nos lleva a buscar otro lenguaje para comunicarnos con el ordenador.
Muy pocos programas se escriben actualmente en lenguaje de mquinas por dos razones importantes:
Primero, por que el lenguaje de mquinas es muy incmodo para trabajar, y
Segundo por que la mayora de las mquinas tienen sus repertorios de daros propios.
As un programa escrito en lenguaje de mquina para una computadora no puede ser ejecutado en otra de distinto
tipo sin modificaciones importantes.
Lenguaje Ensamblador (Assembly Language):
Tipo de lenguaje de programacin en el que el conjunto de instrucciones del microprocesador ser representa por
MNEMNICOS, en ves de dgitos binarios o hexadecimales. Con el fin de facilitar la escritura de programas.
Un lenguaje ensamblador es un lenguaje de Bajo Nivel, es decir, esta muy cerca de las operaciones reales del
microprocesador. Pascal, Basic, y otros son lenguajes de Alto Nivel porque son muy lejanos del
microprocesador. Una lnea escrita en Basic (por ejemplo la instruccin IF THEN_ ELSE) puede equivales a
muchas lneas de instrucciones explcitas a lenguaje ensamblador, auque esto ltimo tomara menos tiempo de
ejecucin que lo primero. Convertir un programa escrito en lenguaje ensamblador en un programa ejecutable
requiere un ensamblador que lo ajuste. El lenguaje ensamblador permite a los programadores controlar
directamente la operacin de la CPU, los datos se cargan, almacenan, recuperan, corren o se hacen girar en
forma de simples bits, bytes completos o grupos de 16 bits. Pero programar un lenguaje ensamblador puede ser
un proceso complicado.
La palabra mnemotcnicas son mucho ms fciles de recordar que las secuencias de ceros y unos. Un ejemplo de
una instruccin de tpica de ensamblador puede ser:
ADDX,Y,Z

Programacin en Pascal 7.0

Elaborado por: Lic. Carlos Lennin Quiroz P.


1

Programar es el arte de planear y crear soluciones lgicas a los problemas planteados


Esta instruccin significara que se quiere sumar los nmeros almacenados en las direcciones de memoria x e y,
y almacenar el resultado en la direccin z. Pero an as, a medida que los programas crezcan en tamao y
complejidad, el ensamblador sigue si ser una buena solucin.
Lenguaje de Medio Nivel:
Lenguajes de programacin como C pueden considerarse como lenguajes de medio nivel ya que tienen algunas
caractersticas adicionales que permiten que permiten su uso en un nivel ms bajo, cubriendo as el vaco entre el
lenguaje de mquinas y los lenguajes de alto nivel ms convencionales. Esta ventaja permite el uso de C en la
programacin de sistemas.
Lenguaje de Alto Nivel
Son aquellos en que las instrucciones o sentencias son escritas con palabras similares a las de los lenguajes
humanos (en la mayora de los casos, el ingls). Esto facilita la escritura y comprensin del cdigo al
programador. Los lenguajes de alto nivel son mucho ms fciles de usar que los lenguajes ensamblador y de
mquina; pero en general, tienen una ejecucin ms lenta y requieren ms memoria. La mayora de los lenguajes
de alto nivel son lenguajes de propsito general como Pascal, Cobol, etc. Pero hay tambin lenguajes de
propsito especial, sus instrucciones estn diseadas especialmente para algn tipo particular de aplicacin
como por ejemplo: GPSS y CSMP, que son lenguajes orientados a la simulacin. El uso de u lenguaje de alto
nivel ofrece tres ventajas importantes respecto al lenguaje de mquina:
1. Llamadas sencillas.
2. Uniformidad.
3. Portabilidad (independencia de la mquina).
Citamos algunos lenguajes de alto nivel:
ADA
LISP
BASIC
CLIPPER
COBOL
SMALLTALK
FORTRAN
C++
C
VISUAL OBJETS
MODULA-2
DELPHI
PASCAL
MIRANDA
JAVA
EIFFEL
ALGOL
VISUAL BASIC
APL
VISUAL FOX
LOGO
PL/1
LOS LENGUAJES DE ALTO NIVEL PRESENTAN LAS SIGUIENTES VENTAJAS:
1. El tiempo de formacin de los programadores es relativamente corto comprado con otros lenguajes.
2. La escritura de programas se basa en reglas sintcticas similares a los lenguajes humanos. Nombre de
las instrucciones, tales como READ, WRITE, PRINT, OPEN, etc.
3. Las modificaciones y puestas a punto de los programas son ms fciles.
4. Reduccin del coste de los programas.
5. Transportabilidad.
LOS INCOVENIENTES SE CONCRETAN EN:
1. Incremento del tiempo de puesta a punto, al necesitar diferentes instrucciones del programa fuente para
conseguir el programa definido.
2. No se aprovechan los recursos internos de la mquina (PC), que se explotan mucho mejor en lenguajes
de mquinas y ensambladores.
3. Aumento de la ocupacin de memoria.
4. El tiempo de ejecucin de los programas es mucho mayor.

Programacin en Pascal 7.0

Elaborado por: Lic. Carlos Lennin Quiroz P.


2

Programar es el arte de planear y crear soluciones lgicas a los problemas planteados


Traductores de programas:
Los traductores son un tipo de programas cuya funcin es convertir el cdigo de un lenguaje en otro. Por
ejemplo un compilador, que traduce cdigo fuente a cdigo objeto. Existen distintos tipos de traductores, entre
ellos se destacan:

Ensambladores.
Procesadores.
Intrpretes.
Compiladores.

Ensambladores:
Es u tipo de traductor que convierte programas escrito en lenguaje ensamblador en programas escritos en cdigo
mquina.
Procesadores:
Traduce un lenguaje de alto nivel a otro, cuando el primero no puede pasar a lenguaje mquina directamente.
Intrpretes:
Se trata de traductores- ejecutores ya que con cada instruccin realizan un proceso triple de lecturatraduccinejecucin. Son relativamente lentos, pero muy buenos para la depuracin de programas.
Compiladores:
Es el tipo de traductor ms conocido. Se trata de un programa que traduce cdigo fuente escrito en lenguaje de
alto nivel (Pascal) en cdigo mquina (no siempre). Son ms rpidos que los intrpretes pero presentan mayor
dificultad a la hora de detectar errores.
La compilacin es el proceso de traduccin de programas fuentes a programas objetos. El programa objeto
obtenido de la compilacin ha sido traducido normalmente a cdigo mquina.
Para conseguir el programa mquina rea se debe de utilizar u programa llamado Montador o Enlazador
(Linker). El proceso de montaje conduce a un programa en lenguaje de mquina directamente ejecutable.
Fases de la compilacin
Programa Fuente
Compilador
(Traductor)

Programa Objeto

Montador (Link)

Programa Ejecutable
En Lenguaje de Mquina

Programacin en Pascal 7.0

Elaborado por: Lic. Carlos Lennin Quiroz P.


3

Programar es el arte de planear y crear soluciones lgicas a los problemas planteados


PROCESO DE LA EJECUCIN DE UN PROGRAMA EN PASCAL
1.
2.
3.
4.
5.
6.
7.

Escritura de un programa con un editor (programa que permite a una computadora actuar de modo
similar a una mquina de escribir electrnica) y guardarlo en un dispositivo de almacenamiento
(Diskette, disco duro).
Introducir el programa fuente en memoria.
Compilar e programa con el copilador Pascal.
Verificar y corregir errores de compilacin (Listado de errores).
Obtencin del programa objeto.
El montador obtiene el programa ejecutable.
Se ejecuta el programa y, si no existen errores, se tendr la salida del programa.
FASES DE LA EJECUCIN DE UN PROGRAMA
Programa
fuente

Modificacin
Programa
Fuente

Compilador

Si existen
errores en la
compilacin

SI

NO
Programa

Montador
Link

Programa ejecutable

Ejecucin

SISTEMA DE NUMERACIN
Sistema Decimal:
El sistema de numeracin que estamos acostumbrado a usar el decimal o base 10, que usa los dgitos: 0,1, 2, 3, 4,
5, 6, 7, 8, 9, el significado de estos dgitos en un nmero depende de la posicin que ocupa en dicho nmero.
Por ejemplo:
485
El dgito 4 es interpretado como 4 Centenas
El dgito 8 es interpretado como 8 Decenas
El dgito 5 es interpretado como 5 Unidades

Programacin en Pascal 7.0

En forma expandida del nmero 48510


(4 x 100) = (4 x 102)
(8 x 10) = (8 x 101)
(5 x 1) = (5 x 100)
(4 x 100) + (8 x 10) + (5 x 1) = (4 x 102) + (8 x 101) + (5 x 100)

Elaborado por: Lic. Carlos Lennin Quiroz P.


4

Programar es el arte de planear y crear soluciones lgicas a los problemas planteados

Los dgitos que aparecen en las distintas posiciones de un decimal (Base 10) son por lo tanto los coeficientes de
las sucesivas potencias de 10.
Parecidos sistemas de posicionamiento pueden se ideados usando otros nmeros distintos de 10 como base.
Sistema binario:
Es el que usa el 2 como base y solo tiene los dgitos: 0, 1; como en el sistema decimal, el significado de los bits
en un nmero binario esta determinado por su posicin en dicho nmero.
Por ejemplo:
101
Puede ser escrito en forma expandida (usando notacin decimal) como:
(1 x 22) + (0 x 21) + (1 x 20)
Es decir que el nmero binario 1012 tiene el valor decimal 4 + 0 + 1 = 510
Anlogamente el nmero binario 111010 tiene el valor decimal:
= (1 x 25) + (1 x 24) + (1 x 23) + (1 x 22) + (1 x 21) + (1 x 20)
= 32 + 16 + 8 + 0 + 2 + 0
= 58
Para evitar confusiones sobre la base que estemos usando, debemos ponerla como sub ndice de los nmero no
decimales, usando esta convencin, podramos indicar que 5 y 58 tiene la siguiente representacin binaria:
510 = 1012
5810 = 1110102
Sistema octal:
Es un sistema de base 8 cuyos dgitos son: 0, 1, 2, 3, 4, 5, 6, 7. En un nmero octal como 17038, los dgitos son
coeficientes de potencias de 8, este nmero es por lo tanto una abreviatura de la forma expandida:
= (1x 83) + (1 x 82) + (1 x 81) + (1 x 80)
= 512 + 448 + 0 + 3
= 963
Sistema Hexadecimal:
Es una base 16 cutos dgitos son: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A(10), B(11), C(12), D(13), E(14), F(15). El nmero
hexadecinal 5E416 tiene la forma expandida:
= (5 x 162) + (14 x 161) + (4 x 160)
= 1280 + 224 + 4
= 1508
TABLA DE BASES
DECIMAL
0
1
2

BINARIO
0
1
10

Programacin en Pascal 7.0

OCTAL
0
1
2

HEXADECIMAL
0
1
2

Elaborado por: Lic. Carlos Lennin Quiroz P.


5

Programar es el arte de planear y crear soluciones lgicas a los problemas planteados


3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50

11
100
101
110
111
1000
1001
1010
1011
1100
1101
1110
1111
10000
10001
10010
10011
10100
10101
10110
10111
11000
11001
11010
11011
11100
11101
11110
11111
100000
100001
100010
100101
100100
100101
100110
100111
101000
101001
101010
101011
101100
101101
101110
101111
110000
110001
110010

3
4
5
6
7
10
11
12
13
14
15
16
17
20
21
22
23
24
25
26
27
30
31
32
33
34
35
36
37
40
41
42
43
44
45
46
47
50
51
52
53
54
55
56
57
60
61
62

3
4
5
6
7
8
9
A
B
C
D
E
F
10
11
12
13
14
15
16
17
18
19
1A
1B
1C
1D
1E
1F
20
21
22
23
24
25
26
27
28
29
2A
2B
2C
2D
2E
2F
30
31
32

Existe un tipo de representacin denominado notacin exponencial o cientfica y que se utiliza para nmeros
muy grandes o nmeros muy pequeos. As:
Ejemplo:
367 521 100 000 000 000 000 est expresando en forma cientfica.
Y se expresa en forma de potencias de 10: 3.675201 x 1020
Y de modo similar podemos representar un nmero muy pequeo:
Ejemplo:
0.0000000000302579
Este se representa como: 3.02579 x 10-11

Programacin en Pascal 7.0

Elaborado por: Lic. Carlos Lennin Quiroz P.


6

Programar es el arte de planear y crear soluciones lgicas a los problemas planteados

DATOS LGICOS:
El tipo lgico, tambin denotado por booleano, es aquel dato que puede tomar uno de dos valores:
Verdadero (true).
Falso (false).
Ejemplo:
El numero 10 es un entero par Verdadero
DATOS TIPO CARACTER Y TIPOCADENA:
El tipo carcter es un conjunto finito y ordenado de caracteres que la computadora reconoce. Un dato tipo
carcter contiene un solo carcter.
Caracteres Alfabticos: (A, B, C,, Z) (a, b, c,, z)
Caracteres Numricos: (1, 2,, 9, 0)
Caracteres Especiales: (+, -, *, /, , , , <, >, $, %, )
Los datos tipo cadena (string) de caracteres es una sucesin de caracteres que se encuentran limitados por una
comilla (Apstrofe) ( )o doble comilla ( ), segn el tipo de lenguaje de programacin. Su rango esta limitando
entre 0 al 255.
Ejemplos:
Hola Muchachos
Otro separador de cadena
RESUMEN DE TIPOS DE DATOS
Datos

Numrico

Entero

Carcter

Real

Carcter

Lgico

String

True

False

CONSTANTES Y VARIABLES:
Constante: valores que no se deben de cambiar durante la ejecucin de un programa.
Variables: Es un objeto o partida de datos cuyo valor puede cambiar durante el desarrollo del algoritmo o
ejecucin del programa. Una variable de un cierto tipo solo puede tomar valores de ese tipo, si se intenta asignar
un valor de tipo a una variable de otro tipo se producir un error de tipo.
Tanto las variables como las constantes constan de: nombre y tipo.
Constantes reales vlidas
1.234
- 0.1436
+ 54437324

Programacin en Pascal 7.0

Constantes reales no vlidas


1,752.63 (no permite coma)
82 (falta punto decimal)

Elaborado por: Lic. Carlos Lennin Quiroz P.


7

Programar es el arte de planear y crear soluciones lgicas a los problemas planteados

EXPRESIONES:
Son combinaciones de constantes, variables, smbolos de operaciones, parntesis y nombre de funciones
especiales. Las mismas ideas son utilizadas en notacin matemtica tradicional; por ejemplo:
a + (b + 3) + c
a + (b - 3) + c
Nota: Los parntesis indican el orden de los clculos y el signo representa la funcin raz cuadrada. Toda
expresin consta de: operandos y operadores. Estas se clasifican el: (Aritmticas, lgicas y de carcter).
Expresiones Aritmticas:
Son operaciones anlogas a las formulas matemticas. Las variables y constante son numricas (real o entera) y
las operaciones son aritmticas.

Operador
_, , *
+
*
/
Div
Mod

Operadores Aritmticos
Significado
Tipo de Operandos
Exponenciacin
Entero o Real
Suma
Entero o Real
Resta
Entero o Real
Multiplicacin
Entero o Real
Divisin
Real
Divisin Entera
Entero
Mdulo (resto)
Entero

Tipo de Resultado
Entero o Real
Entero o Real
Entero o Real
Entero o Real
Real
Entero
Entero

Operadores Div y Mod


El smbolo / se utiliza para la divisin real y el operador div para la divisin entera. Ejemplo:
A Div B (solo se puede usar si A y B, son expresiones enteras)
Reales
10.5 / 3.5 = 3.5
6 / 1 = 6.0
6 8
6 0

Enteras
10 Div 3 = 3
10 mod 2 = 0

Div
Mod

Reglas de prioridad:
Las operaciones que tienen dos o ms operandos requieren una regla matemtica que permitan determinar el
orden de las operaciones, y se denominan reglas de prioridad o procedencia y son:
1. Las operaciones que estn encerradas entre parntesis se evalan primero. Si existen diferentes
parntesis anidados, las expresiones ms internas se evalan primero.
2. Las operaciones aritmticas dentro de una opresin suelen seguir el siguiente orden de prioridad:
a) Operadores Exponencial (, , o bien **).
b) Operadores *, /, \
c) Operadores div y mod
d) Operadores +, 3. en caso de coincidir varios operadores de igual prioridad en una expresin o sub expresiones
encerradas entre parntesis, el orden de prioridad en este caso es de izquierda a derecha.

Programacin en Pascal 7.0

Elaborado por: Lic. Carlos Lennin Quiroz P.


8

Programar es el arte de planear y crear soluciones lgicas a los problemas planteados

Expresiones lgicas booleanas:


Son expresiones que pueden tomar solo dos valores: verdadero o falso. Estas expresiones lgicas se forman
combinando constantes lgicas, variables lgicas y otras expresiones lgicas, utilizando los operadores lgicos
not, and y or, y:
Los operadores relacionales o de comparacin
=
Igual que
<
Menor que
>
Mayor que
<=
Menor o igual que
>=
Mayor o igual que
<>
Distinto de
Los operadores de relacin se pueden aplicar a cualquiera de los cuatro tipos de datos estndar: Entero, Real,
booleano, y de carcter.
Operadores Lgicos o Bolanos:
Son los siguientes: not (no), and (y), or (o). Las definiciones de las operaciones de los mismos de resumen en la
conocida tabla de verdad.
A
True
False

No (6 > 10) = Verdad, esto por que


(6 > 10) Es falso y la negacin de la
falsedad es la verdad

No A
False
True

A
True
True
False
False

B
True
False
True
False

Ayb
True
False
False
False

A
True
True
False
False

B
True
False
True
False

AoB
True
True
True
False

Funciones Internas:
Las operaciones que se requieren en los programas exigen en numerosas ocasiones, adems de las operaciones
aritmticas, ya tratadas, un nmero determinados de operadores especiales que se denominan funciones internas ,
incorporadas o estndares.
Funcin
Abs(x)
Arctan(x)
Cos(x)
Exp(x)
Ln(x)
Log10(x)
Redondeo(x) = round(x)
Sen(x) = Sin(x)
Cuadrado(x) = sqr(x)
Raiz2(x) = sqrt(x)
Trunc(x)

Funciones internas
Descripcin
Tipo de Argumento
Valor Absoluto de x
Entero o Real
Arco tangente de x
Entero o Real
Coseno de x
Entero o Real
Exponencial de x
Entero o Real
Logaritmo neperiano de x
Entero o Real
Logaritmo decimal de x
Entero o Real
Redondeo de x
Real
Seno de x
Entero o Real
Cuadrado de x
Entero o Real
Raz cuadrada de x
Entero o Real
Truncamiento de x
Real

Programacin en Pascal 7.0

Resultado
Entero o Real
Real
Real
Real
Real
Real
Real
Real
Entero o Real
Real
Real

Elaborado por: Lic. Carlos Lennin Quiroz P.


9

Programar es el arte de planear y crear soluciones lgicas a los problemas planteados

OPERACIONES DE ASIGNACIN:
Es el modo de darle valores a una variable. Los operadores de asignacin se representan con el smbolo u
operador (). Las operaciones de asignacin se conocen como instrucciones o sentencias de asignacin
cuando se refieren a un lenguaje de programacin.
E formato general de una operacin de asignacin es:
Nombre de la variable expresin
La flecha de asignacin se sustituye en otros lenguajes por:
= (Basic y Fortran)
: = (Pascal, C, C++)
Ejemplo:
A5 (significa que a la variable A, se e ha asignado el valor de 5)
Nota: el valor de asignacin es destructivo, ya que si la variable tiene un valor inicial, se pierde y se asigna el
nuevo valor.
Ejemplo:
A25
A25+3
A28 (El valor de la variable A ser de 28, ya que se pierden los primeros valores).
Las operaciones de asignacin se clasifican segn sea el tipo de expresiones en:
Asignacin aritmtica:
Ter114.5 + 8
Ter20.75 * 3.4
CocienteTer1 / Ter2
Cociente (14.5 + 8) / (0.75 * 3.4)
Cociente8.823529
Asignacin Lgica:
M8 < 5
NM o (7 <= 12)

M=false
N=true

las variables toman los siguientes valores.

Asignacin de Caracteres o de Cadena de Caracteres:


xP
x 20 de Marzo de 2006
La siguiente expresin la expresaremos en forma algortmica:
X1= -b+(b2-4ac)
2a
Forma algortmica:
X1= [-b+sqrt(sqr(b)-4*a*c)] / 2*a

Programacin en Pascal 7.0

Elaborado por: Lic. Carlos Lennin Quiroz P.


10

Programar es el arte de planear y crear soluciones lgicas a los problemas planteados

REPRESENTACIN GRFICA DE LOS ALGORITMOS


Se debe de utilizar algn mtodo que permita independizar dicho algoritmo del lenguaje de programacin
elegido. Ello permitir que un algoritmo pueda ser codificado indistintamente en cualquier lenguaje. Para
conseguir este objeto se precisa que el algoritmo sea representado grfica o numricamente, de modo que las
sucesivas acciones no dependan de la sintaxis de ningn lenguaje de programacin, sino que la descripcin
pueda servir fcilmente para su transformacin en un programa, es decir, su codificacin.
Los mtodos usuales para representar un algoritmo son:
1.
2.
3.
4.
5.

Diagrama de Flujo.
Diagrama N-S (Nassi- Schneiderman).
Lenguajes de especificacin del algoritmo: Pseudo cdigo
Lenguaje Espaol
Frmulas Matemticas

Diagrama de flujo:
Conocidos como (Flowchart) es una de las tcnicas de representacin ms antiguas y a la vez ms utilizadas,
aunque su empleo a disminuido considerablemente, sobre todo desde la aparicin de lenguajes de programacin
estructurados. Un diagrama de flujo es un diagrama que utiliza smbolos (cajas) estndares, y que tienen los
pasos del algoritmo escritos en cajas unidas por flechas, denominadas lneas de flujo, que indican la secuencia en
que se deben ejecutar.
Principales smbolos usados en los diagramas de flujos:
Smbolos principales

Funcin
Terminal (representa el inicio y el final de un programa).
Entrada/salida (cualquier tipo de instruccin de datos desde los perifricos
(entrada), o registros de las informacin procesada un perifrico (salida)).
Proceso (Cualquier tipo de operacin que pueda originar cambio de valor,
formato o posicin de la informacin almacenada en memoria, operaciones
aritmticas, etc.).
Decisin (indica las operaciones lgicas o de comparacin entre datos) tiene
por lo general dos respuestas o si o no.

Decisin mltiple (en funcin del resultado de la comparacin se seguir uno


de los diferentes caminos de acuerdo con dicho resultado).

Programacin en Pascal 7.0

Elaborado por: Lic. Carlos Lennin Quiroz P.


11

Programar es el arte de planear y crear soluciones lgicas a los problemas planteados


Conector (Sirve para enlazar dos partes cualesquiera de un programa a travs
de un conector en la salida y otro conector en la entrada. Se refiere a la
conexin en la misma pgina del diagrama).
Indicador de direccin o lnea de flujo indica el sentido de ejecucin de las
operaciones
Lnea conectora (sirve de unin entre dos smbolos).

Conector (Conexin entre dos puntos del organigrama situado en pginas


diferentes).

Llamada a subrutina a un proceso determinado, recibe una llamada del


programa principal, realiza su tarea y regresa, al terminar al programa
principal.

Pantalla (Se utiliza en ocasiones en lugar del smbolo de E/S).

Impresora (se utiliza en ocasiones en lugar del smbolo de E/S).

Teclado (Se utilaza en ocasiones en lugar del smbolo de E/S).


Comentario (Se utiliza para aadir comentarios clasificados a otros
smbolos del diagrama de flujo, se puede dibujar a cualquier lado del
smbolo).

Programacin en Pascal 7.0

Elaborado por: Lic. Carlos Lennin Quiroz P.


12

Programar es el arte de planear y crear soluciones lgicas a los problemas planteados

Ejemplo No 1
Diagrama de flujo:
Realizar un diagrama de flujo que represente la solucin de un programa que deduce el salario neto de un
trabajador a partir de la lectura del nombre, horas trabajadas, precio por hora, y sabiendo que los impuestos
aplicados son del 25% sobre salario bruto.
Inicio

Leer (read)
Nombre, horas,
Precio_hora

Sal_bruto horas *Precio_hora

Tax 0.25 * sal_bruto

Sal_neto sal_bruto - tax

Escribir (write)
Nombre, sal_bruto,
Tax, sal_neto

Fin

Programacin en Pascal 7.0

Elaborado por: Lic. Carlos Lennin Quiroz P.


13

Programar es el arte de planear y crear soluciones lgicas a los problemas planteados

Ejemplo No 2
Calcular la medida de una serie de nmeros positivos, suponiendo que los dems datos se leen desde una
terminal (PC). Un valor de cero (como entrada) indicar que se ha alcanzado el final de la serie de los nmeros
positivos.
Pseudos cdigo:
1. Inicializar contador de nmeros CONTADOR y variable de suma, SUMA.
2. Leer un nmero.
3. Si el nmero ledo es cero:
Calcular la media;
Imprimir la media;
(mensaje NO EXISTE NINGUNA MEDIA)
Fin del Proceso;
4. Si el nmero ledo no es cero:
Calcular la suma;
Incrementar en uno el contador de nmeros;
Ir al paso No. 2
5. Fin del proceso.
Diagrama de flujo:

Inicio

Contador 0
Suma 0

Leer (Read)
DATOS

NO
Dato <>0
Si
Contador Contador +1
Suma Suma + Dato

Media Suma / Contador

Imprimir MEDIA

Fin

Programacin en Pascal 7.0

Elaborado por: Lic. Carlos Lennin Quiroz P.


14

Programar es el arte de planear y crear soluciones lgicas a los problemas planteados

DIAGRAMA DE NASSI-SCHENEIDERMAN (N-S)


El diagrama N-S, tambin conocido como diagrama de chapn, es como un diagrama de lujos en el que se omiten
las flechas de unin y las cajas son continuas. Las acciones sucesivas se escriben en cajas sucesivas, como en los
diagramas de flujo, se pueden escribir diferentes acciones en una caja.
Ejemplo:
Un algoritmo se representa en la siguiente forma
Nombre del Algoritmo
<Accin 1>
<Accin 2>
<Accin 3>

Leer
Nombre, Horas, Precio
Calcular
Salario Horas * Precio
Calcular
Impuestos 0.25 * Salario
Calcular
Neto Salario Impuestos
Escribir
Nombre, Salario, Impuestos, Neto
Fin

<Accin N>
Fin

Las estructuras booleanas o condicionales se representan de la siguiente manera:


Diagrama de Flujo:

Condici
n?
Accin 1

Accin 2

Diagrama de Nassi-Scheneiderman (N-S):

Condicin?
Si

<ACCIONES>

Programacin en Pascal 7.0

No

<ACCIONES>

Elaborado por: Lic. Carlos Lennin Quiroz P.


15

Programar es el arte de planear y crear soluciones lgicas a los problemas planteados

ESTRUCTURA GENERAL DE UN PROGRAMA


Un programa de computadora es un conjunto de instrucciones (ordenes dadas a la mquina) que producirn la
ejecucin de una determinada tarea. En esencia un programa es un medio para conseguir un fin. Por
consiguiente, un proceso de solucin de problemas y desarrollo de un programa requiere las siguientes fases:
1.
2.

3.
4.
5.
6.

Definicin y anlisis de problema.


Diseo del algoritmo.
a. Diagrama de flujo.
b. Diagrama N-S.
c. Pseudos Cdigo.
codificacin del programa.
Depuracin y verificacin del programa.
Documentacin.
Mantenimiento.

Conceptualmente, un programa puede ser considerado como una caja negra. La caja negra o l algoritmo de
resolucin, en realidad, es el conjunto de cdigos que transforman entradas del programa (datos) en salidas
(resultados).

Entrada

Programa
(Algoritmo de
Resolucin)

Salida

INSTRUCCIONES Y TIPOS DE INSTRUCCIONES:


Las instrucciones se deben de escribir y posteriormente almacenarlas en memoria en el mismo orden en que se
han de ejecutar, es decir en secuencia. Un programa puede ser lineal o no lineal.
Un programa es lineal si las instrucciones se ejecutan secuencialmente, sin bifurcaciones, dediciones ni
comparaciones. En el caso de los algoritmos las instrucciones se conocen como acciones.
Programa

Algoritmo

Instruccin 1
Instruccin 2
Instruccin 3

instruccin n

Accin 1
Accin 2
Accin 3

Accin n

Un programa no lineal es cuando se interrumpe la secuencia mediante instrucciones de bifurcacin (ciclos).


Accin 1
Accin 2
Accin 3

Accin x

Programacin
Accin n

en Pascal 7.0

Elaborado por: Lic. Carlos Lennin Quiroz P.


16

Programar es el arte de planear y crear soluciones lgicas a los problemas planteados

TIPOS DE INSTRUCCIONES:
Las instrucciones disponibles en un lenguaje de programacin dependen del tipo de lenguaje. Las instrucciones
bsicas son independientes del lenguaje. La clasificacin ms usual, desde el punto de vista anterior es:
1.
2.
3.
4.
5.

Instruccin de inicio.
instruccin de asignacin.
instruccin de lectura.
instruccin de escritura.
instruccin de bifurcacin.

Instruccin de asignacin:
Ejemplo:
A80 (la variable a toma el valor de 80)
A12
BA
CB

Cul es el valor que toma la variable C?


C=12

Antes de ejecutar las instrucciones el valor de las variables A, B, C, es indeterminado. Si se desea darle un valor
inicial, habr que hacerlo explcitamente, incluso cuando este valor sea cero (0). Es decir habr que definir
inicialmente las instrucciones:
A0
B0
C0
INSTRUCCIONES BSICAS:
Tipo de Instrucciones
Comienzo de proceso
Fin de proceso
Entrada (lectura)
Salida (escritura)
Asignacin

Pseudo Cdigo (ingles)


Begin
End
Read
Write
A5

Pseudo cdigo (espaol)


Inicio
Fin
Leer
Escribir
A=5

Instruccin de Lectura de Datos (Entrada)


Esta instruccin lee datos de un dispositivo de entrada
Ejemplo:
Cul es la salida de la siguiente instruccin?
Read(Numero, Horas, Tasa)
Si desde el teclado escribimos la siguiente secuencia: 12325, 32, 1200.
Le hemos asignado a las variables esos valores y equivaldra a la ejecucin de las instrucciones:

Programacin en Pascal 7.0

Elaborado por: Lic. Carlos Lennin Quiroz P.


17

Programar es el arte de planear y crear soluciones lgicas a los problemas planteados

Numero12325
Horas32
Tasa1200

Instrucciones De Escritura De Resultados (Salida)


Estas instrucciones se escriben en un dispositivo de salida.
Ejemplo:
A100
B200
C300
Write(A, B, C) En la pantalla o impresora tendremos: 100, 200, 300
Instrucciones de bifurcacin:
El desarrollo inicial de un programa se interrumpe cuando se ejecuta una bifurcacin. Las bifurcaciones pueden
ser, segn el punto del programa a donde se bifurca, hacia delante o hacia atrs:
Bifurcacin Adelante
Positiva

Instruccin 1
Instruccin 2
Instruccin 3

Instruccin x

ltima Instruccin

Bifurcacin Atrs
Negativa

Instruccin 1
Instruccin 2
Instruccin 3

Instruccin x

ltima Instruccin

Las bifurcaciones en el flujo de un programa pueden realizarse de un modo incondicional o condicional.


Bifurcacin Incondicional: La bifurcacin se realiza siempre que el flujo del programa pasa por la instruccin
sin necesidad del cumplimento de ninguna condicin.

ACCIN 1
ACCIN 2
ACCIN 3
Bifurcacin Condicional: Depende del cumplimiento de una determinada condicin. Si se cumple, el flujo
sigue ejecutando la accin F1. Si no se cumple, se ejecuta de accin F2.

Programacin en Pascal 7.0

Elaborado por: Lic. Carlos Lennin Quiroz P.


18

Programar es el arte de planear y crear soluciones lgicas a los problemas planteados

Condici
n?
Accin F1

Accin F2

ELEMENTOS BSICOS DE UN PROGRAMA


En programacin se deben de separar las diferencias entre el diseo del algoritmo y su implementacin en un
leguaje especfico (PACAL). Por ello, se debe distinguir claramente entre los conceptos de programacin y el
medio en que ellos se implementan en un lenguaje especfico. Sin embargo, una vez que se comprendan los
conceptos de programacin, como utilizarlos, la enseanza de un nuevo lenguaje es relativamente fcil.
Los lenguajes de programacin, tienen elementos bsicos que se utilizan como bloques constructivos, as como
reglas para las que esos elementos se combinan. Estas reglas se denominan Sintaxis del lenguaje. Solamente las
instrucciones sintcticamente correctas pueden ser interpretadas por la computadora y los programas que
contengan errores de sintaxis son rechazados por la mquina.
Los elementos bsicos constitutivos de un programa o algoritmo son:
1.
2.
3.
4.
5.
6.
7.

Palabras reservadas (Inicio, Fin Si-Entonces,, etc.).


Identificadores (Nombre de la variable esencialmente).
Caracteres especiales (Coma, Apstrofe, etc.).
Constantes.
Variables.
Expresiones.
Instrucciones.

Adems de estos elementos bsicos, existen otros elementos que forman parte de los programas, cuya
compresin y funcionamiento ser vital para el correcto diseo de un algoritmo y naturalmente la codificacin
del programa.
Estos elementos son:
1.
2.
3.
4.
5.

Bucles.
contadores.
Acumuladores.
Interruptores.
Estructuras.
a. Secuenciales.
b. Selectivas.
c. Repetitivas.

El amplio conocimiento de todos los elementos de programacin y el modo de su integracin en los programas
constituyen las tcnicas de programacin que todo buen programador debe conocer.
Bucles: o lazo (loop), es un segmento de algoritmo o programa, cuyas instrucciones se repiten un nmero
determinado de veces mientras se cumpla una determinada condicin (Existe o es verdad la condicin). Se debe
de establecer un mecanismo para determinar las tareas repetitivas. Este mecanismo es una condicin que puede
ser verdadera o falsa y que comprueba una vez a cada paso o iteracin del bucle (Total de instrucciones que se
repiten en el bucle).
Un bucle consta de tres partes:
1. Decisin.
2. Cuerpo del bucle.

Programacin en Pascal 7.0

Elaborado por: Lic. Carlos Lennin Quiroz P.


19

Programar es el arte de planear y crear soluciones lgicas a los problemas planteados


3.

Salida del bucle.

Ejemplos:
Bucle infinito
Inici
o
Suma = 0
Leer N

SumaSuma + N

(1)

(2)

Escribir Suma
(3)

Las instrucciones 1, 2, 3 se ejecutan de manera infinita, pues no existe una salida del bucle, al no cumplirse una
determinada condicin.
Bucle finito
Inici
o
Suma= 0
Read
N

If N= 0
Then

Suma= Suma + N

Programacin en Pascal 7.0

Write Suma

Elaborado por: Lic. Carlos Lennin Quiroz P.


20

Programar es el arte de planear y crear soluciones lgicas a los problemas planteados

Fin

Bucles anidados
En un algoritmo pueden existir varios bucles. Los bucles pueden ser anidados o Independientes.
Los bucles son anidados: cuando estn dispuestos de tal modo que unos son interiores a otros.
Los bucles son independientes: Cuando son externos unos a otros.
Ejemplo:
Bucles
Independientes

Bucles
Anidados

Bucles
Cruzados

BEGIN

BEGIN

BEGIN

Bucle A

Bucle A

Bucle A

Bucle B

Bucle B

Bucle B

Bucle C

Bucle C

End

Bucle D
End
End

Contadores:
Los procesos repetitivos son la base del uso de las computadoras. En estos procesos se necesitan normalmente
contar los sucesos o acciones internas del bucle, como pueden ser elementos de un fichero, el nmero de
iteraciones a realizar pro el bucle, etc. Una forma de controlar un bucle es mediante un contador.
Contador: Es una variable cuyo valor se incrementa o decrementa en cantidad constante en cada iteracin.
Ejemplo:
Begindesea realizar cien copias de su informe de ventas del mes en curso. Cul ser el diagrama N-S
Una empresa
que resolver este problema?
CONT= 1
Read CONT
CONT > 100
No

Programacin en Pascal 7.0


Print Copia
CONT = CONT + 1

Si

Elaborado por: Lic. Carlos Lennin Quiroz P.


21 End

Programar es el arte de planear y crear soluciones lgicas a los problemas planteados

Uso de unidades:
Las unidades son aquellos bloques de cdigos que proporcionan funciones y procedimientos que TURBO
PASCAL trae incluidas en el archivo TURBO.TPL (Turbo Pascal Librarles), siempre se invocan procedidas por
la palabra reservada Uses;
Esta serie de herramientas son las que nos permiten construir poderosas aplicaciones como juegos, simulaciones
o una que otro viruscito.
Ejemplo:
Uses crt;
Uses graph;
Uses dos;
Unidades incluidas

CRT (Catode Ray Tube):


Esta unidad provee rutinas de control sobre el modo de la pantalla, Cdigos extendidos de
teclado, Colores, Ventanas y sonidos.

GRAPH:
Esta es una de las ms divertidas unidades, pues con la diversidad de funciones y
procedimientos que provee, sumados a unos sencillos algoritmos permite hacer desde una
simple lnea o un circulo hasta una simulacin matemtica o un videojuego como Pacman o
Tetrix.

DOS:
Esta unidad nos brinda las rutinas necesarias para interactuar con el sistema operativo DOS.
Permitiendo tomar desde la hora o fecha del sistema hasta ejecutar programas o comandos.

PRNTER:
Permite imprimir lneas y archivos de tipo texto, si se quieren imprimir grficos hay que
recurrir a una serie de truquitos. Aunque hay muchas ms unidades, os aseguro que para
aprender a programar en Turbo Pascal solo se necesitan las cuatro anteriores, eso s, teniendo
en cuenta que el programado puede crear sus propias unidades.

Variables: una variable es un nombre o identificador que representa a una porcin de memoria donde se
almacenan temporalmente los datos que cambiarn durante la ejecucin del programa; para definir una variable
(ya sea en el programa principal, en un procedimiento, una funcin, o una unidad) se debe escribir la palabra
reservada VAR en la seccin de definicin de variables, luego el nombre o identificador (este no puede ser una
palabra reservada y se aconseja sea relacionado con la tarea que va a desempear), y por ltimo el tipo de datos
al que va a pertenecer.
Sintaxis:

Programacin en Pascal 7.0

Elaborado por: Lic. Carlos Lennin Quiroz P.


22

Programar es el arte de planear y crear soluciones lgicas a los problemas planteados


VAR
Nombre_Variable : Tipo_de_dato

Gua de sintaxis de Turbo Pascal:


Palabras Reservadas de Pascal:
And, end, nil, set, array, file, not, then, begin, for, of, to, case, function, or, type, const, goto, packed, until, div, if,
procedure, var, do, in, program, while, downto, label, record, with, else, mod, repeat, string, xor, unit, uses, crt,
object, implementation, in, iherited, inline, interface, asm, constructor.
Comentarios:
{Cualquier texto encerrado entre llaves}
(*Cualquier texto encerrado entre parntesis y asteriscos*)

TIPOS DE DATOS EN PASCAL:


Booleanos (lgicos):
Trae
False

Nmeros Enteros:
Byte
Integer
LongInt
ShortInt
Word

0
-32768
-2147483648
-128
0

255
32767
2147483647
127
65535

1.7 x 1038
3.4 x 1038
1.7 x 10308
1.1 x 104932
2 63 - 1

Nmeros Reales:
Real
Single
Double
Extended
Comp.

29 x 10 -39
1.5 x 10 -45
5.4 x 10 -324
3.4 x 10 -4932
-2 63 + 1

Char:
Cualquier carcter ACCII.
Cadenas:

Programacin en Pascal 7.0

Elaborado por: Lic. Carlos Lennin Quiroz P.


23

Programar es el arte de planear y crear soluciones lgicas a los problemas planteados


String (Secuencia de hasta 255 caracteres ASCII).
Punteros:
Pointer (Direccin de un elemento dato, procedimiento o funcin)

TIPOS DE DATOS DEFINIDOS EN TURBO PASCAL


Nombre Rango
Integer
Word
ShortInt
Byte
LongInt

Nombre Rango
Real
Single
Double
Extended
Comp.

TIPOS ENTEROS
(Desde Hasta)
Tamao (Bytes)
-32.768 a 32.767
2
0 a 65535
2
-127 a 127
1
0 a 255
1
-2.147.483.648 a
4
2.147.483.647

TIPOS REALES
(Desde hasta)
Tamao (Bytes)
2,9E-39 a 1,7E38
6
1,5E-45 a 3,4E38
4
5,0E-307 a 1,7E307
8
1,9E-4932 a 1,1E493210
10
-9,2E18 a 9,2E18
8

Formato
Entero con Signo
Entero sin Signo
Entero Corto con Signo
Entero Corto sin Signo
Entero Largo con Signo

Cifras Significativas
11-12
6 -7
15-16
19-20
18-19

Tipo carcter (Char):


El tipo Char depende del cdigo de caracteres empleados por la mquina. El ms utilizado es el cdigo ASCII.
Una variable o constante tipo Char puede contener un solo carcter especificado entre apstrofes.
Ejemplo:
a
M
Tipo Lgico (Boolean):
Puede tomar dos valores: Trae (verdadero) y False (falso). El identificador estndar boolean define una variable
de este tipo.
Tipo Cadena (String):
Una cadena string es una secuencia de caracteres que tiene una longitud mxima de 255 caracteres. Los
caracteres que componen la cadena se delimitan con apstrofes.
Ejemplo:
abcd longitud de la cadena es 4.

Cadena vaca o nula.


La funcin length proporciona la longitud lgica de una cadena de caracteres.
Ejemplo:
Cad1:=ejemplo;

Programacin en Pascal 7.0

Elaborado por: Lic. Carlos Lennin Quiroz P.


24

Programar es el arte de planear y crear soluciones lgicas a los problemas planteados


Para referirnos al primer elemento podramos cad[1] que sera la letra e.
Longitud:=length(cad1);
La variable longitud tomar el valor de 7.

Funciones de tratamiento de cadenas:


COPY: Extrae una cadena de caracteres de otra cadena de caracteres.
Ejemplo:

Copy(cad1, po, num);

Cad1: Nombre de la cadena.


Po: Posicin del carcter a extraer.
Num: Nmero de caracteres que se extraen.
Po y num deben ser entero.
POS: Determina si una cadena es subcadena de otra, en caso afirmativo devuelve la posicin donde comienza la
subcadena en caso negativo devolvera cero.
Ejemplo:

POS(subcadena, cadena);

DELETE: Suprime el nmero de caracteres que le digamos de una cadena a partir de la posicin que le
indiquemos.
Ejemplo:

DELETE(cad, pos, num);

Cad: Nombre de la cadena.


Po: Posicin del carcter a borrar.
Num: Nmero de caracteres que se borrarn.
Po y num deben ser entero.
INSERT: Inserta una cadena de caracteres en otra a partir de una posicin dada.
Ejemplo:

INSERT(subcadena, destino, posicin);

Subcadena: Cadena a insertar.


Destino: cadena donde se va a insertar.
Posicin: Lugar a partir del cual se va a insertar.
UPCASE: Devuelve el carcter en mayscula.
Ejemplo:

UPCASE(x);

Donde x es una variable de tipo char.


STR: Convierte un valor numrico a la correspondiente cadena de caracteres que lo representa.
Ejemplo:

STR(valor, cadena);

OPERACIONES DE ENTRADA/SALIDA
Sentencia de salida o escritura:

Programacin en Pascal 7.0

Elaborado por: Lic. Carlos Lennin Quiroz P.


25

Programar es el arte de planear y crear soluciones lgicas a los problemas planteados


Write o Writeln (NombreArchivo, Nomvar1, Nomvar2,, NomvarN);
Realizan conversin de tipos de datos antes de que la salida llegue al archivo de salida. Las variables o
argumentos de esta sentencia pueden ser: expresiones, constantes, o variables numricas, de carcter, de cadena o
booleanas.
Formatos:
Write o Writeln (argumento);
Write o Writeln (argumento: m);
Write o Writeln (argumento:m:n);
Donde m es el nmero de caracteres que ocupar la salida ajustando la formacin a la derecha, y n slo se
emplea cuando el argumento es numrico real indica el nmero de caracteres que ocupar en la salida la parte
decimal.
Ejemplo:
Mostrar la salida formateada para nmeros decimales.
Program formato;
Uses crt;
Var
N : real;
Begin
Clrscr;
N:= 13;
Writeln(Formato por defecto , n);
writeln(Anchura 8:1, n:8:1);
writeln(Anchura 8:3 , n:8:3);
readln;
end.
Ejecucin:
Formato Por Defecto __________
Anchura 8:1 _________________
Anchura 8:3 _________________

3.33333333335E-01
0.3
0.333

Read o Readln (NombreArchivo, Nomvar1, Nomvar2,, NomvarN);

OPERADORES ARITMTICOS
Operador
+
*
/
Div
Mod

Programacin en Pascal 7.0

Funcin
Operador unario. Invierte el signo.
Operador binario suma.
Operador binario resta.
Operador binario producto.
Operador binario divisin real.
Operador binario divisin entera
Operador binario resto entero.

Elaborado por: Lic. Carlos Lennin Quiroz P.


26

Programar es el arte de planear y crear soluciones lgicas a los problemas planteados

FUNCIONES PREDEFINIDAS
Instruccin

Funcin

Abs(x)

Proporciona el valor absoluto de una variable numrica x.

ArcTan(x)

El arco cuya tangente es x.

Chr(x)

Devuelve el carcter ASCII de un entero entre 0 y 255.

Cos(x)

Proporciona el valor del coseno de x.

Exp(x)

La exponencial de x (ex).

Frac(x)

Parte decimal de x.

Int(x)

Parte entera de x.

Ln(x)

Logaritmo neperiano de x.

Odd(x)

True si x es impar, y false si es par.

Ord(x)

Ordinal de una variable de tipo ordinal x.

Pred(x)

Ordinal anterior a la variable ordinal x.

Round(x)

Entero ms prximo al valor x.

Succ(x)

Ordinal siguiente a la variable ordinal x.

Sin(x)

Seno de x.

Sqr(x)

Cuadrado de x.

Sqrt(x)

Raz cuadrada de x, para x >=0.

Trunc(x)

Parte entera de x.

Programacin en Pascal 7.0

Elaborado por: Lic. Carlos Lennin Quiroz P.


27

Programar es el arte de planear y crear soluciones lgicas a los problemas planteados

ESTRUCTURAS DE CONTROL:
Son aquellas que determinan que instrucciones deben ejecutarse y que nmero de veces. Existen dos tipos de
estructuras de control: Alternativas o de seleccin y Repetitivas o de iteracin.
ESTRUCTURAS ALTERNATIVAS:
Son aquellas que bifurcan o dirigen la ejecucin de un programa hacia un grupo de sentencias u otro
dependiendo del resultado de una condicin. Las dos sentencias alternativas en Turbo Pascal son:
Sentencia alternativa simple IF - THEN - ELSE:
FORMATO:
If (expresin lgica o booleana) Then
Begin
Sentencia 1 (Simple o compuesta)
Else
Sentencia 2 (Simple o compuesta);
End;
Readkey;
End.
Ejemplo:
If n>0 Then
Writeln(Nmero positivo: )
Else
Writeln(Nmero negativo: );
End;
Sentencia alternativa mltiple CASE OF:
FORMATO:
Case(Expresin o variable) of
(lista de constantes1):(sentencia1);
(lista de constantes2):(sentencia2);
(lista de constantes3):(sentencia3);
.
(lista de constantesN):(sentenciaN);
Else
(sentencia);
.
End;

Programacin en Pascal 7.0

Elaborado por: Lic. Carlos Lennin Quiroz P.


28

Programar es el arte de planear y crear soluciones lgicas a los problemas planteados

Ejemplo:
Program menu;
Var
Numerodia : integer;
Begin
Write(Introduzca el ordinal de un da laborable de la semana: );
Readln(numerodia);
Write(Hoy es: );
IF numerodia < = 7 THEN
CASE numerodia OF
1 : writeln(Domingo);
2 : writeln(Lunes);
3 : writeln(Martes);
4 : writeln(Mircoles);
5 : writeln(Jueves);
6 : writeln(Viernes);
Else
Writeln(Domingo no es da laborable);
End
Else
Writeln(Da no valido de la semana);
Readln;
End.
ESTRUCTURAS REPETITIVAS:
Son aquellas que crean un bucle con la ejecucin de un programa respecto de un conjunto de sentencia en
funcin de una condicin. Las tres funciones repetitivas en Turbo Pascal son:

Sentencia WHILE DO
Sentencia REPEAT UNTIL
Sentencia FOR - DO

En la mayora de los programas se necesita repetir bloques de instrucciones tantas veces como lo requiera, la
vida diaria de cualquier persona, animal o cosa, esta repleta de ejemplo de ciclos, las computadoras solo se han
encargado de copiarlos.
Podemos citar la accin que se produce cuando ingieres un delicioso Sndwich: lo muerdes y lo muerdes, y as
repites el proceso hasta que este se acaba; en un equipo de sonido si colocas un casete de msica y observas
detenidamente el movimiento giratorio de los engranajes, estos se repiten y se repiten hasta que la cinta se ha
rebobinado completamente o hasta que alguien la detiene, del mismo modo ocurre con los videojuegos que
practicas, podemos citar a MARIO BROS, aqu juegas hasta que se te acaban las vidas rescatas a la princesa.
Una forma de hacer un proceso repetitivo consiste en escribir tantas veces como se necesite las instrucciones a
utilizar, como ejemplo de ello cito un programa en el que se debe almacenar 5 nmeros en variables (5) de tipo
entero y despus sumarlos.

Programacin en Pascal 7.0

Elaborado por: Lic. Carlos Lennin Quiroz P.


29

Programar es el arte de planear y crear soluciones lgicas a los problemas planteados

Program Sin_ciclos;
Uses crt;
Var
v1, v2, v3, v4, v5: integer;
promedio: real;
begin
clrscr;
writeln(Lectura Sin Ciclos: );
write(Diguite Nmero: );
readln(v1);
write(Diguite Nmero: );
readln(v2);
write(Diguite Nmero: );
readln(v3);
write(Diguite Nmero: );
readln(v4);
write(Diguite Nmero: );
readln(v5);
suma:= v1+v2+v3+v4+v5;
promedio:= suma/5;
writeln(La suma= ,suma);
writeln(El promedio= ,promedio:0:2);
readkey;
end.

Este programa es demasiado ineficaz, pues


debe escribirse 5 veces el mismo mensaje, 5
veces la misma sentencia de lectura y
adems deben ser 5, ni ms ni menos para
solucionar este tipo de problemas se
inventaron los ciclos repetitivos.

En cada uno de estos ciclos daremos una solucin ms practica al ejemplo anterior, cabe destacar que todos
funcionan hasta que se cumplen con una condicin que es la encargada de hacer parar el ciclo y continuar con el
resto de instrucciones del programa.
Partes componentes de un ciclo:
La instruccin de decisin.
El cuerpo del ciclo.
La salida del ciclo

WHILE (Expresin a evaluar) DO


Begin
{Bloque de instrucciones}
end;

Los ciclos se pueden controlar de tres formas segn la estructura de decisin, la resolucin de problema y el
ciclo en si, estas son:
a) Ciclos controlados por contador con incremento fijo que no son de 1: estos ciclos son los ms similares
al ciclo FOR DO.
b) Ciclos controlados por centinelas. En los programas interactivos estos ciclos permiten que el operador
decida cuando dejara de ingresar informacin.
c)

Ciclos ms grandes controlados por funciones, esta forma de control de ciclos es conocida tambin
como: Ciclos controlados por tareas. Con esta clase de ciclos, el programador debe disear una
condicin para comprobar si la tarea ha sido terminada. A menudo, el programador, no puede prever
cuantas ejecuciones son necesarias.

Programacin en Pascal 7.0

Elaborado por: Lic. Carlos Lennin Quiroz P.


30

Programar es el arte de planear y crear soluciones lgicas a los problemas planteados

CICLO WHILE DO (MIENTRAS HAGA)


Este ejecuta una serie de instrucciones examinando la instruccin, si la condicin es verdadera, entonces ejecuta
las tareas del cuerpo del ciclo, luego, el control se pasa al inicio del ciclo para volver a comparar la condicin un
numero no determinado de veces hasta que la condicin establecida sea falsa. Si al comparar que la condicin es
falsa a primera vez, entonces el ciclo no se ejecutar. Tambin se puede hacer que trabaje de manera similar al
siclo FOR.

Mientras
Condicin

V
Tarea 1

Tarea 2

Tarea 3

Tarea n

Una de las ventajas del ciclo WHILE es que puede evaluar variables de muchos ms tipos que el FOR (recuerda
que este solo se puede utilizar con variables de tipo CARCTER Y ENTERAS) entre ellas desatacamos los
siguientes tipos STRING, BOOLEAN, INTEGER, REAL, ARREGLO.
El ciclo WHILE evala y despus ejecuta instrucciones. Si lleva ms de una instruccin necesitar tener un
BEGIN END.
SINTAXIS:
1) While (Expresin A Evaluara) Do
2) While (Expresin A Evaluar ) Do
Begin
{Bloque de instrucciones};
end;
Ciclo WHILE controlado por contador:
Utiliza un controlador con incremento fijo que puede ser o no de uno, este valor no podr ser del tipo real.
En esta forma el control de este
Ejemplo:

Programacin en Pascal 7.0

ciclo, cualquier valor que aparezca


en la condicin de WHILE, debe
Elaborado
haber recibido
por: Lic.un
Carlos
valorLennin
inicial Quiroz P.
31 antes de entrar al ciclo, y luego
dentro del ciclo modificarlo para
evitar ciclos infinitos.

Programar es el arte de planear y crear soluciones lgicas a los problemas planteados


N:= 100;
Cont:= 1;
While cont<= n do
Begin
Writeln(pasada por el ciclo nmero: ,cont);
Cont:= cont +1;
end;
Program ciclo_WHILE;
Const
N:= 5;
Var
suma,num: integer;
Promedio : real;
Begin
i:= 1; {notese que se debe de inicializar la variable}
suma:= 0;
While (i <= n) do
Begin
Write(Digite Nmero);
readln(num);
suma:= suma + num;
i:= i + 1;
{la variable controladora del ciclo se incrementa en su
end;
valor determinado, en este caso hemos escogido 1,
promedio:= suma/n;
pero podra ser otro}
writeln(La suma es: , suma);
writeln(El promedio es: , promedio);
readkey;
end.
Otro que imprime nmeros, pero este se incrementa de dos en dos:
Program ciclo_WHILE;
Var
Numero : integer;
Begin
Numero:= 1;
While numero <= 100 do
Begin
Writeln(numero);
Numero:= numero + 2;
End;
Readkey;
End.
Ciclo WHILE controlado por tareas:
En esta clase de ciclos el programador no puede prever cuantas ejecuciones son necesarias. Aqu se debe disear
una condicin para probar si la tarea ha sido terminada o no.
En la mayora de los casos el programador talvez quiera que la computadora siga ejecutando el cuerpo del ciclo
mientras falta por concluir alguna tarea. Se puede escribir as:
While tarea_no_terminada do
Begin
....

end;

Programacin en Pascal 7.0

Elaborado por: Lic. Carlos Lennin Quiroz P.


32

Programar es el arte de planear y crear soluciones lgicas a los problemas planteados

Por ejemplo podemos calcular la suma de los cuadrados (1 + 2 + 9 + 16 + 25 + ) hasta que la suma sea mayor
a los 1000.
En el siguiente programa deseamos encontrar un nmero cuyo cuadrado hace que la suma pase de 1000 y que
imprima la suma de ellos.

Program ciclo_while3;
Var
N,suma : integer;
Begin
N:= 0; suma:= 0;
While suma <= 1000 do
Begin
N:= N + 1;
suma:= suma + sqr(N);
end;
writeln(La suma empieza a pasar de MIL cuando: );
writeln(Se agrega , N , Al cuadrado );
readkey;
end.
Ciclo WHILE controlado por centinelas:
En los programas interactivos estos ciclos permiten que el operador decida cuando dejar de ingresar
informacin. Tambin para indicar el final de una lista de nmeros o de cualquier dato. Ejemplo:
1.
2.

Preguntar al usuario si continuar la operacin o no, usando como respuesta S o N.


Supongamos que deseamos sumar una lista de nmeros y parar de ingresar usando algn valor (el
centinela -99).

Program WHILE_con_centinela;
Uses crt;
Var
N, c,suma : integer;
P : real;
Begin
Clrscr;
N:= 0; suma:= 0;
Writeln(Escriba las notas a promediar o -99 para parar:);
Readln(N);
c:= 1;
While (N <> -99) do
Begin
Suma:= suma + N;
Writeln(Escribe las notas a promediar o -99 para parar: );
Realdn(N);
Inc(c);
End;
P:= suma / c;
Writeln(El promedio es = , P:0:2);
Readkey;
End.

Programacin en Pascal 7.0

Elaborado por: Lic. Carlos Lennin Quiroz P.


33

Programar es el arte de planear y crear soluciones lgicas a los problemas planteados

CICLO REPEAT UNTIL (REPITA HASTA):


El ciclo REPEAT acta de manera similar al ciclo llamado WHILE DO, con la pequea diferencia de que en
este se ejecutan las instrucciones y despus se evala la condicin.
Ojo: Este no necesita
BEGIN ni END, aunque
No hay problemas si se los
Colocas.

Tarea 1

Tarea 2

SINTAXIS:
repeat
{bloque de instrucciones}

Tarea n
until

(expresin a evaluar)

V
Repetir
Condicin
F

Cmo funciona?
La primera vez se ejecuta el cuerpo del ciclo o bloque de instrucciones, luego se comprueba la condicin
UNTIL. Si la condicin es falsa se vuelve a ejecutar todo el ciclo y comprueba nuevamente la condicin, y as
repetidamente hasta que la condicin sea verdadera. Este se caracteriza por ejecutarse al menos una vez.

Ciclo REPEAT UNTIL controlado por contador:


Aqu la condicin UNTIL sera: UNTIL variable_de_control > valor_final
Note que con ciclo WHILE se escribira as:
WHILE variable_de_control <= valor_final,

Programacin en Pascal 7.0

Elaborado por: Lic. Carlos Lennin Quiroz P.


34

Programar es el arte de planear y crear soluciones lgicas a los problemas planteados

Ejemplo:
Program cilo_REPEAT_UNTIL;
Uses crt;
i:= 1;
Const
repeat
N=5;
Var
write(i);
Num, suma, i : integer;
i:= i + 1;
Promedio : real;
until
i
> 9;
Begin
writeln(Haga
el programa completo);
Clrscr;
suma:= 0;
i:= 0; {Ntese que primero se debe inicializar la variable}
repeat
i:= i +1; {La variable controladora se incrementa en un valor determinado, en este caso hemos
Escogidos 1, pero podra ser otro}
Write(Digite Nmero: );
Readln(Num);
suma:= suma + num;
until (i >= N);
Promedio:= suma / N;
Writeln(La suma es = , suma);
Writeln(El promedio es = , Promedio:0:2);
Readkey;
End.

Otro ejemplo con ciclo repeat, este imprime nmeros de 5 en 5:


Program ciclo_Repeat_Until2;
Var
Numero : integer;
Begin
Numero:= 1;
Repeat
Writeln(Numero);
Numero:= Numero + 5;
Until Numero = 200;
Readkey;
End.

Programacin en Pascal 7.0

Elaborado por: Lic. Carlos Lennin Quiroz P.


35

Programar es el arte de planear y crear soluciones lgicas a los problemas planteados

Ciclo REPEAT UNTIL controlado por Tarea:


El mismo mecanismo para controlar los ciclos WHILE con tareas es la misma que se aplica para el REPEAT
UNTIL, slo se respeta la parte sintctica., veamos el ejemplo:
Programa ciclo_REPEAT;
Var
N, suma : integer,
Begin
N:= 0;
Suma:= 0;
Repeat
N:= N + 1;
Suma:= Suma + sqr(N);
Until Suma > 1000;
Writeln(La suma empieza a pasar de 1000 cuando);
Writeln(Se agraga , N, Al cuadrado);
Readkey;
End.
Ciclo REPEAT UNTIL controlado con centinela:
Los ciclos REPEAT y WHILE permiten al usuario suspender el ingreso de datos cuando lo desee, por medio de
un centinela, el programa lo ilustra:
Program ciclo_Repeat;
Var
N,suma : integer;
Resp : char;
Begin
suma:= 0;
repeat
writeln(Digite un Nmero: );
readln(N);
suma:= suma + N;
writeln(Digite S para continuar o N para terminar: );
readln(Resp= N) or (Resp= n); {se puede escribir tambien as: Until
writeln(La suma es: , suma);
upcase(Resp)= N}
readkey;
end.

Ciclo FOR DO (PARA HACER):


Este ciclo ejecuta una instruccin o una serie de instrucciones un nmero especifico de veces (se conoce como
por adelantado), incrementando o decrementando una variable hasta un tope determinado.
El encabezado del ciclo determinar un nmero de veces que se ejecutar el cuerpo del ciclo. La variable
inmediatamente contigua a la palabra FOR se denota variable de control. En un ciclo FOR con una variable
numrica de control, esta de ser de tipo entero o carcter.

Programacin en Pascal 7.0

Elaborado por: Lic. Carlos Lennin Quiroz P.


36

Programar es el arte de planear y crear soluciones lgicas a los problemas planteados

NOTA: No se admiten variables de control de tipo real. Aunque una variable de control debe
Incrementarse o reducirse en pasos de 1, no es necesario empezar en 1.

i:= 1 to fin do

SISNTAXIS GENERAL

Tarea 1

FOR variable:= inicio to fin do


Begin
{Bloque de instrucciones}
end;

Tarea 2

Forma Incremental

Tarea n

FOR variable:= valor_Menor to valor_Mayor do


Begin
{Bloque de instrucciones}
end;

Lmite inferior,
siempre menor

Limite superior
siempre mayor

For i:= 1 to 10 do
Begin

Nunca debe
end;
asignrsele otro valor

en el cuerpo del ciclo


Forma Decremental:
FOR variable:= valor_Mayor to valor_Menor do
Begin
{Bloque de instrucciones}
end;
La variable controladora del ciclo es generalmente de tipo INTEGER, pero tambin se puede en algunas
ocasiones declarar de tipo carcter as:
FOR letras:= a to z do
Begin
Writeln(letras);
{En este ciclo se recorre el alfabeto de la a a la z de letra en letra }
End;

Programacin en Pascal 7.0

Elaborado por: Lic. Carlos Lennin Quiroz P.


37

Programar es el arte de planear y crear soluciones lgicas a los problemas planteados


Para calcular cuantas veces se ejecutar un ciclo FOR, utilizamos la siguiente frmula:
Lmite Superior Lmite Inferior + 1.
Si el lmite superior es igual al lmite inferior el ciclo se ejecutar solamente una vez.
Si el ciclo FOR DO tiene una sola instruccin no requiere BEGIN END, en caso contrario los lleva. Una de
las desventajas de este ciclo es que hasta que no se haya ejecutado el nmero de instrucciones determinado no se
detiene. Si alguna vez tienes un problema de este tipo debers recurrir a alguno de los otros dos: REPEAT
UNTIL o WHILE - DO.
Ejemplo: Para el clculo del factorial de un nmero, el segmento de programa se escribe as.
Fact:= 1;
For i:= 1 to n do
Fact:= fact * i;
Otro ejemplo:
Program ciclo_for;
Const
n=5;
var
num,suma : integer;
promedio : real;
begin
writeln(Lectura con ciclo FOR);
suma:= 0;
for i:= 1 to n do;
begin
write(Digite Nmero: );
readln(num);
suma:= suma + num;
end;
promedio:= suma / n;
writeln(Susma = , suma);
writeln(Promedio = , promedio);
readkey;
end.
Compara este programa con el diseado sin ciclos y veras la gran diferencia. Para mayor claridad, a continuacin
presento otros ejemplos, complalos y observa que es lo que hacen.
Program otro_ejemplo_ciclo_for;
Var
Numero : integer;
Begin
For numero:= 1 to 150 do
Writeln(numero); {Se imprime de forma incremental lnea a lnea desde el numero 1 hasta el 150}
Readkey;
End.
En el siguiente segmento de programa simulamos una tabla de multiplicar de 1 al 5 hasta 12;
For i:= 1 to 5 do
For i:= 1 to 12 do
Begin
Writeln(i, por , j, = , i*j);
End;

Programacin en Pascal 7.0

Elaborado por: Lic. Carlos Lennin Quiroz P.


38

Programar es el arte de planear y crear soluciones lgicas a los problemas planteados

Una segunda opcin del uso de For es con el DOWNTO


Lmite superior,
siempre mayor

Lmite inferior,
siempre menor

FOR i:= 10 DOWNTO 1 DO


begin

end;

Nunca debe
asignrsele otro
valor en el cuerpo del
ciclo

Otros ejemplos:
For i:= 0 downto-12 to
Begin
Z:= 2 * i +5;
Writeln(i= ,i, z= ,z);
End;
Program tercero_ejemlo_ciclo_for;
Var
numero : integer;
Begin
For numero:= 150 downto 1 do
Writeln(numero); {Se imprime de forma decremental lnea a lnea desde el nmero 150}
Readkey;
End.
En el programa a continuacin encontramos el mayor de 5 nmeros:

Program mayor_de_5;
Var
MayorAhora,i,num : integer;
Begin
Write(Digite el primer nmero: );
Readln(MayorAhora);
For i:= 2 to 5 do
begin
write(Digite el Nmero: );
readln(num);
if (num) > MayorAhora then
MayorAhora:= num;
End;
Write(El nmero mayor es: ,MayorAhora);
Readkey;
End.

Programacin en Pascal 7.0

Elaborado por: Lic. Carlos Lennin Quiroz P.


39

Programar es el arte de planear y crear soluciones lgicas a los problemas planteados

Program for_anidados;
Var
Letra, ultimaletra : char;
Begin
For ultimaletra:= Z downto A do
begin
for letra:= ultimaletra downto A do
write(letra);
writeln;
end;
readln; {para visualizarlo en la pantalla}
end.

CUANDO UTILIZAR CICLOS WHILE, REPEAT / UNTIL, FOR


De lo expuesto sobre los tres ciclos se deduce que, segn el tipo de aplicacin, una de las estructuras de control
ser la ms idnea. Para ayudarlos a la eleccin le daremos unas reglas prcticas que le servirn para elegir dicha
estructura.
1.

Si existe una condicin, al menos, en que las sentencias del ciclo no se ejecuten ni una sola vez, el ciclo
WHILE es la eleccin adecuada. Como el ciclo WHILE evala la expresin condicional en la parte
superior del ciclo, si esta expresin es falsa, la sentencias o tareas en l no se ejecutarn.

2.

Si el algoritmo requiere que las sentencias del ciclo se ejecuten al menos una sola vez, entonces el ciclo
REPEAT / UNTIL es la eleccin ms adecuada. Ello es debido a que , incluso siendo la primera vez
falsa la expresin condicional, el ciclo realiza las sentencias o tareas en el cuerpo del ciclo.

3.

Si se conoce por anticipado, a la ejecucin del ciclo, el nmero exacto de veces que se a de realizar el
ciclo, el ciclo FOR, es la ms idnea, siempre y cuando no pueda ocurrir nada durante la ejecucin del
ciclo que cambie el nmero de iteraciones necesarias.

Tipos de datos definidos por el programador:


Turbo Pascal permite al programador declara nombres de identificadores para tipos de datos construidos en una
seccin TYPE. Una vez creados los tipos de datos, se pueden declara variables de nuevos tipos.
Un identificador global debe estar definido en una seccin type, que se coloca antes de la declaracin VAR
principal y despus de la seccin CONST. Un signo= en lugar de dos puntos (:) se utiliza siempre despus de
estas declaraciones. Por ejemplo:
Program ejemplo;
Type
Nombrestr = string[30];
Var
Nombre : Nombrestr;

Programacin en Pascal 7.0

Elaborado por: Lic. Carlos Lennin Quiroz P.


40

Programar es el arte de planear y crear soluciones lgicas a los problemas planteados

Existen dos tipos de datos definiciones por el usuario:


1. Enumerados
2. Subrango

TIPOS DE DATOS ENUMERADOS:


Se componen de una lista de identificadores constantes que el programador debe indicar el la parte del programa
reservada a las declaraciones.
Un tipo enumerado es definido simplemente listando los identificadores por los cuales sern denotados los
valores de tipo. Los valores posibles son encerrados entre parntesis y separados por comas, estos no deben estar
entre apstrofes dado que no son cadenas de caracteres.
Type
Tipo_enumerado = (identificador1, identificadr2, identificador3, , identificadornN);
Ejemplo:
Type
Estaciones = (primavera, verano, otoo, invierno);
Var
Periodos: Estaciones;
Los miembros del tipo Estaciones se representa internamente por enteros de la lista ordenada, de modo que
primavera tiene valor 0, verano tiene valor 1, e invierno tiene valor 3. De este modo se consigue un nivel de
abstraccin importante.
Cuando se aplica la funcin ord() a un valor enumerado da la posicin que el calor ocupa en la lista de la
definicin, comenzando con el 0.
Ejemplo:
Ord(primavera) es 0
Ord(invierno) es 3
Otro ejemplo:
Type
Sexo = (femenino, masculino);
Lgico = (verdadero, falso);
Mes = (ene, feb, mar,abril, may, jun, jul, agost, sept, oct, nov, dic);
Dias_semana = (lunes, martes, miercoles, jueves, viernes);
Marca_Autos = (toyota, nissan, lada honda, suzuki );
VENTAJAS DE LOS TIPOS ENUMERADOS:
Pueden ser usados en:
1. Enunciados Case:
Case mes of
Ene : mes:=enero;
Feb : mes:=febrero;
Mar : mes:=marzo;

End;
2.

Ciclos For:

Programacin en Pascal 7.0

Elaborado por: Lic. Carlos Lennin Quiroz P.


41

Programar es el arte de planear y crear soluciones lgicas a los problemas planteados


For mes:= mar to oct do
3. Como ndice de los arreglos (en el siguiente captulo lo estudiaremos con ms detalles).
LIMITACIN: No se puede leer ni escribir los valores de los tipos enumerados.

Las funciones predefinidas succ y pred pueden ser usadas nicamente con de tipos ordinales de datos. La
funcin sucesor (succ) al ser aplicada a un argumento ordinal, regresa el valor que le sucede o sigue al
argumento. La funcin predecesor (pred) al ser aplicada a un argumento ordinal, regresa el valor que le
precede o antecede al argumento.
Ejemplo, supongamos la siguiente declaracin:
Program valor;
Type
Monedas = (penny, nikel, dime, quarter);
Var
Moneda1, Moneda2: Monedas;
C1,C2,C3:char;
Qu valor tendrn C2, C3, y Moneda1 y Moneda2 despus que se corra el siguiente fragmento de
programa?
C1:= D;
C2:= succ(C1);
C3:= pred(C1);
Moneda1:= nikel;
Moneda2:= succ(noneda1);
RESPUESTA; Los valores de C2, C3 y Moneda1 y Moneda2 sern: E, C y dime respectivamente.
TIPOS DE DATOS SUBRENGO (llamados tambin intervalos, sub-serie, sub-intervalo).
Es un conjunto seleccionado de un tipo escalar (entero, boolean, carcter y enumerador) que se especifica
indicando el primero y el ltimo elemento del conjunto. Se declara un subrango con la palabra reservada
TYPE, a continuacin un identificador y se aaden los lmites inferior y superior
separados por dos puntos(..), as:
type
identificador = primer_elemento .. ltimo_elemento;
ejemplo:
type
fecha = 1.. 31;
mayuscula = A.. Z;
nota = 0 .. 100;
semana = lumes .. viernes;
var
Carcter : mayuscula;
Da : fecha;
Dias_lab : semana;
Nota_final : nota;
Una de las aplicaciones de los tipos de datos subrango sirve para prevenir errores lgicos que se producen
por superar los valores de los lmites superior e inferior del rango vlido de datos. En el ejemplo anterior la
variable Carcter solo puede tomar como valor alguna letra mayscula, y la variable Da solo puede tomar
los valores numricos del 1 al 31.

Programacin en Pascal 7.0

Elaborado por: Lic. Carlos Lennin Quiroz P.


42

Programar es el arte de planear y crear soluciones lgicas a los problemas planteados


NOTA:
1. No est permitido definir una subserie de tipo real ya que no es un tipo ordinal.
2. En la mayora de las implementaciones la subserie A .. Z define las 26 letras maysculas del alfabeto
como sus valores nicos, pero, por las razones explicadas antes no tiene que ser necesariamente as.

CONJUNTOS:
Un conjunto (SET) es un grupo de cero o ms elementos de tipo carcter o numrico (BYTE, CHAR, pero
no pueden ser Shortint, integer, longint o word, ni reales), la sintaxis de un tipo de datos conjunto (SET)
comienza con la palabra reservada SET OF y est seguido de un tipo simple de datos.
TipoConjunto= SET OF tipo ordinal;
Un conjunto contiene todos los elementos del mismo tipo base, escalar (predefinido boolean, char o
enumerado) o subvengo a excepciones del tipo real. La declaracin de un tipo conjunto es:
1.

TYPE
Nombre_conjunto= SET OF tipo_base;

2.

TYPE
Nombre_conjunto= SET OF tipo;

Una variable de tipo Nombre_conjunto puede contener elementos de tipo base. El nmero mximo de
elementos de un conjunto est limitado a 256 y el intervalo posible de estos valores es 0 a 255. Una
constante conjunto es una lista de elementos del tipo base separados por comas y encerrados entre corchetes.
Un conjunto se construye as:
[elemento1, elemento2, elementoN]
[un_ solo_elemento]
[] vaco
Algunos elementos pueden ser de tipo subrango:
Dgitos [1, 2, 3, 5]
Respuesta [S,N]
Calificaciones [0 .. 5, 6, 7, 8, 9, 10]
La primera operacin para procesar conjuntos es declarar el tipo y a continuacin declarar las variables
correspondientes, ejemplo:
Type
Notas= set of 0..10; {conjunto de nmeros del 0 al 10}
Das= (lunes, martes, mircoles, jueves, viernes, sbado, domingo);
Var
Calificaciones: notas;
Smbolos: set of char;
Laborales: set of char;
Si el tipo base es un tipo enumerado es preciso declararlo previamente en la seccin TYPE, ejemplo:
Type
Mes= (ene, feb, marz, abr, may, jun, jul, agost, sept, oct, nov, dic);
Lista_mes= set of mes;
Var

Programacin en Pascal 7.0

Elaborado por: Lic. Carlos Lennin Quiroz P.


43

Programar es el arte de planear y crear soluciones lgicas a los problemas planteados


ConjuntoMes: Lista_mes;
Verano: set of char;
ConjuntoMes y verano son variables conjunto de tipo Mes.

Un vez que una variable ha sido declarada, se puede asignar un valor (inicializando o modificndolo)
mediante una sentencia de asignacin, tal como:
ConjuntoMes:= [feb,abr,jun];
Laborales:= [lun,mar,mier,jue,vie];
Notas:= [6, 4, 7];
Se puede utilizar tambin simbologa de rango o intervalo (dos puntos ..).
Test:= [0..5, 10]; {esta sentencia fija el valor de Test en [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]}
LA PERTENENCIA A UN CONJUNTO:
La utilidad ms comn de los conjuntos es verificar si un valor (elemento) dado pertenece a una lista
(conjunto). Ejemplo:, saber si un determinado carcter ledo del teclado es una vocal mayscula, o bien es
una letra D (mayscula o minscula), etc. El operador IN (pertenece a) verifica comprueba la pertenencia
de un elemento especifico dentro de un conjunto; dicho de otro modo, si el electo pertenece al conjunto. Esta
accin se realiza con una accin lgica:
Res IN [S, N]
Se evala verdadero (true) si el valor de Res es igual a S o N. En otras palabras, equivale exactamente a
la expresin:
If (Res = S) or (Res = N) then
La forma de estas expresiones lgicas es: expresin a evaluar, seguida por la palabra reservada IN y
despus la definicin del conjunto.
If (x+y) IN [8, 15, 20, 40] then {esta expresin evala verdadero si el valor de x+y pertenece a
la lista (8, 15, 20, 40)}
Dentro de un programa, el mtodo tpico de resolver las pruebas o evaluaciones, es con estructuras
selectivas. Sin el uso de conjuntos, la verificacin de que una letra es vocal se realiza con:
If (car = A) or ) or (car = E) or (car = I) or (car = O) or (car = U) then
Writeln( La letra es vocal en mayscula );
Sin embargo, mediante el uso de conjuntos, se simplifica notablemente la escritura:
If car IN [A, E, I, O, U] then
Writeln(La letra es vocal en mayscula);
La aplicacin tpica de conjuntos es verificar rangos vlidos o no vlidos para entradas de datos, ciclos, etc.
Este ejemplo permite comprobar un rango de valores del 1 a 50:
Program testPuntos;
Uses crt;
Var
I : integer;
Begin
Clrscr;

Programacin en Pascal 7.0

Elaborado por: Lic. Carlos Lennin Quiroz P.


44

Programar es el arte de planear y crear soluciones lgicas a los problemas planteados


For I:= 1 to 100 do
If I IN[1..50] then
Writeln(I:4, Est entre 1 y 50);
End.

Otro ejemplo;
Program ejercicio;
Uses crt;
Type
Caracteres = set of char;
Var
Frase: string[80];
I, cuenta: integer;
Vocals: caracteres;
Begin
Clrscr;
cuenta:= 0;
Vocals:= [a, e, i, o, u, A, E, I, O, U];
Write(Escriba una frase);
Realn(Frase);
For I:= 1 to length(Frace) do
If Frase[I] IN Vocales then
Inc(cuenta);
Write(La frase contiene , cuenta, Vocales);
End.
OPERACIONES CON CONJUNTOS:
Pascal dispone de operadores que actan sobre conjuntos de modo anlogo a las operaciones de teora de
conjuntos en matemtica. Existen dos tipos de operadores que operan sobre conjuntos: Lgico y
Relacionales.
Operadores de conjuntos:
Operadores
Lgicos
Unin (+)

Operadores de
Relacin
Igualdad (=)

Interseccin (*)

Desigualdad (<>)

Diferencia (-)

Inclusin (>=), (<=)

Operador de
Pertenencia
IN

Tres operaciones diferentes que pueden realizarse con conjuntos y que conducen a la creacin de un nuevo
conjunto. Nos referimos a los resultados de estas operaciones (es decir al nuevo conjunto creado), como son
la UIN, INTERSECCIN y la DIFERENCIA.
Cuatro de los siete operadores relacionales pueden ser aplicados a los conjuntos (=, <>, >=, <=)
Cada operacin requiere de dos operndos (es decir dos conjuntos) del mismo tipo. El resultado ser
entonces del mismo tipo de los operndos.
UNIN (a+b)
La unin de dos conjuntos a y b es el conjunto que contienen todos los elementos que estn en el conjunto a,
en el conjunto b o en ambos, ejemplo:
[1, 3] + [3, 5, 7] = [1, 3, 5, 7]
[1, 3] + [2, 6] = [1, 2, 3, 6]

Programacin en Pascal 7.0

Elaborado por: Lic. Carlos Lennin Quiroz P.


45

Programar es el arte de planear y crear soluciones lgicas a los problemas planteados


[1, 3] + [3, 4] = [1, 3, 4]
[1, 5] + [1, 5, 6] = [1, 5, 6]
a:=[1, 2, 4]
b:=[3, 5]
a + b:= [1, 2, 3, 4, 5]
INTERSECCIN (a * b)
El conjunto interseccin resultante de dos conjuntos contiene los elementos que pertenecen a ambos
conjuntos, ejemplo:
[1, 3, 8] * [1, 5, 8, 11 = [1, 8]
[1, 5] * [1, 3, 5, 8] = [1, 5]
a:= [1, 2, 4]
b:= [3, 5]
If a * b = [] then
Writeln( Conjuntos Distintos);
DIFERENCIA (a - b)
La diferencia de conjuntos es el conjunto de elementos que se encuentran en el conjunto a y no pertenecen
al conjunto b.
[a, c, f, k] [c, f] = [a, k]
[f, g] [a, f, g, k] = []
numeros:= [1 .. 10] [1, 3 .. 7]
resultado:= numeros
El resultado tendr el valor [2, 8, 9, 10]
IGUALDAD (a = b)
La igualdad se evala a trae si ambos conjuntos contienen exactamente los mismos elementos; en caso
contrario se evalan a false.
[A, B, C] = [B, C, A]
DESIGUALDAD (a <> b)
La desigualdad se evala a trae si el conjunto a y el conjunto b no son iguales; en caso contraro se evala a
false.
[A, B] <> [A, B, C]
[1, 2] <> [5, 7, 15]
If (numeros [5 .. 10]) = [] then
Write(Rango Valido);
INCLUSIN (a <= b)
La inclusin se evala trae si cada elemento del conjunto a es tambin elemento del conjunto b.
[1, 2] <= [1, 2, 3]
[1, 2] <= [1, 2]
If numeros <= [0, 2, 4, 5, 6] then
Write(Nmero Par);

Programacin en Pascal 7.0

Elaborado por: Lic. Carlos Lennin Quiroz P.


46

Programar es el arte de planear y crear soluciones lgicas a los problemas planteados

PRIORIDAD DE LOS OPERADORES


Al igual que sucede con otros operadores, cuando en expresiones coincidan diversos tipos de operadores, es
necesario seguir unas reglas de prioridad. En caso de igual grado de prioridad la evaluacin de las
expresiones se hace de izquierda a derecha.
Ms alta: NOT
*
/
DIV
MOD AND
+
OR
Ms baja <=
=
>=
<
>
<>
IN
CONSIDERACIONES DE TIPO PRCTICO (conjunto de caracteres)
Uno de los tipos ms tiles de conjuntos es un conjunto de caracteres. Los caracteres son escalares por
naturaleza y caen todos en el rango de 0 a 255. Para definir un conjunto de caracteres, debe utilizar esta
declaracin en su programa:
Type
juegoCar= seto f char;
var
Mayscula, Minscula, Dgitos : integer;
Con estas declaraciones se pueden asignar rangos de caracteres adecuados a las variables maysculas,
Minsculas y Dgitos.
Mayscula:= [A .. Z]
Minscula:= [a .. z]
Dgitos:= [0 .. 9]
Tenga cuidado, el conjunto de caracteres dgitos [0 .. 9] no es el mismo que el subconjunto (rango) d
enteros [0 . .9]. El primero es un conjunto de caracteres, el segundo es un conjunto de nmeros positivos.
Problemas tpicos de programacin son solicitar un carcter de un conjunto especfico y rechazar los
restantes. Algunas sentencias tpicas que facilitan estas tareas se indican a continuacin:
If NOT (car IN [A, E, I, O, U]) THEN
Writeln(Error); {esta sentencia verifica que el carcter ledo no es una vocal}
No confundir la nocin de conjunto con la nocin de subrango o enumerado.
Si por ejemplo, se desea escribir:
Carcter se puede declarar como:
y no como:

carcter:= [A ..M]
var
carcter:= SET OF A .. M;

var
carcter:= A .. M;

Otro peligro serio puede ocurrir con conjuntos numricos; Turbo Pascal permite la negacin (complemento)
de valores enteros, al contrario de otros compiladores Pascal. Si K es un entero, entonces NOT K niega
todos los bits de K. En otras palabras, los bits toman sus valores opuestos: los uno se convierten en cero y
los ceros en unos. El resultado se denomina complemento a uno. As expresiones como:
IF NOT K IN [1 .. 100] then
IF NOT (K IN [1 .. 100]) then Pueden producir resultados diferentes. Para evitar problemas se debe
utilizar siempre parntesis en aquellas expresiones que puedan resultar ambiguas.

Programacin en Pascal 7.0

Elaborado por: Lic. Carlos Lennin Quiroz P.


47

Programar es el arte de planear y crear soluciones lgicas a los problemas planteados

El programa siguiente crea un conjunto de caracteres denominados vocales que contiene letras del alfabeto
que son vocales. El ciclo for busca las letras que son vocales.
Program ConjuntoVocales;
Uses crt;
Var
Vocales : set of char;
Letras : char;
Begin
Clrscr;
Vocales:= [A, E, I, O, U];
For letras:= A to Z do
If (letra IN Vocales) then
Write(Letra:2);
Readkey;
End.
De modo similar, el programa siguiente solicita al usuario introducir una cadena y a continuacin convierte
de la cadena a mayscula. El problema crea primero el conjunto Minsculas que contiene las letras del
alfabeto. El programa verifica si cada carcter de la cadena pertenece al conjunto. En caso afirmativo, el
programa convierte el carcter a mayscula. Si no lo es, el programa deja el carcter como est.
Program Mayscula;
Uses crt;
Var
Cad : string;
Indice : Byte;
LongCad : Byte;
Minuscula : set of char;
Begin
Clrscr;
Minuscula:= [a ..z];
Write(Escribir una cadena);
Readln(cad);
LongCad:= Length(cad);
For Indice:= 1 to LongCad do
If (cad[indice] IN Minuscula) then
Write(upcase(cad[indice]))
Else
Write(cad[indice]);
Readkey;
End.
ARREGLOS (array)
Es una estructura de datos que representan listas o tablas de valores bajo un nico nombre-. Es una
coleccin fija de elementos del mismo tipo. Todos los elementos del mismo arreglo pertenecen al mismo
tipo, el ndice es de tipo ordinal.
Caractersticas de los arreglos:
1) El nombre de arreglo.
2) Tipos de valores de cada elemento.
3) El nmero de la dimensin del arreglo.
4) Intervalo (rango) que representa la longitud de cada dimensin.

Programacin en Pascal 7.0

Elaborado por: Lic. Carlos Lennin Quiroz P.


48

Programar es el arte de planear y crear soluciones lgicas a los problemas planteados


Un arreglo en consecuencia, es un nuevo tipo de datos que debe ser declarado en la seccin TYPE de
programa.
Los arreglos se clasifican en:
1) Unidimensionales o listas (una sola direccin).
2) Multidimencionales o arreglos de arreglos (varias direcciones).
ARREGLOS UNIDIMENSIONALES (LISTAS O VECORES)
Son celdas de memoria que estn continuas y contiguas, situadas una a la par de la otra. La cuales tienen un
nmero de ndice, los cuales corresponden a un apartamento de la memoria para especificar un elemento
concreto del arreglo, se debe dar el nombre del arreglo y el indice encerrado entre corchetes, por ejemplo:
X[2], letra[i].
1

X[1]

X[2] X[3]

4
X[4]

X[5] X[N]

Type
Tipo_arreglos= array[intervalo] of tipo_de_dato;
1) Var
Variable : Tipo_arrelo;
2) Var
Variable : array[intervalo] of tipo_de_dato;
INTERVALO
Representa la longitud de cada dimensin o sea el tamao del arreglo. Es de tipo simple, entero, lgico, de
carcter o enumerado; no puede ser real, si string y tiene un lmite superior y un lmite inferior.
Ejemplo de declaracin:
Program ejemplo;
Tamao
Uses crt;
Type
Nombre1 = array[boolean] of integer;
Nombre2 = array[1 .. 10] of integer;
Nombre3 = array[A .. Z] of real;
Var
A : Nombre1;
B : Nombre2;
C : Nombre3;

Valor

Los diferentes elementos de un arreglo se referencian con el mismo nombre y un ndice que toma sus
valores del rango.
Los valores del rango los pueden definir el usuario y representar su tamao y la dimensin de arreglo,
ejemplo:
[10 .. 70]
[-5 .. 10]
[A .. Z]
Tambin se puede escribir una declaracin as:
Program OtroEjemplo;
Const
Tamao=10;
Type
Tipo1 = array[1 .. Tamao] of integer;

Programacin en Pascal 7.0

Elaborado por: Lic. Carlos Lennin Quiroz P.


49

Programar es el arte de planear y crear soluciones lgicas a los problemas planteados


Tipo2 = array[-5 .. Tamao] of real;
Var
Arreglo1 : Tipo1;
Arreglo2 : Tipo2;

Cmo se acceden a los elementos de un arreglo?


Para acceder a los elemento de un arreglo unidimensional se debe utilizar el nombre del arreglo seguido del
ndice deseado encerrado entre corchetes. As:
Writeln(X[5]);
X[j]:= 5;
A[10]:= A;
La asignacin de valores a los elementos de un arreglo unidimensional se realiza de igual forma que si se
tratara de variables simples, utilizando un ndice. Cada valor especifica una nica posicin denominada
elemento del array.
En lugar de incluir una sentencia de asignacin para cada elemento se puede utilizar un FOR o WHILE. El
contador del ciclo se utiliza como ndice de array.
Ejemplos:
For i:= 1 to 5 do
X[j]:= j * 3;

1
X

4
12

X[1]

X[2]

X[3]

X[4]

5
15

6
18

X[5] X[6]

Las operaciones que actan bajo la lista toman los elementos individuales y no la lista de modo global, por
ejemplo:
Type
Lineas = array[1 .. 10] of integer;
Var
a,b,c : lineas;
Estas operacin no se puede: a:= b + c; si se puede: a:= b; se puede hacer y tambin y es equivalente a:
for i:= 1 to 10 do
a[i]:= b[i];
Como se leen los arreglos?
Para leer un arreglo se debe utilizar un ciclo FOR, WHILE, o REPEAT y el contador del ciclo se utiliza como
un ndice del arreglo. Veamos:
Con ciclo FOR:
Con ciclo WHILE
For i:= 1 to 10 do
I:= 1;
Begin
While I < 10 do
Write(Escriba el elemento , i);
Begin
Readln(A[i]);
Write(Escriba el elemento , i);
End;
Readln(A[I]);
I:= i +1;
End;

Programacin en Pascal 7.0

Elaborado por: Lic. Carlos Lennin Quiroz P.


50

Cmo se visualizan o escriben los elementos del arreglo?


For i:= 1 to tamao do
Writeln(B[i]);
For i:= 10 downto 1 do
Writeln(C[j]);
El siguiente ejemplo calcula la media aritmtica de una lista de nmeros:
Program MediaAritmetica;
Uses crt;
Const
NE=100;
Type
Lista = array[1 .. NE] of real;
Var
A : lista;
I : integer;
Suma, media : real;
Begin
Clrscr;
For I:= 1 to NE do
Begin
Write(Digite el elemento , i);
Readln(A[i]);
End;
Suma:=0;
For i:= 1 to NE do
begin
Suma:= Suma +A[i];
media:= Suma / NE;
writeln(La media aritmtica es = , media:0:2);
readkey;
end.
El siguiente ejemplo encuentra el mayor de una lista de nmeros:
Program Mayor;
Uses crt;
Type
Lista = array[1 .. 5] of integer;
Var
Arreglo : lista;
I, Max : integer;
Begin
Clrscr;
Writeln(Digite el Primer Nmero: );
Readln(Arreglo[1]);
Max:= Arreglo[1];
For I:= 2 to 5 do
Begin
Write(Digite el , I, elemento: );
Readln(Arreglo[I]);
If Arreglo[I] > Max then
Max:= Arreglo[I];
End;
Writeln(El mayor de los Cinco Nmeros es: , MAx);
End.

Cul es la salida del siguiente programa?


Program mayor;
Uses crt;
Var
X = array[1 .. 5] of integer;
Begin
Clrscr;
X[1]:= 83;
X[2]:= 60;
X[3]:= 90;
X[4]:= 9;
X[5]:= 0;
Writeln(x[4]);
Writeln(x[2]);
Writeln(x[2 +1]);
Writeln(x[3] + 1);
Readkey;
End.

Las salidas sern:


9
60
90
91

Qu imprimen los siguientes segmentos de programa?


For i:= 1 to 5 do
A[i]:= i;
For i:= 1 to 5 do
A[i]:= I * A[I + 1];
For i:= 1 to 6 do
Writeln(A[i]);

2
1

For i:= 1 to 6 do
A[i]:= I;
For i:= 1 to 5 do
A[i + 1]:= I * A[i];
For i:= 1 to 6 do
Writeln(A[i]);

12

24

Nota:

0
5

0
6

1
1

1
2

4
3

9
4

16
5

25
6

En la casilla 5 se obtiene un valor cero debido a que no existe una casilla A[6] y aunque su
resultado da 30 se da el valor cero por no existir dicha casilla al igual que en la casilla 6.
En la casilla 1 el valor asignado ser su valor inicial, en la casilla 2 ser 1 por la operacin
realizada y el ltimo valor ser 36, el cual no aparecer por no existir la casilla A[7].

El siguiente programa encuentra los nmeros que se repiten:


Program encuentraDuplicados;
Uses crt;
const
A : Array[1 .. 8] of integer=(5, 6, 6, 25, 25, 30, 30, 30);
Var
A : lista;
I, cont, x : integer;
Begin
Clrscr;
Writeln(Escriba posicin del 1-8 que desee buscar: );
Readln(x);
For I:= 1 to 8 do
If A[x] = A[I] then
Inc(cont);
Writeln(El nmero , A[x] , se encontr: , cont, veces);
Readkey;
End.

INDICE DE LOS ARREGLOS


Los ndices ser tipos de datos escalares, como enteros, caracteres o enumerados.
El siguiente ejemplo determina la frecuencia de aparicin de cada letra mayscula en un texto escrito por el
usuario, el final del texto viene dado por el centinela . O sea el enter (ASCII 13):
Program FrecuenciaDeLetra;
Use crt;
Var
Lista : array[A .. A] of integer;
Letra : char;
Begin
Clrscr;
For letra:= A to Z do
Lista[letra]:=0;
Repeat
Letra:= readkey;
Write( , letra);
If letra IN [A .. Z] then
Lista[letra]:=lista[letra] + 1;
Until letra IN [., char(13)];
Writeln;
For letra:= A to Z do
Writeln(letra:10, lista[letra]:10);
End.

ARREGLOS PARALELOS
Sirven para combinar arreglos distintos tipos datos. Ambos deben tener el mismo tamao, es decir el mismo
ndice.
Das Semana
[1]
Lunes
[2]
Martes
[3]
Mircoles
[4]
Jueves
[5]
Viernes
[6]
Sbado
[7]
Domingo

Horas_T
[1] 6
[2] 9
[3] 10
[4] 15
[5] 4
[6] 3
[7] 20

Estos arreglos de
distintos tipos se
relacionan con el
mismo ndice.

Cmo se declaran?
Type
Arreglo1 = array[1 .. 7] of string[12];
Arreglo2 = array[1 .. 7] of integer;
Var
Dias_Semana : Arreglo1;
Horas_t : Arreglo2;
I, MayorH : integer;
Begin
For I:= 1 to 7 do
Begin
Write(Digite el da de la semana, i);
Readln(Dias_Semana[I]);
Write(Horas trabajadas en el da de la semana , I);
Readln(Horas_t[I]);
End;
mayor:= Horas_t[1];
for I:= 2 to 7 do
If horas_t[I] > MayorH then
MayorH:= Horas_t[I];
Writeln(La mayor cantidad de horas trabajadas es , MayorH);
Writeln(Fue trabajada el da );
For I:= 1 to 7 do
If Horas_t[I] = MayorH then
Writeln(Dias_Semana[I]);
Readkey;
End.
BUSQUEDA DE UN ELEMENTO DEL ARREGLO
Existen varios mtodos d bsqueda, entre ellos tenemos:
Bsqueda secuencial o lineal.
Bsqueda binaria.

La bsqueda lineal o secuencial es la tcnica ms simple para buscar un elemento en un arreglo, vector, lista o
matriz y consiste en:
Recorre todo el arreglo hasta el ltimo elemento, de uno en uno.
Si el arreglo contiene el elemento, el proceso devolver la posicin del elemento buscado o alguna
instruccin planificada.
De lo contrario, imprimir o enviar algn mensaje que indique la falta de xito en la bsqueda. Por
ejemplo:
Pos:=0;
Valor:=100;
For i:= 1 to n do
Begin
If a[i] = Valor then
Begin
Pos:=i;
Writeln(Encontrado en la posicin , i);
End;
Else
Writeln(Elemento encontrado);
Readkey;
End.

La siguiente tcnica recorre el


arreglo hasta que lo encuentra,
solamente:
Enc:=f;
Pos:=0;
I:=1;
N:=20;
Valor:=30;
While(I<=n)and(not Enc) do
Begin
If a[I] = Valor then
Begin
Pos:=I;
Enc:=V;
End;
Inc(I);
End;

ARREGLOS MULTIDIMENSIONALES
Un arreglo puede tener mltiples dimensiones. En general los arreglos prcticos no suelen tener ms de tres
dimensiones. Un arreglo multidimencional es un arreglo cuyas variables tienen dos o ms ndices, en lugar de un
solo ndice. Un arreglo de dos dimensiones se suele conocer tambin como matriz, tabla o arreglo de arreglo, y
es un arreglo multidimencional por excelencia.
Organizaremos ahora estos arreglos en una tabla o matriz, en varias filas y columnas. Un arreglo bidimensional
se puede representar grficamente como un rectngulo. Para localizar un elemento particular del arreglo, se debe
especificar dos posiciones o subndices, uno para describir las filas y otro para describir las columnas, veamos el
grfico:

COLUMNAS

F
I
L
A
S

1.1

1.2

1.3

1.4

2.1

2.2

2.3

2.4

3.1

3.2

3.3

3.4

4.1

4.2

4.3

4.4

Cmo se declaran los arreglos bidimensionales?


Supongamos que vamos a declarar un arreglo en el que se registran las ventas de 5 vendedores por 5 das:
Program Matriz;
Const
Tam= 5;
Var
Ventas : array[1..Tam,1..Tam] of real

Program Matriz;
Const
Fila= 5;
Col= 5;
TYPE
Ventas = array[1..Fila,1..Col] of real;
Var
Ventas_T : Ventas;

Para acceder a los arreglos bidimensionales debemos especificar el nombre del arreglo seguido de la fila y la
columna, encerrados entre corchetes separados por una coma, ejemplos:
Writeln(a[1,2])];
Readln(arreglo[2,2]);
Arreglo[3,5]:= 20;
Arreglo[1,3]:= Cadena;
Cmo se leen los arreglos bidimensionales?
For i:= 1 to fila do
Begin
For j:= 1 to col do
Begin
Writeln(fila= ,i, columna= ,j );
Readln(Ventas_T[i,j]);
End;
Readkey;
End.
Cmo se imprimen o visualizan los arreglos bidimensionales?
For i:= 1 to fila do
Begin
For j:= 1 to col do
Write(Ventas_T[i,j], );
Writeln;
End;

Fila = 4;
Col = 4;

El siguiente fragmento procesa la suma de cada fila:


Writeln(Vendedor , , Total de Ventas en 5 das );
For i:= 1 to fila do
Begin
Suma:= 0;
For j:= 1 to col do
Suma:= Suma + Ventas_T[i,j];
Writeln(i:10, Suma:0:2);
End;

Para almacenar el resultado de la suma de las columnas de una matriz en la ltima casilla de una fila:
For i:= 1 to fila do
Begin
For j:= 1 to 3 do
Begin
Suma:= Suma + a[i,j];
a[i,4]:= Suma;
end;
writeln(El vendedor ,i, Vendi C$, a[i,4]:0:2);
end;
Para almacenar el resultado de la suma de las filas de una matriz en la ltima casilla de una columna:
For j:= 1 to col do
Begin
For i:= 1 to 3 do
Begin
Suma:= Suma + a[i,j];
a[4,j]:= Suma;
end;
witeln(En el da ,i, ,j, Vendi ,a[4,j]);
end;

Matriz Triangular Superior:

0/1

Matriz Triangular Inferior:

1/0

If i > j then superior

If i < j then inferior

Diagonal Primaria o Principal

Diagonal Secundaria
{Para una matriz cuadrada de nxn}

If i= j then primaria
If i + j = 5 {Si la suma de la diagonal da
como resultado un nmero n+1}
Matriz Identidad:
Es la matriz de nxn tal que los elementos de su
diagonal principal son 1s y los elementos de
afuera son 0s.

Aij:=0
If ((i < j) =0 and (i > j) = 0) then Aij= 0
Aij:=1
If (i = j)=1 then Aij=1

REGISTROS (record)
Un registro es igual que un arreglo, es una estructura de datos para almacenar datos relacionados. Una ventaja
sobre los arreglos es que no es necesario que todos los datos sean del mismo tipo.
Los componentes individuales de un registro (campos) pueden contener datos de diferentes tipos. Se pueden
utilizar para almacenar una gran variedad de informacin. Por ejemplo, datos de una persona (nombre, estado
civil, edad, fecha de nacimiento, profesin, peso, sexo, etc.), datos del calendario (da, mes y ao), etc. Al igual
que cualquier tipo de dato, el dato de tipo registro (record) antes de poder ser utilizado debe ser declarado en la
seccin de tipos (TYPE).

PERSONA

FECHA
NOMBRE

DIA

EDAD

MES
AO

SEXO
PESO

CAMPOS

FECHA_N

El nombre del registro es un identificador vlido; los campos deben estar encerrados entre las palabras
reservadas RECORD y END; la lista de identificadores (identificador1, identificador2, identificadorN) los
diferentes campos, son seguidos del tipo correspondiente que pueden ser de cualquier tipo.
Usualmente una variable de registro se define en dos pasos:
1. Se define el tipo de registro y
2. Se declara la variable como de ese tipo.
Program ConRegistro;
1
Uses crt;
Type
RegPersona = record
Nombre : string[30];
Peso : real;
Edad : Integer;
Sexo : char;
2
End,
Var
Persona : RegPersona;

Nota: Al igual que un CASE la declaracin


de tipo de u registro contiene un END sin el
BEGIN correspondiente.

Cmo se accedan los registros?


El acceder al campo de un registro, se efecta utilizando un sector de campos, que consta del nombre de la
variable registro y el nombre del campo separado por un punto, ejemplo:
Persona.nombre
Persona.peso
Persona.edad
Persona.sexo

writeln(persona.nombre;);
writeln(persona.peso);
persona.edad:= 40;
persona.sexo:= F;

Los campos de u registro pueden ser manipulados, como si de una variable estndar se tratara, como sentencias
de asignacin, lectura (read), o escritura (write).

Suponga u programa que use u registro con los campos nombre, nmero de seguro social, horas de trabajo y
pago por hora, el programa genera la siguiente salida:
Mario Martnez Seguro Social N 009999
Sueldo C$ 240.00
Program ConRegistro;
Uses crt;
TYPE
RegEmpleado = Record
Nombre : String[30];
Seg_soc : String[12];
Horas : integer;
PagoXh : real;
End;
Var
Emp:RegEmpleado;
Sueldo : real;
Begin
Clrscr;
Write(Digite el nombre el empleado: );
Readln(emp.nombre);
Write(Digite el nmero de seguro social: );
Readln(emp.seg_soc);
Write(Cuntas horas labor: );
Readln(emp.horas);
Write(Salario por hora: );
Readln(emp.pagoXh);
Sueldo:=emp.horas * emp.PagoXh;
Writeln(emp.nombre, , Seguro Social N :,emp.Seg_soc);
Writeln(Sueldo C$ , Sueldo:0:2);
Readkey;
End.

USO DEL ENUNCIADO WITH (con)


La manipulacin de los campos con la notacin de punto suele ser muy tediosa por la exigencia de estructura del
selector de campo completa cada vez que se referencia un campo de un registro. Un mtodo abreviado de evitar
escribir el nombre del registro es utilizar la palabra reservada WITH. Esta palabra indica al compilador Pascal
que asocie los identificadores de los campos con un nombre de registro especfico, ahorrando pulsaciones y
haciendo los programas legibles. Utilizando WITH se pueden utilizar nombres de campos sin repetir delante del
nombre del registro. As, por ejemplo, la asignacin de valores a los campos de un registro con la sentencia
WITH es:
With personado
Begin
Nombre:= Karla Castro;
Peso:= 110;
Edad;=21;
Sexo:= F;
End;

De igual forma se pueden utilizar sentencias de entrada y salida:


With persona do
Begin
Write(Digite el nombre de la persona: );
Readln(nombre);
Writeln(Cual es el peso de la persona: );
Readln(peso);
Writeln(Cual es la edad de la persona: );
Readln(edad),
Writeln(Cual es el sexo de la persona: );
Readn(sexo);
End;

Su sintaxis es:
WITH variable_de_registro do
Begin

end;

Otro ejemplo:
Program regdealumno;
Use scrt;
TYPE
Arr_notas = array[1.. 3] of integer,
Registro = record
Nombre : string[25];
ID : string[10];
Sex : char;
Notas : arr_notas;
Promedio : real;
End; {RegEmp}
Var
Alumno ; registro;
I, Suma : integer;
Begin
Clrscr,
Writeln(Digite los datos );
Writeln;
Write(Nombre completo: );
Readln(alumno.nombre);
Write(ID: );
Readln(alumno.ID);
Write(Sexo (F/M): );
Readln(alumno.Sex);
Suma:= 0;
For i:= 1 to 3 do
Begin
Write(Nota ,I, del alumno: );
Readln(alumno.notas[i]);
End;
Alumno.promedio:= Suma / 3;
Writeln;

NOTA: Dentro del enunciado WITH, se


especifica solo el nombre de los campos,
omitindose el nombre de la variable

de registro y el punto (.)

With alumno do
Begin
Writeln(Nombre: ,Nombre);
Writeln(ID: ,ID);
Writeln(Sexo: ,upcase(sexo));
For i:= 1 to 3 do
Begin
Writeln(Notas No. ,I, :, Notas[i]);
Writeln(Promedio: ,proedio:2:2);
End,
Readkey;
End;
REGISTROS ANIDADOS O JERARQUICOS
Los campos de los registros pueden ser tambin registros. Un registro con uno o ms campos de tipo registro se
denomina registro jerrquico. Por ejemplo, un registro que contenga el nombre y fecha de los cumpleaos de una
persona puede ser del siguiente tipo:
Type
Fecha = record
Dia : 1. . 31;
Mes : 1 . . 12;
Anio : integer;
End;
Info = record
Nombre : string[50];
Cumpleaos : fecha;
End;
Var
Persona : info;
Cuando usamos registros anidados, debemos definir el registro que vamos a anidar antes de usarlo en otros
registros, ejemplo:
Program ejemplo;
Uses crt;
Type
Nombre = record
Pila : string[40];
Inic. : char;
Apellidos : string[50];
End;
Domicilio = record
Calle : string[25];
Ciudad : string[25];
Estado : string[25];
Apatpos : string[10];
End;
Regid = record
Name : nombre;
Direccion : domicilio;
NombreP : nombre;
Var
Persona : Regid;

Una idea grafica de la anterior declaracin sera:

Regid

Name

Pila

Inic

direccion

Apellidos

Calle

NombreP

Apatpos
Ciudad

Estado

Cmo acceder a los registros jerrquicos?


Persona.nombre.pila := Mara Moncada;
Writen(persona.direccion.calle);
Readln(persona.name.apellidos);
Usando la clusula WITH:
With persona.name do
Begin
Writeln(Escriba el nombre de pila);
Readln(Pila);
Readln(Inic);
Readln(Apellidos);
End;
Notas: 1. Se necesita un punto antes de cada identificador de campo.
2. Se debe especificar el identificador de campo de mayor jerarqua.

Es posible anidar sentencias with. Por ejemplo:


With persona do
With NombreP do
Begin
Writeln(Nombre de pila = , pila, Iniciales = , Apellidos = , apellidos);
End;

Apellidos
Pila

Inic

Un ejemplo completo:
Program Empleado;
Use crt;
Type
reg_de_eval = record;
Eval_1 : string[10];
Eval_2 : string[10];
End; {RegPers}
Registro = record
Nombre : string[20];
Evaluaciones : reg_de_eval;
Sexo : char;
Salario : real;
End; {RegPers}
Var
RegEmp : registro;
Begin
{principal}
Clrscr;
Writeln(Digite los datos del empleado: );
Writeln;
Readln(regEmp.nombre);
Write(1ra. Evaluacin (Exc/bien/reg): );
Readln(regEmp.Evaluaciones.Eval_1);
Write(2da. Evaluacion (Exc/bien/reg): );
Readln(regEmp.Evaluaciones.Eval_2);
Writeln(Digite el sexo del empleado (F/M): );
Readln(RegEmp.sexo);
Write(Digite el salario del empleado: );
Readln(regEmp.salario);
If (UPCASE (RegEmp.sexo) = F) then
regEmp.salario:= regEmp.salario + 100
else
regEmp.salario:= regEmp.salario + 50;
writeln;
writeln(Datos actualizados del empleado: );
with regEmp do
begin
writeln(Nombre del empleado: , nombre);
writeln(Primera Evaluain: , Evaluaciones.Eval_1);
writeln(Segunda Evaluacin: , Evaluaciones.Eval_2);
writeln(Sexo: , sexo);
writeln(Nuevo salario del empleado: ,salario:0:2);
end;
readkey;
end.
{principal}

ARREGLO DE REGISTROS:
Los registros simples son muy raros y lo usual es organizar los registros en unidades ms grandes como listas o
array de registros. Puede usarse una disposicin o arreglo de registros como una alternativa a los arreglos
paralelos. Por ejemplo el arreglo de registros grupo podra llenarse con datos de la manera siguiente:
GRUPO[1]
GRUPO[2]
GRUPO[3]
GRUPO[4]

NOMBRE
JUAN CASTRO
MARIA LARA
JOS CANSECO
MARCOS BLANCO
.
.
.

ESPECIALIDAD
HISTORIA
QUMICA
MATEMTICAS
FSICA

CALIFICACIN
A
B
C
D

.
.
.

.
.
.

Cmo se declaran?
Para declarar un arreglo de registro pueden hacerse dos declaraciones de tipo:
1) Un tipo de registro y
2) Un tipo de arreglo
Despus se pueden declarar las variables, por ejemplo:
Type
Reg_alum = record
Nombre : string[60];
Espec : string[4];
Cal : char;
End;
Tipo_grupo : array[1 .. 30] of reg_alum;
Var
Grupo : Tipo_grupo;
Cmo se acceden a los arreglos de registros?
Grupo[2]
Grupo[5].nombre
Grupo[1].cal:= A
Grupo[30].nombre
Grupo[15].espec

se refiere al segundo registro del arreglo


el nombre del (alumno) quinto registro
asignando la calificacin de A al primer alumno del registro
writeln(rupo[30].nombre)
readln(grupo[15].espec)

Cmo se leen los arrelos de registro?


For i:= 1 to 30 do
Begin
Write(Digite el nombre del alumno);
Readln(grupo[i].nombre);
Write(Diguite la especialidad del alumno );
Readln(grupo[i].espec);
Write(Digite la calificacin del alumno );
Readln(grupo[i].cal);

La lectura con el enunciado WITH


For i:= 1 to 30 do
With grupo[i] do
Begin
Write(Digite el nombre del alumno );
Readln(nombre);
Write(Digite la especialidad del alumno );
Readln(espec);
Write(Digite la calificacin del alumno );
Readln(cal);
End;

Cmo se escriben los arreglos de registro?


For i:= 1 to 30 do
Begin
Write(Nombre del alumno , grupo[i].nombre);
Writeln(La especialidad del alumno , grupo[i].espec);
Writeln(La calificacin del alumno, grupo[i].cal);
End;

Cmo se escriben los arreglos de registro con la clusula WITH?


For i:= 1 to 30 do
With persona[i] do
Begin
Write(Nombre del alumno ,nombre);
Writeln(La especialidad del alumno , espec);
Writeln(La calificacin del alumno, cal);
End;

Ejemplo:
Program Empleado;
Uses crt;
Const
N= 5;
Type
Registro = record
Nombre : string[20];
Edad : integer;
Sexo : char;
Salario : real;
End; {RegEmp}
TipArr = array[1 .. N] of integer;
Var
Arr : TipArr;
I : integer;
Begin
{Principal}
Clrscr;
Writeln(Preprese a digitar los datos de las , N, personas: );
Writeln;
For i:= 1 to N do
Begin
Write(Digite el nombre complete del empleado ,I, : );
Readln(Arr[i].nombre);
Write(Digite la edad del empleado , I, : );
Readln(Arr[i].edad);
Write(Digite el sexo del empleado (F/M) , I, : );
Readln(Arr[i].sexo);
Write(Digite el salario del empleado , I, : );
Readln(Arr[i].salario);
If (Arr[i].Edad > 40) then
Arr[i].salario:= Arr[i].salario + 100
Else
Arr[i].salario:= Arr[i].salario + 50;
Writeln;
Writeln(Datos actualizados del empleado: );
With Arr[i]do
Begin
Writeln(Nombre del empleado: , nombre);
Writeln(Edad del empleado: , edad);
Writeln(Sexo: , sexo);
Writeln(Nuevo salario del empleado: ,Salario:2:2);
End;
Writeln;
End;
Readkey;
End.

{Principal}

PROGRAMACIN ESTRUCTURADA O MODULAR


Pascal proporciona una forma muy gil para programar y esto se leva a cabo mediante la sub programacin, de
dos formas:
Procedimientos y
Funciones
Qu es un sub programa?
Son programas en miniatura que se incluyen en los programas mismos para llevar a cavo una tarea especfica.
VENTAJAS
1. Permite al programador disear programas de tal forma que el programa principal acta como un
supervisor delegando tareas.
2.

La organizacin global del programa aparece con mayor claridad.

3.

La modularidad permite o facilita la escritura o depuracin de programas, ya que las diferentes partes
del programa (sub programas) pueden ser escritos independientemente.

4.

Facilita la divisin de programas ms grandes entre un grupo de programadores.

5.

Pueden utilizar parmetros para comunicar informacin entre el cuerpo principal de un programa y los
sub programas.

PROCEDIMIENTOS:
Son una coleccin de sentencias agrupadas, juntas para realizar una tarea concreta.
La declaracin de los procedimientos se coloca en la parte de declaraciones, despus de todas las declaraciones
de variables, teniendo en cuenta la precaucin de que si un subprograma referencia o llama a otro, el
referenciado debe declararse primero.

Declaraciones
Del programa
Principal.

Declaracin del
Procedimiento

Seccin de
declaracin
del programa

Declaracin de
La funcin

Programa
Principal

Program Ejemplo;
Uses crt;
Const

Type

var

Procedure Demo;
Const

Type

Var

Begin {del procedimiento}


Sentencias;
End;
{del procedimiento}
Function Funcion;
Const

Type

Var

begin {de la funcin}


Sentencias;
End;
{de la funcin}
Begin {principal, o sea del programa}

Demo; {llamado o invocacin al procedimiento}

x:= Funcion;
{llamado o invocacin a la funcin}
End; {Principal, o sea del programa}

Cuando se ejecuta un programa con procedimientos, la computadora empieza la ejecucin con el cuerpo
principal del programa.
Es importante diferenciar entre los trminos: Declaracin o Definicin y llamado o Invocacin del
procedimiento o la funcin.
Para realizar un procedimiento se llama dentro de un programa, pero antes de utilizar este procedimiento se hace
necesario definir o declararlo antes.

La definicin o declaracin consta de:


1.
2.
3.

La cabecera
Seccin de declaracin local
El cuerpo del procedimiento.

1. LA CABECERA DEL PROCEDIMIENTO:


Debe iniciarse con la palabra reservada PROCEDURE, seguida de un NOMBRE, entre parntesis los
argumentos si fueran necesarios (lista de parmetros) separados por una coma (,) y con sus tipos de datos
correspondientes, ejemplo:
PROCEDURE CALCULAR (A, B : INTEGER; B, C : REAL; L : CHAR);
2. SECCIN DE DECLARACIONES LOCALES:
Se indican exactamente del mismo modo que en el programa principal.
3. EL CUERPO DEL PROCEDIMIENTO:
Contiene las sentencias que componen el procedimiento, comprendidas entre un BEGIN y un END.
EL LLAMADO O INVOCACIN A UN PROCEDIMIENTO:
Luego de la definicin o declaracin, se puede utilizar en el programa. Una llamada a un procedimiento es un
mecanismo por el cual el control del programa se pasa temporalmente al procedimiento llamado.
Cuando se llama a un procedimiento las instrucciones contenidas en l se ejecutan, luego el control del programa
regresa al punto donde fue llamado.

El mtodo de llamar a un procedimiento es simplemente escribir el nombre d ste en el sitio del programa donde
se necesita, ejemplo:
Program ejemplo1;
Uses crt;
Definicin
Del procedimiento

Llamados

Procedure Demos;
Begin
Writeln(Primer Programa);
End;
Begin
Clrscr;
Demos;
Writeln(Con Procedimientos);
Demos;
End.
Program ejemplo2;
Uses crt;
Var
Num : integer;
Procedure trazalineas;
Var
I : integer;
Begin
For i:= 1 to 20 do
Write(-);
Writeln;
End;
Begin {principal}
Clrscr;
Num:= 3;
Trazalineas;
Writeln(num, al cuadrado es = , num * num);
Trazalineas;
Readkey;
End.

VARIABLES LOCALES Y GLOBALES:


Cualquier variable que aparezca en el cuerpo principal del programa debe declararse en la seccin VAR del
programa principal y son conocidas como VARIABLES GLOBALES. Estas tienen vigencia en todo el
programa principal.
Un procedimiento puede tener sus propias variables, estas son conocidas como VARIABLES LOCALES. Y son
declaradas en la seccin VAR del procedimiento, estas tienen vigencia solamente en el procedimiento.
Notas:
1. Cada celda de memoria para variables locales, se crea cada vez que el procedimiento es llamado y se
borran o destruyen cuando se sales de l.
2.

Las variables locales no deben ser utilizadas en el cuerpo del programa.

Program ejemplo3;
Uses crt;
Var
Cadena : string[20];
Procedure aviso1;
begin
Writeln(Otro da ms de clases);
Writeln(A estudiar todos);
End;
Procedure aviso2;
Begin
Writeln(Tenemos que ser estudiosos);
Writeln(En esta clase que es muy importante);
End;
Procedure aviso3;
Begin
Writeln(Es el proximo da de clases);
Writeln(Y sin deseos no podremos estudiar);
End;
Begin {principal}
Clrscr;
Writeln(Digite el proximo da de clases);
Readln(cadena);
Aviso1;
Aviso2;
Writeln(El da , cadena);
Aviso3;
Readln;
End.
EJERCICIOS:
Program identificar;
Uses crt;
Var
a, b, c : integer;

Program loco;
Uses crt;
Var
a, b, c : integer;

Procedure XYZ;
Var
a, y, z : integer;
a : boolean;
begin

end;

procedure hacer;
begin
writeln(Los valores son, a, ,b, c,);
end;

begin {principal}
clrscr;

XYZ;

end.

procedure intercambio
begin
a:= a +1;
b:= b +2;
c:= c + 1;
end;
begin {principal}
clrscr;
a:=10; b:=20; c:=30;
intercambio;
hacer;
readln;
end.

Program Otro;
Uses crt;
Var
C : integer;

Program ejercicio;
Uses crt;
Var
C : integer;

Procedure basura;
Begin
C:= c +1;
End;

Procedure basura;
Var
C : integer;
Begin
C:= c +1;
End;

Begin {principal}
Clrscr;
C:= 0;
Basura;
Basura;
Writeln(C= , c);
Readln;
End.

Begin {principal}
Clrscr;
C:= 5;
Basura;
Writeln(C= , c);
Readln;
End.

PARMETROS
Son canales de comunicacin, para pasar datos de procedimientos y funciones desde el programa y viceversa, su
sintaxis es:
Procedure nombre_del_procedure (lista de parmetros formales);
Donde la lista de parmetros formales o ficticios siempre estn seguidos de su tipo, como se hace en cualquier
declaracin, seguido de un (;) si no son del mismo tipo, por ejemplo:
Procedure listas(a, b, : integer; c : real; d: char);
En la llamada del procedimiento, debe existir otra lista de parmetros formales, estos son llamados parmetros
actuales o reales, debido a que representan informacin real; estos son llamados tambin argumentos.
Ntese:
En la declaracin:
En el llamado:

Procedure listas(a, b, : integer; c : real; d: char);


Listas(a, b, c)

Existen dos tipos de parmetros:


a) Parmetro por valor y
b) Parmetro por variable

PARMETRO POR VALOS (unidireccionales):


Del programa principal al procedimiento, los parmetros por valor en los procedimientos hacen posible que un
enunciado de llamado en el cuerpo principal del programa comunique valores al procedimiento.

Cada parmetro por valor se debe declarar en el encabezado o cabecera del procedimiento, un ejemplo:
Variable
Global

Declaracin o
Definicin del
Procedimiento

Program deejemplo;
Uses crt;
Var
Num : integer;

Variable de parmetro por valor, de


lneas

Procedure lineas(longitud : integer);


Var
I : integer;
Begin
For i:= 1 to longitud do
Write(_);
Writeln;
End;

Parmetro
Formal

Variable local

Llamados

Begin {principal}
Clrscr;
Num:= 10;
Lineas(num);
Writeln(Mucha lluvia);
Lineas(5);
Lineas(num + 1);
Readln;
End.

Argumentos o Parmetros
actual o real

OBSERVACIN: Un enunciado que llama al procedimiento lneas debe comunicar el valor que se debe dar a
longitud. El llamado a lneas puede hacerse proporcionando:
a) Una Constante
b) Una Variable o
c) Una Expresin.
ARGUMENTOS Y PARMETROS:

Una variable que se declare en el encabezado del procedimiento se conoce como parmetro.
Un parmetro de valor es un tipo de parmetro, el otro tipo de parmetro se llama por variable.
La expresin correspondiente en la llamada al procedimiento se conoce como argumento.
El argumento le pasa el valor inicial al parmetro.

TERMINOS SEMEJANTES:
Argumento= Parmetro actual o real.
Parmetro formal= Parmetro en la declaracin (o sea en la definicin, en el encabezado).
Ejemplo:
Program otroprograma;
Uses crt;
Var
A, b : integer;

Program investigar;
Uses crt;
Var
X : integer;

Procedure OtroConBasura(c: integer);


Begin
C:= 5;
End;

Procedure trabajo(x : integer);


Begin
X:= x +1;
End;

Begin {principal}
Clrscr;
A:=2;
B:=0;
OtroConBasura(a);
Writeln(a= ,a, b= ,b);
Readln;
End.

Begin {principal}
Clrscr;
X:= 0;
X:= x + 1;
Trabajo(x);
Writeln(x);
Readln;
End.

Program cuidado;
Uses crt;
Var
X : integer,

Program OtroConCuidado;
Uses crt;
Var
X : integer;

Procedure ejecuta(w : integer);


Begin
W:= w +1;
Writeln(w);
End;

Procedure ejecuta(x : integer);


Begin
X:= x +1;
Writeln(x);
End;

Begin {principal}
Clrscr;
X:= 0;
Ejecuta(x);
Writeln(x);
Readln;
End.

Begin {principal}
Clrscr;
X:= 0;
Ejecuta(x);
Writeln(x);
Readln;
End.

PROCEDIMIENTOS CON VARIOS PARMETROS DE VALOR


Si un procedimiento tiene varios parmetros de valor, estos deben de declararse todos en el encabezado, veamos
el siguiente ejemplo:
Procedure lineas(longitud : integer, smbolo : char);
Var
I : integer;
Begin
For i:= 1 to longitud do
Write(simbolo);
Writeln;
Readln;
End;
En la llamada sera con los siguientes argumentos: lineas(10, =);
Se necesitan dos valores (los de los parmetros) y en el mismo orden.
REGLAS DE COMBINACIN ENTRE ARGUMENTOS Y PARMETROS:
a) Debe de haber el mismo nmero de argumentos y parmetros.
b) Los argumentos deben de estar en el mismo orden que los parmetros a los que corresponden, ya que el
paso de parmetros se ejecuta en orden.
c) Cada argumento debe ser del mismo tipo compatible con su parmetro correspondiente.
Program centimos;
Uses crt;
Var
Reales, bollos : integer;
Procedure TotalCentavos(r, b : integer);
Var
Cent : integer;
Begin
Cent:= (10 * r) + (5 * b);
Writeln(r, Reales y ,b, Bollos = ,cent, Centavos);
End;
Begin {principal}
Clrscr;
TotalCentavos(4,3);
Reales:= 10;
Bollos:= 5;
TotalCentavos(Reales, Bollos);
Readln;
End.

OTRAS REGLAS:
1. Cada variable en el cuerpo del procedimiento deber ser declarada en el mismo, ya sea como parmetro en el
encabezado o como variable local, veamos el ejemplo:
Program SumaDigitos;
Uses crt;
var
num : integer;
procedure Sumarlos(n: integer);
var
unid, dec : integer;
begin
dec:= n div 10;
unid:= n mod 10;
writeln(La suma de los dgitos es = ,unid + dec);
end;
begin {principal}
clrscr;
writeln(Teclee un nmero de dos dgitos);
readln(num);
sumarlos(num);
readln;
end.

2. Se permiten nombres iguales: es posible y de hecho bastante frecuente que un parmetro y su variable global
correspondiente tenga el mismo nombre, un ejemplo de esto:
program ConvertirFecha;
uses crt;
var
Mes, dia, annio : integer;

Program rebajas;
Uses crt;
Var
Cant : integer;
Pu : real;

Procedure escribir(mes, da, annio : integer);


Var
DosDigitos : integer;
Begin
DosDigitos:= annio mod 100;
Writeln(mes: 2, / , dia, / , DosDigitos);
End;

Procedure precio(cant : integer; pu : real);


Begin
Pu:= 0.80 * pu;
Writeln(El precio de hoy es= , pu * cant:0:2);
End;

Begin {principal}
Clrscr;
Writeln(Digite el mes, da y el ao);
Readln(mes, dia, annio);
Escribir(mes dia, annio);
Readln;
End.

Begin {principal}
Clrscr;
Write(Teclee la cantidad de artculos: );
Readln(cant);
Write(Teclee el precio del artculo: );
Readln(pu);
Precio(cant, pu);
Writeln(El precio maana ser: , cant * pu);
Readln;
End.

PARMETROS POR VARIABLE O REFERENCIAS (SALIDA):


Son bidireccionales, los parmetros por variable son utilizados por el procedimiento para recibir y transferir
informacin del y al programa principal o desde cualquier punto de llamada
Este tipo de parmetro se utiliza cuando el procedimiento debe proporcionar resultados al exterior. Toda
modificacin del parmetro del procedimiento repercute en el parmetro actual o real correspondiente.
Los parmetros de salida se escriben en el mismo parmetro precedidos por la palabra reservada VAR. Un
ejemplo ilustra:
En la definicin ser:
PROCEDURE MULTIPLICAR(A, B : INTEGER; VAR PRODUCTO: LONGINT)
BEGIN
PRODUCTO:= A * B;
END;

Entero Largo

Y en el llamado se escribe as: multiplicar(a, b, producto);


Ahora analicemos el siguiente segmento de programa:
X:= 15;
Y:= 20;
Multiplicar(x, y, total);
Writeln(El total es= , total);
Multiplicar(2, 6, resultado);
Writeln(El resultado es= , resultado);
OBSERVACIONES:
1. Multiplicar recibe en A y B los valores de X y Y.
2. Calcula el producto y transmite el resultado en el parmetro total y resultado respectivamente.
Otros ejemplos de la declaracin (en el encabezado);
Procedure Pago(var bruto : real; tasa, hora : real);
Procedure Obtener(mensaje : string; Var nombre : string);
Nota: Un parmetro por variable se pasa por referencia y no por valor, en este caso el parmetro actual pasado
por referencia no se duplica en la memoria, en su lugar slo recibe la direccin de memoria del valor original
del argumento.
Para pasar un parmetro por referencia, un parmetro actual debe ser una variable del tipo idntico al parmetro
formal correspondiente.
OBSERVACIONES:
1. Para utilizar una variable como medio de comunicacin bidireccional entre el procedimiento y un programa
llamador, se define un parmetro variable mediante VAR.
2. Para proteger el valor de una variable que acta como parmetro actual y evitar que el procedimiento llamado
modifique este valor, se pasa el argumento por valor. Para ello se omite la palabra reservada VAR en la lista de
los parmetros.

3. Las expresiones y constantes se pasan siempre por valor, ejemplo:


program ConPrametrosVar;
uses crt;
var
a, b, c : integer;
procedure parametro(x : integer; var y : integer; z : integer);
begin
inc(x, 20);
inc(y, 20);
inc(z, 20);
writeln(Dentro del procedimiento);
writeln(X= ,x, Y= ,y, Z= , z);
end;
begin { principal }
clrscr;
a:= 10;
b:= 20;
c:= 30;
writeln(A= ,a, B= ,b, C= , c);
parametro(a, b, c);
writeln(Despus del llamado al procedimiento);
writeln(A= ,a, B= ,b, C= , c);
readln;
end.
Notas:
1. El procedimiento acepta 3 parmetros X, Y, Z:
2. Cuando concluye la ejecucin del procedimiento X y Z se borran.
3. b recibe el valor modificado del parmetro variable y del procedimiento parmetro.
OBSERVACIONES:
1. La palabra reservada VAR indica al compilador que el valor del parmetro puede modificarse.
2. Cualquier cambio que un procedimiento realice sobre un parmetro variable, modificar el valor del parmetro
actual y sin ese efecto despus que se termine la ejecucin del procedimiento.
Dos usos del parmetro variable:
1. Para actualizar el valor de la variable global cuando esta actualizacin se basa en un valor previo.
2. Para leer y calcular un valor (nuevo) de una variable global, donde el valor (nuevo) se basa en un valor previo.
Ejemplo:
Procedure calculo(nombre : string; horas : integer; tasa : real; var total : real);
Var
Pago : real;
Begin
If horas <= 40 then
Pago:= horas * tasa
Else
Pago:= 40 * tasa + (horas - 40) * 1.5 * tasa;
Writeln(nombre, C$ , pago:0:2);
Total:= pago;
Readln;

End.
Program ejemplo;
Uses crt;
Var
X, y : integer;
Procedure HacerAlgo(x : integer; var y : integer);
Begin
X:= x + 2;
Y:= y + 6;
Writeln(x , ,y);
End;
Begin {principal}
Clrscr;
X:= 4;
Y:= 20;
Writeln(x, ,y);
HacerAlgo(x,y);
Writeln(x, , y);
HacerAlgo(x,y);
Readln;
End.

Program Tarea1;
Uses crt;
Var
A, b, w : integer;
Procedure ejecuta(var x : integer; y : integer);
Var
W : integer;
Begin
W:= 5;
X:= x + 1;
Y:= w + 2;
Writeln(x, , y, ,w);
End;
Begin {principal}
Clrscr;
A:=0; b:=0; w:=0;
Ejecuta(a, b);
Writeln(a, , b, ,w);
A:= a + 20;
W:= w +20;
Ejecuta(a, b);
Writeln(a, , b, ,w);
Readln;
End.

Program ultimo;
Uses crt;
Var
A, b : integer;

Program ConMuchoCuidado;
Uses crt;
Var
A, b, c : integer;

Procedure tonto(var a : integer; b : integer);


Begin
A:= a + 2 *b;
B:= a + 1;
Writeln(a, ,b);
End;

Procedure calculo(var x , y : integer; z : integer);


Begin
X:= x + 1;
Y:= y + 2 ;
Z:= z + 3;
Writeln(x, , y, , z);
End;

Begin {principal}
Clrscr,;
A:= 1;
B:= 6;
Tonto(a, b);
Writeln(a, , b);
Tonto(a, b);
Writeln(a, , b);
Readln;
End.

Begin
Clrscr;
A:= 10; b:= 20; c:= 30;
Calculo(b, c ,a);
Writeln(a, , b, , c);
Calculo(c, a, b);
Writeln(a, , b, , c);
readln;
end.

FUNCIONES DEFNIDAS POR EL USUARIO


Una funcin es idntica a un procedimiento, con una clara diferencia, LA FUNCIN RETORNA UN VALOR
ESPECFICO. Las funciones definidas por el programador, como en los procedimientos, permiten al cuerpo
principal delegar subtareas. La subtarea debe calcular y regresar un valor y nada ms.
Tiene la misma estructura que un procedimiento:
a) La cabecera
b) La seccin de declaracin y
c) El cuerpo de la declaracin.
Su sintaxis:
La cabecera:
Inicia con la palabra reservada FUNCTION, seguida de un identificador (EL NOMBRE DE LA FUNCIN), a
continuacin una lista de parmetros opcionales al igual que un procedimiento.
En la cabecera y separada por dos puntos (:) despus del cierre de los parntesis se debe indicar el tipo de datos
que devuelve la funcin, por ejemplo:
FUNCTION AREA (R : REAL) : REAL;
La seccin de declaracin:
Adems de los parmetros de valor, la funcin puede tener variables y constantes locales. La memoria para las
variables locales y los parmetros de valor funcionan de la misma manera que en los procedimientos.
El cuerpo:
En el cuerpo de la funcin debe tener una sentencia de asignacin en alguna parte del cuerpo de la funcin,
preferiblemente antes del END cuyo identificador de la izquierda es el nombre de la funcin, y el valor de la
derecha es el valor de una variable, valor o expresin de tipo adecuado de la funcin y es el resultado que
devuelve la funcin.
Tipos de datos que puede retornar una funcin:

Integer
Real
Boolean
String

Ejemplos:

Palabra
Reservada

Cabecera de la funcin:

Nombre de
la Funcin

Parmetros
formales

function maximo(x , y : real): real


Begin
If x > y then
Tipo
Maximo:= x
Devuelto
Else
Maximo:= y;
End;

Function area (r : real): real


Const
P:= 3.141592;
Begin
Area:= Pi * r * r;
End;
SU FORMATO GENERAL:
FUNCTION NOMBRE (LISTA DE PARMETROS): TIPO_DATO;
SECCIN DE DECLARACIN LOCAL
BEGIN

CALCULAR RESULTADOS;

ASIGNRSELO AL NOMBRE DE LA FUNCIN;

END;
EL LLAMADO A UNA FUNCIN:
Para llamar a un procedimiento se especfica su nombre y los argumentos adecuados. El llamado a una funcin
no es una instruccin, entonces trabaja de modo diferente. Pascal trata el llamado a una funcin como un valor.
De hecho, la llamada a una funcin se puede asignar a una variable o sacar los resultados a una pantalla o
impresora, por ejemplo:
Variable:= NombreFuncion;
y si se utilizan parmetro
Variable:= NombreFuncion(parmetro1, parmetro2, , parmetroN);
Ejemplos de llamados:
X:= maximo(a, b);
Z:= area(R);
Writeln(El rea es= , Z);
Writeln(El rea es= , area(5));
Tres aplicaciones comunes de llamados a funciones:
1. A la derecha de un enunciado de asignacin:
Z:= area(r);
2. Como un elemento de la instruccin write:
writeln(El rea es= , aerea(num));
3. Como parte de una funcin booleana:
if (area(num)) > 25.9 then
writeln(El rea es mayor que la estimada);

Ejemplo:
Program Alcubo;
Uses crt;
Var
Cubo, num : longint
Function encubo (n : integer ) : longint;
Begin
Encubo:= n * n * n;
End;
Begin {principal}
Clrscr;
Writeln(Escriba un nmero: );
Readln(num);
Cubo:= encubo(num);
Writeln(num, al cubo es , cubo);
Readln;
End.
FUNCIONES VERSUS PROCEDIMIENTOS:
Una de las aplicaciones ms comunes de las funciones se da en el clculo de un valor por seleccin mltiple. Se
pueden usar enunciados case o if anidados en el cuerpo de la funcin, por ejemplo:
Program chamarras;
Var
N, costo : integer;
Function calcosto (n : integer): integer;
Begin
If n >= 10 then
Calcosto:= n * 40
else
if n >= 5 then
calcosto:= n * 42
else
calcosto:= n * 44;
end;
Begin {principal}
Write(Escriba el nmero de chaquetas: );
Readln(n);
Costo:= calcosto(n);
Writeln(n, Chaquetas cuestan C$ , costo);
Readkey;
End.
Funciones o procedimientos?
Hay casos en los que se puede usar una funcin o n procedimiento. Por ejemplo, el programa chamarras se
podra haber hecho de dos maneras.
Es instructivo comparar el programa chamarras con un programa que use un procedimiento llamado calcosto. En
la versin con procedimientos, el costo podra ser impreso en el cuerpo del procedimiento calcosto. En esta
versin, costo sera una variable local del procedimiento, y en el cuerpo principal contendra la llamada:

Calcosto(n);
Ntese que en la versin con procedimientos el enunciado de llamada va sola, mientras que en la versin con
funcin la llamada a la funcin es una parte de otro enunciado, es decir:
Costo:= calcosto(n);
En trminos generales, si desea calcular e imprimir un procedimiento un valor nico a menudo tiene una
alternativa, Puede:
1. Calcular e imprimir el valor en el cuerpo del procedimiento, o
2. Utilizar una funcin para calcular el valor y luego pasar el resultado al cuerpo principal para su impresin.
REGLAS GENERALES PARA LAS FUNCIONES:
Aunque es vlido que el cuerpo de una funcin lea o imprima, es de muy mal estilo (los enunciados writeln solo
se consideran aceptables como ayudas temporales para anunciar).
Del mismo modo, aunque una funcin, desde el punto de vista tcnico, puede tener parmetros variables, no
debe utilizarse esta caracterstica. Para devolver ms de un valor, utilice un procedimiento. En resumen tenemos,
lo siguiente:
a)

Una funcin solo debe de utilizarse cuando el nico propsito del subprograma es devolver un
valor nico.
b) El cuerpo de una funcin no debe leer ni haber impresiones.
c) El encabezado de una funcin no debe contener parmetros variables.
En consecuencia, cuando alguien lee un programa de Pascal escrito con buen estilo, puede concluir que cualquier
funcin har solo una cosa, calcular y devolver un valor nico
PASANDO ARREGLOS COMO PARMETROS A PROCEDIMIENTOS Y FUNCIONES:
Dado que un arreglo es un tipo de datos, se puede enviar un arreglo como un parmetro a un subprograma; la
nica condicin es que el tipo de parmetro formal debe concordar con el tipo de parmetro actual enviado desde
el programa principal.
Cuando se escriba un procedimiento o una funcin que reciba un arreglo como un parmetro, el tipo debe ser
definido previamente en la seccin TYPE situado antes de la declaracin del subprograma, por ejemplo:
Type
Tipolista : array[1. . 40] of integer;
Var
Marca : Tipolista;
En la declaracin de la primera lnea de una funcin sera:
Function pruebauno (Tot : Tipolista; num : integer): integer;
En la declaracin de la primera lnea de un procedimiento sera:
Procedure Total (Tot : Tipolista; num : integer);
Aunque es posible declarar los arreglos como parmetros valor es ms eficiente declararlos como parmetros
variables, incluso aunque el procedimiento no modifique el arreglo. La razn es ahorro de almacenamiento en
memoria que puede redundar en un aumento de velocidad del programa. Ello es debido a que los parmetros
variables consumen tpicamente menos espacio de almacenamiento que los parmetros valor.

Program ConArreglosYFunciones;
Uses crt;
Const
NE = 100;
Type
Lista = array[1 .. NE] of integer;
Var
Puntos : lista;
Procedure inicializar(var valores: lista);
Var
I : integer;
Begin
For i:= 1 to NE do
Readln(Valores[i]);
End;
Function media(valores : lista): real;
Var
Suma, i : integer;
Begin
Suma:=0;
For i:= 1 to NE do
Suma:= suma + valores[i];
Media:= suma / NE;
End;
Function minimo(valores : lista): integer;
Var
Menor, i : integer;
Begin
Menor:= valores[1];
For i:= 2 to NE do
If valores[i] < menor then
Menor:= valores[i];
Minimo:=menor;
End;
Begin {principal}
Clrscr;
inicializar(Puntos);
Writeln(El valor de la media es = , media(puntos));
Writeln(El memor valor del arreglo es = , minimo(puntos));
End.

Otro ejemplo:
Program ConArreglos;
Uses crt;
Type
Matriz = array[1 .. 4,1.. 4] of integer;
Var
A, B, C : matriz;
I, j : integer;
Procedure sumar(A, B : matriz);
Var
I, j : integer;
Begin
For i := 1 to 4 do
Begin
For j:= 1 to 4 do
Begin
C[I,j]:= A[I,j] + B[I,j];
Write(c[I,j]);
End;
Writeln;
End;
End;
Begin {principal}
Clrscr;
Writeln(Escriba la Matriz A y B);
For i:= 1 to 4 do
For j:= 1 to 4 do
Begin
Write(Digite el elemento , i, de la fila , j, de la matriz A);
Readln(A[i,j]);
Writen(Digite elelemento , i, de la fila , j, de la matriz B);
Readln(B[i,j]);
End;
Writeln;
Sumar(A, B);
Readkey;
End.

PASANDO UN ELEMENTO DE UN ARREGLO COMO PARMETRO A PROCEDIMIENTOS Y


FUNCIONES:
Cuando pasamos un elemento de un arreglo a una funcin o a un procedimiento como parmetros, debemos de
considerar que el parmetro formal en el procedimiento o la funcin, deber ser del mismo tipo del elemento del
arreglo que estamos pasando en el parmetro actual, por ejemplo:
Program ConArreglos;
Uses crt;
Type
Arreglo = array[1 .. 4] of integer;
Var
A,B,C : arreglo;
I : integer;
Procedure sumar(A, B : integer);
Var
Suma : integer;
Begin
Suma:= A + B;
Writeln(La suma de los elementos de arreglo es , suma);
End;
Begin {principal}
Writeln(Escriba los arreglos A y B);
For i:= 1 to 4 do
Begin
Writeln(Digite el elemento , i, Del arreglo A );
Readln(A[i]);
Writeln(Digite el elemento , i, Del arreglo B );
Readln(B[i]);
Sumar(A[i],B[i]);
End;
Readkey;
End.
PASANDO REGISTROS COMO PARMETROS A PROCEDIMIENTOS Y FUNCIONES:
Un registro puede ser pasado como un parmetro una funcin o procediendo como parmetro actual, siempre y
cuando el correspondiente parmetro formal sea del mismo tipo. El uso de registro como parmetros abrevian
considerablemente la lista de los parmetros, ya que solo basta pasar un parmetro (la variable registro) en lugar
de diferentes parmetros (los campos del registro).
La manipulacin de registros se suele hacer mediante procedimientos. El procedimiento LeerEmpleado se puede
utilizar para leer los campos de una variable registro de tipo empleado. La variable registro se pasa por variable y
solo se necesita un parmetro, e lugar de seis. Por ejemplo:
Program ConRegistrosYprocedimientos;
Uses crt;
Const
Longcadena = 30;
Type
rangoDNI = 11111 .. 99999;
cad30 = string[longcadena];
genero =(varon, hembra);
Empleado = record
DNI : rangoDNI;
Nombre : cad30;

Sexo : genero;
Edad : integer;
Salario : real;
Profesion : string;
End;
Var
Persona : empleado;
Procedure LeerEmpleado(var trabajo : empleado);
Var
Carsexo : char;
Begin
With trabajador do
Begin
write(DNI );
readln(DNI);
write(Nombre );
readln(nombre);
write(Sexo V oH );
readln(carsexo);
case carsexo of
V, v : sexo:= Varon;
H, h : sexo:=Hembra;
end;
write(Edad );
readln(edad);
write(Salario );
readln(salario);
write(Profesin );
readln(profesion);
end;
end;
procedure imprimir(trabajador : empleado);
begin
with trabajador do
begin
writeln(DNI= , DNI);
writeln(Nombre= , nombre);
writeln(Sexo= , sexo);
writeln(Edad= , edad);
writeln(Salario C$= ,salario:0:2);
writeln(Profesin= , profesion);
end;
end;
begin {principal}
clrscr;
writeln(Leer los datos del empleado);
LeerEmpleado(persona);
writeln(Imprimiendo los datos de empleado);
imprimir(persona);
readln;
end.

PASANDOARREGLOS DE REGISTROS COMO PARMETROS A PROCEDIMIENTOS Y


FUNCIONES:
Un registro puede ser pasado como un parmetro a una funcin o procedimiento como parmetro actual, siempre
y cuando el correspondiente parmetro formal sea del mismo tipo. El uso de registro como parmetro abrevia
considerablemente la lista de los parmetros, ya que solo basta pasar un parmetro (El arreglo de registro) en
lugar de diferentes parmetros (los campos del registro).
Aqu se debe de considerar que un arreglo de registro se debe manipular con las mismas reglas del paso de
arreglos como parmetros a procedimientos y funciones. Por ejemplo:
Program ConErreglosDeRegistroYParametros;
Uses crt;
Const
Longcadena= 30;
Tamano= 10;
Type
rangoDNI= 11111.99999;
cad30= string[longcadena];
genero= (varon, hembra);
empleado= record
DNI : rangoDNI;
Nombre : cad30;
Sexo : genero;
Edad : integer;
Salario : real;
Profesion : string[15];
End;
Emp = array[1 .. tamano] of empleado;
Var
Persona : emp;
Procedure LeerEmpleado(var trabajador : emp);
Var
Carsexo : char;
I : integer;
Begin
For i:=1 to tamano do
Begin
Writeln(Datos del trabajador , i);
With trabajador[i] do
Begin
Write(DNI );
Readln(DNI);
Write(Nombre );
Readln(nombre);
Write(sexo V o H );
Readln(carsexo);
Case carsexo of
V, v : sexo:= Varon;
H, h : sexo:= Hembra;
end;
Write(Edad );
Readln(edad);
Write(Salario );
Readln(salario);
Write(Profesin );
Readln(profesion);

End;
End;
End;
Procedure imprimir(trabajador : emp);
Var
I : integer;
Begin
For i:= 1 to tamano do
Begin
Writeln(Datos del trabajador ,i);
With trabajador[i] do
Begin
Writeln(DNI= ,DNI);
Writeln(Nombre= ,nombre);
Writeln(Sexo ,sexo);
Writeln(Edad ,edad);
Writeln(Salario C$ , salario:0:2);
Writeln(Profesin= ,profesion);
End;
End;
End;
Begin {principal}
Clrscr;
Writeln(Para leer los datos de los , tamano, Empleados);
LeerEmpleados(persona);
Writeln(Imprimiendo los datos de los ,tamano, Empleados);
Imprimir (persona);
Readkey;
End.
PASANDO UN CAMPO A UNA VARIABLE DE REGISTRO Y UN CAMPO DE UN ARREGLO COMO
PARMETROS A PROCEDIMIENTOS Y FUNCIONES:
Cuando pasamos un campo de una variable de registro o un campo de un arreglo de registro a una funcin o a un
procedimiento como parmetros, debemos de considerar que el parmetro formal en el procedimiento o la
funcin, deber ser del mismo tipo del campo de la variable de registro o del mismo tipo de campo del arreglo de
registro que estamos pasando en el parmetro actual.

ARCHIVOS: Un archivo es una estructura homognea de datos consistente en una secuencia de elementos
llamados registros, todos del mismo tipo, ya sea simple o estructurado. Un archivo se almacena en un dispositivo
auxiliar (discos, cintas, etc.) de forma que los datos obtenidos antes, durantes y despus del proceso de los datos,
no se pierden. Para declarar una variable archivo es necesario definir previamente la naturaleza de sus registros.
Ejemplo:
Type
TipoRegistro = Record
Campo1 : Tipo1;
.
.
.
campo N : TipoN;
End;
TipoArchivo = File of TipoRegistro.
Var
Archivo1 : Tipoarchivo;

Registro : TipoRegistro;
OPERACIONES BSICAS CON ARCHIVOS:
ASSIGN: Este procedimiento asigna un archivo lgico con su archivo fsico correspondiente. Despus de la
asignacin, cualquier operacin sobre la variable archivo afectar el archivo Dos correspondiente.
Ejemplo:

ASSIGN(VarArch, NomArch);

RESET: Procedimiento que abre un archivo para lectura posicionando el puntero de lectura del archivo en el
primer elemento del archivo, y poniendo la variable booleana EOF asociada al archivo a FALSE, o en la marca
de fin de archivo si el archivo est vaco, en cuyo caso la variable EOF toma el valor TRUE. No se puede
modificar el contenido de ningn registro.
Ejemplo:

RESET(NomArchivo);

IORESULT: Funcin que devuelve el nmero del tipo de error cometido en el tratamiento de archivos. Si no
hay ningn error devuelve O.
REWRITE: El procedimiento Rewrite abre un archivo para escritura destruyendo en contenido del archivo si
este ya existe. No es posible ver datos de un archivo que est abierto con este procedimiento, ya que borra los
datos existentes.
READ: Este procedimiento se utiliza para introducir el contenido de un registro del archivo en una variable de
memoria definida del mismo tipo de dato que el registro ledo.
Ejemplo:

READ(NomArchivo, NomVarReg);

EOF: En la lectura del ltimo registro el salto del puntero posiciona ste sobre la marca de fin de archivo,
colocando la funcin lgica EOF fin de archivo asociada a cada archivo a verdadero.
Ejemplo:

EOF(VarArchivo);

Ejemplo:
While not eof(pruebas) do
Begin
Read(pruebas, info);
Write(info);
End;
WRITE: El procedimiento write escribe en un registro del archivo el contenido de una variable de memoria
definida del mismo tipo.
Ejemplo: WRITE(NomVArArchivo, NomVarReg);

ARCHIVOS DE ACCESOS DIRECTOS:


Estn formados por registros del mismo formato y longitud por lo que permite el acceso a un registro especfico
mediante un nmero asociado al mismo, que se denomina su nmero de registro lgico.
El nmero asociado es de tipo longint y se asigna al primer registro lgico el valor O. para que un archivo pueda
ser tratado por posicionamiento o acceso directo debe residir obligatoriamente en un dispositivo de
almacenamiento de este tipo.
La declaracin de una archivo de acceso directo es idntica a la de otros archivos y solo se distingue de ellos por
la funciones de posicionamiento en un registro. El contenido de un archivo directo se almacena en un disco bajo

forma binaria comprimida y no es visualizable directamente en pantalla, como los archivos de texto, con la orden
TYPE o DOS o con editores.
Los principales operadores de archivos de acceso directo que se usan en Pascal son:
REESET Abrir archivo existente.
REWRITE Abrir un archivo nuevo.
So dos procedimientos para abrir el archivo de acceso directo, ya sea con un procedimiento u otro, el archivo se
abrir para lectura y escritura.
FILESIZE: Tamao del archivo en formato longint, indica el nmero de registros almacenados. Si el fichero
est vaco devuelve el valor O.
SEEK: Permite seleccionar un registro especfico del archivo por su nmero de registro, para su uso en una
operacin d lectura o escritura.
READ Lectura del registro actual.
WRITE Escritura sobre el registro actual.
CLOSE Cerrar el archivo.
Tratamiento de archivos desde Turbo Pascal:
El Turbo Pascal permite manipular archivos y directorios en disco de modo similar al sistema operativo SMDOS. Pudindose realizar las siguientes operaciones con archivos y directorios:
Erase (NomVarArchivo)
Rename (NomVarArchivo, NombreNuevoArchivo)
Chdir (directorio)
Mkdir (directorio)
Rmdir (directorio)
Getdir (Unidad, camino)
Unidad = 0 unidad de arranque
Unidad = 1 A:
Unidad = 2 B:
Unidad = 3 C:
Camino contiene el directoria actual.
Getdir obtiene la unidad y camino del directorio actual de una unidad y lo almacena en las variables unidad, de
tipo byte y cambio de tipo string.

GUA DE PROGRAMAS DE TURBO PASCAL


7.0

METODOLOGA DE LA PROGRAMACIN.
Programacin en Pascal
Elaborado por: Lic. Carlos Lennin Quiroz P.
El objetivo de este documento es proveer de una gran batera de ejercicios resueltos en Pascal
que parten del nivel ms bsico hasta llegar a estructuras de datos ms complejas.
Al final podris ir encontrando las prcticas que voy realizando en mi universidad.
Gracias a todos por vuestra confianza.
Escribir un programa en Pascal que sume, reste multiplique y divida dos nmeros
reales:
PROGRAMEJER2B;
USESCRT;
VAR
x,y,suma,rest,mult,divi:REAL;
BEGIN
WRITELN('Esteprogramasuma,resta,multiplicaydivide:');
WRITELN('Escribaprimernmeroreal');
Read(x);
WRITELN('Escribasegundonmeroreal');
Read(y);
suma:=x+y;
rest:=xy;
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);
Readln;
END.

Escribir un programa en Pascal que calcule el rea de un rectngulo:


rea del rectngulo= lado1 * lado2
PROGRAMEJER3B;
USESCRT;
VAR
lado1,lado2,area:REAL;
BEGIN
{Esteprogramacalculaelreadeunrectngulo}
ClrScr;
WRITELN('Escribaelladounodelrectngulo');
Read(lado1);
WRITELN('Escribaelladodosdelrectngulo');
Read(lado2);
WRITELN('');
area:=lado1*lado2;
WRITE('AREADELRECTANGULO:');
WRITE(area:5:2);
Readln;
END.

Escribir un programa en Pascal que calcule el rea de un tringulo:


rea del tringulo = (base * altura)/2
PROGRAMEJER4B;
USESCRT;
VAR
base,altura,area:REAL;
BEGIN{Esteprogramasirveparacalcularelareadeuntriangulo}
ClrScr;
WRITELN('PARACALCULARELAREADEUNTRIANGULO:');
WRITELN('');
WRITE('ESCRIBELABASE:');
READLN(base);
WRITE('ESCRIBELAALTURA:');
READLN(altura);
WRITELN('');
area:=(base*altura)/2;
WRITE('ELAREADELTRIANGULOES:');
WRITE(area:5:2);
Readln;
END.

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


Longitud de la circunferencia = 2 * PI * radio
rea de la circunferencia = PI * radio
2

PROGRAMEJER05;
USESCRT;

VAR
radio,longitud,area:REAL;
BEGIN
Writeln(Digiteelradio);
Readln(radio);
longitud:=2*3.1416*radio;
area:=3.1416*radio*radio;
ClrScr;
WRITE('LONGITUDDELACIRCUNFERENCIA:');
WRITELN(longitud:5:2);
WRITE('AREADELACIRCUNFERENCIA:');
WRITE(area:5:2);
Readln;
END.

Escribir un programa en Pascal que calcule la velocidad de un proyectil que recorre


2Km en 5 minutos. Expresar el resultado en metros/segundo.
Velocidad = espacio/tiempo
PROGRAMEJER6B;
USESCRT;
VAR
espacio,tiempo,espacio2,tiempo2,velocidad,velocidad2:REAL;
BEGIN {Esteprogramacalculalavelocidaddeuncuerpo}
ClrScr;
WRITE('Paracalcularlavelocidaddebeescribirloenunidades');
WRITE('delsistemainternacional');
WRITELN('');
WRITE('Escribaelespaciorecorrido:');
READLN(espacio);
WRITE('Escribaeltiempotranscurrido:');
READLN(tiempo);
WRITELN('');
velocidad:=(espacio)/(tiempo);
WRITE('VELOCIDADDELPROYECTIL:');
WRITE(velocidad:5:2);
WRITELN('m/s');
WRITELN('');
WRITELN('SilodeseaenKm/hintroduzcalosdatos:');
WRITELN('');
WRITE('Escribaelespaciorecorrido:');
READLN(espacio2);
WRITE('Escribaeltiempotranscurrido:');
READLN(tiempo2);
WRITELN('');
velocidad2:=(espacio2)/(tiempo2);
WRITE(velocidad2:5:2);
WRITE('Km/h');
readln;
END.

Escribir un programa en Pascal que calcule el volumen de una esfera:


Volumen de la esfera = 4/3 * PI * radio
3

PROGRAMEJER07;
USESCRT;
VAR
Radio,volumen:REAL;
BEGIN {Esteprogramacalculaelvolumendeunaesfera}
ClrScr;
WRITELN('PARACALCULARELVOLUMENDELAESFERAESCRIBAELRADIO:');
READLN(radio);
volumen:=(4/3)*3.1416*(radio*radio*radio);
WRITE('VOLUMENDELAESFERA:');
WRITE(volumen:5:2);
Readln;
END.

Escribir un programa en Pascal que evale la siguiente expresin:


(a+7*c)/(b+2-a)+2*b
PROGRAMEJER8B;
USESCRT;
VAR
a,b,c,resultado:REAL;
BEGIN{Esteprogramacalculaunaexpresionalgebraica}
ClrScr;
WRITELN('Esteprogramasirveparacalcularlasiguienteexpresion:');
WRITELN('(a+7*c)/(b+2a)+2*b');
WRITELN('');
WRITE('Introduzcaa:');
READLN(a);
WRITE('Introduzcab:');
READLN(b);
WRITE('Introduzcac:');
READLN(c);
resultado:=(a+7*c)/(b+2a)+2*b;
WRITELN('');
WRITE('RESULTADO:');
WRITE(resultado:5:2);
Readln;
END.

Escribir un programa en Pascal que evale la siguiente expresin:


(a+5) * 3 / 2 * b - b
PROGRAMEJER9B;
USESCRT;
VAR
a,b,resultado:REAL;
BEGIN {Esteprogramacalculaelresultadodeunaexpresinalgebraica}
ClrScr;
WRITE('PARACALCULARLASIGUIENTEEXPRESION:');
WRITELN('((a+5)*3)/(2*bb)');
WRITELN('');
WRITE('Escribaa:');
READ(a);
WRITE('Escribab:');

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

Escribir un programa en Pascal que evale la siguiente expresin:


(-b + (b -4*a*c)/(2*a)
(es la solucin positiva de una ecuacin de 2 grado)
2

PROGRAMEJER10B;
USESCRT;
VAR
a,b,c,resultado:REAL;
BEGIN {Calculalaincgnitapositivadeunaecuacinde2grado}
ClrScr;
WRITE('Paracalcularlaincgnitapositivadeunaecuacin');
WRITE('desegundogradoescribatodaslasvariables:');
WRITELN('');
WRITELN('');
WRITE('Escribaa:');
READLN(a);
WRITE('Escribab;');
READLN(b);
WRITE('Escribac;');
READLN(c);
WRITELN('');
resultado:=(b+sqrt(sqr(b)4*a*c))/(2*a);
WRITE('RESULTADO:');
WRITE(resultado:5:2);
Readln;
END.

Escribir un programa en Pascal que calcule el rea y el volumen de un cilindro:


A = (2 * (PI * r )) + ((2 * PI * r) * h)
V = (PI * r2) * h
2

PROGRAMEJER11;
USESCRT;
VAR
r,h,a,v:REAL;
BEGIN {AREAYVOLUMENDEUNCILINDRO}
ClrScr;
WRITE('RADIODELCILINDRO:');
READLN(r);
WRITE('ALTURADELCILINDRO:');
READLN(h);
a:=(2*(3.1416*sqr(r)))+((2*3.1416*r)*h);
v:=(3.1416*sqr(2))*h;

ClrScr;
WRITE('AREADELCILINDRO:');
WRITELN(a:5:2);
WRITE('VOLUMENDELCILINDRO:');
WRITELN(v:5:2);
Readln;
END.

Escribir un programa en Pascal que calcule el rea y el volumen de un hexaedro:


A = (l*l) * 6
V=l
3

PROGRAMEJER12B;
USESCRT;
VAR
Lado,area,volumen:REAL;
BEGIN
ClrScr;
WRITE('INTRODUCEELLADODELHEXAEDRO:');
READLN(lado);
WRITELN('');
area:=(lado*lado)*6;
volumen:=sqr(lado)*lado;
WRITE('AREADELHEXAEDRO:');
WRITE(area:5:2);WRITELN('m2');
WRITE('VOLUMENDELHEXAEDRO:');
WRITE(volumen:5:2);
WRITE('m3');
Readln;
END.

Escribir un programa en Pascal que calcule el rea y el volumen de un prisma


A = (2 *(l1 * l2)) + (2 * (l1 * l3)) + (2*(l2 * l3))
V = l1 * l2 * l3
PROGRAMEJER13B;
USESCRT;
VAR
l1,l2,l3,area,volumen:REAL;
BEGIN {Calculaelreayvolumendeunprisma}
ClrScr;
WRITELN('PARACALCULARELAREAYELVOLUMENDELPRISMA,ESCRIBA:');
WRITELN('');
WRITE('Lado1:');
READLN(l1);
WRITE('Lado2:');
READLN(l2);
WRITE('Lado3:');

READLN(l3);
WRITELN('');
area:=2*(l1*l2)+(2*(l1*l3))+(2*(l2*l3));
volumen:=l1*l2*l3;
WRITE('AREADELPRISMA:');
WRITELN(area:5:2);
WRITE('VOLUMENDELPRISMA:');
WRITE(volumen:5:2);
Readln;
END.

Escribir un programa en Pascal que calcule el rea y el volumen de un tetraedro:


A = a * razcuadrada(3)
V = (a /12) * razcuadrada (2)
2

PROGRAMEJER14B;
USESCRT;
VAR
Arista,area,volumen:REAL;
BEGIN {Calculaelreayelvolumendeunoctaedro}
WRITELN('SIDESEACALCULARELAREAYELVOLUMENDEUNTETRAEDRO:');
WRITELN('');
WRITE('INTRODUZCAELVALORDESUARISTA:');READLN(arista);
WRITELN('');
area:=sqr(arista)*sqrt(3);
volumen:=((sqr(arista)*arista)/12)*sqrt(2);
WRITE('AREADELTETRAEDRO:');
WRITELN(area:5:2);
WRITE('VOLUMENDELTETRAEDRO:');
WRITE(volumen:5:2);
Readln;
END.

Escribir un programa en Pascal que calcule el rea y el volumen de un octaedro:


A = 2 * a * razcuadrada(3)
V=(a /3) * razcuadrada(2)
2

PROGRAMEJER15B;
USESCRT;
VAR
Arista,area,volumen:REAL;
BEGIN {Sirveparacalcularelareayelvolumendeuntetraedro}
WRITELN('PARACALCULARELAREAYVOLUMENDEUNTETRAEDRO:');
WRITE('ESCRIBAELVALORDELAARISTA:');
READLN(arista);
WRITELN('');
area:=2*sqr(arista)*sqrt(3);
volumen:=((sqr(arista)*arista)/3)*sqrt(2);
WRITE('AREADELOCTAEDRO:');
WRITELN(area:5:2);
WRITE('VOLUMENDELOCTAEDRO:');

WRITE(volumen:5:2);
Readln;
END.

Escribir un programa en Pascal que calcule el rea y el volumen de un cono:


A = (PI * r * l)+ (PI * r )
V = (PI * r2 * h)/3
2

PROGRAMEJER16B;
USESCRT;
VAR
radio,lado,altura,area,volumen:REAL;
BEGIN {Seutilizaparacalcularelareayvolumendeuncono}
WRITELN('Paracalcularelareayelvolumendeuncono:');
WRITELN('');
WRITE('Escribaelvalordelradio:');
READLN(radio);
WRITE('Escribaelvalordellado:');
READLN(lado);
WRITE('Escribaelvalordelaaltura:');
READLN(altura);
WRITELN('');
area:=(3.1416*radio*lado)+(3.1416*sqr(radio));
volumen:=(3.1416*sqr(radio)*altura)/3;
WRITE('AREADELCONO:');
WRITELN(area:5:2);
WRITE('VOLUMENDELCONO:');
WRITE(volumen:5:2);
Readln;
END.

Escribir un programa en Pascal que calcule el volumen de un elipsoide:


V = (4/3) * PI * a * b *c
PROGRAMEJER17B;
USESCRT;
VAR
a,b,c,volumen:REAL;
BEGIN {Calculaelvolumendeunelipsoide}
ClrScr;
WRITELN('PARACALCULARELVOLUMENDEUNELIPSOIDEESCRIBA:');
WRITELN('');
WRITE('A:');
READLN(a);
WRITE('B:');
READLN(b);

WRITE('C:');
READLN(c);
volumen:=(4/3)*3.1416*a*b*c;
WRITE('VOLUMENDELELIPSOIDE:');
WRITE(volumen:5:2);
Readln;
END.

Escribir un programa en Pascal que calcule las races de una ecuacin de 2 grado:
PROGRAMEJER18B;
USESCRT;
VAR
a,b,c,resultado1,resultado2:REAL;
BEGIN {Calculaecuacionesdesegundogrado}
ClrScr;
WRITE('ESTEPROGRAMASIRVEPARACALCULARECUACIONES');
WRITELN('DESEGUNDOGRADO');
WRITELN('');
WRITELN('Introduzcaa:');
READLN(a);
WRITELN('Introduzcab:');
READLN(b);
WRITELN('Introduzcac:');
READLN(c);
resultado1:=(b+sqrt(sqr(b)4*a*c))/(2*a);
resultado2:=(bsqrt(sqr(b)4*a*c))/(2*a);
WRITELN('RESULTADODELAEXPRESION:');
WRITE('VALOR1:');
WRITELN(resultado1:5:2);
WRITE('VALOR2;');
WRITE(resultado2:5:2);
Readln;
END.

Escribir un programa en Pascal que calcule el rea y el volumen de un cilindro:


PROGRAMEJER19B;
USESCRT;
VAR
radio,altura,area,volumen:REAL;
BEGIN {Conesteprogramapodremoscalcularelareayelvolumen
deuncilindro}
ClrScr;
WRITELN('PARACALCULARELAREAYVOLUMENDEUNCILINDRO:');
WRITELN('');
WRITE('ESCRIBAELRADIO:');
READLN(radio);

WRITE('ESCRIBALAALTURA:');
READLN(altura);
WRITELN('');
area:=2*(3.1416*sqr(radio))+((2*3.1416*radio)*altura);
volumen:=(3.1416*sqr(radio))*altura;
WRITE('ELAREADELCILINDROES:');
WRITELN(area:6:2);
WRITE('ELVOLUMENES:');
WRITE(volumen:6:2);
Readln;
END.

Escribir un programa en Pascal que calcule la hipotenusa de un tringulo


rectngulo:
PROGRAMEJER20;
USESCRT;
VAR
c1,c2,h:REAL;
BEGIN
ClrScr;
WRITE('Introduzcacateto_1:');
READLN(c1);
WRITE('Introduzcacateto_2:');
READLN(c2);
h:=sqrt(sqr(c1)+sqr(c2));
WRITE('Cateto_1>');
WRITELN(c1:5:2);
WRITE('Cateto_2>');
WRITELN(c2:5:2);
WRITE('Hipotenusa>');
WRITELN(h:5:2);
Readln;
END.

Escribir un programa en Pascal que calcula el equivalente en grados Fahrenheit o


Celsius de las siguientes temperaturas:
Temperatura 1 = 32 Fahrenheit
Temperatura 2 = 10 Celsius
{Regla de 3: Celsius / 5 = (Fahrenheit . 32) 9}
PROGRAMEJER21B;
USESCRT;
VAR
Fahrenheit,Celsius,T1C,T2F:REAL;
respuesta:CHAR;
BEGIN
ClrScr;
REPEAT
BEGIN
WRITE('DESEAPASARLOAFAHRENHEITOCELSIUS?F/C:');

READLN(respuesta);WRITELN('');
END;
UNTIL(respuesta='C')OR(respuesta='F')OR(respuesta='c')OR
(respuesta='f');
IFUPCASE(respuesta)='F'THEN
BEGIN
WRITELN('IntroduzcalosgradosparapasaraFahrenheit:');
WRITE('Celsius:');READLN(Celsius);
Fahrenheit:=((9*Celsius)/5)+32;
WRITE(Fahrenheit:5:2,'gradosFahrenheit.');
WRITELN('');
END
ELSEIFUPCASE(respuesta)='C'THEN
BEGIN
WRITELN('IntroduzcalosgradosparapasaraCelsius:');
WRITE('Fahrenheit:');READLN(Fahrenheit);
Celsius:=((Fahrenheit32)/9)*5;
WRITE(Celsius:5:2,'gradosCelsius.');
END;
Readln;
END.
PROGRAMEJER21;
USESCRT;
VAR
t_C,t_F:REAL;
BEGIN
ClrScr;
WRITE('Introduzcatemperatura:(Celsius):');
READLN(t_C);
t_F:=((t_C*9)/5)+32;
ClrScr;
WRITE(t_C:5:2);
WRITE('Celsiusequivalena');
WRITE(t_F:5:2);
WRITE('Fahrenheit');
Readln;
END.

Escribir un programa que lea dos nmeros enteros A y B, y obtenga los valores A div
B, A mod B.
PROGRAMEJERDIV;
UsesCrt;
Var
A,B,soluc:Integer;
Begin
ClrScr;
WRITELN('Introduzcadosnmeros:');
WRITELN;
WRITE('DimeunNmero:');
READLN(A);
WRITE('DimeotroNmero:');
READLN(B);
WRITELN;

soluc:=AdivB;{divhaceladivisinde2nmerosenteros}
WRITELN('AdivB=',soluc);
WRITELN;
soluc:=AmodB;{modmuestraelrestodeunadivisinde2enteros}
WRITELN('AmodB=',soluc);
Readln;
End.

Escribir un programa en Pascal que calcule el nmero de horas, minutos y segundos


que hay en 3700 segundos.
PROGRAMEJER22B;
USESCRT;
VAR
horas,minutos,segundos,cantidad:INTEGER;
BEGIN
ClrScr;
WRITE('Escribalossegundosparatransformarloahoras,');
WRITELN('minutosysegundos');
READLN(cantidad);{Eselnumerodesegundosqueseintroducen}
WRITELN('');
horas:=cantidaddiv3600;
minutos:=(cantidadmod3600)div60;
segundos:=(cantidadmod3600)(minutos*60);
{Lossegundosson:lashoraslosminutospasadosasegundos}
WRITELN('EN',cantidad,'SEGUNDOSHAY:');
WRITE(horas,'horas',minutos,'minutos',segundos,'segundos');
Readln;
END.

Escribir un programa en Pascal que calcule el capital producido por un capital de


1.000.000 de pesetas, al cabo de un ao depositado a un inters del 2%.
PROGRAMEJER23;
USESCRT;
VAR
capital,tiempo,interes,capitalproducido:REAL;
BEGIN
Clrscr;
capital:=1000000;
tiempo:=1;
interes:=2;
capitalproducido:=capital*(interes/100);
ClrScr;
WRITE('Enunaoseproducirauncapitalde');
WRITE(capitalproducido:0:2);
WRITE('pesetas');
Readln;
END.
PROGRAMEJER23B;
USESCRT;
VAR
capital,interes,capitalproducido,captot:REAL;

tiempo:integer;

BEGIN
ClrScr;
WRITELN('PARACALCULARELCAPITALPRODUCIDOINTRODUZCA');
WRITELN('');
WRITE('Capital:');
READLN(capital);
WRITE('Tiempo:');
READLN(tiempo);
WRITE('Interes:');
READLN(interes);
WRITELN('');
capitalproducido:=(capital*(interes/100)*tiempo);
captot:=capital+capitalproducido;
WRITE('En',tiempo,'aosseproduciruncapitalde');
WRITELN(capitalproducido:0:2,'pesetas.');
Writeln('Capitaltotal:',captot:0:2,'pesetas.');
Readln;
END.

PROGRAMEJER23;
USESCRT;
VAR
capital,interes,intereses:REAL;
BEGIN
ClrScr;
WRITE('Capital:');
READLN(capital);
WRITE('Intefes:');
READLN(interes);
intereses:=capital*(interes/100);
ClrScr;
WRITE('Capital:');
WRITELN(capital:5:2);
WRITE('Interes:');
WRITELN(interes:5:2);
WRITE('Intereses:');
WRITELN(intereses:5:2);
Readln;
END.

Escribir un programa en Pascal que calcula la siguiente expresin trigonomtrica


para un valor angular de 90.
(sen x * cos x)/(tan x)
PROGRAMEJER24B;
USESCRT;
VAR
resultado,resultado2,x:REAL;
BEGIN

Clrscr;
WRITELN('PARACALCULARLAEXPRESION:(sin(x)*cos(x))/tan(x)');
WRITELN('INTRODUZCAELVALORDEXENRADIANES:');
READLN(x);
WRITELN('');
resultado:=(sin(x)*cos(x))/(sin(x)/cos(x));
WRITE('Elresultadodelaexpresin(sinx*cosx/tgx)esiguala:');
WRITE(resultado:5:2);
Readln;
END.

Escribir un programa en Pascal que calcule el equivalente en pies de una longitud


dada en metros.
1 metro -------------39.27 pulgadas
12 pulgadas --------1 pie
1 pulgada------------25.4 mm
PROGRAMEJER25B;
USESCRT;
VAR
metros,pies:REAL;
BEGIN {Paracalcularlaequivalenciaentrepiesymetros}
ClrScr;
WRITELN('INTRODUZCALOSMETROSPARAPASARLOSAPIES:');
WRITELN;
WRITE('Metros:');
READLN(metros);
pies:=metros/(12/39.27);
{1pie=0.3048metros}
{1pulgada=25.4mm}
WRITE('Dichacantidadenmetrosesequivalentesa',pies:3:2,'pies');
Readln;
END.

PROGRAMEJER25;
USESCRT;
VAR
Longitude:REAL;
BEGIN
ClrScr;
WRITE('Longitud(metros):');
READLN(longitud);
WRITE((longitud*39.27)/12:5:2,'pies');
Readln;
END.

Escribir un programa en Pascal que calcule el rea de un rectngulo a partir de sus


coordenadas:
PROGRAMEJER26B;
USESCRT;
VAR

x1,x2,y1,y2,area:REAL;
BEGIN {calculaelreadeunrectngulo}
clrscr;
WRITELN('Paracalcularelreadelrectngulo');
WRITELN('introduzcaelvalordelascoordenadas');
WRITELN;
WRITE('Introduzcacoordenadax1:');
READLN(x1);
WRITE('Introduzcacoordenaday1:');
READLN(y1);
WRITE('Introduzcacoordenadax2:');
READLN(x2);
WRITE('Introduzcacoordenaday2:');
READLN(y2);
WRITE('readelrectngulo:');
WRITE((x2x1)*(y2y1):5:2);
Readln;
END.

Un coche se mueve, partiendo del reposo, con una aceleracin constante de 8 m/s2.
Escribir un programa en Pascal que calcule:
a) La velocidad instantnea al cabo de5 segundos.
b) La velocidad media durante los primeros 5 segundos del recorrido.
Velocidad instantnea = velocidad inicial + aceleracin * tiempo
Velocidad media = (velocidad inicial + velocidad final)/2
PROGRAMEJER27;
USESCRT;
VAR
Velocidad0,aceleracion,tiempo,velocidad5,velocmedia5:REAL;
BEGIN
Clrscr;
velocidad0:=0;
aceleracion:=8;
tiempo:=5;
velocidad5:=velocidad0+(aceleracion*tiempo);
velocmedia5:=(velocidad0+velocidad5)/2;
ClrScr;
WRITE('LAVELOCIDADINSTANTANEAALCABODE5sESDE:');
WRITEln(velocidad5:0:2,'m/s');
WRITE('LAVELOCIDADMEDIAALCABODE5sESDE:');
WRITEln(velocidad5:0:2,'m/s');
Readln;
END.
PROGRAMEJER27B;

USESCRT;
VAR
velocidad0,aceleracion,tiempo,velocidadfinal:real;
vinstantanea,vmedia:REAL;
BEGIN
ClrScr;
WRITE('ESCRIBAELVALORDELAVELOCIDADINICIAL,LAACELERACION');
WRITEln('YELTIEMPO,ENUNIDADESDELSISTEMAINTERNACIONAL,');
WRITEln('PARACALCULARLAVELOCIDADINSTANTANEA');
WRITELN;
WRITELN;
WRITE('Velocidadinicial:');
READLN(velocidad0);
WRITE('Aceleracion:');
READLN(aceleracion);
WRITE('Tiempo:');
READLN(tiempo);
WRITELN('');
vinstantanea:=velocidad0+(aceleracion*tiempo);
IFvinstantanea>0THEN
WRITE('LAVELOCIDADINSTANTANEAESDE:',vinstantanea:5:2,'m/s')
ELSE
WRITE('ELCOCHEESTAPARADO.');
WRITELN;
IFvinstantanea<0THEN
WRITE('NOSEPUEDEHALLARALESTARPARADO');
IFvinstantanea>0THEN
WRITE('Sideseasaberlavelocidadmediaintroduzcalavelocidadfinal:
');
READLN(velocidadfinal);
WRITE;
WRITELN;
vmedia:=(velocidad0+velocidadfinal)/2;
WRITE('LAVELOCIDADMEDIAESDE:',vmedia:5:2,'m/s');
Readln;
END.
PROGRAMEJE27;
USESCRT;
VAR
v,a,t:REAL;
BEGIN
ClrScr;
WRITE('Velocidadinicial(m/s)>');
READLN(v);
WRITE('Aceleracion(m/s2)>');
READLN(a);
WRITE('Tiempo(s)>');
READLN(t);
WRITE('Velocidadinstantanea:',(v+a*t:5:2);
WRITE('Velocidadmedia:',((v+(v+a*t))/2:5:2);
Readln;
END.

Un cohete se lanza verticalmente con una velocidad de 500 m7s calcular la velocidad
al cabo de 40 segundos mediante un programa en Pascal.

velocidad instantnea = (velocidad inicial) . (aceleracin de la gravedad * tiempo)


PROGRAMEJER28;
USESCRT;
CONST
gravedad=9.81;
VAR
velocidad0,tiempo,velocidadfinal:REAL;
BEGIN
Clrscr;
velocidad0:=500;
tiempo:=40;
velocidadfinal:=velocidad0(gravedad*40);
WRITE('Lavelocidadalos40s.esde:');
WRITE(velocidadfinal:4:2,'m/s');
Readln;
END.
PROGRAMEJER28;
USESCRT;
VAR
v,g,t:REAL;
BEGIN
ClrScr;
g:=9.8;
WRITE('Velocidadinicial(m/s)>');
READLN(v);
WRITE('Tiempo(s)>');
READLN(t);
WRITE('Velocidadinstantnea:',v(g*t):5:2);
Readln;
END.

Escribir un programa en Pascal que detecte si un nmero introducido desde le


teclado es positivo o negativo.
PROGRAMEJER29;
USESCRT;
VAR
Num:INTEGER;
BEGIN
ClrScr;
WRITE('Introduzcaunnmeroentero:');
READLN(num);
IFnum>0THEN
WRITE('Elnumeroespositivo')
ELSE
IFnum<0THEN
WRITE('Elnumeroesnegativo')
ELSE
WRITE('Elnumeronoespositivoninegativo,es0');
Readln;

END.

Escribir un programa en Pascal que detecte si se han introducido en orden creciente


tres nmeros introducidos por el usuario.
PROGRAMEJER30;
USESCRT;
VAR
num1,num2,num3:INTEGER;
BEGIN
ClrScr;
WRITE('Introduzcaprimernmero:');
READLN(num1);
WRITE('Introduzcasegundonmero:');
READLN(num2);
WRITE('Introduzcatercernmero:');
READLN(num3);
IF((num1<num2)AND(num2<num3))THEN
WRITE('Losnmerossehanintroducidoenordencreciente')
ELSE
WRITE('Losnmerosnosehanintroducidoenordencreciente');
Readln;
END.

Escribir un programa en Pascal que detecte el carcter introducido por el usuario.


PROGRAMEJER31;
USESCRT;
VAR
caracter:CHAR;
BEGIN
ClrScr;
WRITE('Introduzcauncaracteralfanumerico:');
READLN(caracter);
WRITE('Elcaracterintroducidoes>'+carcter);
Readln;
END.

Escribir un programa en Pascal que muestre un mensaje afirmativo si el nmero


introducido es mltiplo de 5.
PROGRAMEJER32;
USESCRT;
var
num:Integer;
Begin
ClrScr;
WRITE('Introduzcaunnmero:');
READLN(num);
IFnummod5=0THEN
WRITE('Elnmerointroducidoesmltiplode5')
ELSE
WRITE('Elnmerointroducidonoesmltiplode5');

Readln;
End.

Escribir un programa en Pascal que lea un numero y lo devuelva multiplicado por 5


y dividido por 7.
PROGRAMEJER34;
USESCRT;
var
num,soluc:Real;
Begin
ClrScr;
WRITE('Introduzcaunnmero:');
READLN(num);
WRITELN;
{multiplicamosydividimoselnmeroobtenido}
soluc:=(num*5)/7;
WRITE('(',num:5:2,'*5)/7)=',soluc:5:2);
readln;
End.

Escribir un programa en Pascal que determine si un nmero ledo desde el teclado es


par o impar.
PROGRAMEJER34;
USESCRT;
VAR
Num:INTEGER;
BEGIN
ClrScr;
WRITE(Introduzcaunnmeroentero:');
READLN(num);
IFnum=0THEN
WRITE('Elnumerointroducidonoesparniimpar,es0')
ELSE
IF((nummod2=0))THEN
WRITE('Elnumerointroducidoespar')
ELSE
WRITE('Elnumerointroducidoesimpar');
Readln;
END.

Escribir un programa en Pascal que detecte si un nmero ledo desde el teclado es


mayor o menor que 100.
PROGRAMEJER35;
USESCRT;
VAR
num:INTEGER;
BEGIN
ClrScr;
WRITE('Escribaunnumeroentero:');
READLN(num);
WRITELN('');

IFnum<100THEN
WRITE('Elnumeroquehaescritoesmenorde100')
ELSE
IFnum>100THEN
WRITE('Elnumeroquehaescritoesmayorde100')
ELSE
WRITE('Elnumeroes100');
Readln;
END.

Escribir un programa en Pascal que dado un nmero del 1 a 7 escriba el


correspondiente nombre del da de la semana.
PROGRAMEJER36;
USESCRT;
VAR
num:INTEGER;
BEGIN
ClrScr;
WRITE('Escribaunnmeroparaverconquedacorresponde:');
READLN(num);
IFnum=1THEN
WRITE('Lunes');
IFnum=2THEN
WRITE('Martes');
IFnum=3THEN
WRITE('Miercoles');
IFnum=4THEN
WRITE('Jueves');
IFnum=5THEN
WRITE('Viernes');
IFnum=6THEN
WRITE('Sabado');
IFnum=7THEN
WRITE('Domingo');
Readln;
END.

EJER36;
USESCRT;
VAR
num_dia_sem:INTEGER;
BEGIN
ClrScr;
WRITE('Diadelasemana(numero)>');
READLN(num_dia_sem);
CASEnum_dia_semOF
1:WRITELN('Lunes');
2:WRITELN('Martes');
3:WRITELN('Miercoles');
4:WRITELN('Jueves');
5:WRITELN('Viernes');

6:WRITELN('Sabado');
7:WRITELN('Domingo');
ELSE
WRITELN('Noesundadelasemana');
END;
Readln;
END.

Escribir un programa en Pascal que lea dos nmeros desde el teclado y si el primero
es mayor que el segundo intercambie sus valores.
PROGRAMEJER37;
USESCRT;
VAR
num1,num2:INTEGER;
BEGIN
ClrScr;
WRITELN('Escribaprimernmero:');
READLN(num1);
WRITE('EscribaSegundonmero:');
READLN(num2);
WRITELN('');
IFnum1>num2THEN
BEGIN
WRITELN(WRITE('Elprimernumerointroducidoesmayor.');
WRITELN('Secambiaelordende',num1,'',num2,'a');
WRITE(num2,'',num1);
END
ELSE
BEGIN
WRITELN('Elsegundonumerointroducidoesmayor.');
WRITE('Nosecambiaelorden');
WRITE(num1,'',num2);
END;
Readln;
END.

PROGRAMEJER37;
USESCRT;
VAR
num1,num2,temp:INTEGER;
BEGIN
ClrScr;
WRITE('Numero1:');
READLN(num1);
WRITE('Numero2:');
READLN(num2);
IF(num1>num2)THEN
BEGIN
temp:=num1;

num1:=num2;
num2:=temp;
WRITELN('Numerointercambiados');
WRITE('Numero1:',num1);
WRITE('Numero2:',num2);
END
ELSE
BEGIN
WRITELN('Numerossinintercambiar');
WRITE('Numero1:',num1);
WRITE('Numero2:',num2);
END;
Readln;
END.

Escribir un programa en Pascal que dada una calificacin en valor alfabtico (A, B,
C, D E) indique su equivalente en valor numrico (4,5,6,7 u 8).
PROGRAMEJER38;
USESCRT;
VAR
cal:CHAR;
BEGIN
ClrScr;
WRITE('Introduzcaunacalificacion(AE):');
READLN(cal);
CASEcalOF
'A','a':WriteLn('Calificacionnumerica>4');
'B','b':WriteLn('Calificacionnumerica>5');
'C','c':WriteLn('Calificacionnumerica>6');
'D','d':WriteLn('Calificacionnumerica>7');
'E','e':WriteLn('Calificacionnumerica>8');
ELSE
WriteLn('Calificacionincorrecta');
END;
Readln;
END.

Escribir un programa en Pascal que lea desde teclado el importe bruto de una
factura y determine el importe neto segn los siguientes criterios.
Importe bruto menor de 20.000 -> sin descuento
Importe bruto mayor de 20.000 -> 15% de descuento
PROGRAMEJER39;
USESCRT;
VAR
imp_bru,imp_net:REAL;
BEGIN
ClrScr;

WRITE('Indiqueelimportedesufacturaparaver');
WRITELN('sile"descontamos"algo');
WRITELN;
WRITE('ImporteBruto>');
READLN(imp_bru);
IFimp_bru<=20000THEN
imp_net:=imp_bru
ELSE
imp_net:=imp_bru(0.15*imp_bru);
WRITE('Importeapagar:',imp_net:5:2);
Readln;
END.

Escribir un programa en Pascal que realice un bucle con While y muestre en pantalla
del 1 al 10.
PROGRAMEJER42;
USESCRT;
VAR
x:INTEGER;
BEGIN
x:=0;
ClrScr;
WHILEX<=10DO
BEGIN
WRITELN(x);
x:=x+1;
END;
Readln;
END.

Escribir un programa en Pascal que realice un bucle con Repeat y muestre en


pantalla del 1 al 10.
PROGRAMEJER43;
USESCRT;
VAR
x:INTEGER;
BEGIN
x:=0;
ClrScr;
REPEAT
WRITELN(x);
x:=x+1;
UNTILx=10;
Readln;
END.

Escribir un programa en Pascal que realice un bucle con For y muestre en pantalla
del 1 al 10.
PROGRAMEJER44;
USESCRT;
VAR

x:INTEGER;
BEGIN
ClrScr;
FORx:=0TO10DO
WRITELN(x);
Readln;
END.

Escribir un programa en Pascal que visualice en pantalla los nmeros pares entre 1 y
25.
PROGRAMEJER45;
USESCRT;
VAR
num:INTEGER;
BEGIN
num:=2;
ClrScr;
REPEAT
WRITELN(num);
num:=num+2;
UNTILnum=26;
Readln;
END.
PROGRAMEJER45;
USESCRT;
VAR
sem:INTEGER;
BEGIN
ClrScr;
sem:=1;
WHILEsem<=25DO
BEGIN
IFsemmod2=0THEN
WRITELN(sem);
sem:=sem+1;
END;
Readln;
END.

Escribir un programa en Pascal que visualice en pantalla los nmeros mltiplos de 5


comprendidos entre 1 y 100.
PROGRAMEJER46;
USESCRT;
VAR sem:INTEGER;
BEGIN

ClrScr;
FORsem:=1TO100DO
BEGIN
IFsemmod5=0THEN
WRITELN(sem);
END;
Readln;
END.

Escribir un programa en Pascal que sume los nmeros comprendidos entre 1 y 10.
PROGRAMEJER47;
USESCRT;
VAR
num,suma:INTEGER;
BEGIN
ClrScr;
Fornum:=1to10do
begin
suma:=suma+num;
WRITELN(suma);
END;
Readln;
END.

Escribir un programa en Pascal que genere la tabla de multiplicar de un nmero


introducido por el teclado.
PROGRAMEJER48;
USESCRT;
VAR
tabla,x,num:INTEGER;
BEGIN
ClrScr;
WRITE('Introduzcaunnmeroparahacersutablademultiplicar:');
READLN(num);
WRITELN;
REPEAT
x:=x+1;
tabla:=num*x;
WRITELN(tabla);
UNTILx=12;
Readln;
END.

PROGRAMEJER48;
USESCRT;
VAR
num,sem:INTEGER;
BEGIN

ClrScr;
WRITE('Introduzcaunnumeroentero:');
READLN(num);
FORsem:=1TO9DO
BEGIN
WRITE(num,'*',sem,'=',num*sem);
END;
WRITE(num,'*',10,'=',num*10);
Readln;
END.

Escribir un programa en Pascal que realice la pregunta Desea continuar S/N? y que
no deje de hacerla hasta que el usuario teclee N.
PROGRAMEJER49;
USESCRT;
VAR
respuesta:CHAR;
BEGIN
ClrScr;
REPEAT
WRITELN('DESEACONTINUAR:S/N');
READLN(respuesta);
UNTILrespuestain['N','n']; {PascaldistingueentreNyn}
END.

Escribir un programa en Pascal que calcule cuantos aos tarda en duplicarse un


capital depositado al 5% de inters anual.
PROGRAMEJER50;
USESCRT;
CONST
interes=0.05;
VAR
Tiempo,cap_ini,cap_fin:REAL;
BEGIN
ClrScr;
WRITE('Introduzcaelcapitalparacalcularcuantotardara');
WRITE('enduplicarse,conuninteresdel5%:');
READLN(cap_ini);
WRITELN;
IFcap_ini<0THEN
BEGIN
WRITE('Nosepuedeincluiruncapitalnegativo');
EXIT;
END;
tiempo:=0;
cap_fin:=cap_ini;
REPEAT
cap_fin:=cap_fin+(cap_fin*interes);
tiempo:=tiempo+1;
UNTILcap_fin>(cap_ini*2);
WRITELN('Tardara',tiempo:0:0,'aosenduplicarse');
WRITELN('Capitalfinal:',cap_fin:0:2,'pts');
Readln;
END.

PROGRAMEJER50;
USESCRT;
constINTERES=0.05;
VAR
cap_ini,cap_fin:real;
num_year:INTEGER;
BEGIN
ClrScr;
num_year:=0;
WRITE('Capitalinicial:');
READLN(cap_ini);
cap_fin:=cap_ini;
WHILEcap_fin<(cap_ini*2)DO
BEGIN
cap_fin:=cap_fin+(cap_fin*interes);
num_year:=num_year+1;
END;
WRITELN('Capitalinicial:',cap_ini:0:2);
WRITELN('Capitalfinal:',cap_fin:0:2);
WRITELN('Capitalduplicadoen',num_year,'aos');
Readln;
END.

Escribir un programa que calcule la suma de los nmeros hasta un nmero dado
(introducido por el usuario).
PROGRAMEJER51;
USESCRT;
VAR
i,num:INTEGER;
suma:LONGINT;
BEGIN
ClrScr;
WRITE('Introduzcaunnumero>');
READLN(num);
FORi:=0TOnumDO
suma:=suma+i;
WRITE('LaSumade');WRITE('0');WRITE(num);WRITE('>',suma);
Readln;
END.

PROGRAMEJER51;
USESCRT;
VAR
x,y,num:INTEGER;
BEGIN
ClrScr;
WRITELN('Esteprogramacalculalasumadelosnmeroshastauno');
WRITE('introducidoporelusuario:');
WRITE('Nmeroatrabajar:');
READLN(num);
WRITELN;

x:=0;
WHILEnum>=0DO
BEGIN
x:=x+num;
num:=num1;
END;
WRITELN(x);
Readln;
END.

Escribir un programa que pida un nmero y si el que se introduce por el teclado es


menor de 100 que vuelva a solicitarlo.
PROGRAMEJER52;
USESCRT;
VAR
num:INTEGER;
BEGIN {Esteprogramanofinalizahastaqueseescribeunnumeromayora
100}
ClrScr;
REPEAT
WRITELN('Introduzcaunnmero:');
READLN(num);
UNTILnum>100;
END.

PROGRAMEJER52;
USESCRT;
VAR
num:INTEGER;
BEGIN
ClrScr;
WRITE('Introduzcaunnumero>');
READLN(num);
WHILEnum<=100DO
BEGIN
WRITE('Introduzcaunnmero>');
READLN(num);
END;
END.

Escribir un programa en Pascal que calcule el factorial de un nmero.


PROGRAMEJER53;
USESCRT;
VAR
temp,num,fac:LONGINT;
BEGIN {Esteprogramahaceelfactorialdeunnumero}
ClrScr;
Fac:=1;
WRITE('Introduzcaunnmeroparahacersufactorial:');
READLN(num);
temp:=num;
WHILEnum>=1DO
BEGIN
fac:=fac*num;
num:=num1;
END;
WRITE('Elfactorialde',temp,'es',fac);
Readln;
END.

Escribir un programa en Pascal que calcule la media de 5 nmeros introducidos por


el teclado.
PROGRAMEJER54;
USESCRT;
VAR
n1,n2,n3,n4,n5,resultado:REAL;
BEGIN
ClrScr;
WRITELN('Introduzca5nmerosparahacersumedia');
WRITELN('');
WRITE('N1:');
READLN(n1);
WRITE('N2:');
READLN(n2);
WRITE('N3:');
READLN(n3);
WRITE('N4:');
READLN(n4);
WRITE('N5:');
READLN(n5);
WRITELN('');
resultado:=(n1+n2+n3+n4+n5)/2;
WRITE(resultado:0:2);
Readln;
END.
PROGRAMEJER54;
USESCRT;
VAR

i:INTEGER;
num,suma:REAL;
BEGIN
ClrScr;
i:=0;
REPEAT
WRITE('Introduzcaunnmero:');
READLN(num);
suma:=suma+num;
i:=i+1;
UNTILi=5;
WRITE('Lamediaes:',suma/i:5:2);
Readln;
END.

Escribir un programa en Pascal que calcule el salario neto semanal de un trabajador


en funcin del nmero de horas trabajadas y la tasa de impuestos de acuerdo a las
siguientes hiptesis.
Las primeras 35 horas se pagan a tarifa normal
Las horas que pasen de 35 se pagan 1.5 veces la tarifa normal
Las tasas de impuestos son:
a: Los primeros 50 dlares son libres de impuestos
b: Los siguientes 40 dlares tienen un 25% de impuestos
c: Los restantes de 45% de impuestos
PROGRAMEJER55;
USESCRT;
VAR
hor_tra,sal_bru,tas_imp,sal_net:real;
CONST
tar_hor=2;
tasa_imp1=0.25;
tasa_imp2=0.45;
BEGIN
ClrScr;
WRITELN('INTRODUZCALOSDATOSPARACALCULARELSALARIONETOSEMANAL');
WRITELN('');
WRITELN('Lashorastrabajadassemanalesson35,lasdemsdebe');
WRITELN('considerarlascomohorasextra.Escribaendlares.');
WRITE('Numerodehorastrabajadas:');
READLN(hor_tra);
{Calculodelsalariobruto}
IFhor_tra<=35THEN
sal_bru:=hor_tra*tar_hor
ELSE
sal_bru:=(35*tar_hor)+((hor_tra35)*(1.5*tar_hor));
{Calculodeimpuestos}
IFsal_bru<=50THEN
tas_imp:=0
ELSE
IFsal_bru<=90THEN
tas_imp:=(sal_bru50)*tasa_imp1
ELSE
tas_imp:=(40*tasa_imp1)+((sal_bru90)*tasa_imp2);
{Calculosalarioneto}

sal_net:=sal_brutas_imp;
WRITE('Horastrabajadas>',hor_tra:5:2);
WRITE('Salariobruto>',sal_bru:5:2);
WRITE('Impuestos>',tas_imp:5:2);
WRITE('Salarioneto>',sal_net:5:2);
Readln;
END.

Escribir un programa en Pascal que detecte si un nmero es primo o no. Un nmero


es primo si slo es divisible por s mismo y por la unidad.
Ejemplo: 2, 3, 4, 7, 11, 17, 19 son nmeros primos 9 no es nmero primo, es divisible por 1,
9, 3.
PROGRAMEJER56;
USESCRT;
VAR
i,num,flag:INTEGER;
BEGIN
ClrScr;
flag:=0;
WRITE('Introduzcaunnumero>');
READLN(num);
FORi:=2TO(num1)DO
BEGIN
IF(nummodi)=0THEN
Flag:=1;
END;
IFflag=1THEN
BEGIN
WRITE(num);
WRITE('noesunnumeroprimo');
END
ELSE
BEGIN
WRITE(num);
WRITE('esunnmeroprimo');
END;
Readln;
END.

Escribir un programa en Pascal que calcule la depreciacin de un objeto segn el


mtodo de la lnea recta. Calcular el nmero de aos que tarda en hacerse 0. En este
mtodo el valor original del objeto se divide por su vida (nmero de aos). El cociente
resultante ser la cantidad en la que el objeto se deprecia anualmente. Por ejemplo, si un
objeto se deprecia 8000 dlares en diez aos, entonces la depreciacin anual ser
8000/10=800 dlares. Por tanto, el valor del objeto habr disminuido en 800 dlares cada
ao. Ntese que la depreciacin anual es la misma cada ao cuando se utiliza este
mtodo.
PROGRAMEJER57;
USESCRT;
VAR

annos,valor,depreciacionanno:REAL;

x:INTEGER;
BEGIN
ClrScr;
WRITELN('Escribalosdatosparaconocerladepreciacinanual');
WRITELN;
WRITE('Valororiginal:');READLN(valor);
WRITE('Numerodeaos:');READLN(annos);
WRITELN;
depreciacionanno:=valor/annos;
x:=0;
WHILEvalor>0.1DO
BEGIN
valor:=valordepreciacionanno;
x:=x+1;
WRITELN('AO',x:2,':',valor:8:0,'pts.');
END;
Readln;
END.

Escribir un programa que calcule las races de la ecuacin (ax + bx + c = 0) teniendo


en cuenta los siguientes casos:
2

a. Si a es igual a 0 y b es igual a 0, imprimiremos un mensaje diciendo que la ecuacin es


degenerada.
b. Si a es igual a 0 y b no es igual a 0, existe una raz nica con valor .c/b.
c. En los dems casos, utilizaremos la frmula siguiente: xi = (-b (b2 - 4ac))/(2a)
La expresin d = b2. 4ac se denomina discriminante.
Si d es mayor o igual que 0 entonces hay dos races reales
Si d es menor que 0 entonces hay dos races complejas de la forma: x+ yi, x- yi.
Siendo x el valor .b/2a e y el valor absoluto de (b2-4ac)/ (2a)
PROGRAMEJER59;
USESCRT;
VAR
a,b,c,d,r1,r2,x,y:REAL;
BEGIN
ClrScr;
WRITE('Coeficientea>');READLN(a);
WRITE('Coeficienteb>');READLN(b);
WRITE('Coeficientec>');READLN(c);
IF(a=0)AND(b=0)THEN
BEGIN
WRITE('Laecuacinesdegenerada');
END
ELSEIF(a=0)AND(b<>0)THEN
BEGIN
r1:=c/b;
WRITE('r1=');WRITELN(r1:5:2);
END
ELSE
BEGIN
d:=sqr(b)4*a*c;
IF(d>=0)THEN

BEGIN
r1:=(b+sqrt(sqr(b)4*a*c))/(2*a);
r2:=(bsqrt(sqr(b)4*a*c))/(2*a);
WRITE('r1=');WRITELN(r1:5:2);
WRITE('r2=');WRITELN(r2:5:2);
END
ELSE
BEGIN
x:=b/(2*a);
y:=bsqrt(abs(sqr(b)4*a*c));
WRITE('r1=');WRITE(x:5:2);WRITE('+');WRITE(y:5:2);
WRITELN('i');
WRITE('r2=');WRITE(x:5:2);WRITE('');WRITE(y:5:2);
WRITELN('i');
END;
END;
Readln;
END.

Escribir un programe en Pascal que resuelva una matriz 3 x 3. (Veremos formas


mejores de realizar este ejercicio).
PROGRAMDETER3;
USESCRT;
VAR
a11,a12,a13,a21,a22,a23,a31,a32,a33,M:REAL;
BEGIN
ClrScr;
WRITELN('Introduzcalosvaloresdelamatriz3x3');
WRITELN;
WRITE('a11:');READLN(a11);
WRITE('a12:');READLN(a12);
WRITE('a13:');READLN(a13);
WRITE('a21:');READLN(a21);
WRITE('a22:');READLN(a22);
WRITE('a23:');READLN(a23);
WRITE('a31:');READLN(a31);
WRITE('a32:');READLN(a32);
WRITE('a33:');READLN(a33);
WRITELN;
M:=(a11*a22*a33)+(a21*a32*a13)+(a31*a12*a23)
(a13*a22*a31)(a11*a23*a32)(a12*a21*a33);
WRITE('Elresultadoes:');WRITE(M:5:2);
Readln;
END.

Escribir un programa en Pascal que sume dos cadenas. (Los datos vienen en el
cuerpo del ejercicio).
PROGRAMEJER60;
USESCRT;
VAR
tit_pel1,tit_pel2,tit_pel3:STRING;
BEGIN
tit_pel1:='Alien';
tit_pel2:='Blade';
tit_pel3:='Runner';
ClrScr;

WRITELN('TITULOSDEPELICULAS');
WRITELN(tit_pel1);
WRITELN(tit_pel2+tit_pel3);
Readln;
END.
PROGRAMEJER61;
USESCRT;
VAR
cad1,cad2:STRING;
BEGIN
cad1:='56789312';
cad2:='X';
ClrScr;
WRITE('NIF:'+cad1+''+cad2); {los+sirvencomolascomasdeunin}
Readln;
END.

Transformar la cadena Esto es una prueba, en la cadena Esto es prueba. Utilizar la


funcin DELETE(S, P, N): que elimina N caracteres de la cadena S, a partir de la
posicin P.
PROGRAMEJER62;
USESCRT;
VAR
frase:STRING;
BEGIN
ClrScr;
WRITELN('Esteprogramasuprimeunnumerodeterminadodeletras');
WRITELN;
frase:='Estoesunaprueba';
WRITELN(frase);
DELETE(frase,9,4);
WRITELN(frase);
Readln;
END.

Transformar la cadena Curso de Pascal en la cadena Curso de Programacin en


Pascal. Utilizar la funcin INSERT(SO, SD, P) que inserta la cadena SO en la cadena SD
a partir de la posicin P.
PROGRAMEJER63;
USESCRT;
VAR
frase1,frase2:STRING;
BEGIN
ClrScr;
WRITELN('Seintroducirlafrase2enlafrase1');
WRITELN;
frase1:='CursodePascal';
frase2:='Programacinen';
WRITE('Frase1:');WRITELN(frase1);
WRITE('Frase2:');WRITELN(frase2);
WRITELN;
insert(frase2,frase1,10);
WRITELN(frase1);
Readln;
END.

Transformar los valores 91 y 8631217 almacenados en dos variables de tipo REAL en


la cadena 91-8631217. Previamente transformar los dos valores numricos a variables
tipo cadena con la funcin STR(X, S) que almacena en S, como una cadena
alfanumrica, el valor X.
PROGRAMEJER64;
USESCRT;
VAR
valor1,valor2:REAL;
valor_1,valor_2:STRING;
BEGIN
ClrScr;
valor1:=91;
valor2:=5550908;
STR(valor1:5:2,valor_1);
STR(valor2:10:2,valor_2);
WRITELN(valor_1,'',+valor_2);
Readln;
END.
PROGRAMEJER64;
USESCRT;
VAR
val1,val2:REAL;
cad1,cad2:STRING;
BEGIN
val1:=91;
val2:=5550908;
STR(val1,cad1);
STR(val2,cad2);
ClrScr;
WRITELN(cad1+''+cad2);
Readln;
END.

Concatenar las cadenas El, hombre, invisible en una sola el hombre invisible. Utilizar
la funcin CONCAT (S1, S2, S3...) que retorna la concatenacin de todas las cadenas
pasadas como parmetros.
PROGRAMEJER65;
USESCRT;
VAR
S1,S2,S3,cadena_final:STRING;
BEGIN
ClrScr;
S1:='El';
S2:='hombre';
S3:='invisible';
cadena_final:=CONCAT(S1,S2,S3);
WRITE(cadena_final);
Readln;
END.
PROGRAMEJER65;
USESCRT;
VAR
cad1,cad2,cad3,cad4,esp:STRING;
BEGIN

cad1:='el';
cad2:='hombre';
cad3:='invisible';
esp:='';
cad4:=CONCAT(cad1,esp,cad2,esp,cad3);
ClrScr;
WRITELN(cad1);
WRITELN(cad2);
WRITELN(cad3);
WRITELN(cad4);
Readln;
END.

Extraer la cadena SOFIA de la cadena FILOSOFIA. Utilizar la funcin


COPY(S,P,N), que devuelve una subcadena de S, de N caracteres, el primero de los
cuales ocupa la posicin P de S.
PROGRAMEJER66;
USESCRT;
VAR
S1,S2:STRING;
BEGIN
ClrScr;
S1:='FILOSOFIA';
S1:=COPY(S1,5,5);{'SOFIA'}
WRITE(S1);
Readln;
END.
PROGRAMEJER66;
USESCRT;
VAR
cad1,cad2:STRING;
BEGIN
cad1:='FILOSOFIA';
cad2:=COPY(cad1,5,5);
ClrScr;
WRITELN(cad1);
WRITELN(cad2);
Readln;
END.

Obtener la longitud de una cadena introducida por el usuario, utilizando la funcin


LENGTH(S), que devuelve la longitud de dicha cadena S.
PROGRAMEJER67;
USESCRT;
VAR

cadena:STRING;
BEGIN
ClrScr;
WRITELN('Introduzcaunacadenaparasabersulongitud:');
WRITELN;
READLN(cadena);
WRITELN;
WRITE('Lalongituddelacadenaesde:');
WRITE(LENGTH(cadena),'caracteres');
Readln;
END.

Obtener la primera posicin en la que comienza la subcadena fragi en la cadena


supercalifragilisticoexpialidoso. Utilizar la funcin POS(SB, S) que devuelve la posicin
de la primera aparicin de la subcadena SB en la cadena S.
PROGRAMEJER68;
USESCRT;
VAR
Cadena,subcadena:STRING;
posi:INTEGER;
BEGIN
ClrScr;
cadena:='supercalifragilisticoexpialidoso';
subcadena:='fragi';
posi:=POS(subcadena,cadena);
WRITE(posi);
Readln;
END.

Transformar la cadena Lenguaje Pascal en la cadena LENGUAJE PASCAL. Utilizar


la funcin UPCASE(C) que transforma un carcter C a mayscula.
PROGRAMEJER69;
USESCRT;
VAR
Cadena:STRING;
i:INTEGER;
BEGIN
ClrScr;
cadena:='LenguajePascal';
i:=0;
FORi:=1TOLENGTH(cadena)DO
cadena[i]:=UPCASE(cadena[i]);
WRITE(cadena);
i:=i+1;
readln;
END.
PROGRAMEJER69;
USESCRT;
VAR
i:INTEGER;
cad1:STRING;
BEGIN
i:=0;
cad1:='LenguajePascal';

ClrScr;
WRITELN(cad1);
WHILEi<=LENGTH(cad1)DO
BEGIN
cad1[i]:=UPCASE(cad1[i]);
i:=i+1;
END;
WRITELN(cad1);
Readln;
END.

Transformar la cadena VACA en la cadena vaca.


PROGRAMEJER70;
USESCRT;
VAR
cadena:STRING;

i,v_ascii:INTEGER;
BEGIN
ClrScr;
cadena:='VACA';
FORi:=1TOLENGTH(cadena)DO
BEGIN
v_ascii:=ORD(cadena[i]);
cadena[i]:=(CHR(v_ascii+32));
END;
WRITE(cadena);
Readln;
END.
PROGRAMEJER70;
USESCRT;
VAR
i,val_asc:INTEGER;
cad1:STRING;
BEGIN
i:=0;
cad1:='VACA';
ClrScr;
WRITELN(cad1);
WHILEi<=LENGTH(cad1)DO
BEGIN
val_asc:=ORD(cad1[i]);
cad1[i]:=(CHR(val_asc+32));
i:=i+1;
END;
WRITELN(cad1);
Readln;
END.

Escribir un programa en Pascal que lea un peso en libras y a continuacin visualice


su equivalente en kilos y en gramos. 1 libra = 0.45 Kg
PROGRAMEJER72;
USESCRT;
VAR
Libras,kilos,gramos:REAL;
BEGIN
ClrScr;

WRITE('Introduzcaelnmerodelibrasparapasarloakilosygramos:');
READLN(libras);
WRITELN;
kilos:=libras*0.45;
gramos:=kilos*1000;
WRITELN('Son',kilos:5:2,'kilosy',gramos:5:2,'gramos.');
Readln;
END.
PROGRAMEJER72;
USESCRT;
VAR
libras:REAL;
BEGIN
ClrScr;
WRITE('Libras>');
READLN(libras);
WRITE('Kilogramos>');
WRITELN(libras*0.45:0:2);
WRITE('Gramos>');
WRITELN((libras*0.45)/1000:0:4);
Readln;
END.

Escribir un programa en Pascal que escriba los nmeros comprendidos entre 1 y 100.
El programa escribir en la pantalla los nmeros en grupos de 20, solicitando al usuario
si quiere o no continuar visualizando el siguiente grupo de nmeros.
PROGRAMEJER74;
USESCRT;
VAR
num,flag,x:INTEGER;
resp:CHAR;
BEGIN
ClrScr;
num:=0;
x:=1;
FORnum:=1TO100DO
BEGIN
IF(nummod20)=0THEN
flag:=x;
WRITELN(num);
IFflag=xTHEN
BEGIN
WRITE('DESEACONTINUAR:S/N>');READLN(resp);
IFUPCASE(resp)<>'S'THEN
BEGIN
WRITE('Esteprogramahafinalizado');
Exit;
END;
END;
x:=x+20;

END;
Readln;
END.
PROGRAMEJER74;
USESCRT;
VAR
fila,i:INTEGER;
resp:CHAR;
BEGIN
fila:=1;
ClrScr;
FORi:=1TO100DO
BEGIN
WRITELN(i);
fila:=fila+1;
IFfila=21THEN
BEGIN
WRITE('Deseacontinuar(S/N)?');
READLN(resp);
IFUPCASE(resp)='S'THEN
BEGIN
ClrScr;
fila:=0;
CONTINUE;
END
ELSE
EXIT;
END;
END;
Readln;
END.

Escribir un programa en Pascal que calcule, independientemente, la suma y la media


de los nmeros pares e impares comprendidos entre 1 y 200.
PROGRAMEJER75;
USESCRT;
VAR
media_p,media_i:REAL;
suma_p,suma_i:LONGINT;
i,total_p,total_i:LONGINT;
BEGIN
ClrScr;
FORi:=1TO200DO
BEGIN
IF(imod2)=0THEN
BEGIN
suma_p:=suma_p+i;
total_p:=total_p+1;
END
ELSE
BEGIN
suma_i:=suma_i+i;
total_i:=total_i+1;
END;
END;
media_i:=suma_i/total_i;

media_p:=suma_p/total_p;
WRITELN('Lasumadelosimpareses:',suma_i);
WRITELN('Lasumadelospareses:',suma_p);
WRITELN('Lamediadelosimpareses:',media_i:0:2);
WRITELN('Lamediadelospareses:',media_p:0:2);
Readln;
END.

Escribir un programa en Pascal que calcule el importe de una factura sabiendo que
el IVA a aplicar es del 12% y que si el importe bruto de la factura es superior a 50.000
pts se debe realizar un descuento del 5%.
PROGRAMEJER76;
USESCRT;
CONST
IVA=0.12;
VAR
i_bruto,i_neto,importe:REAL;
BEGIN
ClrScr;
WRITE('Escribaelimportebruto:');
READLN(i_bruto);
WRITELN;
i_bruto:=i_bruto+(IVA*i_bruto);
IFi_bruto>50000THEN
BEGIN
i_neto:=i_bruto(i_bruto*0.05);
WRITE('Importenetocondescuentodel5%es:',i_neto:5:2,'
pts')
END
ELSE
BEGIN
i_neto:=i_bruto;
WRITE('Importebrutosindescuentoesde:',i_neto:5:2,'
pts.');
END;
Readln;
END.
PROGRAMEJER76;
USESCRT;
Const
IVA=0.12;
VAR
imp_bruto:REAL;
BEGIN
ClrScr;
WRITE('Importebruto>');
READLN(imp_bruto);
IFimp_bruto<=50000THEN
BEGIN
WRITE('Importenetosindescuento>');
WRITELN(imp_bruto+(imp_bruto*IVA):0:2);
END
ELSE
BEGIN
WRITE('ImportenetoCondescuentodel5%>');

imp_bruto:=imp_bruto(imp_bruto*0.05);
WRITELN(imp_bruto+(imp_bruto*0.12):9:2);
END;
Readln;
END.

Escribir un programa en Pascal que calcule la suma de los cuadrados de los 100
primeros nmeros enteros.
PROGRAMEJER77;
USESCRT;
VAR
x:INTEGER;
suma:REAL;
BEGIN
ClrScr;
Suma:=0;
FORx:=1TO100DO
BEGIN
suma:=suma+(sqr(x));
END;
WRITE(suma);
Readln;
END.

Escribir un programa en Pascal que visualice una tabla de conversin de kilmetros


a millas marinas y millas terrestres:
1 milla marina = 1852 metros
1 milla terrestre = 1609 metros
PROGRAMEJER78;
USESCRT;
VAR
milla_marina,milla_terrestre:REAL;
kilometros:INTEGER;
BEGIN
ClrScr;
WRITELN('Kilometros'+''+'MillasM.'+''+'MillasT.');
FORkilometros:=1TO10DO
BEGIN
WRITE(kilometros:6);
{Elnmero6eslaposicinenlatabla}
WRITE(kilometros/1.852:15:2); {Aligualqueel15}
WRITELN(kilometros/1.609:15:2);

END;
Readln;
END.

Escribir un programa en Pascal que rellene un array con los nmeros enteros
comprendidos entre 4 y 14.
PROGRAMEJER81;
USESCRT;
VAR
arr_num:ARRAY[4..14]ofINTEGER;
i:INTEGER;
BEGIN
ClrScr;
FORi:=4TO14DO
arr_num[i]:=i;
FORi:=4TO14DO
BEGIN
WRITELN('Numero:',arr_num[i]);
END;
Readln;
END.

PROGRAMEJER81;
USESCRT;
VAR
arr_num:ARRAY[1..11]ofINTEGER;
i,num:INTEGER;
BEGIN
ClrScr;
num:=4;
FORi:=1TO11DO
BEGIN
arr_num[i]:=num;
num:=num+1;
END;
FORi:=1TO11DO
BEGIN
WRITE('Posicin',i:2,':');
WRITELN(arr_num[i]:5);
END;
Readln;
END.

Escribir un programa en Pascal que rellene un array con los nmeros pares
comprendidos entre 1 y 10.
PROGRAMEJER82;
USESCRT;
VAR
arr_num:ARRAY[1..10]ofINTEGER;
i,b:INTEGER;
BEGIN
ClrScr;
i:=1;

WHILEi<=10DO
BEGIN
arr_num[i]:=i;
IF(imod2)=0THEN
BEGIN
WRITELN(arr_num[i]);
END;
i:=i+1;
END;
Readln;
END.

PROGRAMEJER82;
USESCRT;
VAR
arr_num:ARRAY[1..10]ofINTEGER;
i,num:INTEGER;
BEGIN
ClrScr;
i:=1;
num:=1;
WHILEnum<=10DO
BEGIN
IFnummod2=0THEN
BEGIN
arr_num[i]:=num;
i:=i+1;
END;
num:=num+1;
END;
arr_num[i]:=3;
{Comonoexistevalorenelarregloquesea3,estese
i:=1;
utilizacomocentinelaparaimprimir}
WHILEarr_num[i]<>3DO
BEGIN
WRITE('Posicion',i:2,':');
WRITELN(arr_num[i]:5);
i:=i+1;
END;
Readln;
END.

Escribir un programa en Pascal que rellene un array con los nmeros comprendidos
entre 25 y 35 divididos por 3.
PROGRAMEJER83;
USESCRT;
VAR
arr_num:ARRAY[1..11]ofREAL;
i:INTEGER;
BEGIN
ClrScr;
FORi:=25TO35DO
arr_num[i]:=i;
FORi:=25TO35DO

WRITELN((arr_num[i]/3):5:2);
Readln;
END.

PROGRAMEJER83;
USESCRT;
VAR
arr_num:ARRAY[1..11]ofREAL;
i,num:INTEGER;
BEGIN
ClrScr;
i:=1;
num:=25;
FORi:=1TO10DO
BEGIN
arr_num[i]:=num/3;
num:=num+1;
END;
i:=1;
WHILEi<=10DO
BEGIN
WRITE('Posicion',i:2,':');
WRITELN(arr_num[i]:0:2);
i:=i+1;
END;
Readln;
END.

Escribir un programa en Pascal que rellene un array con cinco nmeros enteros
consecutivos y haga una copia de ese array en otro.
PROGRAMEJER84;
USESCRT;
VAR
arr_num1,arr_num2:ARRAY[5..10]ofINTEGER;
i:INTEGER;
BEGIN
ClrScr;
FORi:=5TO10DO
BEGIN
arr_num1[i]:=i;
arr_num2[i]:=arr_num1[i];
END;
FORi:=5TO10DO
WRITELN(arr_num2[i]);
Readln;
END.
PROGRAMEJER84;
USESCRT;
VAR
arr_num1,arr_num2:ARRAY[1..5]ofINTEGER;

i,num:INTEGER;
BEGIN
ClrScr;
i:=1;
num:=100;

FORi:=1TO5DO
BEGIN
arr_num1[i]:=num;
num:=num+1;
END;
FORi:=1TO5DO
arr_num2[i]:=arr_num1[i];
i:=1;
WRITELN('ARRAY1ARRAY2':30);
WHILEi<=5DO
BEGIN
WRITE('Posicion',i:2,':');
WRITE(arr_num1[i]:5);
WRITELN(arr_num2[i]:10);
i:=i+1;
END;
Readln;
END.

Escribir un programa en Pascal que rellene un array de 10 elementos con los


nmeros comprendidos entre 23 y 32 y copie en otro array esos nmeros multiplicados
por 0.35.
PROGRAMEJER85;
USESCRT;
VAR
arr_num1,arr_num2:ARRAY[23..32]ofREAL;
i:INTEGER;
BEGIN
ClrScr;
FORi:=23TO32DO
BEGIN
arr_num1[i]:=i;
arr_num2[i]:=(arr_num1[i]*0.35);
END;
FORi:=23TO32DO
WRITELN(arr_num2[i]:5:2);
Readln;
END.

PROGRAMEJER85;
USESCRT;
VAR
arr_num1,arr_num2:ARRAY[1..10]ofREAL;
i,num:INTEGER;
BEGIN
ClrScr;
i:=1;
num:=23;

FORi:=1TO10DO
BEGIN
arr_num1[i]:=num;
num:=num+1;
END;
FORi:=1TO10DO
arr_num2[i]:=arr_num1[i]*0.35;
i:=1;
WRITELN('ARRAY1ARRAY2':30);
WHILEi<=10DO
BEGIN
WRITE('Posicion',i:2,':');
WRITE(arr_num1[i]:5:2);
WRITELN(arr_num2[i]:10:2);
i:=i+1;
END;
Readln;
END.

Escribir un programa en Pascal que rellene un array con los veinte primeros
nmeros pares y calcule su suma.
PROGRAMEJER86;
USESCRT;
VAR
arr_pares:ARRAY[1..40]ofINTEGER;
i,suma:INTEGER;
BEGIN
ClrScr;
i:=1;
FORi:=1TO40DO
BEGIN
IF(imod2)=0THEN
BEGIN
arr_pares[i]:=i;
suma:=suma+i;
END;
END;
WRITELN('Lasumadelos20primerosnumerospareses:',suma);
Readln;
END.

Escribir un programa en Pascal que solicite cinco nmeros, los almacene en un array
y luego calcule la media aritmtica de esos nmeros.
PROGRAMEJER87;
USESCRT;
VAR
arr_num:ARRAY[1..5]ofREAL;

i,num:INTEGER;
VARmedia:REAL;
BEGIN
ClrScr;
WRITELN('Escriba5numerosparahacersumediaaritmetica:');
FORi:=1TO5DO
BEGIN
READLN(num);
arr_num[i]:=num;
END;
FORi:=1TO5DO
media:=media+arr_num[i];
media:=media/i;
WRITELN('Lamediaaritmeticaes:',media:5:2);
Readln;
END.

Escribir un programa en Pascal que tras asignar los nmeros, 23, 45, 68, 99, 10, 15 y 4
a un array, determine la posicin del array en la que se encuentra el mximo valor.
PROGRAMEJER88;
USESCRT;
CONST
arr_num:ARRAY[1..7]ofINTEGER=(23,45,68,99,10,15,4);
VAR
i:INTEGER;
BEGIN
ClrScr;
FORi:=1TO7DO
BEGIN
IFarr_num[i]=99THEN
WRITE('Laposiciondelmayornumero(',arr_num[i],')es:',i);
END;
Readln;
END.

PROGRAMEJER88;
USESCRT;
CONST
arr_num:ARRAY[1..7]ofINTEGER=(23,45,68,99,10,15,4);
var
i,posi_max,val_max:INTEGER;
BEGIN
ClrScr;
FORi:=1TO7DO
BEGIN
IFarr_num[i]>val_maxTHEN
BEGIN
val_max:=arr_num[i];
posi_max:=i;
END;
END;
WRITE('VALORMAXIMO:',val_max,'POSICION:',posi_max);
Readln;
end.

Escribir un programa en Pascal que tras asignar los nmeros, -2, 5, 8, -9, 10, 15 y .4 a
un array calcule, independientemente, la suma de los elementos positivos y negativos.
PROGRAMEJER89;
USESCRT;
CONST
arr_num:ARRAY[1..7]ofINTEGER=(2,5,8,9,10,15,4);
var
i,suma_pos,suma_neg:INTEGER;
BEGIN
ClrScr;
FORi:=1TO7DO
BEGIN
IFarr_num[i]>0THEN
suma_pos:=suma_pos+arr_num[i]
ELSE
suma_neg:=suma_neg+arr_num[i];
END;
WRITELN('SUMAPOSITIVOS:',suma_pos);
WRITELN('SUMANEGATIVOS:',suma_neg);
Readln;
END.

Escribir un programa en Pascal que determine la posicin de la siguiente matriz en la


que se encuentra el valor mximo.
23 45 68
34 99 12
25 78 89
PROGRAMEJER91B;
USESCRT;
CONST
arr_num:ARRAY[1..3,1..3]ofINTEGER=((23,45,68),
(34,99,12),
(25,78,89));
VAR
i,j,val_max,pos_max_i,pos_max_j:INTEGER;
BEGIN
ClrScr;
val_max:=arr_num[1,1];
FORi:=1TO3DO
BEGIN
FORj:=1TO3DO
BEGIN
IFarr_num[i,j]>val_maxTHEN
BEGIN
val_max:=arr_num[i,j];
pos_max_i:=i;
pos_max_j:=j;
END;
END;
END;
WRITELN('VALORMAXIMO:',val_max:3,'POSICION:,Pos_max_i:3,pos_max_i:3);
readln;
END.

Escribir un programa en Pascal que sume, independientemente, los elementos


positivos y negativos de la siguiente matriz:
-12 23 32
45 -56 -10
25 78 89
PROGRAMEJER92;
USESCRT;
CONST
arr_num:ARRAY[1..3,1..3]ofINTEGER=((12,23,32),
(45,56,10),
(25,78,89));
VAR
i,j,suma_pos,suma_neg:INTEGER;
BEGIN
suma_pos:=0;
suma_neg:=0;
ClrScr;
FORi:=1TO3DO
BEGIN
FORj:=1TO3DO
BEGIN
IFarr_num[i,j]<0THEN
suma_neg:=suma_neg+arr_num[i,j]
ELSE
suma_pos:=suma_pos+arr_num[i,j]
END;
END;
WRITELN('SUMAPOSITIVOS:',suma_pos:5);
WRITELN('SUMANEGATIVOS:',suma_neg:5);
Readln;
END.

Escribir un programa en Pascal que multiplique por dos los elementos de la siguiente
matriz:
478
691
503
PROGRAMEJER93;
USESCRT;
CONST
arr_num:ARRAY[1..3,1..3]ofINTEGER=((4,7,8),
(6,9,1),
(5,0,3));
VAR
i,j:INTEGER;
BEGIN
ClrScr;
FORi:=1TO3DO
FORj:=1TO3DO
arr_num[i,j]:=arr_num[i,j]*2;
FORi:=1TO3DO
BEGIN
FORj:=1TO3DO
WRITE(arr_num[i,j]:3);

WRITELN('');
END;
Readln;
END.

Escribir un programa en Pascal que almacene en la segunda fila de la siguiente


matriz los cuadrados de los datos de la primera fila:
36789
00000
PROGRAMEJER94;
USESCRT;
CONST
arr_num:ARRAY[1..2,1..5]ofINTEGER=((3,6,7,8,9),
(0,0,0,0,0));
VAR
i,j,cuad:INTEGER;
BEGIN
ClrScr;
i:=1;
FORj:=1TO5DO
BEGIN
FORi:=1TO1DO
BEGIN
cuad:=sqr(arr_num[i,j]);
arr_num[2,j]:=cuad;
WRITELN(arr_num[2,j]);
END;
END;
Readln;
END.
PROGRAMEJER94;
USESCRT;
CONST
arr_num:ARRAY[1..2,1..5]ofINTEGER=((3,6,7,8,9),
(0,0,0,0,0));
VAR
i,j:INTEGER;
BEGIN
ClrScr;
FORi:=1TO1DO
FORj:=1TO5DO
arr_num[i+1,j]:=sqr(arr_num[i,j]);
FORi:=1TO2DO
BEGIN
FORj:=1TO5DO
WRITE(arr_num[i,j]:3);
WRITELN('');
END;
Readln;
END.

Escribir un programa en Pascal que sume los datos de cada una de las filas de la
siguiente matriz; el resultado se almacenar en la ltima posicin de cada fila:
367890
143270
PROGRAMEJER95;
USESCRT;
CONST
arr_num:ARRAY[1..2,1..6]ofINTEGER=((3,6,9,7,8,0),
(1,4,3,2,7,0));
VAR
i,j,suma1,suma2:INTEGER;
BEGIN
ClrScr;
FORi:=1TO2DO
BEGIN
FORj:=1TO6DO
BEGIN
IFi=1THENsuma1:=suma1+arr_num[1,j];
IFi=2THENsuma2:=suma2+arr_num[2,j];
END;
END;
WRITELN('Lasumadelafila1es:',suma1);
WRITELN('Lasumadelafila2es:',suma2);
Readln;
END.
PROGRAMEJER95;
USESCRT;
CONST
arr_num:ARRAY[1..2,1..6]ofINTEGER=((3,6,9,7,8,0),
(1,4,3,2,7,0));
VAR
suma_fila,i,j:INTEGER;
BEGIN
ClrScr;
FORi:=1TO2DO
BEGIN
suma_fila:=0;
FORj:=1TO6DO
suma_fila:=suma_fila+arr_num[i,j];
arr_num[i,j]:=suma_fila;
END;
FORi:=1TO2DO
BEGIN
FORj:=1TO6DO
WRITE(arr_num[i,j]:3);
WRITELN('');
END;
Readln;
END.

Escribir un programa en Pascal que sume los datos de cada una de las columnas de la
siguiente matriz; el resultado se almacenar en la ltima posicin de cada columna:
32
46
59
60
PROGRAMEJER96;
USESCRT;
CONST
arr_num:ARRAY[1..4,1..2]ofINTEGER=((3,2),(4,6),
(8,9),(0,0));
VAR
i,j,suma1,suma2:INTEGER;
BEGIN
ClrScr;
FORj:=1TO2DO
BEGIN
FORi:=1TO4DO
BEGIN
IFj=1THENsuma1:=suma1+arr_num[i,j];
IFj=2THENsuma2:=suma2+arr_num[i,j];
END;
END;
WRITELN('Elresultadodelasuma1es:',suma1);
WRITELN('Elresultadodelasuma2es:',suma2);
Readln;
END.

Escribir un programa en Pascal que sume los elementos de cada una de las filas y de
las columnas de la siguiente matriz; el resultado de cada suma se almacenar en la
ltima posicin de la fila o columna correspondiente. Adems la suma total de todos los
elementos de la matriz se almacenar en el elemento de la esquina inferior derecha de la
matriz:
170
560
640
730
000
PROGRAMEJER97;
USESCRT;
CONST
arr_num:ARRAY[1..5,1..3]ofINTEGER=((1,7,0),(5,6,0),
(6,4,0),(7,3,0),
(0,0,0));
VAR
i,j,total,suma_h,suma_v:INTEGER;{Eslasumahorizontalyvertical}

BEGIN
ClrScr;
total:=0;
FORi:=1TO5DO
BEGIN
suma_h:=0;
FORj:=1TO3DO
suma_h:=suma_h+arr_num[i,j];
WRITELN('Lasumadelafila',i,'es:',suma_h:3);
total:=total+suma_h;
END;
WRITELN('');
FORj:=1TO2DO
BEGIN
suma_v:=0;
FORi:=1TO5DO
suma_v:=suma_v+arr_num[i,j];
WRITELN('Lasumadelacolumna',j,'es:',suma_v:3);
total:=total+suma_v;
END;
WRITELN('');
WRITELN('Lasumatotales:',total);
Readln;
END.

Escribir un programa en Pascal que almacene en un array los nmeros primos


comprendidos entre 1 y 100.
PROGRAMEJER99;
USESCRT;
VAR
arra_prim:ARRAY[1..100]OFINTEGER;
i,divisor,flag,num:INTEGER;
BEGIN
i:=1;
FORnum:=2TO100DO
BEGIN
flag:=1;
FORdivisor:=2TOnum1DO
BEGIN
IFnumMODdivisor=0THEN
flag:=0;
END;
IFflag=1THEN
BEGIN
arra_prim[i]:=num;
i:=i+1;
END;
END;
arra_prim[i]:=0;
i:=1;
WHILE(arra_prim[i]<>0)DO
BEGIN
WRITE(arra_prim[i],'');
i:=i+1;
END;
Readln;
END.

Escribir un programa en Pascal que genera la matriz transpuesta de una matriz de 3


filas y 4 columnas. La matriz transpuesta de una matriz M(m,n) se obtiene
intercambiando filas por columnas y viceversa; el resultado se tiene que almacenar en
una nueva matriz M_TRANS(n,m).
PROGRAMEJERC100;
USESCRT;
CONST
m_orig:ARRAY[1..3,1..4]OFREAL=((2,3,4,12),
(7,9,8,11),
(5,6,1,19));
VAR
m_tran:ARRAY[1..4,1..3]OFREAL;
i,j:INTEGER;
BEGIN
ClrScr;
FORi:=1TO3DO
FORj:=1TO4DO
m_tran[j,i]:=m_orig[i,j];
FORi:=1TO3DO
BEGIN
FORj:=1TO4DO
WRITE(m_orig[i,j]:5:2,'');
WRITELN('');
END;
WRITELN('');
FORi:=1TO4DO
BEGIN
FORj:=1TO3DO
WRITE(m_tran[i,j]:5:2,'');
WRITELN('');
END;
Readln;
END.

Escribir un programa en Pascal que genera la inversa de una cadena de caracteres.


La cadena original y la invertida deben almacenarse en arrays independientes.
PROGRAMEJERC101;
USESCRT;
VAR
original:ARRAY[1..4]ofSTRING;
invertida:ARRAY[1..4]ofSTRING;
cadena:STRING;
i:INTEGER;
BEGIN
ClrScr;
cadena:='hola';
FORi:=1TOLENGTH(cadena)DO

BEGIN
original[i]:=cadena[i];
WRITE(original[i]);
END;
WRITELN('');
FORi:=LENGTH(cadena)DOWNTO1DO
BEGIN
invertida[i]:=cadena[i];
WRITE(invertida[i]);
END;
Readln;
END.
75matricesbidireccionales.

También podría gustarte