Documentos de Académico
Documentos de Profesional
Documentos de Cultura
LENGUAJES DE PROGRAMACIN:
Objetivos:
1.
2.
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
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
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
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
OCTAL
0
1
2
HEXADECIMAL
0
1
2
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
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
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
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.
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
Resultado
Entero o Real
Real
Real
Real
Real
Real
Real
Real
Entero o Real
Real
Real
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
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.
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
Escribir (write)
Nombre, sal_bruto,
Tax, sal_neto
Fin
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
Imprimir MEDIA
Fin
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
Condici
n?
Accin 1
Accin 2
Condicin?
Si
<ACCIONES>
No
<ACCIONES>
3.
4.
5.
6.
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
Algoritmo
Instruccin 1
Instruccin 2
Instruccin 3
instruccin n
Accin 1
Accin 2
Accin 3
Accin n
Accin x
Programacin
Accin n
en Pascal 7.0
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
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
Numero12325
Horas32
Tasa1200
Instruccin 1
Instruccin 2
Instruccin 3
Instruccin x
ltima Instruccin
Bifurcacin Atrs
Negativa
Instruccin 1
Instruccin 2
Instruccin 3
Instruccin x
ltima Instruccin
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.
Condici
n?
Accin F1
Accin F2
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.
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
Write Suma
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
Si
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
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:
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:
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
POS(subcadena, cadena);
DELETE: Suprime el nmero de caracteres que le digamos de una cadena a partir de la posicin que le
indiquemos.
Ejemplo:
UPCASE(x);
STR(valor, cadena);
OPERACIONES DE ENTRADA/SALIDA
Sentencia de salida o escritura:
3.33333333335E-01
0.3
0.333
OPERADORES ARITMTICOS
Operador
+
*
/
Div
Mod
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.
FUNCIONES PREDEFINIDAS
Instruccin
Funcin
Abs(x)
ArcTan(x)
Chr(x)
Cos(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)
Ord(x)
Pred(x)
Round(x)
Succ(x)
Sin(x)
Seno de x.
Sqr(x)
Cuadrado de x.
Sqrt(x)
Trunc(x)
Parte entera de x.
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;
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.
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.
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
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.
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:
end;
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.
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.
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.
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.
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
Tarea 2
Forma Incremental
Tarea n
Lmite inferior,
siempre menor
Limite superior
siempre mayor
For i:= 1 to 10 do
Begin
Nunca debe
end;
asignrsele otro valor
Lmite inferior,
siempre menor
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.
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.
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.
End;
2.
Ciclos For:
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.
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
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;
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 (-)
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]
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.
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.
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;
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;
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].
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.
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
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;
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;
0/1
1/0
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;
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.
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;
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;
Regid
Name
Pila
Inic
direccion
Apellidos
Calle
NombreP
Apatpos
Ciudad
Estado
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
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}
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.
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
Type
Var
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 cabecera
Seccin de declaracin local
El cuerpo del procedimiento.
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.
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:
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;
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;
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;
Begin {principal}
Clrscr;
X:= 0;
Ejecuta(x);
Writeln(x);
Readln;
End.
Begin {principal}
Clrscr;
X:= 0;
Ejecuta(x);
Writeln(x);
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;
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.
Entero Largo
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;
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.
Integer
Real
Boolean
String
Ejemplos:
Palabra
Reservada
Cabecera de la funcin:
Nombre de
la Funcin
Parmetros
formales
CALCULAR RESULTADOS;
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.
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.
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);
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.
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.
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.
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.
READ(b);
WRITELN('');
resultado:=((a+5)*3)/(2*bb);
WRITE('RESULTADO:');
WRITE(resultado:5:2);
Readln;
END.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
PROGRAMEJER25;
USESCRT;
VAR
Longitude:REAL;
BEGIN
ClrScr;
WRITE('Longitud(metros):');
READLN(longitud);
WRITE((longitud*39.27)/12:5:2,'pies');
Readln;
END.
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.
END.
Readln;
End.
IFnum<100THEN
WRITE('Elnumeroquehaescritoesmenorde100')
ELSE
IFnum>100THEN
WRITE('Elnumeroquehaescritoesmayorde100')
ELSE
WRITE('Elnumeroes100');
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 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.
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.
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.
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.
PROGRAMEJER52;
USESCRT;
VAR
num:INTEGER;
BEGIN
ClrScr;
WRITE('Introduzcaunnumero>');
READLN(num);
WHILEnum<=100DO
BEGIN
WRITE('Introduzcaunnmero>');
READLN(num);
END;
END.
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.
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.
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.
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 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.
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.
cadena:STRING;
BEGIN
ClrScr;
WRITELN('Introduzcaunacadenaparasabersulongitud:');
WRITELN;
READLN(cadena);
WRITELN;
WRITE('Lalongituddelacadenaesde:');
WRITE(LENGTH(cadena),'caracteres');
Readln;
END.
ClrScr;
WRITELN(cad1);
WHILEi<=LENGTH(cad1)DO
BEGIN
cad1[i]:=UPCASE(cad1[i]);
i:=i+1;
END;
WRITELN(cad1);
Readln;
END.
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.
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.
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.
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.
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 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 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.
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.