Вы находитесь на странице: 1из 19

Unidad 1: Introducción a los Datos. Estructuras de Datos.

Estructuras Primitivas.

Introducción a al procesamiento de datos y resolución de problemas


computacionales
El proceso de resolución de un problema en una computadora conduce a las escritura de
un programa y a la ejecución en la misma. La principal razón para que las personas
aprendan a programar en general y los lenguajes de programación en particular es
utilizar la computadora como una herramienta para la resolución de problemas.
La computadora permite hacer tareas más eficiente, rápida y precisamente de lo
que lo haríamos a mano, si es que podemos hacerlo a mano. Para utilizar esta poderosa
herramienta, debemos especificar exactamente que queremos hacer y en el orden
en el que se debe hacerse. Esto se hace mediante la Programación, que es el
proceso de planificar una secuencia de instrucciones que ha de seguir una
computadora.
Aunque el proceso de diseñar un programa es un proceso creativo, se puede
considerar una fase o pasos comunes, que generalmente deben de seguir todos los que
trabajan en el área de sistemas de información.
Para escribir una secuencia de instrucciones que ha de seguir una computadora debemos
seguir cierto procedimiento. Este procedimiento, es decir, el proceso que se sigue desde el
planteamiento de un problema, hasta que se tiene la solución instalada en una
computadora y lista para su ejecución, se compone de varias fases agrupadas en dos
bloques bien diferenciados: una etapa de Resolución de Problema y Diseño del
Programa, y una segunda etapa de Implementación y Puesta a Punto del
Programa.
Dato
Son medidas, valores o características que pueden ser manipulados y constituyen la materia
prima para producir la información, en otras palabras son el material sin procesar del que se
extrae la información.

Información
Se trata del conjunto de datos, añadidos, procesados y relacionados, de manera que pueden
dar pauta a la correcta toma de decisiones según el fin previsto

Página | 1
Proceso
Un proceso es un conjunto de actividades mutuamente relacionadas o que al interactuar
transforman elementos de entrada y los convierten en resultados.

Fases en la Resolución de Problemas

Las fases de resolución de un problema con computadora son:

Constituyen el ciclo de vida del software y sus características más sobresalientes son:

 Análisis: El problema se analiza teniendo presente la especificación de los


requisitos dados por el cliente de la empresa o por la persona que encarga el
programa.
 Diseño: Una vez analizado el problema, se diseña una solución que conducirá a un
algoritmo que resuelva el problema.
 Codificación (implementación): La solución se escribe en la sintaxis del lenguaje de
alto nivel (por ejemplo, C) y se obtiene un programa fuente que se compila a
continuación.
 Ejecución, verificación y depuración: El programa se ejecuta, se comprueba
rigurosamente y se eliminan todos los errores (denominados «bugs», en inglés)
que puedan aparecer.
Cuando se ejecuta un programa, se pueden producir tres tipos de errores:

Página | 2
 Errores de compilación: Se producen normalmente por un uso incorrecto
de las reglas del lenguaje de programación y suelen ser errores de
sintaxis. Si existe un error de sintaxis, la computadora no puede
comprender la instrucción, no se obtendrá el programa objeto y el
compilador imprimirá una lista de todos los errores encontrados durante la
compilación.
 Errores de ejecución: Estos errores se producen por instrucciones que la
computadora puede comprender pero no ejecutar. Ejemplos típicos
son: división por cero y raíces cuadradas de números negativos. En
estos casos se detiene la ejecución del programa y se imprime un
mensaje de error.
 Errores lógicos: Se producen en la lógica del programa y la fuente
del error suele ser el diseño del algoritmo. Estos errores son los más
difíciles de detectar, ya que el programa puede funcionar y no producir
errores de compilación ni de ejecución, y sólo puede advertirse el error por
la obtención de resultados incorrectos. En este caso se debe volver a la
fase de diseño del algoritmo, modificar el algoritmo, cambiar el programa
fuente y compilar y ejecutar una vez más.
También podemos destacar los tipos de códigos que pueden aparecer, también
denominados entornos de desarrollo:
 Código fuente: Conjunto de sentencias entendibles por el
programador que componen el programa o una parte de ello.
Suele estar almacenado en un fichero del tipo texto como los que
se pueden abrir por ejemplo, con el bloc de notas. El código fuente
estará escrito en un lenguaje de programación determinado, elegido
por el programador, como pueden ser: Pascal, C, C++, C#, Java, Perl,
Python, PHP.
 Código objeto: Conjunto de instrucciones y datos escritos en un
lenguaje que entiende el ordenador directamente: binario o código
máquina. Provienen de la traducción de cierto código fuente.
 Código ejecutable: Reúne diferentes códigos u objetos generados por
los programadores junto con las “librerías de uso general” (propias
del entorno o del lenguaje de programación) componiendo el
programa final. Este es el código que ejecutan los usuarios del
sistema, y es específico para una plataforma concreta: Windows,
Linux, Mac OS, o cierto sistema Hardware.
 Mantenimiento: El programa se actualiza y modifica, cada vez que sea necesario,
de modo que se cumplan todas las necesidades de cambio de sus usuarios.

Página | 3
 Documentación: Escritura de las diferentes fases del ciclo de vida del software,
esencialmente el análisis, diseño y codificación, unidos a manuales de usuario y de
referencia, así como normas para el mantenimiento.
La documentación de un programa puede ser interna y externa. La
documentación interna es la contenida en líneas de comentarios. La
documentación externa incluye análisis, diagramas de flujo y/o pseudocódigos,
manuales de usuario con instrucciones para ejecutar el programa y para
interpretar los resultados. La documentación es vital cuando se desea corregir
posibles errores futuros o bien cambiar el programa.
Las dos primeras fases conducen a un diseño detallado escrito en forma de algoritmo.
Durante la tercera etapa (codificación) se implementa el algoritmo en un código escrito en
un lenguaje de programación, reflejando las ideas desarrolladas en las fases de análisis y
diseño.
Las fases de compilación y ejecución traducen y ejecutan el programa. En las fases
de verificación y depuración el programador busca errores de las etapas anteriores y los
elimina. Comprobará que mientras más tiempo se gaste en la fase de análisis y diseño,
menos se gastará en la depuración del programa. Por último, se debe realizar la
documentación del programa.

Algoritmos, partes, propiedades, elementos, clasificación

Definición: Un algoritmo es un método para resolver un problema mediante una serie de


pasos precisos, definidos y finitos.

Partes de un algoritmo:
Un algoritmo consta de tres partes:
 Entrada de datos: Se escriben los datos necesarios para darle solución al
problema.
 Proceso: Son los pasos necesarios para resolver el problema.
 Salida de resultados: Son los resultados que se arrojan el algoritmo una vez
terminado el proceso.

Elementos de un algoritmo:
Los elementos básicos constitutivos de un programa o algoritmo son:

Página | 4
 Palabras reservadas (inicio, fin, si –entonces..., etc),
 Identificadores (nombres de variables esencialmente)
 Caracteres especiales (coma, apóstrofe, etc.)
 Constantes
 Variables
 Expresiones
 Instrucciones

Propiedades de un Algoritmo:
 Preciso: indica el orden de realización en cada paso.
 Definido: si se sigue dos veces, obtiene el mismo resultado cada vez.
 Finito: tiene fin; un número determinado de pasos.

Clasificación de Algoritmos:
 Algoritmo Computacional: son aquellos algoritmos que pueden ser ejecutados por
una computadora.
 Algoritmo no Computacional: son aquellos algoritmos que no pueden ser
ejecutados por una computadora.

Técnicas para la formulación de algoritmos


Durante el proceso de diseño del algoritmo es preciso disponer de alguna
herramienta para describirlo, se necesita disponer de un lenguaje algorítmico con el que
reflejar las sucesivas acciones que resuelven el problema y que, además, soporte lo mejor
posible el proceso sucesivo de refinamiento en subproblemas.
Las técnicas más utilizadas para la formulación de algoritmos son:
 Diagramas de Flujo (Flowchart)
 Pseudocódigo
Diagramas de Flujo: son una herramienta gráfica para descripción de algoritmos. Un
diagrama de flujo consta de una serie de símbolos estándar, que representan las distintas
acciones del algoritmo, conectados mediante líneas que indican el orden en el cual deben
realizarse las operaciones.
Pseudocódigo: es un lenguaje de especificación de algoritmos, mezcla de lenguaje de
programación y español (o inglés o cualquier otro idioma) que se emplea, dentro de la
programación estructurada, para realizar el diseño de un programa. La ventaja del
pseudocódigo es que su uso en la planificación de un programa, el programador se puede

Página | 5
concentrar en la lógica y en las estructuras de control y no preocuparse de las reglas de un
lenguaje específico.

Errores en la construcción de un algoritmo


En los algoritmos se pueden presentar dos tipos de errores.

Heurísticas

En la fase de resolución del problema, orientada a la programación de


computadoras, se deben diseñar algoritmos, no seguirlos. Planteado un problema, se
requiere la obtención de un algoritmo, diseñar el conjunto de pasos que han de
realizarse para resolverlo. Realmente, hacemos este tipo de resolución de problemas
siempre a un nivel inconsciente. No escribimos, sin embargo, nuestras soluciones, las
ejecutamos.
Para aprender a programar se deben hacer conscientemente algunas de las estrategias
subyacentes de resolución del problema, en orden a aplicarlas a los problemas de
programación. Veamos algunas de estas estrategias que usamos diariamente.
 Hacer Preguntas: si nos dan verbalmente la tarea, hacemos preguntas hasta tener
claro lo que se ha de hacer. Preguntamos cuándo, por qué, dónde, hasta que la tarea
esté completamente especificada. Si las instrucciones están escritas, podemos poner
preguntas en las márgenes, subrayar una palabra, o cualquier otra forma de indicar
que la tarea no está clara.

Página | 6
 Resolución por Analogía: nunca debemos reinventar la rueda. Si existe una
solución, la usamos. Si hemos resuelto antes el mismo problema o uno parecido,
solamente repetimos la solución.
 Dividir para vencer: constantemente dividimos un problema grande en
unidades más pequeñas que podemos manejar. La tarea de limpiar la casa o
el departamento puede parecer abrumadora. La tarea compuesta de limpiar el
salón, el comedor, la cocina, los dormitorios y los baños parece manejable. El
mismo principio se aplica a la programación.

Estructuras básicas de control: secuencial, condicional y repetitiva.

 Secuencial: conjunto de sentencias que se ejecutan en el orden que fueron escritas.


 Selectiva: consta de una sentencia especial de decisión y de un conjunto de
secuencias de instrucciones. Dependiendo del resultado obtenido, se ejecutara una
de las secuencias de instrucciones.
 Repetitiva: consta de una secuencia especial de decisión y de un conjunto de
secuencias de instrucciones. La secuencia de instrucciones se ejecutara de forma
iterativa mientras que la secuencia de decisión genere el resultado correcto, caso
contrario finalizara.

Página | 7
Página | 8
Página | 9
Página | 10
Página | 11
Complejidad Computacional

Tiene como finalidad la creación de mecanismos y herramientas capaces de describir y


analizar la complejidad de un algoritmo y la complejidad de un problema.
Indica el esfuerzo que hay que realizar para aplicar un algoritmo y lo costoso que este
resulta. Dicho costo se puede medir en diversas formas como espacio, tiempo, etc.
Un algoritmo es más eficiente cuando menos complejo sea.

Página | 12
La eficiencia suele medirse en términos de consumo de recursos:
 Espaciales: cantidad de memoria que un algoritmo consume o utiliza durante su
ejecución.
 Temporales: tiempo que necesita el algoritmo para ejecutarse.
 Otras: utilización de CPU, utilización de periféricos, tiempo y coste de
implementación, etc.
Factores que influyen en la complejidad:
 Tamaño del problema: magnitudes que al aumentar incrementan la complejidad
del algoritmo.
 Naturaleza de los datos de entrada: en función de cuales sean los datos del
problema se ejecutaran o no determinadas instrucciones de decisión y será
distinto el número de iteraciones de los bucles, esto equivale a decir que el
problema se resolverá en más o menos tiempo.
 Recursos hardware y software
Orden de un Algoritmo
El orden de un algoritmo nos indica cuan rápidamente aumenta el tiempo de ejecución de
un algoritmo cuando aumenten los datos de entrada.

Estructuras de Datos

Uso de los Datos


La información de que se dispone para procesar en la computadora consta de un
conjunto determinado de datos acerca del problema real, es decir, el conjunto que se
considera relevante para el problema que se tiene en la mano, aquel conjunto del cual se
creen pueden derivarse los resultados.
El objetivo de un sistema de manejo de datos es hacer que éstos sean adaptables y
flexibles para apoyar el proceso de toma de decisiones de una organización.
 Los datos deben representarse y almacenarse en cierta forma para accesarlos
posteriormente.
 Los datos deben organizarse de manera adecuada para accesarlos en forma
selectiva y eficientemente.
 Los datos deben procesarse y presentarse de manera que puedan apoyar
eficientemente al usuario.
 Los datos deben protegerse y manejarse para que no pierdan su valor.

Página | 13
Una estructura de datos es una clase de datos caracterizada por la organización de los
datos y las operaciones definidas sobre ella.
Clasificación de estructuras

Estructuras Estáticas y Dinámicas

Estructura de Datos Estáticas: son aquellas en las que el tamaño ocupado en memoria se
define antes de que el programa se ejecute y no puede modificarse dicho tamaño durante la
ejecución del programa.
Estructura de Datos Dinámicas: no tienen las limitaciones o restricciones en el tamaño de
memoria ocupada que son propias de las estructuras estáticas.
Mediante el uso de un tipo de datos especifico, denominado puntero, es posible construir
estructuras de datos dinámicas.

Estructuras Primitivas

Son aquellos que se tienen a disposición en la mayoría de las computadoras con


características integradas. Incluyen los números enteros, valores lógicos de verdad y un
conjunto de caracteres imprimibles.

Enteros: un entero es un miembro del siguiente conjunto de números:


{. . . , - ( n + 1 ) , - n ,. . . , - 2 , - 1 , 0 , 1 , 2 ,. . . ., n , n + 1 , . . . }
Operaciones: las operaciones fundamentales sobre enteros, son la suma, resta,
multiplicaciones, división, exponenciación entre otras. Todas estas operaciones trabajan
sobre un par de números, considerados como operadores binarios. Un operador unario
tiene solo un operando. La negación, cambia el signo de un número, es un ejemplo de un
operador unario.

Página | 14
Formas de representación de los enteros en la memoria:
Representación sin signo: un entero sin signo es un entero que nunca puede ser negativo
y solo puede tomar valores de 0 o positivo. Su rango es de 0 a infinito positivo.
Un dispositivo de entrada almacena un entero sin signo mediante los pasos siguientes:

 El entero cambia a binario.


 Si el número de bits es menor que n (números de bits), 0s se añaden a la izquierda
para completar los n bits.
Representación por signo y magnitud: en este método, el rango disponible para los
enteros sin signo (o a 2n−1) se divide en dos sub-rangos iguales. La primera mitad
representa enteros positivos, la segunda mitad enteros negativos.

En esta representación, el bit más a la izquierda define el signo del entero. Si es 0, el


entero es positivo. Si es 1, el entero es negativo.
Representación de complemento a dos: en este método, el rango disponible para el
numero entero sin signo de (0 a 2n−1 ¿se divide en dos sub-rangos iguales. El primer sub-
rango se utiliza para representar enteros no negativos, y la segunda mitad para
representar enteros negativos. A los patrones de bits se le asignan enteros negativos y no
negativos.

Para emplear la operación complemento a dos, debemos tener el entero en binario, luego
copiamos los bits de la derecha hasta que un 1 es copiado; entonces cambiamos el resto
de los bits.
En la representación complemento a dos, el bit más a la izquierda define el signo del
entero. Si es 0, el entero es positivo. Si es 1, el entero es negativo.
Representación de complemento a uno: la operación se puede aplicar a cualquier
número entero, positivo o negativo. Esta operación simplemente invierte cada bit. Un bit
0 se cambia a un bit 1, y un bit 1 se cambia a un bit 0.

Página | 15
Tipo de Datos Flotantes (Reales)

Se llaman Números Reales a todos aquellos que se pueden expresar en forma decimal
finita o infinita; es decir, el conjunto de los Números Reales (R) está formado por los
elementos del conjunto Q unido con I.
 El conjunto de los Números Racionales (Q) corresponden a la unión de todos
los números cuya expresión decimal es finita, infinita periódica o infinita
semiperiódica.
 El conjunto de los Números Irracionales (I) está formado por la unión de todos
los números que admiten una expresión infinita no periódica.
Existen tres tipos básicos de números de coma flotante en el lenguaje C, que se muestran
en la siguiente tabla:

Tipo Ejemplo
float 10.5
double 0.00045
Long double 1e-8
Almacenamiento de reales: un real es un numero con una parte integral y una parte
fraccional. Por ejemplo, el 23,7 es un número real –la parte entera es 23 y la parte
fraccionaria es 0,7. Aunque una representación de punto fijo puede ser usada para
representar un número real, el resultado puede ser no preciso o puede no tener la
precisión requerida.
Normalización: para hacer la parte fija de la representación uniforme, tanto el método
científico (para el sistema decimal) como el método de punto flotante (para el sistema
binario) utilizan solo un digito diferente de cero a la izquierda del punto decimal. Esta es la
llamada normalización. En el sistema decimal este digito puede ser de 1 a 9, mientras que
en el sistema binario solo puede ser 1. De aquí en adelante, d es un digito diferente de
cero, x es un digito, e y es 0 o 1.

Sistema de exceso: la potencia que muestra cuantos bits del punto decimal debe moverse
hacia la izquierda o derecha, es un número con signo. Aunque esto podría haber sido
almacenados usando complemento a dos, una nueva representación llamada el Sistema
de Exceso se utiliza en su lugar. En el sistema de exceso, enteros positivos y negativos se
almacenan como enteros sin signo. Para representar un entero positivo o negativo, un

Página | 16
entero positivo (llamado sesgo (bias)) se añade a cada número para cambiar (shift) de
manera uniforme hacia el lado no negativo. El valor de este sesgo es 2m−1−1, donde m es
el tamaño de la ubicación de memoria para almacenar el exponente.

Estructuras de Datos Definidas por el Programador

Muchos lenguajes de programación ofrecen al programador un conjunto predefinido de


estructuras de datos. En otros, el programador puede definir sus propias estructuras de
datos, por ejemplo en lenguaje C con el enunciado struct.
Algunas veces esta característica se usa para dar un nombre definido por el programador
a las estructuras primitivas que se definen en el sistema, pero también se puede utilizar
para definir una estructuración de datos más creativa del programador.
Una de las diferencias más notables, entre las estructuras de datos proporcionadas por el
lenguaje, y las definidas por el programador, es la validación de las operaciones sobre las
estructuras de datos.

Los Booleanos

Es también llamado tipo de datos lógico. Un dato booleano es un elemento que puede
tener uno de dos valores: verdadero o falso.
El conjunto de operaciones definidas sobre este tipo de estructura de datos es diferente
del conjunto de operaciones para los enteros. Los tres operadores booleanos básicos son
NOT, AND y OR (negación, conjunción y disyunción).
AND

V V V
V F F
F V F
F F F

OR

V V V
V F V
F V V

Página | 17
F F F

NOT

V F
V F
F V
F V

Las tablas muestran el resultado de aplicar cada uno de estos operadores para cada valor
booleano. OR y AND son operadores binarios, en tanto que NOT es un operador unitario.

Caracteres

Un carácter es un elemento tomado de un conjunto de símbolos. Un ejemplo de conjunto


de símbolos es:
{0,1,2,3,4,5,6,7,8,9,A,B,C,D,…,X,Y,Z,?,.,*,+,-,/}

En el cual se incluyen dígitos, los caracteres del alfabeto y algunos caracteres especiales.
Operaciones
Se puede:
 Sumar un entero a un carácter
 Restar un entero de un carácter
 Restar un carácter de otro
 Comparar dos caracteres entre sí

Formas de Representación

Existen muchos esquemas en uso para la representación de datos tipo carácter:


 EBCDIC: es un código de 8 bits, los cuales se requieren para representar cualquier
carácter de un conjunto dado. Con 8 bits hay 28 (es decir, 256) combinaciones
posibles. El conjunto de caracteres que el código EBCDIC puede generar incluye
tanto caracteres alfabéticos en mayúsculas y minúsculas, dígitos y una gran
cantidad de caracteres especiales.

Página | 18
 ASCII: es un código de 7 bits. Hay 27 combinaciones posibles, las cuales son la
mitad del número de caracteres representados por el código EBCDIC. La ventaja es
que cada carácter consume menos almacenamiento y se transmite con más
rapidez.
 Códigos Huffman: en este tipo de código, los caracteres se representan por un
número variable de bits, dependiendo de la frecuencia relativa de ocurrencias del
carácter en el vocabulario de la aplicación. Es aconsejable representar los
caracteres que ocurren con más frecuencia con el patrón de bits menor y los
caracteres de menos frecuencia con el patrón de bits mayor. Una desventaja de la
representación comprimida resultante es el procesamiento necesario para
codificar y reconocer caracteres.

Unicode

Unicode es un estándar de codificación de caracteres diseñado para facilitar el


tratamiento informático, transmisión y visualización de textos de múltiples lenguajes y
disciplinas técnicas, además de textos clásicos de lenguas muertas. El término Unicode
proviene de los tres objetivos perseguidos: universalidad, uniformidad y unicidad.

Página | 19

Вам также может понравиться