Professional Documents
Culture Documents
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
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
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.
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.
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
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.
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
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.
Características de la POO
Las características fundamentales de la POO son: abstracción, encapsulamiento, herencia y
poliformismo.
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.
Programación lógica
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.
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
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
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.
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.
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
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.
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
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.
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.
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.
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)
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
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
Compatibilidad de asignación
Un poco de historia
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)
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
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 (_).
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)
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.
EJERCICIOS
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.
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.
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
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).
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
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).
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).
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
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.
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.
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.
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 (:=).
Ellos son: suma (+), resta (-), multiplicación (*), división (/), división entera (div), división por
módulo (mod).
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
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).
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.
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.
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
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.
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.
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.
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.
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.
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 coloramarillo, 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
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.
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.
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.
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
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
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;
EJERCICIOS
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;
√6 𝑎 − 2𝑥 2
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;
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.
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.
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
Decision If anidadas
IF B THEN
IF C THEN
IF D THEN
A1
ELSE
B1
ELSE
C1
ELSE
D1
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
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.
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
Entradas y salidas
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;
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
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
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;
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).
x:=nombreFuncion(p1,p2)
writeln(nombreFuncion(p1,p2))
if nombreFuncion(p1,p2) then …….
y:=(x+nombreFuncion(p1,p2))*100/total
etc…
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.
NombreProcedimiento(P1, P2….)
Diagrama de memoria
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.
El diagrama o mapa de memoria que muestra la ubicación relativa de las variables es el siguiente:
m(y) b x
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
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
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
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
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
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
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
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:
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:
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.
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
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.
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
Mi
Pascal: Ordenamiento - Búsqueda
End;
End;
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
I1
jn
P( i + j) div 2
i:=p + 1
P ( i + j) div 2
K <> v[p] P 0
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.
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.
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.
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.
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.
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.
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).
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
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’.