You are on page 1of 75

Introducción a la

Programación
Objetivos
Revisión de contenidos
Estructura de programación
Tipos de datos simples
Expresiones
Introducción al lenguaje Pascal
Estructura de secuencia
Estructuras de decisión
Procedimiento – Funciones
Vectores – Matrices
Ordenamiento – Búsqueda binaria
Procedimientos - Funciones

Profesora Laura Vidal


2° Cuatrimestre – 1° Año
Analista de Sistemas - IFES
Introducción a la Programación

Una computadora es una máquina que permite operar semiautomáticamente sobre


representaciones de objetos en forma programada. Se dice semiautomáticamente debido a la
interacción en distintos momentos con el ser humano. Las operaciones posibles son calcular,
transformar, combinar, resumir, clasificar, buscar, etc datos, que es el nombre con el cual se designa
a las representaciones de los objetos. Un programa implica una secuencia de operaciones
elementales que ha sido planeada, diseñada de antemano.
La computadora es un procesador que puede ejecutar un repertorio concreto y finito de
acciones llamadas elementales o primitivas y que puede evaluar condiciones o proposiciones
lógicas. Una proposición lógica es una oración declarativa que tiene como resultado ser verdadera o
falsa. Una acción se ejecuta sobe un objeto y tiene un efecto definido sobre éste, tal que le provoca
un cambio d estado. Para la descripción de una acción en un lenguaje determinado se llama
sentencia, a veces también instrucción. Una acción elemental, simple o primitiva es aquella que, sin
más especificación, puede ejecutar el procesador. Si una acción puede descomponerse en acciones
elementales se llama proceso o acción compuesta. Todo programa es resultado de una acción
compuesta, que fue desmenuzada en acciones elementales capaces de ser ejecutadas por un
procesador dado.
Un algoritmo es un concepto más general de un programa, ya que implica un procedimiento
independiente del procesador y/o del lenguaje en que está expresado. Un algoritmo puede ser
realizado por diferentes programas en el mismo lenguaje o en lenguaje distintos. Un algoritmo puede
ser considerado como un método, técnica, procedimiento, rutina, “receta”. En forma más precisa un
algoritmo es un conjunto finito de reglas que suministra una secuencia de operaciones con el
propósito de resolver un tipo específico de problema, y que debe responder a un conjunto de
normas:
Debe finalizar luego de una cantidad finita de pasos,
Cada paso debe estar rigurosamente definido,
Debe tener cero o más datos de entrada,
Debe tener uno o más datos de salida,
Debe ser efectivo, en el sentido de que cada uno de sus pasos se deben poder
ejecutar con precisión en un tiempo finito.

En el proceso de resolución de problemas por computadora se parte de un enunciado el cual


debe ser completo y no debe tener ambigüedades. Es evidente que no tiene sentido perder el
tiempo tratando de resolver un problema que no se comprender claramente. Por lo cual deben
quedar perfectamente definidos
El conjunto de los datos de entrada (datos conocidos)
El conjunto de los datos de salida (resultado, datos desconocidos, información)
El conjunto de condiciones que vinculan a los conjuntos de datos anteriores

Muchas veces el análisis del enunciado de un problema a fin de entenderlo plenamente lleva a
re-enunciarlo para facilitar su comprensión.
En segundo paso consiste en elaborar un plan general, un bosquejo sobre el cual basarse para
construir un algoritmo. En esencia, esto significa dividir el problema original en una serie de
problemas más simples, tal que cada uno puede ser analizado y resuelto independientemente de los
demás. Esta es la etapa más dificultosa pero también la más creativa del trabajo.
Existen varias formas de representar algoritmos que en general entran dentro de dos
categorías, representación gráfica y representación en pseudocódigo. La primera utiliza
determinados símbolos y convenciones gráficas para describir el plan lógico y se llaman comúnmente

Profesora Laura Vidal – Página 1


Introducción a la Programación

diagramas de flujo o diagramas lógicos. La segunda utiliza una representación en un lenguaje cercano
a las personas y sin reglas sintácticas estrictas como lo requiere un verdadero lenguaje de
programación.
El tercero paso consiste en traducir el algoritmo a un lenguaje de programación capaz de ser
interpretado por una computadora, lo cual da como resultado un programa.
Finalmente se llega al paso de ejecución, es decir, la realización instrucción por instrucción del
programa por parte de la computadora.

¿Qué es un lenguaje de programación?

Los lenguajes de programación son un conjunto de reglas, herramientas y condiciones que


permiten crear programas o aplicaciones dentro de una computadora. Estos programas son los que
permiten ordenar distintas acciones a la computadora en un idioma comprensible por ella. Como su
nombre lo indica, un lenguaje tiene su parte sintáctica y su parte semántica. ¿Qué quiere decir esto?
Que todo lenguaje de programación posee reglas acerca de cómo se deben escribir las sentencias y
de qué forma.
A su vez, los lenguajes de programación se dividen en tres grandes grupos: los lenguajes de
máquina, los de bajo nivel y los de alto nivel.

Lenguaje máquina

Los lenguajes de máquina son los que entiende una computadora sin la necesidad de realizar
ninguna conversión. Escribirlos resulta extremadamente difícil para un programador convencional.
Hoy en día, nadie programa en este lenguaje, pero como es necesario para que la computadora
entienda lo que tiene que hacer, existen programas que se encargan de transformar el código
comprensible por un programador en código comprensible por una computadora. Las instrucciones
de este tipo de lenguaje se componen de bits. Cada una de estas unidades puede tener sólo dos
valores posibles: 1 ó 0.
Para facilitar la tarea del programador, se han diseñado otros tipos de lenguajes, que son más
comprensibles que el de máquina. Estos son de bajo nivel y el de alto nivel.

Lenguaje de bajo nivel

Los lenguajes de bajo nivel, también llamados ensambladores, son aquellos cuyas sentencias
están formadas por códigos nemotécnicos (abreviaturas de palabras inglesas). Son lenguajes que, por
más complejos que sean, resultan mucho más comprensibles que los lenguajes de máquina.
Ejemplo de código para este tipo de lenguajes
….
Inicio: mov cx,25
Ini: mov ah,6
mov dl,13
int 21h
mov dl,10
int 21h

Profesora Laura Vidal – Página 2


Introducción a la Programación

loop ini
mov ah,6
lea dx,nombre
push cs
pop ds
int 21 h
…..
Estos lenguajes son, además, dependientes de la arquitectura de cada procesador, ya que cada
procesador ofrece un conjunto de instrucciones distinto para trabajar en este nivel de programación.
Una vez escrito el programa en este lenguaje, se necesita otro llamado ensamblador, para que
traduzca en instrucciones comprensible por la máquina.

Lenguaje de alto nivel

Los lenguajes de alto nivel son aquellos que poseen sentencias formadas por palabras similares
a las de los lenguajes humanos.
Por lo tanto, resulta mucho más sencillo escribir un programa en un lenguaje de alto nivel para
luego traducirlo en código comprensible para una computadora.
Algunos ejemplos de este tipo de lenguaje son: Pascal, Delphi, Cobol, FoxPro, JAVA y la
mayoría de los lenguajes visuales como Visual Basic, Visual FoxPro. Además podemos decir que,
dentro de este conjunto de lenguajes de programación, algunos son de más alto nivel que otros,
pero, en general todos entran en esta categoría.
En el caso de C, muchos autores opinan que este lenguaje es de nivel medio, o sea que posee
una escritura sencilla y comprensible por los programas, pero a la vez ofrece una potente y variada
gama de posibilidades para realizar miles de tareas con una computadora, es posible insertar código
assembler dentro del código C.

Tipos de programación

No solo existen varios tipos de lenguajes de programación, sino que también podemos
encontrar distintas formas de programar una aplicación. Hay diversos paradigmas que nos permiten
encontrar una solución más adecuada a los problemas. La idea es que el programador los conozca y
sepa seleccionar el adecuado para cada situación particular. Lo que es verdad es que para cada
paradigma conviene ciertos lenguajes de programación y no cualquiera. Esto se debe a que la
mayoría de los lenguajes fueron creados para ser utilizados en determinados ambientes de
programación.

Programación secuencial

Este tipo de programación se basa en la creación de programas a partir de un conjunto de


sentencias escritas en forma secuencial y cuya ejecución sigue una secuencia. Aquí se utiliza la
sentencia como goto o similar para realizar una bifurcación en la ejecución del programa hacia una

Profesora Laura Vidal – Página 3


Introducción a la Programación

etiqueta determinada. Una etiqueta es una marca en el código de un programa para que sea
referenciado en algún momento de su ejecución.
Algunos lenguajes que se utilizan para este tipo de programación son basic, aseembler,
fortran, cobol, etc.

Programación estructurada:

La programación estructurada es una de las más conocidas y antiguas que existen. Sus
fundamentos los expuso Edgar Dijkstra hace ya mucho tiempo. Hoy en día, más allá de que nuevos
tipos de programación están copando el mercado, la programación estructurada perdura en el fondo
de los lenguajes modernos.

Este tipo de programación se basa en la modularidad de los programas. Esto quiere decir que
los programas se dividen en módulos más pequeños, y cada uno realiza una tarea específica. Asi, la
complejidad de un problema determinado también se ve reducida al dividir las tareas, que, en su
conjunto, permiten la resolución de éste.
Los programas para este tipo de programación poseen un procedimiento central, que es el
encargado de llamar y controlar el correcto funcionamiento de cada módulo que compone la
aplicación.
La programación estructurada hace uso de estructuras de control básicas: secuencia, selección
y repetición. Además, no permite el uso de sentencias como goto o similares que produzcan
bifurcaciones en la ejecución de las sentencias de un programa. Los lenguajes que se utilizan en esta
programación son C y Pascal, entre otros.

Programación orientada a objetos

La programación orientada a objetos (POO) es una forma de estructurar un programa sobre la


base de objetos. Cada elemento o componente en un programa que se base en esta técnica es
concebido como un objeto que tiene propiedades y métodos. La ejecución de un programa depende
pura y exclusivamente de una interacción de los objetos que lo componen.
Las propiedades y los métodos de los objetos se especifican en su clase. Una clase de objeto
vendría a ser el molde de cada instancia particular del objeto. Por lo tanto, cuando uno programa
una aplicación orientada a objetos, define clases y luego crea instancias de objetos a través de esas
clases para que interaccionen entre sí.
Existen otros conceptos importantes sobre objetos, que son la herencia y el polimorfismo.

Características de la POO
Las características fundamentales de la POO son: abstracción, encapsulamiento, herencia y
poliformismo.

Abstracción: Por medio de la abstracción conseguimos no detenernos en los detalles


concretos de las cosas que no interesen en cada momento, sino generalizar y centrarse en los
aspectos que permitan tener una visión global del tema. Por ejemplo, el estudio de un ordenador
podemos realizarlo a nivel de funcionamiento de sus circuitos electrónicos, en términos de corriente,

Profesora Laura Vidal – Página 4


Introducción a la Programación

tensión, etc., o a nivel de transferencias entre registros, centrándose así el estudio en el flujo de
información entre las unidades que lo componen (memoria, unidad aritmética, unidad de control,
registros, etc.), sin importarnos el comportamiento de los circuitos electrónicos que componen estas
unidades.

Encapsulamiento: Esta característica permite ver un objeto como una caja negra en la que se
ha metido de alguna manera toda la información relacionada con dicho objeto. Esto nos permitirá
manipular los objetos como unidades básicas, permaneciendo oculta su estructura interna.

Herencia: La herencia es el mecanismo para compartir automáticamente métodos y datos


entre clases y subclases de objetos. El usuario de Visual Basic no dispone de esta característica.

Polimorfismo: Esta característica permite implementar múltiples formas de un mismo método,


dependiendo cada una de ellas de la clase sobre la que se realice la implementación. Esto hace que
se pueda acceder a una variedad de métodos distintos (todos con el mismo nombre) utilizando
exactamente el mismo medio de acceso.
Los lenguajes que se utilizan en este tipo de programación son muchos, pero los más
importantes hoy en día son Java, C++, Delphi y la gran mayoría de los lenguajes de la plataforma
Microsoft. Net.

Programación lógica

La programación lógica es una forma de programar donde lo más importante es definir un


conjunto de hechos, que se conocen con anterioridad, y un conjunto de reglas que definen las
distintas relaciones que existen entre los componentes del programa. Estos hechos y reglas
conforman lo que se llama la base del conocimiento. La programación lógica utiliza lenguajes de alto
nivel que se asemejan muchos a los lenguajes humanos. Una de las utilidades más importantes de
esta técnica de programación se la inteligencia artificial.

Resolver problemas con una computadora.

La tarea del programador es indicarle a la computadora un conjunto de instrucciones para que


ella solucione su problema. El idioma que el programador utiliza para indicarle esto a la computadora
es lo que se llama lenguaje de programación,
Para resolver un problema mediante una computadora, se suelen seguir ciertos pasos, que son
parte de una metodología:
Análisis del problema: recolectar y analizar información que permita identificar tres
componentes: datos de entrada, proceso y salida.
Construcción de un algoritmo mediante diagrama de flujo y pseudocódigo: se debe determinar
como se llevará a cabo. Una recomendación es dividir el proceso de tareas más sencillas y más fáciles
de implementar.
Codificación del algoritmo: en este punto se puede optar por una infinidad de alternativas,
dado que existen miles de lenguajes de programación.

Profesora Laura Vidal – Página 5


Introducción a la Programación

Pruebas, ajustes y documentación: falta probar todo funcione bien, realizar los ajustes
necesarios para el correcto funcionamiento del programa. Una vez que todo funcione
correctamente, se debe documentar todo.

Profesora Laura Vidal – Página 6


Estructuras de Programación

Noción intuitiva de Estructuras de programación

Las acciones de un programa pertenecen a dos tipos fundamentales


 Las acciones que actúan sobre los datos
 Las acciones que actúan sobre el programa mismo, seleccionando los caminos a seguir.
Un algoritmo puede ser descripto convenientemente por combinación de estos dos
elementos.
Una acción puede subdividirse en otras acciones a condición de que tal subdivisión presente
un único punto de entrada y un único punto de salida.

La programación estructurada define tres estructuras de programación:


 La secuencia
 La decisión o selección
 La iteración o repetición.
Las mismas pueden combinarse entre sí, ya sea sucesivamente y/o anidas, según los
requerimientos del problema y a los fines del algoritmo a diseñar. Cada estructura se comporta como
un bloque con un único punto de entrada y un único punto de salida.
La estructura de secuencia implica la secuencia, sucesión o serie de acciones elementales o
compuestas. Las estructuras de decisión o iteración son llamadas estructuras de control.

Definición e implementación de estructuras de control

Estructuras de decisión
Se trata de una estructura que permite presentar distintos caminos posibles de ejecución,
constituidos por una acción (o una serie de acciones). Existen dos formar de implementación, que
corresponden a la decisión simple y a la decisión múltiple o compuesta. La primera permite
seleccionar un camino entre dos caminos posibles, la segunda permite seleccionar un camino entre
dos o más posibles.
Si – entonces – sino
Según – hacer

La forma genérica de si – entonces – sino sería


Si B entonces A1 sino A2

Donde B es una proposición lógica y A1, A2 son una acción simple o compuesta. Si B tiene
valores verdadero se ejecuta la acción A1, de lo contrario, es decir si B es falsa se ejecuta la acción
A2.
En el caso que A2 sea una acción vacía, esto, es no hay ninguna acción que ejecutar, entonces
la estructura puede simplificarse a:
Si B entonces A1
La forma genérica de según – hacer sería
Según B hacer
V1: A1

Profesora Laura Vidal – Página 7


Estructuras de Programación

V2: A2
V3: A3
Sino As
Donde B es un selector que de acuerdo a su valor indica el camino a seguir: V1, V2… son
posibles valores del selector y A1, A2, A3… As, son acciones simples o compuestas. As es la acción a
ejecutar si el selector no toma ninguno de los valores especificador. Al igual que en el caso anterior si
As es vacía no se escribe la palabra sino.

Estructuras de interacción (o repetición)


Se trata de una estructura que permite ejecutar una acción (o una serie de acciones) en forma
iterativa. De acuerdo a la forma en que se controla dicha interación, esto es, cuántas veces se van a
ejecutar las acciones que forman el ciclo se tiene tres formas de implementación. Estas son:
1.a. Mientras – hacer
1.b. Repetir – hasta que
1.c. Para – hacer

La forma genérica para mientras – hacer es:


Mientras B hacer A
Donde B es una proposición lógica y A es una acción simple o compuesta. B tiene como valor
verdadero o falso. En tanto B sea verdadera se ejecutará la acción A. Cuando B sea falta, ya no se
ejecuta otra vez y se sale de la estructura para ejecutar la acción que se indique a continuación.
Según el valor de verdad inicial a B, la acción A puede ejecutarse 0 o más veces.

La forma genérica para repetir – hasta que es:


Repetir A hasta que B
A y B tiene el mismo significado que antes. En tanto B sea falsa se ejecutará la acción A.
Cuando B sea verdadera se sale del ciclo para ejecutar la acción que se indique a continuación.
La acción A podrá ejecutarse 1 o más veces.

La forma genérica para Para – hacer es:


Para C de Vi a Vf hacer A
Esta forma de implementación se utiliza cando se conoce exactamente la cantidad de veces
que se quiere repetir una cierta acción. Observar que con las estructuras anteriores no es necesario
conocer la cantidad de iteraciones ya que la salida está controlada por el valor de verdad de una
proposición lógica.
C es un contador cuyos valores sucesivos irán desde el valor inicial Vi hasta el valor final Vf y A
es una acción simple o compuesta.
EJERCICIOS

Elaborar los ejercicios de revisión de contenidos.


Apartado DIAGRAMA DE FLUJO – REVISIÓN DE CONTENIDOS

Profesora Laura Vidal – Página 8


Tipos de datos

Variables y constantes

Una variable es un espacio de memoria que contiene datos de un determinado tipo y que se
identifica por un nombre (identificador). El contenido de ese espacio de memoria puede variar
durante la ejecución del programa que se utiliza. En el lenguaje de programación Pascal las variables
deben ser declaradas antes de ser utilizadas. La declaración implica elegir un nombre dentro de
ciertas reglas especificadas por el lenguaje e indicar el tipo de dato al cual pertenece. El tipo de dato
especifica el conjunto de valores que puede asumir la variable. Para cada tipo de dato se definen las
operaciones que pueden realizarse con variables pertenecientes a ese tipo, así como el espacio real
de memoria que va a ocupar dicha variable en bytes.
El nombre de la variable es una forma sencilla se referirse a la dirección de memoria que
ocupa la variable; el valor de una variable es la forma sencilla de referirse al contenido de dicha
posición de memoria. La sentencia de asignación permite almacenar un cierto valor de una variable.
Una constante es un valor que se define internamente antes de la ejecución de un programa y
que no puede cambiar durante la ejecución del mismo.

Tipos de datos simples

Un tipo de dato simple es aquel cuyo contenido se trata como una unidad que no puede
separarse en partes más elementales. Los tipos simples con los cuales trabajaremos son:

 Enteros
 Caracteres
 Predefinidos  Lógicos o
booleanos
Tipos  Tipo ordinal
simples
 Definidos por el  Enumerados
usuario  Subrangos

 Tipo no ordinal  Reales

En los tipos ordinales se conoce el orden de cada uno de los elementos del conjunto, se sabe
cual elemento precede y cual sucede a cada elemento, se tiene un primer y último elemento, para
los cuales, obviamente el predecesor y sucesos están respectivamente indefinidos. Los tipos
predefinidos están definidos por el lenguaje y los definidos por el usuario, son creados según las
necesidades del mismo.

Profesora Laura Vidal – Página 9


Tipos de datos

Dentro de los enteros se dispone de los siguientes tipos:

Integer  -2 15 a +2 15 -1
Con signo Shortint  -2 7 a +27 –1
Enteros Logint  -2 31 a +2 31 -1
Positivos Byte  0a28-1
Word  0 a 2 16 -1

Dentro de los reales se dispone de los siguientes tipos:

real  ±10 -39 a 10 +38 11 a 12 dígitos  6 bytes


single  ±10 -45 a 10 +38 7 a 8 dígitos  4 bytes
Real double  ±10 -324 a 10 +308 15 a 16 dígitos  8 bytes
extended  ±10 ±4932 19 a 20 dígitos  10 bytes
comp  -(2 -63 -1) a +(2 +63 -1) 19 a 20 dígitos  8 bytes

El tipo caracter representa a un conjunto ordenado y finito de caracteres que comprende las
letras mayúsculas A..Z, las letras minúsculas a..z, los dígitos 0..9, símbolos de puntuación y otros
caracteres especiales. Las variables carácter ocupan un byte de memoria. Caracteres  char.

En general estos caracteres se almacenan internamente en código ASCII y el orden de los


caracteres es el que les asigna este código. Un valor constante de tipo caracter se escribe apóstrofos.
Por ejemplo: la expresión letra  'a' significa a la variable carácter letra la constante carácter a.

El tipo lógico o booleano comprende solo dos valores: verdadero (true) y falso (false). El orden
que se establece por definición entre estos dos valores lógicos es false<true.

Tipo subrango

El tipo de dato más simple que puede definir el programador es el subrango de algún tipo
ordinal. Por ejemplo: supongamos que una variable entera r va a tomar valores sólo entre -20 y 20.
Es posible declarar a la variable r como perteneciente al tipo subrango de enteros -20…20, esto es,
entre -20 y 20 todos los enteros intermedios incluyendo los extremos. El tipo subrango es también
ordinal y se define como parte de un tipo base ordinal; no se puede definir un tipo subrango de
reales. Otro ejemplo de subrangos de caracteres ('a'..'m'; 'F'..'K'; '0'..'9', etc) y subrangos
enumerados.

Profesora Laura Vidal – Página 10


Tipos de datos

Tipo enumerado

El tipo enumerado está constituido por un conjunto de valores definidos por el usuario el cuál
elige sus identificadores y el orden que deben seguir dentro del conjunto. Por ejemplo, se puede
definir el tipo colores formado por los valores (rojo, amarillo, azul, negro, blanco), internamente se
asigna un número de orden a cada valor que comienza en cero, esto es:
0 – rojo; 1 – amarillo; 2 – azul; 3 – negro; 4 –blanco.
Luego, si una variable color pertenece a este tipo de dato son válidas las operaciones de
asignación y comparación, tales como color amarillo, color<blanco, etc.
Este tipo de datos no se puede escribir ni leer en forma directa sino a través de una
recodificación. Son fundamentales para la legibilidad y comprensión de un programa.

Cadena de caracteres

El tipo cadena de caracteres (string) representa una serie 0 o más caracteres, en general
correspondientes al código ASCII.
Se puede trabajar con este tipo de variable como si se tratara de una unidad, sin embargo, no
es un tipo de dato simple ya que está integrado por elementos a los cuales se puede acceder en
forma individual. Se trata de un dato de tipo estructurado.
Una cadena de caracteres tiene dos características importantes: la longitud física y la longitud
lógica.

 Longitud física: definida en la declaración del tipo de datos y permite al procesador reservar
el espacio máximo de memoria para almacenar el valor de una variable de ese tipo
 Longitud lógica o dinámica: es la cantidad real de caracteres que la variable tiene en un
momento dado.
Por ejemplo: se supone que se define la variable nom de tipo string[10] y luego se realiza la
asignación: nom 'Pepe'. La longitud física reservada para la variable permite 10 caracteres como
máximo y la longitud lógica luego de la asignación es 4, esto es, la cantidad de caracteres reales entre
apostrofes. Un valor constante tipo string se escribe entre apostrofes al igual que las constantes char.
La longitud lógica es un dato que se actualiza automáticamente y que se almacena como parte del
string, en la primera posición de memoria asignada.

Aclaración de la notación utilizada

Se puede observar, de lo visto anteriormente, que un mismo elemento o dato puede


almacenarse y trabajarse de distintas maneras. Por ejemplo, un dígito, el 3. Éste puede almacenarse
como entero, real, como caracter. Lo importante es saber que la representación binaria, es distinta.
Independientemente de cuál sea la representación binaria (bit de signo y complemento, punto
flotante, código ASCII), se utilizará para diferenciarlas la siguiente convención:
3 si es entero – 3.0 si es real - '3' si es carácter.
Si es escribe 435.657 es un real, si es escribe '435.657' se trata de un string.

Tipo de datos estructurados.

Profesora Laura Vidal – Página 11


Tipos de datos

Los tipos de datos estructurados son aquellos que permiten almacenar un conjunto de
elementos bajo una estructura particular, darle un único nombre, pero con la posibilidad de acceder
en forma individual a cada componente.
Array
Record (registros)
Tipos estructurados Files (archives)
Set (conjuntos)

Una expresión se construye a partir de operandos y operadores. La mayoría de los operadores


requieren dos operandos, pero existen operadores que se aplican a un solo operando.
Las expresiones se clasifican según:

Aritméticas  Operadores aritméticos: +(suma), -(resta),


*(producto), /(división real), div(división
entera), mod(resto división entera)
Operadores relacionales: >(mayor), <(menor),
>=(mayor igual), <=(menor igual),<>(distinto)
EXPRESIONES =(igual).
Lógica 
Operadores booleanos: and( y, conjunción), or
(o disyunción), not (no, negación).

Operador cadena: + (concatenación)


Caracter y
cadena

Los operadores +,-, * se aplican a enteros o reales; si ambos operandos son enteros el
resultado es entero, si algún operando es real, el resultado es real. El operador / da siempre
resultado real. Los operadores div y mod se aplican a enteros y dan resultado entero.

Los operadores relacionales se utilizan para comparar operandos enteros y reales entre sí,
operandos de tipo carácter, operandos tipo string y operados de tipo enumerados.
Recordar: los valores tipo caracter como enumerado tienen asignado un número de orden
interno que es utilizado a los fines de la comparación. Las cadenas de caracteres se comparan
comenzando por el primer caracter a la izquierda hasta encontrar la primer diferencia, resultado la
comparación de acuerdo al número de orden del caracter en que difieren.

Ejemplos:
'a' < 'm'  es verdadero
'Ema' > 'Eva'  es falso
'mesa' < 'mesada' es verdadero
Para el tipo numerado color = (rojo, amarillo, azul, negro, blanco)
amarillo < negro  verdadero
azul > rojo  verdadero

Profesora Laura Vidal – Página 12


Tipos de datos

false < true  verdadero

Suponiendo que se tiene dos variables de tipo cadena nom, nom1 y se hace una asignación:
Nom  'Carlos'
Nom1  ' García'
La concatenación de estas dos cadenas de caracteres nom+nom1 da como resultado la cadena
única 'Carlos García'

Compatibilidad de tipos

La compatibilidad de tipos establece una precondición para la compatibilidad de asignación.


Esta última define que asignaciones son válidas dado que no es posible mezclar de cualquier forma
elementos de distintos tipos de datos.
En Pascal dos tipos son compatibles si se cumple como mínimo una de las siguientes
condiciones:
 Ambos tipos son iguales
 Ambos tipos son reales
 Ambos tipos son enteros
 Un tipo es subrango del otro
 Ambos tipos son subrangos del mismo tipo base
 Un tipo es string y el otro es string o char.

Compatibilidad de asignación

Esta compatibilidad es necesaria cuando un valor es asignado a una variable o a un parámetro.


En Pascal, un valor de tipo T2 es asignación – compatible con un tipo T1 (T1  T2), si se
cumple cualquiera de las siguientes condiciones:
 T1 y T2 son tipos idénticos y ninguno es un tipo archivo o estructurado que contenga un
archivo como componente.
 T1 y T2 son tipos ordinales compatibles y los valores de tipo T2 caen dentro del rango de
valores posible de T1.
 T1 y T2 son tipo reales y el valor de tipo T2 cae dentro del rango de valores posibles de T1.
 T1 es tipo real y T2 es tipo entero.
 T1 y T2 son tipo string.
 T1 es tipo string y T2 es tipo char.

La violación de compatibilidad de asignación causa error


antes o durante la ejecución de un programa.

Profesora Laura Vidal – Página 13


Lenguaje de Programación Pascal

Un poco de historia

El lenguaje Pascal surge de la búsqueda de una forma de comunicación completa, inequívoca y


fácil de aprender e implementar en una computadora.
Las propiedades del lenguaje Pascal responden a estas necesidades.
Analizando la historia de los diferentes lenguajes de programación puede observarse que uno
de los primeros en aparecer fue el FORTRAN (FORmula TRANslator). El FORTRAN es uno de los
lenguajes de uso más extendido en la parcela de los cálculos científicos.
Se hicieron intentos para definir un lenguaje sencillo directamente inspirado en el FORTRAM y
que fuera fácil de aprender y pudiera usarse en forma conversacional. El resultado de estos intentos
fue el BASIC.
Otro lenguaje, ALGOL, surgió como resultado del intento de crear otro lenguaje de
programación distinto del FORTRAN que fuera consistente y apropiado para programar complicados
algoritmos. El lenguaje Pascal se inspiró en los lenguajes ALGOL y PL/I y representa un intento de
crear un medio fácil de aprender, apropiado para la realización de algoritmos complejos y la
definición de estructuras de datos.
Fue creado por WIRTH en los años 70-71, después de su regreso a la universidad de Stanford.
Rápidamente ganó aceptación en los círculos educativos como una buena herramienta para
aprender a programar. Se presenta, además como un lenguaje relativamente simple y muy
coherente, por lo que el compilador necesario para su implementación requiere una pequeña
porción de memoria. Como consecuencia inmediata de estas ventajas, cuando aparecieron los
microordenadores a bajo precio y equipados con capacidades de memoria muy limitadas en los años
70, gran número de ellos incorporaban el lenguaje Pascal, poniéndolo, así, al alcance de casi todo el
mundo.
El nombre de este lenguaje rinde tributo al matemática francés Blaise Pascal, quien, en 1690, a
la edad de 18 años, inventó la primer máquina mecánica de calcular.

Es un lenguaje más bien académico. Surgió como un lenguaje de programación orientado a


estudiantes universitarios.
Su objetivo principal era el de proporcionar las bases de programación necesarias para los
estudiantes, de una forma sencilla y clara.
En 1983, Borland International Inc. comenzó a vender otra versión, llamada Turbo Pascal. Era
un compilador de Pascal muy económico que en poco tiempo logró llegar a muchísimos
programadores, con excelentes resultados. Las versiones más conocidas y que dieron que hablar
fueron la 5.0 y 7.0

Formato de un programa en Pascal

Le lenguaje Pascal fue creado para motivar la programación por bloques, es decir, cada paso o
grupo de pasos que guarden una fuerte relación lógica dentro de un algoritmo pueden agruparse en
un bloque o módulo. Cada uno de estos módulos recibe el nombre de bloque, función o
procedimiento.
La sintaxis del lenguaje Pascal requiere que todas las definiciones y declaraciones aparezcan al
principio del programa (Ilustración 1).
Un programa Pascal consta de dos partes, una que describe los datos y otra que describe las
acciones que deben ejecutarse sobre esos datos (bloque principal)

Profesora Laura Vidal – Página 14


Lenguaje de Programación Pascal

Los datos se declaran y las acciones se describen mediante sentencias o instrucciones. Tanto
las declaraciones como las sentencias se separan con el delimitador punto y coma (;) y pueden
escribirse más de una en una línea. Un punto (.) indica el fin del programa. Cualquier comentario que
quiera hacerse a fin de documentar el programa se escribe entre { }.

PROGRAM ...

Declaracion y definiciones

BLOQUE DE UN
BEGIN... PROGRAMA

Cuerpo del programa


END.

Ilustración 1 Organización general de un programa

Estructura de un lenguaje Pascal

Un programa en Pascal consta de un encabezamiento, una sección de declaraciones y una


sección de sentencias ejecutables.
El encabezamiento especifica el nombre del programa y el de los archivos de entrada y salida
que éste utiliza. La sección de declaraciones se divide a su vez en las siguientes:
Sección de cláusula uses
Sección de declaración de rótulos label
Sección de definición de constantes const
Sección de definición de tipos de datos type
Sección de declaración de variables var
Sección de declaración de subprogramas procedure, function

Ninguna de ellas es obligatoria, pueden o no existir en un programa de acuerdo a los


requerimientos del mismo. Toda definición o declaración se realiza en el área reservada a tal fin y
que se halla entre el encabezamiento y el comienzo de la parte ejecutable del programa principal.
Todo objeto o elemento referenciado en un programa debe hacer sido previamente definido o
declarado. De lo establecido anteriormente resulta lo siguiente:

Profesora Laura Vidal – Página 15


Lenguaje de Programación Pascal

ENCABEZAMIENTO DE PROGRAMA CABECERA DEL


EJEMPLO: PROGRAM SUMA; PROGRAMA

DECLARACIÓN DE ETIQUETAS DECLARACIÓN DE


Label ETIQUETAS

DEFINICIÓN DE CONSTANTES
const
DEFINICIÓN DE TIPO DESCRIPCIÓN DE LOS
type DATOS
DECLARACIÓN DE VARIABLES
DECLARACIONES

Var

DECLARACIÓN DE PROCEDIMIENTOS
procedure ALGORITMOS
DECLARACIÓN DE FUNCIONES ESPECIALES
Function

BEGIN
INSTRUCCIONES;
BEGIN
BLOQUE
INSTRUCCIONES;
LOGICO
END;
CUERPO PRINCIPAL

ALGORITMO PRINCIPAL
BEGIN
INSTRUCCIONES; OTRO BLOQUE
END;
INSTRUCCIONES;
END.
Ilustración 2 Organización detallada de un programa en Pascal

Luego de la palabra Program se indica el nombre del programa y sus parámetros. Este nombre
no tiene por qué ser el mismo que aquél con el que se lo almacena en disco.
Los identificadores representan a los objetos o elementos del programa, es decir, son sus
nombres. Un identificador es una secuencia de caracteres que debe comenzar con una letra, no
puede contener espacio en blanco, puede contener letras, dígitos y el caracter underscore (_).

Profesora Laura Vidal – Página 16


Lenguaje de Programación Pascal

Existen palabras reservadas en el lenguaje que no pueden utilizarse como identificadores.


También existen los identificadores estándar en el lenguaje, pero éstos si pueden redefinirse.

ALGUNAS PALABRAS RESERVADAS


and – array – begin end – file – for – of – or – procedure – to – type – until –
– case – const – div forward – function – program – record – uses – var – while –
– do – downto - if – in – mod – not repeat – set – string - with – xor
else then

Entre los identificadores predefinidos se hallan los nombres de los tipos de datos predefinidos
como real, integer, single y también se encuentran los nombres de sbprogramas predefinidos como
int, trunc, str.
Pascal no distingue entre mayúsculas y minúsculas entre los identificadores y palabras
reservadas (Primer_dato ; primer_dato ; PRIMER_DATO  en Pascal son las mismas variables).
Desde el punto de vista de la legibilidad conviene mantener la misma forma de escritura que
se hizo en la declaración.
La longitud de un identificador puede ser cualquiera, pero según la versión con que se cuente
reconoce sola una cierta cantidad de caracteres.
Las etiquetas o rótulos son una secuencia de dígitos que se utilizan en relación a la sentencia
go to, la cual si bien existe en Pascal, tiene USO PROHIBIDO EN LA PROGRAMACIÓN BIEN
ESTRUCTURADA; por lo tanto la sección LABEL no aparecerá en los programas.
La sección Const permite definir constantes con nombre, por ejemplo:
Mensaje=”Error de ingreso”; PI=3,1416; Límite: 234;

La sección Type permite definir los tipos de requiera el programador de acuerdo a sus
necesidades.
Ejemplo
tipofruta=(manzana, naranja, pomelo, frutilla, guinda, cereza, frambuesa, durazno, damasco)

Lo cual implica la existencia de variables que pertenecen a esos tipos de datos


fruta: tipofruta

Parte ejecutable del programa

El cuerpo del programa, contiene la sencuencia de instrucciones que ejecutarán los pasos que
constituyen los algoritmos.
En Pascal pueden usarse varios tipos de instrucciones. Las tres más importantes son:
 Instrucciones de asignación
 Instrucciones de entrada y salida
 Instrucciones de control.

Resumen de la organización de un programa

Profesora Laura Vidal – Página 17


Lenguaje de Programación Pascal

En resumen, cada programa en Pascal debe tener, al menos, un encabezamiento o cabecera y


una instrucción. Además, el programa puede contener varias declaraciones o definiciones siguiendo
a la cabecera (en el orden adecuado) y un número cualquiera de instrucciones. Los comentarios, los
espacios en blanco y las sangrías que se hagan al escribir el programa pueden colocarse en cualquier
lugar para facilitar su lectura.

EJERCICIOS

1. ¿Son los siguientes identificadores correctos en Pascal?


a. A b. 2B c. ALPHA + 1 d.
NOMBRE SIM
2. Qué ocurriría si se usasen los siguientes identificadores en un programa?
a. PERSONA01, PERSONA02, PERSONA03 ¿Son correctos?
3. ¿Representa un identificador, siempre, a una variable?

Profesora Laura Vidal – Página 18


Pascal: Tipo de datos

Introducción

En Pascal existen cuatro tipos de datos fundamentales que se denominan tipos escalares
normalizados: enteros, reales, caracteres y booleanos.
Estos cuatro tipos distintos y las reglas que le son aplicables serán detallados a continuación.
Una vez entendida su naturaleza, y para el uso de los distintos operadores, se pueden escribir
expresiones y sentencias, con estos datos, dentro de un programa.

Tipo de datos en Pascal

Datos de tipo entero

Los tipos de datos en Pascal están divididos en cuadro grandes grupos: enteros, reales,
caracter y booleanos. Algunos de éstos presentan varias opciones: según el rango o la precisión que
se necesite para resolver el problema en cuestión.
En el caso de los números enteros, los tipos de datos que tiene disponible Pascal son: byte,
integer, logint, shortint y Word.

NUMEROS ENTEROS EN PASCAL


TIPO TAMAÑO APROXIMADO EN BYTES RANGO MINIMO
Byte 1 0 a 255
Integer 2 -32.768 a 32.767
Longint 4 -2.147.483.648 A 2.147.483.647
Shortint 1 -128 a 127
Word 2 0 a 65.535

Operadores con datos enteros

Para cada tipo de datos, el lenguaje Pascal define ciertos operadores válidos, los cuales,
usando uno dos operandos (valores), realizan una operación determinada. Estos operandos, están
generalmente, representados por símbolos matemáticos, tales como + y - , o por palabras reservadas
como DIV, que se usa para una división entera.
El lenguaje Pascal incluye operaciones con números enteros de tipo aritméticos y otras de
relación

Profesora Laura Vidal – Página 19


Pascal: Tipo de datos

OPERADORES ARITMÉTICOS
+ Suma (signo más)
- Resta (signo menos)
* Multiplicación (asterisco)
DIV División (el resultado es un entero truncado. Se eliminan todos los dígitos que
forman la parte decimal del número)
MOD Módulo. (A MOD B proporciona el resto de la división de A entre B, es decir:
A MOD B = A (A DIV B)* B)
OPERADORES DE RELACIÓN
> Mayor que
>= Mayor o igual que
< Menor que
<= Menor o igual que
= Igual
<> Distinto que

Estos seis operadores de relación pueden usarse con cualquiera de los tipos de datos escalares
normalizados y su resultado es un valor booleano (VERDADERO / FALSO).

Funciones normalizadas con datos enteros

Normalmente, dentro del juego de caracteres aceptados por una computadora no suelen
encontrarse los típicos símbolos matemáticos como el de la raíz cuadrada, integral o la potencia de
un número. En su lugar se usan identificadores normalizados.
En lenguaje Pascal cualquier operación con uno o más operandos y que produzca el resultado
se denomina función. Las funciones normalizadas son similares a los operadores, pero generalmente
realizan operaciones más complicadas. En los lenguajes de programación se da el nombre de
operadores a los símbolos que representan aquellas operaciones más usadas, mientras que las
menos usadas reciben el nombre de funciones.
Existen cuatro funciones incluidas en el compilador Pascal y que proporcionan un resultado
entero:

ABS (X) Valor absoluto de un número entero; por ejemplo ABS(-4) es 4, ABS(3) es 3
SQR(X) Cuadrado de un número entero; por ejemplo SQR(2) es 4, SQR(-3) es 9
TRUNC(X) Parte entera de un número X, donde X es un número real, por ejemplo:
TRUNC (2.1) es 2, TRUNC(-2.3) es -2
ROUND(X) Proporciona el número entero más próximo a X. Es parecido a TRUNC, pero X es
redondeado al número entero más próximo, bien por arriba o bien por debajo. Si
la parte decimal de X es exactamente 0,5, se redondea por arriba si el X es positivo
y por debajo es X es negativo. Por ejemplo: ROUND(1.2) ES 1, ROUND(1.8) ES 2,
ROUND(-2.4) es -2

Profesora Laura Vidal – Página 20


Pascal: Tipo de datos

Datos de tipo real

Los números reales son el conjunto de los números enteros y los decimales. Para representar
ambos conjuntos, se debe utilizar la notación de punto decimal (que corresponde con la coma
decimal del lenguaje usual) . Para esto, Pascal provee de los tipos de datos: real, single (real corto),
double (real de doble precisión), extended (real ampliado) y comp (entero ampliado).

NUMEROS REALES EN PASCAL


TIPO TAMAÑO APROXIMADO EN BYTES RANGO MINIMO
Real 6 2,9 x 1039 a 1,7 x 1038
Single 4 1,6 x 10-45 a 3,4 x 1038
Double 8 5,0 x 10-324 a 1,7 x 10308
Extended 10 3,4 x 10-4932 a 1,1 x 104932
Comp 8 -2-63 a 263 -1

Operadores con datos reales

Además de los seis operadores de relación comentados anteriormente, que también son
aplicables a los números reales, existen cuatro operadores aritméticos aplicables a datos del tipo
real:

OPERADORES ARITMÉTICOS
+ Suma (signo más)
- Resta (signo menos)
* Multiplicación (asterisco)
/ División (DIV no puede usarse con números reales).

Funciones con datos reales

Las siguientes funciones normalizadas conducen a un resultado de tipo real:

ABS(X) Valor absoluto de un numero real X Estas dos funciones pueden trabajar con un
SQR(X) Cuadrado de un número X real, X * X argumento real o entero, siendo el resultado
un numero del mismo tipo
SIN(X) Seno de X
COS(X) Coseno de X
ARCTAN(X) Arco tangente de X en radianes Estas seis funciones pueden trabajar con
argumento real o entero y su resultado será
LN(X) Logaritmo natural de X en el caso más general, un número real.
EXP(X) Exponencial de X
SQRT(X) Raíz cuadrada de X

Profesora Laura Vidal – Página 21


Pascal: Tipo de datos

Datos tipo carácter

El tipo de datos char sirve para almacenar un caracter. Se entiende por caracter todo símbolo
perteneciente al conjunto de códigos ASCII (incluido el ASCII ampliado, que adiciona 127 caracteres y
totaliza 256 caracteres). Estos caracteres pueden ser letras (mayúsculas, minúsculas), dígitos (0..9) y
otros símbolos especiales ($, *, @, ¡). Cada tipo de dato char ocupa un byte.

Operadores y funciones con caracteres

No se pueden realizar operaciones aritméticas con datos tipo carácter. Sin embargo, si puede
usarse las seis operaciones de relación normalizadas y cuatro funciones normalizadas.

ORD(X) Función ordinal. Proporciona el valor ordinal del carácter. Es decir, el entero que
representa su número de orden en el juego interno de caracteres
CHR(X) Función caracter. Proporciona el caracter X que ocupa el puesto X-ésimo del juego
interno de caracteres.
PRED(X) Función predecesor. Proporciona el caracter anterior en el juego de caracteres
instalado.
SUCC(X) Función sucesor. Proporciona el caracter siguiente en el juego de caracteres
instalados.

Datos tipo booleano

La palabra booleano deriva de la teoría de Algebra desarrollada por Boole.


El tipo de dato boolean sirve para representar sólo dos estados y por ende, sólo pueden
adoptar los valores true (verdadero) y false (falso). A este tipo de datos se le denomina también
lógico. La combinación de datos recibe el nombre de expresiones booleanas y se emplean para tomar
decisiones lógicas. Los dos únicos que puede tomar un dato de este tipo suelen obtenerse de
comparaciones.

Operadores con datos booleanos

Además de los seis operaciones de relación normales, definidos anteriormente, existen tres
operadores booleanos especiales:

AND Y lógico
OR O lógico
NOT NEGACIÓN lógica.

Profesora Laura Vidal – Página 22


Pascal: Tipo de datos

A B A AND B A B A OR B A NOT A
V V V V V V V F
V F F V F V F V
F V F F V V
F F F F F F

Por último existe el tipo de dato string, que sirve para representar una cadena de caracteres
pertenecientes al conjunto de códigos ASCII. Cada tipo de dato string ocupa la cantidad de caracteres
que contenga dicha cadena en bytes.

Operadores en Pascal

Pascal, por su lado, también posee operadores de asignación, aritméticos, de relación, lógicos.

Asignación

La flecha () o el igual (=) utilizada en los diagramas de flujo o pseudocódigo se reemplaza en
el programa por dos símbolos seguidos dos puntos igual (:=).

Operadores aritméticos en Pascal

Ellos son: suma (+), resta (-), multiplicación (*), división (/), división entera (div), división por
módulo (mod).

Operadores de relación y lógicos en Pascal

Los operadores de relación son: > (mayor), < (menor), = (igual), >= (mayor e igual que…), <=
(menor e igual que…), <> (distinto de…).
Los operadores lógicos son: and (y), or (o), not (no), nor (si ambos operandos son de distintos
valor lógico, da como resultado verdadero, caso contrario da falso).

EJERCICIOS

 Definir el término Variable


 Pertenecen los siguientes números al tipo entero?
a. 24 b. -32 c. -200,00 d. 1.24

Profesora Laura Vidal – Página 23


Pascal: Tipo de datos

 Escribir el resultado de: (para ello investigar que significan cada una de ellas)
a. TRUNC (32.12) b. ROUND(0.5) c. ROUND(32.12)
 ¿Pertenecen los siguientes números al tipo real?
a. 1234 b. 24,232.00 c. 1.234 d. .12
 Suponiendo que A es VERDADERO y que B es FALSO. ¿Cuál es el valor de:
a. A AND B b. A OR B c. NOT B
 ¿Cuándo es correcto escribir?
a. A:=VENTICUATRO?
 ¿Qué operaciones pueden realizarse con caracteres excluyendo a los operadores de relación
y a las funciones reservadas?
 ¿De qué tipo es el dato que resulta de las siguientes operaciones?
a. A<B b. 3.0/1.5
c. (1 + 6) = (6 + 1= d. 5 * 6 DIV 3
 Escribir el resultado de:
a. TRUNC (1.75) b. ROUND(1.75) c.TRUNC(2.3)

d. ROUND (2.3)
 Escribir algunos ejemplos de cada uno de los cuatro tipos de escalares.

Variables

En el caso de Pascal las variables deben ser declaradas antes de ser usadas. Para declarar una
variable, el procedimiento es el siguiente: se especifica una lista de variable (una o más) seguidas del
caracter “:”, luego se indica qué tipo de dato podrá contener dicha variable y se finaliza con el
caracter “;”.
Todas las variables deben ser declaradas al inicio del programa, en la sección de declaraciones
correspondientes que se especifica con la palabra clave Var.
Ejemplo:
Var
Listadevariables1:tipodedato1;
Listadevariables2:tipodedato2;

En Pascal, las variables pueden ser locales o globales. La diferencia radica en la parte del
programa en que son declaradas. Además se declaran variables para definir los parámetros de las
funciones y procedimientos (que son como subprogramas).

Variables locales: son aquellas que se declaran dentro de un procedimiento o función y se


dice que son locales a ese subprograma, de manera que sólo el código escrito en él puede hacer
referencia a esas variables. Será imposible realizar llamada a dichas variables desde el programa
global o cualquier otro procedimiento que hay definido.
Variables globales: son aquellas que se declaran en el programa principal. A diferencia de
las variables locales, éstas pueden ser referenciadas desde cualquier parte del programa, ya sea
desde el programa principal o desde cualquier función o procedimiento.

Profesora Laura Vidal – Página 24


Pascal: Tipo de datos

Recomendación: utilizar variables globales sólo para almacenar información que deba ser
accedida alternativamente desde el programa principal o desde varios procedimientos o funciones. Si
lo que se guarda es un valor temporal que luego será devuelto por el procedimiento, en este caso, lo
más correcto es emplear una variable local.
Parámetros formales en Pascal: los parámetros formales de las funciones y
procedimientos en Pascal se definen mediante variables. Éstas se pueden declarar de varias formas,
según su uso. Pueden ser utilizadas para pasar datos por valor o por referencia, indicando el tipo de
dato o no.
Cuando se pasa un parámetro a un procedimiento por valor, en realidad se pasa una copia de
la variable, y las modificaciones que realice el subprograma no afectarán la variable original.
Para indicar que un parámetro se pasa por referencia se le debe anteponer la palabra clave var
al identificador de éste. Por definición, los parámetros se pasan por valor.

La declaración de variables: VAR

VAR X,Y: REAL;


Esta sentencia declara que las variables X e Y son de tipo REAL.

VAR I, J, K: INTEGER
Esta sentencia está definiendo las variables I, J, K como enteras.

VAR A: REAL;
B: REAL;
M,N: CHAR;
TEST: BOOLEAN;

O también
VAR A,B: REAL;
K,L: INTEGER;

Observe que A y B pueden ser declaradas juntas o por separado y que la palabra reservada
VAR puede usarse una sola vez, al principio de la lista de variables que se pretende declarar.

La declaración VAR cumple dos propósitos distintos:


 Le comunica al compilador que los identificadores que siguen son VARiables, y no otro tipo
cualquiera de identificadores, tales como nombres de funciones o procedimientos.
 Define el tipo al que pertenece cada variable: real (REAL), entero (INTEGER), booleano
(BOOLEAN), carácter (CHAR) o cadena de caracteres (STRING)

El empleo de la declaración VAR tiene tres ventajas adicionales:


 Simplifica el diseño del compilador

Profesora Laura Vidal – Página 25


Pascal: Tipo de datos

 Contribuye a la disciplina de programación porque obliga al usuario a declarar explícitamente


todas las variaciones de usarlas.
 Permite al compilador comprobar la validez de las operaciones que se realizan con tipos
determinados de variables.

Declaración implícita del tipo de dato (constantes)

Una constante es un valor perteneciente a uno de los tipos de datos. En el caso de los enteros,
son ejemplos de constantes 22,3 15. En el caso de los caracteres, son constantes ‘A’, ‘G’. Se usan
constantes simbólicas cuando es conveniente representar un valor con un nombre determinado.
Ejemplos de constantes simbólicas:
PI=3.14159
TASA=6.5

La declaración CONST sirve para identificar constantes simbólicas. Define, implícitamente, el


tipo al que pertenece una constante asignadas a un identificador determinado, es decir, el tipo de
una constante así definida viene dado por el tipo del valor que se le ha asignado. Por ejemplo
CONST I=2;
Esta sentencia define I como una constante entera y le asigna el valor 2.

CONST NOMBRE=’LAURA’;

Esta sentencia define NOMBRE como una cadena de caracteres constantes cuyo valor es
LAURA.

Los valores constantes pueden emplearse sin ninguna restricción a lo largo del programa
siempre que se usen literalmente (números o caracteres) pero si a alguna de estas constantes se le
da un nombre, éste debe ser declarado previamente mediante la declaración CONST.

Tipos de datos definidos por el usuario (definición TYPE)

El lenguaje Pascal tiene identificadores del tipo de dato normalizado, como son INTEGER, REAL,
BOOLEAN, CHAR, STRING. Sin embargo, es a menudo conveniente usar diferentes nombres para
estos normalizados, e incluso dar nombres a tipos que el propio programador pueda elaborar.
La definición TYPE permite al programador definir un identificador que sea el nombre de un
nuevo tipo de datos.

Los tipos de datos se distinguen por dos razones diferentes:


 Que el compilador pueda utilizar la representación interna adecuada para cada tipo
 Que el programador utilice los operadores adecuados para cada tipo.
La definición del tipo se utilizar para distinguir los tipos de datos.

Profesora Laura Vidal – Página 26


Pascal: Tipo de datos

La primera ventaja al declarar un tipo de datos antes de utilizarlo es que el compilador (el
programa de la computadora que traduce el programa Pascal en un código ejecutable por la
máquina) podrá detectar los operadores erróneos que hayan sido aplicados a un tipo erróneo. Esto
es muy útil cuando el programador no tiene cuidado o cuando el programa es muy largo. La segunda
ventaja resultante de la declaración formal de los tipos de datos es que facilita el diseño del
compilador.
Cada tipo de datos se representa dentro de la memoria de la computadora en un formato
específico. Si los tipos identificadores pudieran cambiar dinámicamente, esto es, según está siendo
ejecutado el programa, la asignación correcta de la memoria de la computadora se complicaría. Este
cambio dinámico también retardaría la ejecución del programa.
Cuando se creó el lenguaje Pascal, uno de los factores que se tuvieron en cuenta fue su fácil
implementación en una computadora (o sea, poder diseñar un compilador de Pascal con razonable
facilidad). Por ello, Pascal requiere que todos los tipos de datos sean declarados formalmente antes
de ser utilizados.
Así, al traducir el compilador el programa antes de su ejecución, puede tomar todas las
decisiones relativas a la asignación de espacio para cada tipo de variable. La ventaja que se obtiene
de ello es que el compilador puede verificar la correcta sintaxis de las expresiones en el momento en
que están siendo traducidas, en vez de cuando están siendo realmente ejecutadas. Este proceso
acelera la ejecución.

Reglas generales para los tipos de datos

Las reglas básicas que se aplican a los tipos de datos de Pascal son:
 Cada variable puede tener solo un tipo. Naturalmente, éste se aplica solo al bloque donde se
declara el identificador.
 El tipo de cada variable puede ser declarado antes que la variable sea utilizada en una
instrucción ejecutable.
 Las reglas formales de las declaraciones de Pascal son especificadas por la sintaxis en el
apéndice F. en concreto, las declaraciones tienen que hacerse en el orden específico.
 Solo algunos operadores específicos pueden ser aplicados a cada tipo de datos.

Enumeración o tipo enumerado

El tipo enumerado está constituido por un conjunto de valores definidos por el usuario el cuál
elige sus identificadores y el orden que deben seguir dentro del conjunto. Por ejemplo, se puede
definir el tipo colores, formado por los valores rojo, amarillo, azul, negro, blanco. Internamente se
asigna un número de orden a cada valor que comienza en cero, esto quiere decir:
0 – rojo 1 –amarillo 2-azul 3-negro 4-blanco.

Profesora Laura Vidal – Página 27


Pascal: Tipo de datos

Luego, si la variable color pertenece a este tipo de dato son válidas las operaciones de
asignación y de comparación, tales como coloramarillo, color < blanco….
Este tipo de dato no se puede leer ni escribir en forma directa sino a través de una
recodificación. Son fundamentales para la legilibilidad y comprensión del programa.

Tipo subrango

El tipo de dato más simple que puede definir el programador es el subrango de algún tipo
ordinal. Por ejemplo, supongamos que una variable entera r va a tomar valores sólo entre -20 y 20.
Es posible declarar a la variable r como perteneciente al tipo de subrango de entero -20..20, esto es,
entre -20 y 20 todos los enteros intermedios incluyendo los extremos. El tipo subrango es también
ordinal y se define como una parte del tipo base ordinal; no se puede definir un tipo subrango de
reales.
Otros ejemplos de subrangos de caracteres (‘a’..’m’; ‘F’..’K’, ‘0’..’9’, ect) y subrangos de
enumerados. El único subrango de booleano posible coincide con el tipo booleano, es decir,
false..true.

EJERCICIOS

a ) Encontrar las declaraciones que son ilegales:


1. CONST UNO=1;
2. RANGO=1..5;
3. PUNTO=’.’;
4. TYPE JUEGO=(POKER,BRIDGE,BLACKJAK,RULETA);
5. MUSICA=(PIANO,ARPA,GUITARRA);
6. POSENT=0..1000;
7. SEMANA=(LUN,MAR,MIER,JUEV,VIER,SAB,DOM);
8. VAR ‘A’:CHAR;
9. BRILLANTE:(AMARILLO,NARANJA);
10. LASVEGAS:(BLACKJACK,RULETA);
11. INSTRUMENTO:PIANO..GUITARRA;
12. INICIOSEMANA:LUN..MIER;
13. DIA: 1..31;
14. MES: 1..12;
15. SEMANA: 1..52;
16. GRANDE: 100..MAXINT;
17. INSTRUMENTO: MUSICA;

b) Dé cinco ejemplos de un tipo de dato enumerado y otros cinco de un tipo de subrango


c) Es indispensable la instrucción TYPE?
d) ¿Cuál es la ventaja de un tipo de dato subrango y enumerado?

Profesora Laura Vidal – Página 28


Pascal: Expresiones

Expresiones

Una expresión consiste en una secuencia de términos separados por operadores. Ejemplo:
10 + 6 6 * 21 A + 16 A–B+6

A la hora de escribir una expresión debe cuidarse que los operadores empleados sean
compatibles con el tipo de los datos que en ellas aparecen.

Las cuatro reglas fundamentales que se han de seguir para construir una expresión correcta
son:
 Una sola constante o una sola variable constituye en sí misma una expresión válida. Pueden
ir precedidas por un signo más o un signo menos. Ejemplo: 22, ALFA, -2.5
 Una sucesión de términos (variables, constantes, funciones) separados por operadores
constituye una expresión válida. Ejemplo: 1.1 + 2.22 – 3.2 A+B*6
 Dos operadores no pueden ser adyacentes, debe usarse un paréntesis entre ellos. Así, si se
quiere multiplicar 2 por -3 no se puede escribir 2 * -3. En su lugar, debe escribirse 2 * (-3).
 Finalmente, hay que decir que cualquier variable o constante puede ser sustituida por una
llamada a una función. En el caso de expresiones booleanas (lógicas) se verá que cualquier expresión
puede ir precedida por NOT, siendo válida la expresión resultante.

Expresiones aritméticas

La principal regla a seguir es la de hacer que el tipo de escalares y la expresión que con ellos se
quiera construir sean compatibles. Si se pretende construir una expresión del tipo entero, las
variables y constantes que se usen y los resultados que se produzcan deben ser también enteros. Si
la expresión es real, los datos y el resultado deben ser reales.
Existe, sin embargo, una excepción a esta regla de oro: los datos enteros pueden usarse en
expresiones de tipo real. En este caso, los valores enteros son transformados automáticamente en
valores reales.

Prioridad de los distintos operadores

 Operadores de relación =, <, >, <=, >=, <>


 +, -, OR
 *, /, DIV, MOD, AND
 NOT
 El operador prioritario sobre todos los demás es: ()

Resumen…. Una expresión aritmética puede definirse, en pocas palabras, como una sucesión
de operadores y operandos. Como operandos pueden usarse incluso las funciones normalizadas o
aquellas que son definidas por el usuario. Con el objeto de eliminar cualquier ambigüedad se han
establecido unas reglas de prioridad en el conjunto de los operadores. De esta forma, en una
expresión queda perfectamente definido el orden en que deben realizarse las operaciones que
aparezcan.

Profesora Laura Vidal – Página 29


Pascal: Expresiones

Expresiones booleanas

Ya nombramos anteriormente los operadores lógicos: AND, NOT, OR que trabajan solo con
valores booleanos (VERDADERO/FALSO). Con ellos se pueden escribir expresiones booleanas.
Además, los operadores de relación pueden aplicarse para comparar dos variables cualquiera y su
resultado será un valor booleano también.

En el caso de las expresiones booleanas se exige una condición adicional: todas las expresiones
elementales que incluye una expresión más complicada deben encerrarse entre paréntesis, salvo que
comiencen con NOT.

Si se supone que K,L,M, N han sido definidas como variables booleanas, las siguientes
expresiones son booleanas también:
K AND L operador booleano
NOT K operador booleano
M=N operador de relación.

Ejemplo de expresiones más complejas:


K AND M= NOT N
I + J=2
K AND M OR NOT N
(A=B) OR (C=D) AND (A-C=0)

En este tipo de expresiones se aplican también las prioridades que se nombraron


anteriormente. Por ejemplo:
B > C + 5 se interpretará como B > (C + 5)

Reglas básicas del álgebra booleana

Cuando se trabaja con expresiones booleanas es muy útil conocer algunas reglas que
permitirán simplificar algunas expresiones. Por ejemplo:
NOT(NOT K) EQUIVALENTE K
NOT(J OR K) EQUIVALENTE (NOT J) AND (NOT K)
NOT(J AND K) EQUIVALENTE (NOT J) OR (NOT K)
NOT(J<K) EQUIVALE J>=K
NOT(J<>K) EQUIVALE J=K

Profesora Laura Vidal – Página 30


Pascal: Expresiones

Instrucciones

Anteriormente se aclaró que todo programa en Pascal debe tener, al menos, una instrucción, y
normalmente tiene muchas.

Instrucción de asignación

La instrucción de asignación consiste en el identificador de una variable seguido por el símbolo


:=, a continuación del cual debe colocarse una expresión válida. El símbolo := se denomina
Operación de asignación. Esta instrucción comunica al compilador que debe evaluar la expresión de
la derecha y almacenar el resultado en el espacio reservado a la variable que aparece a la izquierda.
Es decir, el valor que toma la expresión será a partir de ese momento el valor que tendrá la variable.
Para que la instrucción sea correcta, la expresión debe tener un resultado correcto también. En
particular, los componentes de dicha expresión deben tener asignados sus propios valores de
antemano.

Las instrucciones de asignación se pueden emplear con todo tipo de datos; así la variable NOM
se ha definido como tipo carácter, la siguiente instrucción sería correcta:
NOM:=’LAURA’;

Es posible, aunque no aconsejable, asignar un valor entero a una variable que se declare,
previamente, como de tipo real. En estas condiciones, el número entero se convierte
automáticamente en real.

La instrucción compuesta

Generalmente puede usarse un grupo de instrucciones donde sería correcto escribir una
instrucción simple. Este grupo de instrucciones recibe el nombre de instrucción compuesta y debe ir
incluida entre BEGIN y END.
Ejemplo:
BEGIN
I:=3;
J:=4;
C:=I+J;
END;

Profesora Laura Vidal – Página 31


Pascal: Expresiones

EJERCICIOS

Calcular el valor de las siguientes expresiones


 1*4*-4*2+3
 2.2 / 1.1 * 3.3/2.2 – 5.5
 SQR(2 + 3 * 4)
 1 + 2 * 3 + 10 DIV 5
 (6 DIV 3 – 2) * 8
 12.0/4.0 – 3.0 * 3.0
 16 * 2 – 8 * 2 + 4 * 4

¿Son correctas las siguientes instrucciones?

 A:= 2 + 3.0;
 A + 2 := B;
 3:= 2 + 1;
 A:= - 2 – ( - (-1 + 2) – 3) – 2 * 4
 A:= 2 * -3;
 B:= (- 6.73)2;
 Q:= 2 + B = 7 * 12;
 R:= 6.4 DIV 8;
 Q:= 2 + B:= 8;

Escribir en Pascal las siguientes expresiones matemáticas:


 3 x 2 + 2x -2
 |4a|

 √6 𝑎 − 2𝑥 2

¿Qué es lo que hace el siguiente programa?

PROGRAM TESTBOOLEANO;
VAR P,Q,R,S,RESULTADO:BOOLEAN;
BEGIN
P:=TRUE;
Q:=P;
R:=FALSE;
S:=R;
RESULTADO:=NOT(P);
WRITELN(RESULTADO);
RESULTADO:= NOT(NOT(Q));
WRITELN (RESULTADO);
RESULTADO:=Q OR S;

Profesora Laura Vidal – Página 32


Pascal: Expresiones

WRITELN (RESULTADO);
RESULTADO:= P AND S;
WRITELN (RESULTADO);
RESULTADO:=P AND Q AND R;
WRITELN (RESULTADO);
RESULTADO:=(P OR R) AND Q;
WRITELN (RESULTADO);
END.

Profesora Laura Vidal – Página 33


Pascal: Estructuras de control - Selección

Estructuras de control

Cada instrucción se ejecuta en el orden en el que aparecían en el listado del programa; esto se
conoce como ejecución secuencial.
Una computadora no solo ejecuta instrucciones de forma secuencial. Si la computadora solo
estuviera capacitada para ejecución secuencial, sería nada más que una buena calculadora de
bolsillo.

Estructura de selección en Pascal

Al programar se necesita la capacitar de ejecutar una instrucción si una condición es verdadera


y otra instrucción si la condición no lo es. Otra capacidad útil implica un caso en el cual una variable
puede tener más de dos valores ( por ejemplo, el conjunto de valores 1 2 3 4 5 6 ) y se necesita
ejecutar sólo una de seis instrucciones, según el valor de la variable. Ambas instrucciones
condicionales existen en Pascal. Se llaman las instrucciones IF y CASE. IF se utiliza para una selección
binaria. CASE se utiliza para una selección n-aria, cuando n es mayor que 2.

Decisión simple
B
La expresión en pseudocódigo Si B entonces A1 sino A2
se reemplaza en Pascal por A A
1 2

IF B THEN A1 ELSE A2;

Decision If anidadas

IF B THEN
IF C THEN
IF D THEN
A1
ELSE
B1
ELSE
C1
ELSE
D1

Profesora Laura Vidal – Página 34


Pascal: Estructuras de control - Selección

Decisión múltiple

La instrucción CASE existe en Pascal para situaciones en las cuales el numero de alternativas
disponibles es mayor que 2. Según el valor de una expresión que puede tomar n valores distintos, se
ejecutará una de las n instrucciones.

En Pascal sería
CASE S of
V1: A1;
V2: A2;
….
ELSE A n…
END

Estructura de iteración

Las tres formas de repetición se reemplazarán en Pascal por:

Mientras B hacer A While B do A


Repetir A hasta que B Repeat A until B
Para C de vi a vf hacer A For c:= v1 to vf do A
For c:= v1 downto vf do A (se utiliza cuando la variable
se decrementa)

B: es una condición.
En los ciclos while y for si A es un sentencia compuesta debe delimitarse con begin end. Para el
ciclo Repeat no es necesario porque las palabras repeat..until, ya son delimitadores.
El contador del ciclo for debe ser de tipo ordinal.

BUCLES WHILE BUCLES REPEAT


I La condición (expresión lógica) se verifica
La condición se verifica después que el cuerpo del
que se ejecute el cuerpo del bucle. bucle se a ejecutado
II Como resultado de la condición, el cuerpo Como resultado de la condición, el cuerpo del
del bucle puede no ser ejecutado (si la bucle se ejecutará al menos una vez (no importa
condición es falsa) cuál será el valor de la condición).
III Como resultado de la condición, las Como resultado de la condición, las variables de la
variables de la condición deben hacer sidocondición no necesita ser inicializadas antes de
inicializadas antes de alcanzar la sentencia
alcanzar la sentencia repeat. A esas variables se
while, de modo que la condición puede ser les pueden asignar valores en el cuerpo del bucle,
verificada que se ejecutarán antes que se verifique la
condición
IV Si la condición es verdadera, el cuerpo de Si la condición es verdadera, el cuerpo de bucle

Profesora Laura Vidal – Página 35


Pascal: Estructuras de control - Selección

bucle se ejecutará y continuará el bucle habrá sido ejecutado pero se detiene el bucle

V Para evitar un bucle infinito, debe Para evitar el bucle infinito, debe asegurarse que
asegurarse que la condición contenga una la condición contenga una variable cuyo valor se
variable cuyo valor se modifique en el modifique en el cuerpo del bucle, pasando a
cuerpo del bucle, pasando a tomar el valor tomar el valor verdadero
de falso

La sentencia FOR TO - DOWNTO


I Las variables de control, valor inicial y valor final deben ser todas del mismo tipo, pero el tipo
real no está permitido. Los valores iniciales y finales pueden ser tanto expresiones como
constantes.
II Antes de la primera ejecución del bucle, a la variable de control se le asigna el valor inicial
III La última ejecución del bucle normalmente ocure cuando la variable de control es igual al valor
final
IV Cuando se utiliza la palabra reservada to, la variable de control se incrementó en cada iteración.
Si se utiliza downto, la variable se decrementa.
V Es ilegal intentar modificar el valor de la variable de control, el valor inicial y el valor final dentro
del bucle.
VI El valor de la variable de control se queda indefinido cuando se termina el bucle.

Entradas y salidas

Los procedimientos de entrada y salida sirven para la comunicación de la parte central de la


computadora (unidad de proceso + memoria) con los periféricos, tales como teclado, monitores,
impresoras, discos, etc. Los programas consideran estos dispositivos periféricos como archivos.
En el caso del teclado, monitor y la impresora, el archivo puede definirse como una colección
de datos secuencial.
Para la entrada de datos, se van a utilizan los procedimientos read y readln.
La sintaxis correspondiente a real (f, a,b,c…) en donde f es la variable archivo que representa al
archivo de entada y a,b,c… son las variables a leer desde ese archivo. Cuando la entrada es por
teclado se omite f resultando read (a,b,c…). Lo mismo se aplica a readln.
La diferencia en read y readln es que read hace que la siguiente lectura continúe en la misma
línea, mientras que readln, luego de su ejecución pasa a la línea siguiente.
Para la salida de datos se van a utilizar los procedimientos write y writeln, con sintaxis y
consideraciones similares a las entradas.

Profesora Laura Vidal – Página 36


Pascal: Subprogramas

SUBPROGRAMAS

Introducción
En el diseño de algoritmos existen varias consideraciones que llevan a la utilización de sub
algoritmos. En primer lugar, la técnica de dividir un programa complejo en problemas más sencillos,
que permitan ser diseñados y probados independientemente unos de otros, aún por distintas
personas. En segundo lugar, la existencia de procesos que se repiten tal cual en varias partes de un
mismo algoritmo y aún más, procesos comunes a algoritmos que resuelven distintos problemas.
Se van a tratar dos tipos de subprogramas llamados procedimiento y función de Pascal. Un
subprograma es “llamado” por su nombre desde un programa o desde otro subprograma, que se
denomina principal. Una función devuelve desde un programa o desde otro subprograma y lo
devuelve en el nombre de la función. Un procedimiento puede devolver cero o más valores al
programa principal y lo hace a través de parámetros. Los parámetros permiten la comunicación entre
el programa llamador y el subprograma, es decir, permiten el manejo de datos de entrada y salida
al/del programa.
La estructura de un subprograma es igual a la de un programa salvo el encabezamiento y la
finalización con un end;

Encabezamiento  PROCEDURE Nombreproc (param1:tipo; param2:tipo2;…)

Const  lista de constantes


Objetos locales Type  lista de tipos
Var  lista de variables
Begin
Parte ejecutable Sentencias
End;

Encabezamiento Function Nombrefun (param1:tipo; param2:tipo2;….):tipo;


Const  lista de constantes
Objetos locales Type  lista de tipos
Var  lista de variables
Begin
Parte ejecutable Sentencias
End;

Comunicación programa – subprogramas: parámetros.

Se utilizan dos tipos de parámetros: los parámetros por valor y los parámetros variables, estos
últimos también llamados parámetros por dirección.
Los parámetros que aparecen en la llamada de un subprograma se denominan parámetros
reales o verdaderos. Los parámetros que aparecen en el encabezado de un subprograma se
denominan parámetros formales o ficticios. Los parámetros reales respecto a los formales pueden o
no tener el mismo identificador y se corresponden únicamente por la posición que ocupan dentro de

Profesora Laura Vidal – Página 37


Pascal: Subprogramas

las listas respectivas de parámetros, esto es, el primer parámetro real se corresponde con el primer
parámetro formal, el segundo parámetro real se corresponde con el segundo parámetro formal, etc.
Los parámetros formales son locales al subprograma que los declara y pueden ser referenciados por
su identificador dentro de la parte ejecutable del mismo.
Cuando a un parámetro real le corresponde como parámetro formal un parámetro por valor,
en el momento de la llamada al subprograma el parámetro real le pasa el valor, es decir, su
contenido, al parámetro formal. Un parámetro por valor actúa como una variable local al
subprograma que lo declara, excepto que toma su valor inicial desde el correspondiente parámetro
real en el momento de la activación del subprograma.
Por lo tanto, tengan o no el mismo identificador, el parámetro real y el formal implican
posiciones de memoria distintas, en donde la relación es la copia del contenido del primero al
segundo en el momento de la activación del subprograma; los cambios en el parámetro por valor
durante la ejecución del subprograma no modifican el estado del parámetro real correspondiente. El
parámetro real correspondiente a un parámetro por valor en la llamada al subprograma debe ser una
expresión entendiendo como tal a una constante, una variable o un conjunto de variables y/o
constantes relacionadas por operadores. El tipo de dato del parámetro real debe cumplir la condición
de compatibilidad de asignación con el tipo de dato del parámetro formal. De todo lo dicho surge
que a través de los parámetros por valor se ingresan dato al subprograma desde el programa
llamador, por lo cual también se los llama parámetros de entrada.
Un parámetro variable o por dirección es empleado cuando se necesita pasar un valor desde el
subprograma al programa llamador, esto es, un dato de salida del subprograma. El parámetro real
correspondiente en la llamada debe ser una variable. El parámetro forma representa a la variable
parámetro real durante la activación del subprograma, de modo que cualquier cambio en el
parámetro formal se refleja en el parámetro real mismo. Por lo tanto, tengan o no el mismo
identificador, el parámetro real y el formal implican la misma posición de memoria durante la
activación del subprograma, ambos parámetros deben ser de tipo de dato idéntico. Por lo dicho
resulta que los parámetros variables pueden ser parámetros de salida o de entrada/salida. Para
distinguir entre los parámetros por dirección y los parámetros por valor, en el encabezamiento del
subprograma se antepone la palabra Var a los primeros

Objetos globales y locales

Todos los identificadores que se declaran entre el encabezamiento y la parte ejecutable de un


programa principal se llaman globales, se puede hacer referencia a ellos en el programa principal y
en todos los subprogramas que utilice ese programa principal
Todos los identificadores que se declaran dentro de un subprograma son locales al mismo,
esto significa que sólo los conocidos dentro de dicho subprograma y que sólo están disponibles
durante la activación del mismo. Si un objeto local tiene el mismo identificador que uno global, de
todos modos implican posiciones de memoria distintas y durante la ejecución del subprograma sólo
se accede a la local, es decir, tiene prioridad el objeto local.
Si bien las variables globales son conocidas por los subprogramas ( a menos que con el mismo
nombre se haya declarado una local) lo correcto desde el punto de vista del diseño es comunicar al
programa principal y al subprograma por medio de parámetros, ya que se permite lograr una mayor
independencia de los subprogramas respecto de los programas que luego los utilizan y además evitar
efectos secundarios.

Profesora Laura Vidal – Página 38


Pascal: Subprogramas

Subprograma tipo Función

Una función devuelve un único valor al programa principal, puede recibir datos de entrada a
través de parámetros, también llamados argumentos y devuelve un valor en su nombre. El
encabezamiento de una función es:
Function NombreFunción (lista de parámetros): tipo de dato del valor de salida;

En donde la lista de parámetros consiste en cero o más identificadores de parámetros seguido


del tipo de dato correspondiente.

Function nombeFunción (param1:tipo1; param2:tipo2;……):tipo de la función

Dado que la función devuelve el valor en su nombre, dentro de la parte ejecutable de la misma
debe aparecer en algún momento una sentencia que asigne el resultado de salida al nombre de la
función, puede ser en una lectura o en una asignación propiamente dicha. En principio el tipo de
dato que puede devolver una función es cualquier tipo simple y string (éste último sin longitud física,
ya que por definición se devuelve un string de 255 caracteres como longitud física).

La forma correcta de utilizar una función es utilizando únicamente parámetros de entrada, es


decir, aquellos que toman los valores de los datos correspondientes en la llamada y a los cuales se
denomina parámetro por valor.
Una función es activada por la evaluación de una expresión que contiene su llamada y retorna
un valor a la expresión. La expresión concretamente puede ser una asignación, una escritura o una
expresión propiamente dicha, por ejemplo:

x:=nombreFuncion(p1,p2)
writeln(nombreFuncion(p1,p2))
if nombreFuncion(p1,p2) then …….
y:=(x+nombreFuncion(p1,p2))*100/total
etc…

Subprograma tipo procedimiento

Un procedimiento puede devolver al programa llamador cero o más valores en el nombre de


parámetros variables o por dirección. Puede recibir datos de entrada a través de, ya sea parámetro
por valor o variables. Su encabezamiento es:
Procedure NombreProcedimiento (lista de parámetros);

En donde la lista de parámetros consiste en cero o más identificadores de parámetros seguidos


del tipo de dato correspondiente.

Procedure NombreProcedimiento (param1: tipo1; param2: tipo2….);

Profesora Laura Vidal – Página 39


Pascal: Subprogramas

Que en el caso más general son, algunos por valor y otros por dirección o variables. A los
segundos se les debe anteponer la palabra Var.

Procedure NombreProcedimiento (param1: tipo1;param2:tipo2; var param3: tipo3;….);

La llamada a un procedimiento se realiza indicando el nombre y a continuación entre


paréntesis la lista de parámetros reales separados por comas. El nombre del procedimiento invoca su
ejecución.

NombreProcedimiento(P1, P2….)

Diagrama de memoria

Supongamos el siguiente ejemplo:

Variables globales
Programa Prueba;
Var i, a, b, m: integer;
Procedure Multiplica (n,x:integer; var y: integer);
Parámetro por
Var i: integer; dirección o variable
Variable
local Begin
y:=0;
Parámetro por valor
for i:= 1 to n do y:= y + x;
end;
Begin { programa principal}
For i:= 1 to 3 do
Begin
Write ('Ingresar dos factores enteros;');
readln (a,b)
Multiplica (a,b,m);
Writeln (a, 'x', b, '=',m)
End
End.

Profesora Laura Vidal – Página 40


Pascal: Subprogramas

El diagrama o mapa de memoria que muestra la ubicación relativa de las variables es el siguiente:

Área del programa Área del Subprograma


Principal Variables locales y parámetros
Variables globales por valor
Área activa todo el Área activa todo el tiempo de
tiempo de ejecución ejecución del Subprograma
del programa
i a n i

m(y) b x

Solo durante la ejecución del


subprograma

Como se observa en el diagrama de memoria los parámetros por valor (n,x) y las variables
locales (i) tienen una posición de memoria asignada tal que aunque sus identificadores coincidan con
alguno global, representan lugares diferentes. En tanto los parámetros variables durante la ejecución
del subprograma tienen asignada la misma posición que la del parámetro real correspondiente,
independientemente de los identificadores que se utilicen. Durante la ejecución del subprograma no
será posible acceder a la variable i global, dado que existe una variable i local que tiene prioridad.
Ambas podrían ser eventualmente de distinto tipo de dato. En cambio a la variable m sí puede
accederse dentro del subprograma.
Las flechas que van desde las variables globales (que son también los parámetros reales) hasta
los parámetros formales representan el sentido en que se comunican los datos de entrada al
subprograma en el momento de la llamada.

Para completar el ejemplo, supongamos que se corre el programa con los siguientes datos:
ab
23
32
21

Profesora Laura Vidal – Página 41


Pascal: Subprogramas

El seguimiento es:

i m a b i n x y

1 2 3 2 3

0
3 1
6 2

2 3 2 3 2

0
2 1
4 2
6 3

3 2 1 2 1

0
1 1
2 2

Supongamos ahora que se realiza lo mismo pero utilizando una función. Resulta

Profesora Laura Vidal – Página 42


Pascal: Subprogramas

Variables globales
Programa Prueba;
Var i, a, b, m: integer;
Function Multiplica (n,x:integer): integer;
Var i,y: integer;
Variables
locales Begin
y:=0; Parámetro por valor

for i:= 1 to n do y:= y + x;


multiplica:= y
end;
Begin { programa principal}
For i:= 1 to 3 do
Begin
Write ('Ingresar dos factores enteros;');
readln (a,b)
m:=Multiplica (a,b);
Writeln (a, 'x', b, '=',m)
End
End.

Ahora la salida se devuelve en el nombre mutiplica y no es necesario el parámetro variable y,


aunque sí es necesaria una variable local adicional para acumular.
En principio el nombre de la función dentro de la misma sólo puede aparecer a la izquierda de
una asignación. Es que el nombre de la función aunque a veces parezca poder emplearse como si se
tratara de una variable no lo es y provocaría error la escritura multiplica:=multiplica + x. esta es una
diferencia importante respecto al retorno de valores con los parámetros variables los cuales sí
pueden emplearse dentro de un subprograma como se haría con una variable cualquiera. Por otro
lado, en la llamada del subprograma vemos que el resultado que devuelve multiplica se asigna a la
variable global m. La función únicamente trabaja con parámetro por valor.

Profesora Laura Vidal – Página 43


Pascal: Subprogramas

i m a b i n x y

1 2 3 2 3

0
1 3
6 2 6

2 3 2 3 2

0
1 2
2 4
6 3 6

3 2 1 2 1

0
1 1
2 2 2

Subprogramas predefinidos

Hasta ahora se ha visto subprogramas definido por el usuario. Detallo en este sector del
cuadernillo algunas funciones y procedimientos predefinidos por Pascal de uso más frecuente

ABS
QUÉ HACE Devuelve el valor absoluto del argumento
COMO SE UTILIZA ABS (X)
TIPO DE DATO DE ENTRADA Numérico
TIPO DE DATO DE SALIDA Del mismo tipo del parámetro
EXP
QUÉ HACE Devuelve el exponencial del argumento: ex
COMO SE UTILIZA EXP (X)
TIPO DE DATO DE ENTRADA Real
TIPO DE DATO DE SALIDA Real

Profesora Laura Vidal – Página 44


Pascal: Subprogramas

SQR
QUÉ HACE Devuelve el cuadrado del argumento x2
COMO SE UTILIZA SQR (X)
TIPO DE DATO DE ENTRADA Numérico
TIPO DE DATO DE SALIDA Del mismo tipo del parámetro
SQRT
QUÉ HACE Devuelve la raíz cuadrada del argumento
COMO SE UTILIZA SQRT (X)
TIPO DE DATO DE ENTRADA Real
TIPO DE DATO DE SALIDA Real
ROUND
QUÉ HACE Redondea un valor real a un valor entero. Devuelve x
redondeado al entero más cercano hacia cero.
COMO SE UTILIZA TRUNC (X)
TIPO DE DATO DE ENTRADA Real
TIPO DE DATO DE SALIDA Longint
INT
QUÉ HACE Devuelve la parte entera del argumento
COMO SE UTILIZA INT (X)
TIPO DE DATO DE ENTRADA Real
TIPO DE DATO DE SALIDA Real
LENGTH
QUÉ HACE Devuelve la longitud lógica o dinámica de un string
COMO SE UTILIZA LENGTH(X)
TIPO DE DATO DE ENTRADA String
TIPO DE DATO DE SALIDA Integer
CONCAT
QUÉ HACE Concatena una secuencia de cadenas. Realiza la misma
operaciones que el símbolo +
COMO SE UTILIZA CONCAT(s1, s2, s3 …. Sn)
TIPO DE DATO DE ENTRADA String, cada argumento S
TIPO DE DATO DE SALIDA String hasta 255 caracteres

Profesora Laura Vidal – Página 45


Pascal: Subprogramas

COPY
QUÉ HACE Devuelve una subcadena contenida en una cadena
COMO SE UTILIZA COPY (s,i,c) donde c: cantidad de caracteres a partir de
la posición i de la cadena s
TIPO DE DATO DE ENTRADA S: string, I:integer, C:integer
TIPO DE DATO DE SALIDA String
POS
QUÉ HACE Busca una subcadena dentro de una cadena. Devuelve la
posición a partir de la cual está o 0 si no está
COMO SE UTILIZA POS(subcadena, cadena)
TIPO DE DATO DE ENTRADA String
TIPO DE DATO DE SALIDA Byte
UPCASE
QUÉ HACE Convierte la misma cadena de caracteres de minúscula a
mayúscula. Los caracteres fuera del rango 'a'..'z' no son
afectados.
COMO SE UTILIZA UPCASE (C)
TIPO DE DATO DE ENTRADA Char o string
TIPO DE DATO DE SALIDA Char o string
LOWERCASE
QUÉ HACE Convierte la misma cadena de caracteres que se pasó
como argumento, pero con todas las letras en minúsculas
COMO SE UTILIZA LOWERCASE ( C)
TIPO DE DATO DE ENTRADA Char o string
TIPO DE DATO DE SALIDA Char o string
PI
QUÉ HACE Devuelve el valor de 𝜋  3,14115926535897932385
COMO SE UTILIZA PI
TIPO DE DATO DE ENTRADA
TIPO DE DATO DE SALIDA Real
STR
QUÉ HACE Convierte un valor numérico x a su representación como
cdena de caracteres s
COMO SE UTILIZA STR (X,S), x por valor, s por dirección
TIPO DE DATO DE ENTRADA x: integer o real
TIPO DE DATO DE SALIDA s: string

Profesora Laura Vidal – Página 46


Pascal: Subprogramas

VAL
QUÉ HACE Convierte un valor cadena s a su representación numérica
x
COMO SE UTILIZA VAL(s, x, e), s por valor, x,e por dirección
e= código de error en la conversión o 0.
TIPO DE DATO DE ENTRADA s: string
TIPO DE DATO DE SALIDA X: integer o real, e: integer
CLRSCR
QUÉ HACE Limpia la pantalla y ubica el cursor en el extremo superior
izquierdo
COMO SE UTILIZA CLRSCR . Requiere la unidad CRT
TIPO DE DATO DE ENTRADA
TIPO DE DATO DE SALIDA
GETTIME
QUÉ HACE Devuelve la hora corriente del sistema operativo
COMO SE UTILIZA GetTime(hora,min,seg,seg100). Requiere la unidad DOS
TIPO DE DATO DE ENTRADA
TIPO DE DATO DE SALIDA Word
SETDATE
QUÉ HACE Establece la fecha corriente en el sistema operativo
COMO SE UTILIZA SetDate(anio, mes, dia). Todos los parámetros por valor.
Año=1980…2099, mes=1..12,dia=1..31. Requiere la unidad DOS
TIPO DE DATO DE ENTRADA Word
TIPO DE DATO DE SALIDA
SETTIME
QUÉ HACE Establece la hora corriente en el sistema operativo
COMO SE UTILIZA SetTime( hora, min, seg, seg100). Todos los parámetros
por valor. Hora=0..23 , min=0..59, seg=0..59. Requiere la unidad
DOS
TIPO DE DATO DE ENTRADA Word
TIPO DE DATO DE SALIDA

Profesora Laura Vidal – Página 47


Pascal: Datos Estructurados

Noción de tipo de dato estructurado

Una estructura de datos es un conjunto de elementos organizados de un modo particular. Un


tipo de dato estructurado permite declarar una variable que con un único nombre identifica a un
conjunto de elementos organizados en forma específica y a los cuales se puede acceder
individualmente.

Tipo de dato array

El tipo de dato estructura array además de las características antes nombrada, tiene las
siguientes particularidades:
 Todos los elementos de un array pertenecen al mismo tipo de datos
 Los elementos de un array se almacenan en posiciones consecutivas de memoria principal.
 La cantidad de elementos de un array es finita.
 La forma de acceso a cada elementos individual de un array es por medio de uno o más
índices.

Array unidimensional

Un array es unidimensional (llamado también vector) cuando sólo se requiere un índice para
acceder a los elementos del mismo. En Pascal un tipo array unidimensional se define:

Vector=array [tipo de dato del índice] of tipo de dato de los elementos


Donde el tipo de dato del índice debe ser ordinal mientras que el tipo de los elementos puede
ser cualquiera incluso otro array. Por ejemplo:
Type Vector=array[1..100] of real;
Define un tipo de dato llamado Vector que consiste en un array unidimensional cuyos índices
pertenecen al tipo subrango de enteros de 1 a 100 y cuyos elementos son números reales.
Luego la declaración
Var vnum:vector;
Permite reservar en la memoria la cantidad suficiente de posiciones como para almacenar 100
números reales; el área reservada se identifica con el nombre vnum y a cada número dato se accede
indicando el nombre vnum seguido de una constante, variable o expresión entre corchetes que
representa al índice, por ejemplo: vnum[1] es el primer elementos del vector, vnum[2] es el
segundo…. Etc.

Profesora Laura Vidal – Página 48


Pascal: Datos Estructurados

Array bidimensional

Un array es bidimensional (llamado también Matriz) cuando se requieren dos índices para
acceder a los elementos del mismo. En Pascal un tipo array bidimensional se define según:

Matriz=array[tipo de dato de los índices] of tipo de dato de los elementos


Donde el tipo de dato de los índices debe ser ordinal mientras que el tipo de los elementos
puede ser cualquiera incluso otro array. Por ejemplo:
Type Matriz=array [1..100, 1..100] of real;

Define un tipo de dato llamado Matriz que consiste en un array bidimensional cuyos índices
pertenecen al tipo subrango de enteros entre 1 y 100 y cuyos elementos son números reales.
Luego la declaración:

Var mnum:matriz;

Permite reservar en la memoria la cantidad suficiente de posiciones como para almacenar 100
x 100 números reales; el área reservada se identifica con el nombre mnum seguido de dos índices
entre corchetes y separados por comas; los cuales pueden ser una constante, variable o expresión. Es
usuario llamar al primer índice, índice de fila y al segundo índice de columna, dado que se puede
imaginar la estructura como una tabla de dos entradas en donde los elementos son localizados según
la intersección de una fila y una columna. Por ejemplo mnum[1,1] es el elemento ubicado en la
intersección de la primer fila y la primer columna.

Por qué se necesita este tipo de dato

Existen procesos típicos que prácticamente no pueden realizarse, al menos eficientemente, si


los datos no están presentes en memoria todos a la vez y organizados bajo un mismo nombre.
Suponer que se quiere realizar un proceso que involucra a n datos de entrada numéricos
reales.
Utilizando variables simples, la entrada de datos hubiera implicado un ciclo de repetición y una
variable de tipo real. La lectura de la variable real dentro del ciclo significa la repetición n veces de la
lectura de la misma. En cada ejecución del ciclo la variable contiene uno de los datos de entrada y
con la siguiente ejecución del ciclo la variable para a contener el siguiente dato, perdiéndose el
anterior y así sucesivamente.
De este modo, en la memoria principal sólo se tiene uno de los datos a la vez. Esto implica que
sólo pueden realizarse procesos que permitan tener a los datos de a uno en la memoria principal. Si,
por ejemplo, se quiere obtener el máximo valor de entrada, contar cuántas veces se repite y
memorizar el número de orden de aparición de los sucesivos máximos, los dos primeros procesos
pueden realizarse almacenando los datos de entrada en una variable simple pero el tercer proceso
no puede realizarse a menos que se lea el conjunto de datos dos veces desde el periférico de
entrada. Los procesos que involucran a la unidad central de proceso (CPU, el bloque principal que

Profesora Laura Vidal – Página 49


Pascal: Datos Estructurados

interpreta y ejecuta las instrucciones de programa) y a la memoria principal (RAM: memoria de


acceso aleatorio, electrónica, de lectura/escritura, en donde residen los programas que está
ejecutando la CPU) son muchos más rápidos que aquellos que involucran a las unidades periféricas
(teclados, monitores, discos, impresoras….). Por lo tanto el acceso a periféricos de entrada para el
ingreso de datos debe ser mínimo. No es correcto, ingresar más de una vez el mismo conjunto de
datos de entrada desde un periférico tal como teclado y/o disco. Luego de la resolución del problema
planteado implica la necesidad de ingresar toda la información desde periférico a memoria principal
a la vez y no de a un dato individual. De este modo la CPU puede leer en cualquier momento y tantas
veces como sea necesario un mismo dato desde la memoria principal, en tiempo mínimo. Con
vectores y matrices se resuelve este problema particular y otros que también muestran la necesidad
de este tipo de dato como por ejemplo, ordenamiento.

Profesora Laura Vidal – Página 50


Pascal: Ordenamiento - Búsqueda

Algoritmos de ordenamiento y Búsqueda

En esta sección del cuadernillo se analizan procesos típicos en relación a la estructura array.
Por ejemplo, se tiene un vector unidimensional y que se quiere obtener otro vector con los mismos
elementos pero observando un ordenamiento ya sea ascendente o descendente. El tipo de dato de
los elementos puede ser cualquiera; si se trata de elementos de tipo numérico la relación de orden
es obvia, si se trata de elementos tipo caracter la relación de orden se establece en base al código
utilizado para codificar los caracteres (el ASCII), si se trata de elementos de tipo string la relación de
orden también responde a los códigos de cada caracter empezando desde el primer caracter a la
izquierda.
En los distintos métodos que se van a estudiar, el ordenamiento de la estructura se realiza
sobre las distintas posiciones de memoria ocupadas por el vector original supuestamente
desordenado.
Esto es posible intercambiando los elementos de posición. Por lo tanto a la salida de los
subprogramas propuestos se tiene un nuevo vector en lo que se refiere a la posición ocupada por los
elementos, en tanto la posición original ocupada por ellos (la posición de entrada al subprograma) se
ha perdido.
Los distintos métodos de ordenamiento se diferencian por la velocidad media con que realizan
el proceso completo, la cuál depende de la cantidad de elementos del vector y del grado de
desordenamiento de la estructura que se quiere ordenar, todo lo cual influirá en la cantidad de
pasos que requiere el algoritmo, la cantidad de comparaciones y la cantidad de intercambios
necesarios.
Existen muchos métodos de ordenamiento: selección, burbujeo, Shell e inserción considerados
como técnicas elementales de ordenamiento de estructuras en memoria principal.
Otro proceso básico consiste en buscar un elemento dentro de una estructura y obtener la
posición que éste ocupa dentro de la misma. Suponiendo que no hay elementos repetidos, como
ocurriría si por ejemplo se quiere buscar dentro de un listado los datos correspondientes a una
persona.
El nombre podría repetirse pero no el número de documento que podría servir para identificar
la posición en donde se hallan los datos relacionados con la persona deseada. Existen dos algoritmos
de búsqueda: secuencial y binaria. En el primer caso se recorre el vector desde la primera posición,
comparando elemento por elemento con el dato buscado, la estructura puede o no estar ordenada,
si el elemento no se encuentra se recorrerá toda la estructura antes de detectar la situación.
En el segundo caso, la búsqueda binaria permite aprovechar el estado ordenado de una
estructura para acelerar el proceso, tanto en hallar el elemento buscado como el detectar que no se
encuentra contenido en la estructura.

Algoritmo de ordenamiento

Descripción del algoritmo de ordenamiento por el método de selección.


Supongamos que se quiere realizar el ordenamiento de un vector (array unidimensional) de
dimensión n en forma decreciente (de mayor a menor). El método consisten en buscar la posición en
donde se halla el máximo de un subvector (subconjunto respecto del conjunto de elementos) y luego
intercambiar el elemento que se halla en la primera posición del subvector con el elemento que se
halla en la posición del máximo. Para ello se realizan n-1 recorridas del vector, en cada una de las

Profesora Laura Vidal – Página 51


Pascal: Ordenamiento - Búsqueda

cuales la cantidad de elementos a comparar es en una unidad menor. En el primer paso se recorre el
vector del primero al último elemento, buscando la posición del máximo elemento del vector
completo.
I=número de paso=1 361283 m=posición del máximo=5

Una vez hallada esa posición, se intercambiar el elemento de ésta con el elemento que ocupa
la primera posición quedando así:
861233
En el segundo paso se realiza el mismo proceso pero considerando el subvector que comienza
en la posición 2 del vector, ya que el primer elemento está en su posición definitiva y por lo tanto no
debe ser modificado.

I=número de pasos=2 861233; m=posición del máximo=2


En este caso al coincidir la primera posición del subvector (segunda posición del vector) con la
del máximo, las instrucciones de intercambio no modificarán el estado final del vector. Así se
continúa hasta la posición n-1 del vector., quedando luego de este último completamente ordenado.
Los pasos restantes siguen a continuación:
Tercer paso:
Búsqueda de la posición del máximo: i=3; 8 6 1 2 3 3; m=5
Intercambio: 863213
Cuarto paso:
Búsqueda de la posición del máximo: i=4; 8 6 3 2 1 3 m=6
Intercambio: 863312
Quinto paso:
Búsqueda de la posición del máximo: i=5; 8 6 3 2 1 3 m=6
Intercambio 863321

Procedimiento Pascal de ordenamiento

Procedura ORDENAR(n: rango; var v:vector);


Var i,j: rango; aux:elemento

Begin
For i:= 1 to n-1 do
Begin
M:=I;
For j:=i + 1 to n do
If v[j] > v[m] then m:=j:
Aux:=v[i];
V[i]:=v[m];
PROCEDURE
V[m]:=aux;
ORDENAR(n:rango;var
v:vector)
Profesora Laura Vidal – I:=1 to n-1 Página 52

Mi
Pascal: Ordenamiento - Búsqueda

End;
End;

Algoritmo de búsqueda binaria

Este método se aplica a una estructura ordenada y se basa en cercar el elemento buscado
determinando sucesivamente la mitad del vector en que es mas probable que se encuentre. Sea un
vector n=8 elementos numéricos ordenado en forma ascendente
0 10 30 40 50 70 80 90
Se quiere saber si el elemento k=80 se halla en el vector y en caso afirmativo, en qué posición
se encuentra. Para ello se compara k con el elemento ubicado en el medio del vector, en este caso
40, ya que:
P= (i + j) div 2 = (1+8) div 2=4 y v[4]=40
Dado que el vector ordenado en forma ascendente y que 40< 80, se deduce que el elemento
buscado, si está, debe estar en la mitad superior del vector. Por lo tanto se corre el extremo inferior i
al vector p + 1=5. A continuación se compara K con el elemento del medio de la mitad superior del
vector, en este ejemplo 70, ya que
P=(i+j) div 2= (5 +8) div 2= 6 y v[6]=70

Dado que el vector está ordenado en forma ascendente y que 70<80, se deduce que el
elemento buscado, si está, debe estar en la mitad superior de la mitad superior del vector. Por lo
tanto se corre el extremo inferior i al valor p+1=7. A continuación se compara el elemento k con el
elemento del medio de la mitad superior de la mitad superior del vector, en este caso 80, ya que
P=(i+j) div 2= (7+8) div 2= 7 y v[7]=80

Al no cumplirse la condición v[p]<>k, se sale del ciclo de interación. El resultado es que el


elemento buscado se halla en la posición p=7
Se si realiza el seguimiento para un K=85 (u otro valor cualquiera que no se halle en el vector)
se saldrá del ciclo porque el índice inferior i superará al índice superior j, es decir, i>j. En esta
situación se asgina al parámetro variable p el valor señal 0.
Se observa que para k=80, el algoritmo de búsqueda binaria lo encuentra luego de 3
comparaciones mientras que otros algoritmos (búsqueda secuencial) lo hace luego de 7
comparaciones, esto es, más de la mitad. También detectará más rápidamente la ausencia de k=5

Procedimiento Pascal de búsqueda binaria

Procedure BUSCAR(n:dim; v:vector; k:elemento; var p:dim)


Var i,j: dim;
Begin
i:=1, j:=n; p:=(i+j) div 2;

Profesora Laura Vidal – Página 53


Pascal: Ordenamiento - Búsqueda

WHILE (i<=j) and (k <>v[p] do


Begin
If k<v[p] then j:= p – 1 else i:=p+1
P:= ( I + j ) div 2;
End;
If f<>v[p] then p:=0
End;

Profesora Laura Vidal – Página 54


Pascal: Ordenamiento - Búsqueda

PROCEDURE BUSCAR(n:dim;v:vector;k:elemento;var p:dim)

I1

jn

P( i + j) div 2

WHILE (i <=j) and (k <> v[p])

K < v[p] j:= p - 1

i:=p + 1

P ( i + j) div 2

K <> v[p] P 0

Profesora Laura Vidal – Página 55


DIAGRAMA DE FLUJO Revisión de
Contenidos

En esta sección del cuadernillo se resolverán


ejercicios de revisión de contenidos que engloban los
temas vistos en Introducción al Pensamiento Lógico I.

1) Generar un programa que ejecute la siguiente secuencia: 10, 100, 1000, 10000,100000….
El proceso se debe repetir 10 veces.
2) Generar utilizando Ciclo While la siguiente secuencia: 2, 4, 6, 8… Repetir 20 veces.
3) Generar la siguiente secuencia: 1, 4, 27, 256…. Repetir 5 veces.
4) Realice un programa que solicite números por teclado hasta que el usuario ingrese un
valor 0, y que, por último, muestre por pantalla el promedio de los números
anteriormente ingresados.
5) Generar un vector de 10 elementos que contenga los siguientes valores: 2, 8, 24…
6) Generar un vector de 5 elementos que contengan solamente las vocales. Para ello
deberá ingresar tantas letras como sea posible hasta cargar el vector con las cinco
vocales. Contar cuántas letras se ingresaron.
7) Generar la siguiente secuencia: 1, 3, 5, 7…. El proceso se debe repetir hasta que la suma
de los números generados llegue a 100. Contar cuántas veces se repitió el ciclo. Mostrar
los valores generados.
8) Generar un vector que contenga la siguiente secuencia: a, ae, aei, aeio, aeio, aeiou.
9) Ingresar números hasta que la suma entre ellos sea menor o igual a 100. Contar la
cantidad de números ingresados. Contar cuántos pares, cuántos impares, cuántos
positivos, cuántos negativos se ingresaron. Mostrar números y resultados.
10) Se desea crear un programa que permite llevar el control de la Feria de Automóviles
antiguos que llegó a la Ciudad. La entrada a la feria se tiene en cuenta según la edad,
sabiendo que: Adultos (mayores a 21 años) pagan $ 15, Mayores (menores a 21 pero
mayores o igual a 12 años) pagan $ 10, Menores (menores a 12 pero mayores o iguales
a 5) pagan $5, Sin cargo (menores de 5 años) entran gratis. Si el visitante presenta un
Bono FREE tiene acceso a un sorteo final. Por cada visitante se completa una planilla que
permite determinar:
a. Cantidad de adultos, cantidad de mayores, cantidad de menores, cantidad de sin
cargo ingresaron y lo recaudado por cada categoría.
b. Cantidad de menores (todos aquellos menores a 12 años)
c. Cantidad de mujeres y hombres que ingresaron
d. Lo recaudado en total
e. Cantidad de visitantes que hubieron
f. Cantidad de visitantes que presentaron Bono FREE.
g. Generar en un vector los números que entran en el sorteo, sabiendo que el valor
inicial para el sorteo es el número 100.

Profesora Laura Vidal – Página 56


DIAGRAMA DE FLUJO Revisión de
Contenidos

11) En una institución educativa se debe llevar el control de los cursos vendido en el mes de
Septiembre, sabiendo que:
a. Los códigos de cursos son: JA (Java) – VBJ( Visual Basic Juniors), DW (diseño Web),
CO (Corel), TA (tango Gestión).
b. El valor de la cuota de cada curso es: JA (500), VBJ( 380), DW(320), CO (270), TA
(310).
c. Si el alumno paga la cuota en Efectivo se le hace un 5% de descuento, si paga en
Tarjeta de crédito tiene un 10% de recargo.
d. Se desea saber:
i. Cuántos alumnos de cada curso se inscribieron
ii. Lo recaudado por curso
iii. Lo recaudado en total
iv. Lo recaudado en efectivo
v. Lo recaudado en tarjeta
vi. Generar un listado de todos los alumnos inscriptos. El orden de inscripción
se genera automáticamente.
vii. Generar un listado que contenga solamente los inscriptos a JA (el listado
debe tener Apellido y nombre).
viii. Para un mejor control se desea cargar toda la información en vectores.
ix. La cantidad de alumnos inscriptos en el mes de septiembre son 200.
12) Teniendo en cuenta la siguiente planilla generar el programa. Cargar la información en
vectores diferentes. Tamaño de los vectores es 50.

Sueldo Sueldo
Legajo Apellido Nombre Categoría Presentismo Título
Básico Bruto
100
101
102
103

Sabiendo que
a. El legajo se genera automáticamente.
b. La categoría y sueldo básico depende de los códigos de categoría que son: A
(Administrativo, $2300) – B (Vendedor, $ 2100) – C (cadete, $ 1500).
c. El presentismo depende de las ausencias que el empleado tuvo en el mes. Si la
ausencia es 0, el presentismo es el 10% del sueldo básico, caso contrario el
presentismo es 0.
d. Título depende el título ingresado: P (primaria, 0% sobre el sueldo básico), S
(secundaria, 1% sobre el sueldo básico), T (terciaria, 10% del sueldo básico), U
(universitario: 20% del sueldo básico).
e. Sueldo bruto: es el sueldo básico más presentismo más título.

Profesora Laura Vidal – Página 57


DIAGRAMA DE FLUJO Revisión de
Contenidos

f. En el caso de los vendedores se le paga una comisión adicional del 1% sobre el


total de las ventas que realizó el vendedor en el mes. Dicha comisión que se debe
sumar al sueldo bruto.
g. Al finalizar el ingreso se debe calcular:
i. Cantidad de empleados de cada categoría
ii. Total pagado por categoría
iii. Total pagado.
iv. Cantidad de empleados con título T y U.
v. Cantidad de personas que tuvieron ausencia 0.
vi. Promedio de inasistencias.

Profesora Laura Vidal – Página 58


ESTRUCTURAS DE SECUENCIA
1 EJERCICIOS

En esta sección del cuadernillo se resolverán ejercicios


que incluyen la secuencia de acciones elementales
como leer, escribir y asignar, así como también
algunas expresiones sencillas.

Cada ejercicio planteado resolverlo con diagrama de flujo y


codificación en Pascal

1) Realizar un programa que permita mostrar la siguiente leyenda: Hola mundo!!!. Soy
<<nombre>>. En donde nombre sea una variable ingresada por teclado.
2) Ingresar (leer) dos números enteros. Mostrarlos.
3) Ingresar (leer) dos números reales, calcular la suma e informar (escribir) el resultado.
4) Ingresar nombre, apellido y edad y mostrarlos por pantalla.
5) Dado un número, calcular su anterior y su posterior.
6) Dado un número, calcular su doble y su medio.
7) Ingresar tres números que representen horas, minutos y segundos, convertirlos a
segundos totales. Mostrar la hora en el siguiente formato: hh:mm:ss. Informar su
resultado (en segundos).
8) Dadas dos notas, calcular su promedio.
9) Dados tres números que representen metros, centímetros y milímetros, convertirlos a
milímetros totales. Mostrar con el siguiente formato: mm,cm,mm. Informar el resultado.
10) Dados dos números que representan una cantidad parcial y una cantidad total, calcular e
informar el porcentaje que representa la primera respecto a la segunda.
11) Dados 3 números enteros, calcular e informar el promedio.
12) Asignar a una variable una constante cadena de caracteres e informar el contenido de
esta variable.
13) Dado un precio y una cantidad llevada, calcular el importe, que surge de multiplicar
precio por cantidad. Informar (mostrar) el resultado por pantalla.
14) Dado un precio y una cantidad llevada, calcular el importe. Luego Calcular el % del Iva.
Calcular precio final. Mostrar datos y resultados
15) Dado un importe, calcular el 10% de descuento. Mostrar importe, descuento e importe
con descuento.
16) Ingresar dos números enteros. Calcular la suma, resta, multiplicación y división. Mostrar
resultados por pantalla.
17) ingresar las magnitudes de un triángulo (base, altura). Calcular su superficie. Mostrar
magnitudes y superficie.
18) Ingresar un valor que representa el lado de un cuadrado. Calcular su perímetro y su
superficie. Mostrar resultados.

Profesora Laura Vidal – Página 59


ESTRUCTURA DE SECUENCIAS
3 EJERCICIOS

19) Dados los valores de un rectángulo, calcular su superficie. Mostrar resultados.


20) Dado un número, calcular su cuadrado. Mostrar por pantalla el número y su cuadrado.
21) Calcular el perímetro y área de una circunferencia. Ingresar los datos necesarios.
22) Dados los valores de un rectángulo, calcular su área, su perímetro. Mostrar datos y
resultados.
23) Ingresar dos números, llamados A Y B. Realizar los siguientes cálculos
a. A*B
b. (A-B)* 2
c. 2*(A + B) / A
d. –B * -A
e. –(A*B-100)
f. A/B
g. B/A
24) Dadas dos edades, calcular su suma y su promedio. Mostrar datos y resultados
25) Escribir un programa que permita calcular las siguientes expresiones matemáticas.
a. 3 x 2 + 2x -2
b. (2 x + 10) * x
c. |4a|
d. √6 a − 2x 2
e. Trasladar en Pascal el ejercicio Nº 4 (página Nº 28 Tema Expresiones…)

Profesora Laura Vidal – Página 60


ESTRUCTURAS DE DECISIÓN
2 EJERCICIOS

En esta sección del cuadernillo se resolverán ejercicios


que incluyan estructuras de decisión simple y
compuesta, que se suman a los elementos vistos en la
sección anterior de ejercicios.

1) Dadas 2 notas obtenidas por un alumno, calcular e informar su promedio y una leyenda
que indique si está aprobado o desaprobado. (aprobado es >=6)
2) Leer dos fechas f1, f2 en formato AAMMDD (entero). Informar cuál de ellas es la anterior
o si son iguales.
3) Leer dos números, mostrar el menor.
4) Ingresar tres números e informar el menor de los tres.
5) Ingresar un número e indicar a través de una leyenda si es par o impar.
6) Construya y codifique un algoritmo que permita identificar, entre dos números, si uno
de ellos es múltiplo del otro.
7) Ingresar nombre, edad y sexo de una persona. Si es femenino, mostrar su nombre, si es
masculino, mostrar su edad.
8) Ingresar un valor en Kilogramos. Realizar la conversión dependiendo del tipo de medida
que ingrese el usuario. Elija Ud el tipo de medida.
9) Ingresar un valor en Pesos. Realizar la conversión dependiendo del tipo de moneda que
ingrese el usuario: dólar, euro, libra.
10) Ingresar un valor que represente cantidad de días. Realice la conversión en horas,
minutos y segundos. El usuario puede elegir uno de los tres formatos.
11) Ingrese un valor que representa la capacidad de un archivo expresados en Mb. Elegir un
formato de conversión (gb, kb, byte, bits). Mostrar resultados.
12) Ingresar un número decimal. Convertir el valor en binario, octal y hexadecimal.
13) Ingresar un número. Si el mismo es positivo multiplicarlo por 2, si es negativo, dividirlo
por 2 y si es 0, sumarle un 1. Mostrar número y resultado.
14) Dada la nota de un alumno, determinar: si la nota es menor a 6, está desaprobado, si la
nota es mayor a 6 pero menor a 8, está aprobado, si la nota es mayor a 8, está
promocionado. Mostrar nota y la leyenda correspondiente.
15) Ingresar precio, cantidad llevada y forma de pago. Si la forma de pago es efectivo,
realizar un 10% de descuento, si es tarjeta, chequear si es Visa, se le hace un 5% de
recargo, si es mastercard, se le hace un 7% de recargo, si es otra, un 10% de recargo.
Mostrar precio, cantidad llevada, importe, descuento, recargo y total a pagar.
16) Ingresar dos números. Restar el menor al mayor. Mostrar números y resultado.
17) Ingresar los lados de un triángulo. Determinar si es equilátero o no. Mostrar lados y
leyenda.
18) Ingresar un número. Si es par realizar la raíz cuadrada y el impar realizar la potencia.
Mostrar número y resultado.

Profesora Laura Vidal – Página 61


ESTRUCTURA DE DECISIÓN
3 EJERCICIOS

19) Ingresar nombre, apellido, código de curso. Si el código de curso es 100, el curso es
Office, si el código de curso es 200, el curso es Diseño Web, sil el código de curso es 300,
el curso es Contabilidad, caso contrario es Dato Erroneo. Mostrar nombre, apellido,
curso.
20) Ingresar nombre, apellido, código de sexo (F/M) y código de localidad (1,2,3). Si el código
de sexo es F, el sexo es Femenino, sino Masculino. Si el código de localidad es 1, la
localidad es Cipolletti, si el código de localidad es 2 la localidad es Neuquén, si es 3, la
localidad es Plottier. Mostrar nombre, apellido, sexo y localidad.
21) Ingresar apellido y edad. Teniendo en cuenta la tabla auxiliar, determinar qué película
podría ver y el valor de la entrada que debe pagar.

Edad Película Valor entrada


<= 12 Monster INC 3D $ 60
<= 18 Rápido y furioso $ 45
>18 El conjuro MS $ 80

a) Mostrar apellido, edad, película y valor de la entrada.

22) Modificar el ejercicio 14, agregándole el precio y cantidad de cuotas, sabiendo que si el
código es 100, el precio es $350 y la cantidad de cuotas es 3, si el código es 200, el precio
es de $ 500 y la cantidad de cuotas es 5, si el código es 300, el precio es $ 400 y la
cantidad de cuotas es de 8, caso contrario, el precio y la cantidad de cuotas es 0.
23) Ingresar un precio y cantidad llevada. Determinar el descuento según la cantidad. Si la
cantidad es menor o igual a 5, el % de descuento es 1%, si la cantidad es menor o igual a
10, el % de descuento es 3%, si la cantidad es menor o igual a 15, el % de descuento es
del 5%, caso contrario es del 7%. Calcular el importe a pagar teniendo en cuenta el % de
descuento y la cantidad llevada.

Profesora Laura Vidal – Página 62


ESTRUCTURAS DE ITERACIÓN
3 EJERCICIOS

En esta sección del cuadernillo se resolverán ejercicios


que incluyan estructuras de iteración en sus tres
formas de implementación: mientras, repetir y para,
que se suman a los elementos vistos en las secciones
anteriores.

1) Ingresar 3 nombres y 3 apellidos. Mostrar resultados


2) Ingresar 3 notas de un alumno. Sumarlas y promediarlas.
3) Ingresar 10 números. Mostrarlos
4) Ingresar 5 números. Acumularlos y mostrarlos.
5) Ingresar datos de 10 personas. Acumular y promediar las edades. Mostrar datos y
resultados.
6) Ingresar apellido y edad de 15 personas. Contar la cantidad de personas menores o
iguales a 21, y las mayores a 21. Mostrar datos y resultados.
7) Ingresar apellido y localidad de 10 personas. Contar cuántas personas de Cipolletti se
ingresaron y cuántas de Neuquén. Mostrar datos y resultados.
8) Ingresar 10 números. Contar la cantidad de positivas, la cantidad de negativos
ingresados. Acumular y promediarlos. Mostrar datos y resultados.
9) Ingresar apellidos, hasta que se ingrese espacio en blanco. Contar cuántos datos se
ingresaron
10) Ingresar números hasta que el número sea igual a 0. Contar cuántos números se
ingresaron y acumularlos.
11) Generar los 20 primeros números naturales. Mostrarlos y acumularlos.
12) Ingresar nombre, apellido, edad de 20 personas. Acumular las edades. Mostrar por
pantalla los datos y resultados.
13) De un grupo de 20 números, restar el mayor menor el menor.
14) Ingresar los datos de 10 triángulos. Mostrar los lados del triángulo cuya área sea la
mayor de todas.
15) Ingresar apellido y promedio de 20 alumnos de la materia Sistemas I. Se desea saber
cuántos promocionaron (promedio >=8), cuantos regulares (promedio>=6), cuántos
libres (promedio <6). Mostrar datos y resultados.
16) De un grupo de 100 personas, se desea saber cuántos solteros, casados con hijos y
viudos existen.
17) Se desea calcular cuántos productos se vendieron en un comercio. Se sabe que la
finalización del proceso se realiza cuando el código del producto sea 0. Determinar
cuántos productos se vendieron y cuánto se facturó.
18) Generar los 20 primeros números pares.
19) Generar los 20 primeros números impares y acumularlos.

Profesora Laura Vidal – Página 63


ESTRUCTURAS DE ITERACIÓN
3 EJERCICIOS

20) De un grupo de 50 números se desea


a) Acumular los pares
b) Contar los impares
c) Acumular los positivos
d) Contar los negativos
21) Generar los N primeros números enteros positivos.
22) Calcular e informar el factorial de un número entero positivo ingresado por teclado.
23) Dados dos números enteros a y b, calcular e informar:
a) El producto a*b, por sumas sucesivas
b) La división entera a div b, por restas sucesivas
c) El resto de la división entera a mod b.
24) Dadas 4 notas obtenidas por 10 alumnos, calcular e informar su promedio y una leyenda
que indique si está aprobado (>=6) o no aprobado.
25) Generar la tabla del 3. Hacerlo para valores del 1 al 10. Mostrar tabla generada
26) Se quiere confeccionar una factura. Se tienen como datos el número de factura, el
nombre del cliente, la cantidad de artículos y por cada artículo, su código, descripción,
cantidad de unidades y precio por unidad. Se debe realizar un descuento del 10% a cada
artículo comprado por más de 10 unidades. Repetir el proceso hasta que el número de la
factura sea igual a 0.
27) Se desea ingresar apellidos, nombres, año de nacimiento hasta que el año de nacimiento
sea mayor al actual. Contar cuántos datos se ingresaron.
28) Ingresar día, mes y año en tres variables diferentes. Mostrar por pantalla la edad en el
formato DD/MM/AAAA.
29) Ingresar los lados de 3 figuras geométricas. Calcular el área. Mostrar por pantalla el
nombre de la figura geométrica de menor área.
30) Ingresar nombre, apellido, edad, código de localidad de 10 personas. Si el código de
localidad =”C”, la localidad es Cipolletti, si el código de localidad es “N”, la localidad es
Neuquén, caso contrario la localidad es Plottier. Se desea saber cuál fue la persona de
mayor edad ingresada, para ello mostrar el apellido y edad. Se desea saber cuántas
personas de cada localidad se ingresaron. Mostrar el listado de personas.
31) Codificarlo en Pascal y decir que hace cada uno de los siguientes ejercicios en
Pseudocódigo
PROGRAMA EJER1 ESCRIBIR i
ENTORNO: FINSI
i <- 1 i <- i + 1
c <- 0 FINMIENTRAS
ALGORITMO: ESCRIBIR "…….. "
MIENTRAS i < 101 HACER ESCRIBIR c
SI i = int( i / 2 ) * 2 O i = int( i / 3 ) * 3 FINPROGRAMA
ENTONCES
c <- c + 1

Profesora Laura Vidal – Página 64


ESTRUCTURAS DE ITERACIÓN
3 EJERCICIOS

PROGRAMA EJER2 SI i = int( i / 3 ) * 3 ENTONCES


ENTORNO: ESCRIBIR i
i <- 3 c <- c + 1
n <- 0 FINSI
c <- 0 i <- i + 1
ALGORITMO: FINMIENTRAS
ESCRIBIR "Número: " ESCRIBIR "…………: "
LEER n ESCRIBIR c
MIENTRAS i <= n HACER FINPROGRAMA
Program Problema3; Corregir si existe algún If cant>maxcant then
error Begin
Var cant, maxcant: -1 .. 10000; Maxcant:=cant maxdia:=dia
Dia,maxdia:0..31 End;
Begin Read(cant)
Maxcant:=0; maxdia:=0 End;
Readln(cant); Writeln(Cantidad de expectadores:
While cant<> -1 do ',maxcant;' Día: ';maxdia)
Begin End
Readln(dia)

32) Generar listados de: (para ello determinar los datos a ingresar)
a) Calificaciones de la materia Sistemas II
b) Asistencia de la materia Introducción a la programación
c) Listado de profesores con sus materias
d) Listado de las materias del plan
e) Listado de asistentes al evento “Ferias Neuquén”
f) Listado de materiales de seguridad
g) Listado de Artículos vendidos en una fecha determinada
h) Listado de componentes del laboratorio
i) Listado de reparaciones indicando su estado (INGRESO – REPARACION – SALIDA).

Profesora Laura Vidal – Página 65


EJERCICIOS
VECTORES Y MATRICES
4
1) Generar un vector que contenga los 10 primeros números naturales
2) Generar un vector que contenga un número ingresado por teclado multiplicado por el
índice.
3) Generar un vector con la tabla de multiplicar de un número ingresado por teclado.
4) Cargar en vectores diferentes los apellidos y sueldos de un grupo de 10 personas.
Acumular el vector sueldo. Mostrar ambos vectores. Mostrar resultado
5) Cargar un vector con 50 edades. Sumarlas y promediarlas. Mostrar resultados
6) Cargar un vector llamado VENTAS que contiene 50 ventas realizadas en el mes de
Agosto. Acumular las ventas totales. Mostrar vector VENTAS y resultados
7) Generar un vector que contenga los 10 primeros números pares. Mostrar vector
8) Cargar un vector con 15 letras. Contar cuántas vocales se ingresaron. Mostrar vector y
resultados.
9) En un vector cargar 20 números, restar el mayor menor el menor. Mostrar el vector
ingresado, el vector invertido y el resultado de la resta.
10) Cargar un vector con 20 nombres. Ordenarla en forma ascendente.
11) Cargar un vector con 10 números positivos. Ordenarlo en forma ascendente.
12) Cargar un vector con 10 nombres. Contar cuántas veces se repite un nombre X ingresado
por teclado. Mostrar vector, nombre X ingresado y las veces que se repite.
13) Se tienen los montos de ventas totales por mes (correspondientes a un mismo año) de
un comercio. Se quiere almacenar dicha información, informar un listado de los datos de
entrada junto con el nombre del mes y calcular e informar el monto total de ventas.
14) Se tienen los montos de ventas totales de los 12 meses (correspondiente a un mismo
año) de un comercio. Se quiere calcular e informar la venta promedio de esos meses, así
como el nombre del mes y el monto, de aquellos montos que haya superado el
promedio.
15) Ingresar una matriz que contenga nombre, apellido de 10 personas. En la tercera
columna generar la inicial. Ingresar un apellido por teclado y ver si está en dicha matriz.
Mostrar en que posición se encuentra.
16) Cargar una matriz que contenga 10 Apellidos y nombres (ambos en mayúsculas).
Ordenar la matriz por apellido.
17) Cargar una matriz que contenga los siguientes campos: 1º columna: los meses (1,2,3…),
2º columna: Sueldo; 3º columna: se debe calcular un incentivo que surge de sumarle $
200 al sueldo. Ordenar la matriz por la primera columna.
18) Generar una matriz de 4 x 4 que contenga en cada celda la sumatoria de los índices de
fila y columna.
19) Se tiene una matriz (100 registros) que contiene número de mes, número de vendedor,
monto de venta. Acumular los montos de ventas. Buscar el número del vendedor para
mostrar la venta que realizo. Mostrar matriz y resultado.

Profesora Laura Vidal – Página 66


EJERCICIOS
VECTORES Y MATRICES
4
20) Generar las siguientes matrices:

X X X X X X X X X X 1 2 3 4 5
X X X X X 2 4 6 8 10
X X X X X X X X X 3 6 9 12 15
X X X X X 4 8 12 16 20
X X X X X X X X X X 5 10 15 20 25

X 0 0 0 0 X X X X X 0 X 0 X X 0 0 0 X 3 6 9 12 15
0 X 0 0 0 0 0 0 0 0 0 X 0 X 0 X 0 X 0 18 21 24 27 30
0 0 X 0 0 X X X X X 0 X 0 X 0 0 X 0 0
0 0 0 X 0 0 0 0 0 0 0 X 0 X 0 X 0 X 0 30 27 24 21 18
0 0 0 0 X X X X X X 0 X 0 X X 0 0 0 X 15 12 9 6 3

21) Cargar en vectores diferentes: 10 apellidos (todo en mayúsculas), 10 notas1, 10 notas2.


Generar un tercer vector que contenga el promedio de ambas notas. Ordenarlos por
apellido. Realizar una consulta por apellido, mostrando en el caso de que exista, las notas
y promedio del mismo.
22) Cargar un vector con 10 números enteros positivos. Generar otro vector que contenga
los datos invertidos del primero.
23) Cargar un vector que contenga 10 números. Generar otro que contenga el número del
vector multiplicado por el índice. Por ejemplo: si el dato de la posición 5 es 45, el
resultado sería 5 * 45.
24) Cargar una matriz de 5 * 5 que contenga números. Generar un vector que contenga
sumatoria de los datos que se encuentran en la diagonal principal.
25) Cargar una matriz de 3 columnas * 10 filas, que contenga apellido en la primera
columna, nombres en la segunda columna. Generar la tercera columna que está formada
por apellido, nombre. Mostrar la matriz.
26) Cargar una matriz de 3 columas * 20 filas. Tener en cuenta lo siguiente
a) En la primer columna cargar los legajos que son valores entre 100 y 1000
b) En la segunda columna cargar los códigos de puesto. Valores permitidos 1, 2 o 3.
c) En la tercer columna generar los sueldos teniendo en cuenta el código de puesto. Si
el código de puesto es 1, el sueldo es de 4500, si el código de puesto es 2, el sueldo
es de 5200, caso contrario el sueldo es de 6400.
d) Generar un vector llamado CATEGORIA dependiendo de lo siguiente: si el código es 1,
la categoría es VENTAS, si el código es 2, la categoría es ADMINISTRACIÓN, caso
contrario es CAJA.
e) Acumular y promediar los sueldos
f) Contar las personas de cada categoría
g) Acumular y promediar los sueldos por categoría.
h) Mostrar matriz y vector.

Profesora Laura Vidal – Página 67


EJERCICIOS
VECTORES Y MATRICES
4
i) Mostrar resultados
27) Generar una matriz de 3 columnas * 20 filas teniendo en cuenta lo siguiente:
a) En la primera columna generar números del 1 al 20
b) En la segunda columna generar el doble de los números de la primer columna
c) En la tercer columna generar la potencia de la primer columna.
d) Mostrar la matriz
28) Generar una matriz de 5 filas * 10 columnas teniendo en cuenta las siguientes series.
Cada columna tiene que tener la serie marcada.
a) 1 4 7 10 13 ….
b) 1 1 2 3 5 ….
c) 1 3 5 7 9 ….
d) 2 4 6 8 10 ….
e) 5 12 20 29 39 ….
a) Mostrar la matriz resultante
29) Generar una matriz de 5 FILAS * 10 COLUMNAS teniendo en cuenta las siguientes series.
Cada columna tiene que tener la serie marcada.
a) 2 4 6 8 10 ….
b) 3 6 9 12 15 ….
c) 4 8 12 16 20 ….
d) 5 10 15 20 25 ….
e) 6 12 18 24 30 ….
a) Mostrar la matriz resultante
b) Mostrar la matriz invertida
30) Cargar una matriz de 4 columnas por 20 filas con la siguiente información:
a) Legajo del alumno: datos generados: 10, 20, 30, 40….
b) Código de materia: valores 1, 2, 3. Validar
c) Calificación 1: valores entre 1 y 10.
d) Calificación 2: valores entre 1 y 10.
e) Generar un vector llamado materia teniendo en cuenta lo siguiente: código de
materia 1, materia SISTEMAS II, código de materia 2, materia
INTROD.PROGRAMACIÓN, caso contrario INGLES II.
f) Generar un vector que contenga el promedio de ambas calificaciones
g) Generar un vector que contenga la condición de regularidad. Si el promedio es mayor
o igual a 6, la condición es REGULAR, si el promedio es mayor o igual a 3, la condición
es LIBRE, caso contrario INSUFICIENTE.
h) Contar la cantidad de alumnos de cada condición.

Profesora Laura Vidal – Página 68


EJERCICIOS
VECTORES Y MATRICES
4
i) Contar los alumnos de cada materia
j) Generar un vector solamente con los alumnos REGULARES de la materia SISTEMAS II.
k) Ordenar los datos teniendo en cuenta el vector MATERIA.
l) Mostrar matriz, mostrar vectores.
m) Mostrar resultados

Profesora Laura Vidal – Página 69


EJERCICIOS
PROCESOS DE CADENAS DE CARACTERES
5
1) Pedir al usuario que ingrese una palabra y mostrar por pantalla dicha palabra transformada a
mayúsculas.
2) Pedir al usuario que ingrese una palabra. Mostrar por pantalla el siguiente texto:
La palabra <palabra> transformada a mayúsculas es: <palabraMay>
Donde palabra es la palabra ingresada y palabraMay, la misma palabra transformada a
mayúsculas
3) Pedir al usuario que ingrese una palabra y mostrar por pantalla dicha palabra transformada a
minúsculas.
4) Pedir al usuario que ingrese una palabra. Mostrar por pantalla el siguiente texto:
La palabra (<palabra>) transformada a minúscula es: = <palabraMin>
Donde palabra es la palabra ingresada y palabraMin, la misma palabra transformada a
minúsculas.
5) Pedir al usuario que ingrese una frase. Si la frase posee menos de 30 caracteres, informar que
debe ingresarse una frase que contenga por lo menos esa cantidad y sino mostrar por pantalla el
siguiente texto:
La frase ingresada contiene <cantidad> caracteres.
Donde cantidad es la cantidad de caracteres de la frase ingresada.
6) Pedir al usuario que ingrese una frase. Si la frase posee menos de 30 caracteres, informar que
debe ingresarse una frase que contenga por lo menos esa cantidad y sino solicitar que se ingrese
la cantidad de caracteres a tomar de la izquierda y mostrar por pantalla el siguiente texto:
Los primeros <cantidad> caracteres de la izquierda son: ‘<subfrase>’.
Donde cantidad es la cantidad de caracteres tomados desde la izquierda de la frase y subfrase
el texto resultante.
7) Pedir al usuario que ingrese una frase. Si la frase posee menos de 30 caracteres, informar que
debe ingresarse una frase que contenga por lo menos esa cantidad y sino mostrar por pantalla el
siguiente texto:
Los primeros <cantidad> caracteres de la derecha son: ‘<subfrase>’.
Donde cantidad es la mitad de los caracteres totales de la frase ingresada y subfrase el texto
resultante de tomar esa cantidad de caracteres desde la derecha de la misma.
8) Pedir al usuario que ingrese una frase o palabra, y determinar si la misma es palíndroma o
capicúa (da lo mismo leerla en un sentido o en el otro)
9) Cargar una matriz (20 filas) con los siguientes datos: Nombre, Apellido
a) Apellido todos en mayúsculas
b) Nombre primera con mayúscula, resto minúscula.
c) Extraer en un vector los que en ‘Nombre’ contengan una ‘a’
d) Contar los que en ‘Nombre’ contengan una ‘e’
e) Generar la inicial (3º columna de la matriz).
10) Cargar una frase, y determinar cuántas vocales tiene
11) Cargar un matriz que contenga: APELLIDO, Nombre. La tercera columna debe contener:
APELLIDO, Nombre. Cantidad de registros: 15

Profesora Laura Vidal – Página 70


EJERCICIOS
PROCEDIMIENTOS - FUNCIONES
5
1) Cargar un vector de 20 elementos, y generar dos nuevos vectores uno conteniendo los mismos
datos pero ordenados crecientemente, y el otro con los datos ordenados decrecientemente.
2) Ingresar los lados de 3 figuras geométricas. Calcular el área. Mostrar por pantalla el nombre de la
figura geométrica de menor área. Realizar procedimientos de manera tal que si se ingresa 3
lados se debe ejecutar el procedimiento llamado TRIANGULOS, si se ingresan 4 lados, se debe
ejecutar el procedimiento llamado CUADRADO, si se ingresan 5 lados, se debe ejecutar el
procedimiento llamado PENTA.
3) Se dispone de los datos correspondientes a una competencia de m pruebas, en la que se han
inscripto 10 participantes.
a) Número de competidor
b) Número de prueba
c) Tiempo obtenido (seg.)
d) Se requiere listar la información cargada ordenada por prueba, en formato de matriz.
e) Listar el tiempo total por competidor (sumar los tiempos de cada competencia), orden
decreciente (selección)
f) Listar los competidores que no se presentaron a una prueba (tiempo obtenido = 0)
ordenados por número de competidor en forma ascendente.
4) Se dispone de un listado de 50 registros:
a) Código de socio
b) Nº de cuenta
c) Nº de día
d) Nº de movimiento
e) Importe extraído
f) El listado no está ordenado. En un mismo día una persona puede haber realizado una, varias
o ninguna extracción.
Informar:
g) El monto total extraído por día por socio
h) El monto total extraído por día y ordenado por día (descendente)
i) El monto total extraído por persona, ordenado por persona (descendente)
j) La máxima extracción realizada (mostrar: Código de socio, Nº de día, Nº de cuenta y Nº de
movimiento, importe)

5) En una librería se dispone de un listado de 30 ventas de sus libros.


a) Nº de día
b) Código de libro
c) Cantidad vendida
Informar:
d) Dado un período específico (Nº de día desde – Nº de día hasta) (ingreso por pantalla),
mostrar los códigos de libros vendidos en solo una unidad. (ordenado por Nº de día
decreciente)
e) Para el mismo período anterior, la cantidad vendida de cada libro ordenado por código de
libro.

Profesora Laura Vidal – Página 71


ES
PROCEDIMIENTOS - FUNCIONES
7 EJERCICIOS

6) Por parte de la secretaría de turismo, se tiene la siguiente información de los datos de los centros
turísticos visitados por los turistas.
a) Ingresos (50)
b) Nº de día
c) Código Postal de ciudad
d) Código de Vía de acceso (1-Aérea 2-Terrestre)
e) Cantidad de personas que ingresaron
f) Informar:
g) Cantidad de turistas ingresados a cada ciudad por vía de acceso en forma decreciente según
cantidad
h) Cantidad total de turistas ingresados por día en forma decreciente
i) Dado un período (ingreso por pantalla) determinar las ciudades que no tuvieron acceso
(Cantidad de personas que ingresaron igual a cero) ordenarlas descendentemente por
nombre de ciudad
7) Un comercio mayorista dispone de la siguiente información por cada venta realizada:
a) Nº Factura
b) Nº de día
c) Código de cliente
d) Código de producto
e) Cantidad vendida
f) Precio Unitario
Informar:
g) Por cada venta mostrar Nº de factura + Nº de día + Código de cliente + Código de producto +
Cantidad vendida + Precio + Subtotal (ordenado por Subtotal en forma descendente)
h) Monto total facturado por cliente por período, ordenado por monto decreciente
i) Listar el código de producto más vendido.
j) Se registraron 100 ventas
8) Cargar un vector de 10 elementos, ordenarlo en forma creciente, y solicitar la carga de un dato a
ser buscado. Buscarlo por búsqueda binaria y mostrar un mensaje que diga ‘dato existente’ o en
su defecto ‘dato inexistente’.

Profesora Laura Vidal – Página 72


ES
PROCEDIMIENTOS - FUNCIONES
7 EJERCICIOS

En esta sección del cuadernillo es complementario de


los anteriores ya que se van a desarrollar ejercicios de
diseño de subprogramas, junto con pequeños
programas de prueba

1) Se desea ingresar los datos de 10 personas. Realizar un procedimiento de carga y


muestreo.
2) Ingresar 10 números. Realizar un procedimiento de carga.
3) Escribir una función que dado un número entero indique si es o no un número primo.
4) Escribir una función que dados 2 número reales a y b, devuelva la potencia ab.
5) Escribir un procedimiento que dado un número entero que representa segundos totales,
devuelva las horas, minutos y segundos correspondientes.
6) Se dispone de un listado de 20 alumnos: apellido, nombre, calificación. Donde
calificación son valores reales entre 1 y 10. Según la calificación determinar categoría y
fecha de examen
a) Calificación: <4  Categoría: LIBRE  Fecha de examen: 10/12/2009
b) Calificación: >=4 y <=7  Categoría: REGULAR  Fecha de examen 11/12/2009
c) Calificación: >=8  Categoría: PROMOCION  Fecha de examen: 12/12/2009
d) Determinar cantidad de libres, regulares y promocionaron que existen.
e) Resolverlo aplicando procedimiento.
7) Se dispone de 100 artículos: código de artículo, denominación del artículo, precio del
artículo, cantidad llevada, código de rubro del artículo (A-B-C). Determinar:
a) Según código de rubro determinar el rubro que surge de A Arte; BEscolar;
CComercial
b) Importe: precio * cantidad llevada
c) Total vendido. (acumular los importes).
d) Discriminar el IVA. (21% sobre el total vendido)
e) Determinar importe pagado por comisión. (3% del total vendido)
f) Cantidad de productos vendidos de cada rubro.
g) Mostrar por pantalla: código de artículo, denominación, rubro, precio, cantidad,
importe.
8) Generar el siguiente listado
a) Apellido (todo en mayúsculas)
b) Nombre (todo en mayúsculas)
c) Apellido y nombre con el siguiente formato: APELLIDO, NOMBRE
d) Inicial con el siguiente formato AN
e) Edad

Profesora Laura Vidal – Página 73


ES
PROCEDIMIENTOS - FUNCIONES
7 EJERCICIOS

9) Se dispone de información relacionada con los empleados de una fábrica: área de


trabajo, turno, nombre.
a) Ingresar datos hasta que el área de trabajo sea un caracter en blanco.
b) El área de trabajo se divide en m:mecánica, e:electricidad; p:proyecto;
a:administración
c) Los turnos son: 1: mañana; 2: tarde; 3: noche
10) Se pide informar:
a) Listado de los datos de entrada en la forma nombre – área – turno
b) Cantidad de personas por área
c) Cantidad de personas por turno
d) Porcentaje de personas que trabajan en el área mecánica en el turno tarde, respecto
al total de personas del turno tarde
11) Se dispone de información relacionada con un concurso de tiro al blanco: nombre del
tirador, edad, cantidad de tiros y por cada tiro, la posición en el blanco. La posición en el
blanco puede ser C, M, B, F y el puntaje asociado a cada zona es:
a) C=100 puntos M=50 puntos B=10 puntos F=-10 puntos
b) El fin de la entrada de datos se indica con un caracter en blanco en el nombre del
tirador.
c) Se pide informar:
d) Nombre, puntaje obtenido en cada tiro y puntaje total por tirador.
e) Nombre del tirador que obtuvo el mejor puntaje.
f) Edad promedio de los concursantes.
g) Porcentaje de tiros cuya posición fue C, con respecto al total de tiros.
h) Utilizar: Una función que dada una variable caracter que representa una posición en
el blanco devuelva el puntaje correspondiente.
12) Hacer diagrama de flujo, traza y enunciado de los siguientes programas:
Program Problema1; Program Problema2;
Var me,cm,mi,mit:real Var n1,n2,n3,n4: integer;prom:real;
Begin Begin
Readln(me,cm,mi) Readln(n1,n2,n3,n4)
mit:=me*1000 + cm*10 + mi Prom:=(n1+n2+n3+n4)/4;
writeln(mit) Writeln(prom)
end. End.

Profesora Laura Vidal – Página 74

You might also like