1. Republica Bolivariana de Venezuela
Ministerio del Poder Popular para la Educación
Universidad Nacional Experimental de Guayana
Carrera: Ingeniería Industrial
Sección: 1
Algoritmos y Estructura de Datos
Profesor : Alumno:
Luis Estraño Héctor Luces
Fecha: 02-06-2016 CI: 27112376
2. -Tipos de datos
*Datos de tipo Entero
Un tipo de dato entero en computación es un tipo de dato que puede representar un subconjunto finito de los números enteros. El número mayor que
puede representar depende del tamaño del espacio usado por el dato y la posibilidad (o no) de representar números negativos. Los tipos de dato entero
disponibles y su tamaño dependen del lenguaje de programación usado así como la arquitectura en cuestión. Por ejemplo, si para almacenar un número
entero disponemos de 4 bytes de memoria tememos que:
4 Bytes = 4x8 = 32 bits
Con 32 bits se pueden representar 232=4294967296 valores:
• Sólo positivos (enteros sin signo): del 0 al 4294967295
• Positivos y negativos (enteros con signo): del -2147483648 al 2147483647
Las típicas operaciones aritméticas: suma, resta, multiplicación y división se pueden realizar con datos de tipo entero. En el caso de la división, el
resultado podría ser un valor real, en ese caso, si el resultado se ha de almacenar como entero la parte decimal del resultado deberá ser eliminada, en
principio hay dos métodos para hacerlo:
• El redondeo: Aproximar el valor real al entero más cercano (Ej: 3,8-->4 / 3,2-->3)
• El truncamiento: Eliminar del valor real la parte decimal (Ej: 3,8-->3 / 3,2-->3)
Otra operación importante que se puede realizar con número enteros es la operación de módulo o resto de la división entera, es decir:
184 dividido 3 = 61 (resto 1) --> 184 módulo 3 = 1
En general la operación módulo cumple que:
a mod b = c
• c ≥ 0
• c < b
• si c es igual a 0 --> a es múltiplo de b
• si c es igual a 0 y b es igual a 2n (siendo n un número entero mayor o menor a 0) --> a (Es Par)
3. *Datos de tipo real
Es un tipo de dato en programas informáticos que representa la aproximación de un número real.
Al igual que los números enteros, el tipo real está limitado superior e inferiormente según la cantidad de memoria que haya disponible para almacenarlo. Otro
elemento importante a tener en cuenta en este tipo de datos es la precisión con que se pueden representar números con decimales, cuantos decimales se pueden
representar. Esta característica también está directamente relacionada con la cantidad de memoria disponible para almacenar un valor real.
A modo de ejemplo, en la tabla siguiente se muestran los rangos así como los formatos de almacenamiento para los tipos reales fundamentales para un determinado
lenguaje de programación.
Tipos reales fundamentales en Pascal:
Tipo Rango Dígitos Tamaño
significativos en bytes
---------------------------------------------------------------------------------
Real48 2.9 x 10^-39 .. 1.7 x 10^38 11 – 12 6
Single 1.5 x 10^–45 .. 3.4 x 10^38 7 – 8 4
Double 5.0 x 10^–324 .. 1.7 x 10^308 15 – 16 8
Extended 3.6 x 10^–4951 .. 1.1 x 10^4932 19 – 20 10
Comp –2^63+1 .. 2^63 –1 19 – 20 8
Currency –922337203685477.5808 .. 922337203685477.5807 19 – 20 8
Cuando la precisión que admite un valor real es rebasada el valor de este se trunca o se redondea. Por ejemplo si el máximo número de dígitos decimales que puede
albergar un tipo real es 10 la siguiente operación:
a = 123,123456789 / 100
debería dar como resultado que a es igual a 1,23123456789, pero este valor tiene 11 decimales, por lo que el valor de a será uno de estos:
Truncando: a = 1,2312345678
Redondeando: a = 1,2312345679
4. *Datos de tipo Lógico
El tipo de dato lógico o booleano es en computación aquel que puede representar valores de lógica binaria, esto es 2 valores, valores
que normalmente representan falso o verdadero. Se utiliza normalmente en la programación, estadística, electrónica, matemáticas
(Álgebra booleana), etc.
Para generar un dato o valor lógico a partir de otros tipos de datos, típicamente, se emplean los operadores relacionales (u operadores
de relación), por ejemplo: 0 es igual a falso y 1 es igual a verdadero
(3>2)= 1 = verdadero
(7>9)= 0 = falso
Una vez se dispone de uno o varios datos de tipo booleano, estos se pueden combinar en expresiones lógicas mediante los operadores
lógicos (Y, O, NO, …). Un ejemplo de este tipo de expresiones serían:
verdadero Y falso → falso
falso O verdadero → verdadero
NO verdadero → falso
5. *Datos de tipo enumerado
Los tipos de datos enumerados nos permiten crear tipos de datos con un orden en particular. Para crear un tipo de dato
enumerado se hace uso de la palabra reservada Type, y se encierra entre paréntesis separando con comas, los valores que
se pueden usar. Estos valores deben ser escritos usando letras del alfabeto en latín y números, pueden estar
compuestos de 1 o más caracteres y no deben empezar con números. A continuación un ejemplo:
{$codepage UTF8}
TYPE
Números = (Cero, Uno,Dos,Tres,Cuatro);
VAR
N01 : Números;
BEGIN
N01:=Cero;
N01:=Uno; readln
END.
Código fuente 11: Creación de un tipo de dato enumerado
6. *Datos de tipo carácter
Carácter es una unidad de información que corresponde aproximadamente con un grafema
o con una unidad o símbolo parecido, como los de un alfabeto o silabario de la forma escrita
de un lenguaje natural.
Un ejemplo de carácter es una letra, un número o un signo de puntuación. El concepto
también abarca a los caracteres de control, que no se corresponden con símbolos del lenguaje
natural sino con otros fragmentos de información usados para procesar textos, tales como el
retorno de carro y el tabulador, así como instrucciones para impresoras y otros dispositivos
que muestran dichos textos (como el avance de página).
Codificación de caracteres
Los ordenadores y los equipos de comunicaciones representan caracteres mediante el uso de
una codificación que asigna un valor a cada carácter (típicamente, un valor entero
representado por una secuencia de bits) que puede ser almacenado o transmitido por una
red. La codificación más común ha sido hasta hace poco ASCII, si bien actualmente se está
haciendo más popular el Unicode. Un ejemplo de codificación no digital sería el código
Morse, que en lugar de usar bits representa los caracteres mediante una serie de impulsos
eléctricos de longitud variable (puntos y rayas).
7. *Datos de tipo Subrango
El tipo de dato subrango es el más simple que se puede definir en un programa Pascal. Estos tipos son útiles, sobre todo por la facilidad que
ofrecen para verificar automáticamente errores. Un tipo subrango se define de un tipo ordinal, especificando dos constantes de ese tipo, que
actúan como límite inferior y superior del conjunto de datos de ese tipo. Un tipo subrango es un tipo ordinal y sus valores se ordenan de igual
modo que en el tipo patrón de que se deducen.
Ejemplos
0..9 — este tipo subrango consta de los elementos 0,1,2,3,4,5,6,7,8,9
'0'..'9' — este subrango consta de los caracteres '0','1','2','3','4','5','6','7','8', '9'
'A'..'F' — este subrango consta de los caracteres 'A','B','C','D','E','F'
Se pueden crear variables cuyos valores se restrinjan a un subrango dado. Las declaraciones de tipo subrango se sitúan entre las declaraciones
de constantes y de variables.
-Estructura de datos
*Estructura de datos Arrays
Una estructura array (matriz o vector) es un conjunto finito y ordenado
de elementos homogéneos. La
propiedad “ordenado” significa que el elemento primero, segundo,
tercero,..., enésimo de un
array puede ser identificado. Los elementos de un array son
homogéneos, es decir, del mismo
tipo de datos. Un array puede ser compuesto de todos sus elemento de
tipo entero, etc. los
arrays se conocen también como matrices – en matemática – y tablas –
en cálculos financieros.
El tipo mas simple de array es el array unidimensional o vector (matriz
de dimensión).
8. El subíndice o índice de un elemento (1, 2, ..., i, n) designa su posición en la ordenación del
vector. Otras posibles notaciones del vector son:
a1, a2,......ai,.......an
A(1) , A(2), ......., A(i), ......A(n)
Obsérvese que solo el vector global tiene nombre (NOTAS). Los elementos del vector se
referencian por su subíndice o índice (subscript), es decir, posición relativa en el vector.
En algunos libros y tratados de programación, además de las notaciones anteriores se suele
utilizar esta otra:
A(L:U)
= (A(I))
Para I =L.L – 1 .....U – 1, U donde cada elemento A (I) es de tipo T
que significa: A, vector unidimensional con elementos de tipo T, cuyos subíndices varían en el
rango de L a U, lo cual significa que el índice no tiene por que comenzar necesariamente en 0
o en i .
como ejemplo de un vector o array unidimensional, se puede considerar el vector
TEMPERATURA, que contiene las temperaturas horarias registradas en una ciudad durante los
veinticuatro horas del día. Este vector constará de veinticuatro elementos de tipo real ya que
las temperaturas normalmente no serán enteras siempre.
9. *Cadena de Caracteres
En programación, una cadena de caracteres, palabras, ristra de caracteres o frase (string, en inglés) es una secuencia ordenada (de
longitud arbitraria, aunque finita) de elementos que pertenecen a un cierto lenguaje formal o alfabeto análogas a una fórmula o a una
oración. En general, una cadena de caracteres es una sucesión de caracteres (letras, números u otros signos o símbolos). Si no se ponen
restricciones al alfabeto, una cadena podrá estar formada por cualquier combinación finita de los caracteres disponibles (las letras de
la 'a' a la 'z' y de la 'A' a la 'Z', los números del '0' al '9', el espacio en blanco ' ', símbolos diversos '!', '@', '%', etcétera).
En este mismo ámbito, se utilizan habitualmente como un tipo de dato predefinido, para palabras, frases o cualquier otra sucesión de
caracteres. En este caso, se almacenan en un vector de datos, o matriz de datos de una sola fila (array, en inglés). Las cadenas se
pueden almacenar físicamente:
Seguidas;
Enlazados letra a letra.
Generalmente los caracteres se guardan uno a continuación de otro para fines de eficiencia en el acceso.
Un caso especial de cadena es la que contiene cero caracteres. A esta cadena se la llama cadena vacía.
10. *Estructura de Datos en registros
Un registro, en programación, es un tipo de dato estructurado formado por la unión de varios elementos bajo una misma
estructura. Estos elementos pueden ser, o bien datos elementales (entero, real, carácter,...), o bien otras estructuras de datos. A
cada uno de esos elementos se le llama campo.
Un registro se diferencia de un vector en que éste es una colección de datos iguales, es decir, todos del mismo tipo, mientras que
en una estructura los elementos que la componen, aunque podrían serlo, no tiene porque ser del mismo tipo.
El concepto de registro que se acaba de presentar es muy similar al concepto de registro en bases de datos, este segundo se
refiere a una colección de datos que hacen referencia a un mismo ítem que se van a guardar en una fila de una tabla de la base de
datos.
* Estructura de Datos en Lista
En Ciencias de la Computación, una lista enlazada es una de las estructuras de datos fundamentales, y puede ser usada para
implementar otras estructuras de datos. Consiste en una secuencia de nodos, en los que se guardan campos de datos arbitrarios y
una o dos referencias, enlaces o punteros al nodo anterior o posterior. El principal beneficio de las listas enlazadas respecto a los
vectores convencionales es que el orden de los elementos enlazados puede ser diferente al orden de almacenamiento en la
memoria o el disco, permitiendo que el orden de recorrido de la lista sea diferente al de almacenamiento.
11. Una lista enlazada es un tipo de dato autorreferenciado porque contienen un puntero o enlace (en inglés link, del mismo
significado) a otro dato del mismo tipo. Las listas enlazadas permiten inserciones y eliminación de nodos en cualquier punto
de la lista en tiempo constante (suponiendo que dicho punto está previamente identificado o localizado), pero no permiten un
acceso aleatorio. Existen diferentes tipos de listas enlazadas: listas enlazadas simples, listas doblemente enlazadas, listas
enlazadas circulares y listas enlazadas doblemente circulares.
Las listas enlazadas pueden ser implementadas en muchos lenguajes. Lenguajes tales como Lisp y Scheme tiene estructuras
de datos ya construidas, junto con operaciones para acceder a las listas enlazadas. Lenguajes imperativos u orientados a objetos
tales como C o C++ y Java, respectivamente, disponen de referencias para crear listas enlazadas.
12. *Estructura de datos en Arboles
Un árbol es una estructura no lineal en la que cada nodo puede apuntar a uno o varios nodos.
También se suele dar una definición recursiva: un árbol es una estructura en compuesta por un dato y varios árboles.
Estas son definiciones simples. Pero las características que implican no lo son tanto.
Árbol
Definiremos varios conceptos. En relación con otros nodos:
Nodo hijo: cualquiera de los nodos apuntados por uno de los nodos del árbol. En el ejemplo, 'L' y 'M' son hijos de 'G'.
Nodo padre: nodo que contiene un puntero al nodo actual. En el ejemplo, el nodo 'A' es padre de 'B', 'C' y 'D'.
Los árboles con los que trabajaremos tienen otra característica importante: cada nodo sólo puede ser apuntado por otro nodo, es decir,
cada nodo sólo tendrá un padre. Esto hace que estos árboles estén fuertemente jerarquizados, y es lo que en realidad les da la apariencia de
árboles.
En cuanto a la posición dentro del árbol:
Nodo raíz: nodo que no tiene padre. Este es el nodo que usaremos para referirnos al árbol. En el ejemplo, ese nodo es el 'A'.
Nodo hoja: nodo que no tiene hijos. En el ejemplo hay varios: 'F', 'H', 'I', 'K', 'L', 'M', 'N' y 'O'.
Nodo rama: aunque esta definición apenas la usaremos, estos son los nodos que no pertenecen a ninguna de las dos categorías anteriores. En
el ejemplo: 'B', 'C', 'D', 'E', 'G' y 'J'.
13. *Algoritmos
En matemáticas, lógica, ciencias de la computación y disciplinas relacionadas, un algoritmo (del griego y latín, dixit algorithmus y
éste a su vez del matemático persa Al-Juarismi ) es un conjunto prescrito de instrucciones o reglas bien definidas, ordenadas y finitas que
permite realizar una actividad mediante pasos sucesivos que no generen dudas a quien deba realizar dicha actividad. Dados un estado
inicial y una entrada, siguiendo los pasos sucesivos se llega a un estado final y se obtiene una solución. Los algoritmos son el objeto de
estudio de la algoritmia.
En la vida cotidiana, se emplean algoritmos frecuentemente para resolver problemas. Algunos ejemplos son los manuales de usuario,
que muestran algoritmos para usar un aparato, o las instrucciones que recibe un trabajador por parte de su patrón. Algunos ejemplos en
matemática son el algoritmo de multiplicación, para calcular el producto, el algoritmo de la división para calcular el cociente de dos
números, el algoritmo de Euclides para obtener el máximo común divisor de dos enteros positivos, o el método de Gauss para resolverlo
14. *Representación de Algoritmos
Los algoritmos pueden ser expresados de muchas maneras, incluyendo al lenguaje natural, pseudocódigo, diagramas de flujo y
lenguajes de programación entre otros. Las descripciones en lenguaje natural tienden a ser ambiguas y extensas. El usar
pseudocódigo y diagramas de flujo evita muchas ambigüedades del lenguaje natural. Dichas expresiones son formas más
estructuradas para representar algoritmos; no obstante, se mantienen independientes de un lenguaje de programación específico.
La descripción de un algoritmo usualmente se hace en tres niveles:
1.Descripción de alto nivel. Se establece el problema, se selecciona un modelo matemático y se explica el algoritmo de manera
verbal, posiblemente con ilustraciones y omitiendo detalles.
2.Descripción formal. Se usa pseudocódigo para describir la secuencia de pasos que encuentran la solución.
3.Implementación. Se muestra el algoritmo expresado en un lenguaje de programación específico o algún objeto capaz de llevar a
cabo instrucciones.
También es posible incluir un teorema que demuestre que el algoritmo es correcto, un análisis de complejidad o ambos.
15. *Pseudocódigo
En ciencias de la computación, y análisis numérico, el pseudocódigo (o falso lenguaje) es una descripción de alto nivel compacta e
informal del principio operativo de un programa informático u otro algoritmo.
Utiliza las convenciones estructurales de un lenguaje de programación real, pero está diseñado para la lectura humana en lugar de la
lectura mediante máquina, y con independencia de cualquier otro lenguaje de programación. Normalmente, el pseudocódigo omite
detalles que no son esenciales para la comprensión humana del algoritmo, tales como declaraciones de variables, código específico del
sistema y algunas subrutinas. El lenguaje de programación se complementa, donde sea conveniente, con descripciones detalladas en
lenguaje natural, o con notación matemática compacta. Se utiliza pseudocódigo pues este es más fácil de entender para las personas que
el código del lenguaje de programación convencional, ya que es una descripción eficiente y con un entorno independiente de los
principios fundamentales de un algoritmo. Se utiliza comúnmente en los libros de texto y publicaciones científicas que se documentan
varios algoritmos, y también en la planificación del desarrollo de programas informáticos, para esbozar la estructura del programa antes
de realizar la efectiva codificación.
.
16. *Organigrama
Un organigrama es la representación gráfica de la estructura de una empresa o cualquier otra organización, incluyen las estructuras
departamentales y, en algunos casos, las personas que las dirigen, hacen un esquema sobre las relaciones jerárquicas y competenciales de
vigor.
El organigrama es un modelo abstracto y sistemático que permite obtener una idea uniforme y sintética de la estructura formal de una
organización:
Desempeña un papel informativo.
Presenta todos los elementos de autoridad, los niveles de jerarquía y la relación entre ellos.
En el organigrama no se tiene que encontrar toda la información para conocer cómo es la estructura total de la empresa.
Todo organigrama tiene el compromiso de cumplir los siguientes requisitos:
Tiene que ser fácil de entender y sencillo de utilizar.
Debe contener únicamente los elementos indispensables.
Tipos de organigrama:
Vertical: Muestra las jerarquías según una pirámide, de arriba abajo.
Horizontal: Muestra las jerarquías de izquierda a derecha.
Mixto: Es una combinación entre el horizontal y el vertical.
Circular: La autoridad máxima está en el centro, y alrededor de ella se forman círculos concéntricos donde figuran las autoridades en
niveles decrecientes.
Escalar: Se usan sangrías para señalar la autoridad, cuanto mayor es la sangría, menor es la autoridad de ese cargo.
Tabular: Es prácticamente escalar, solo que el tabular no lleva líneas que unen los mandos de autoridad.
17. *Diagrama Nassi-Shneiderman
En programación de computadores un diagrama Nassi-Shneiderman (o NSD por sus siglas en inglés), también conocido como
diagrama de Chapin, es una representación gráfica que muestra el diseño de un programa estructurado.
Fue desarrollado en 1972 por Isaac Nassi y Ben Shneiderman. Este diagrama también es conocido como estructograma, ya que sirve
para representar la estructura de los programas. Combina la descripción textual del pseudocódigo con la representación gráfica del
diagrama de flujo.