480 likes | 832 Views
ALGORITMO, ESTRUCTURAS Y PROGRAMACIÓN I. UNIDAD 1:Introducción al D iseño de A lgoritmos. Ing. Nelwi Báez Msc. Algoritmo. El Algoritmo es un proceso para resolver problemas Fue desarrollado por el matemático persa Abu Jafar Mohammed Ibn Musa Al Khwarizmi.
E N D
ALGORITMO, ESTRUCTURAS Y PROGRAMACIÓN I UNIDAD 1:Introducción al Diseño de Algoritmos Ing. Nelwi Báez Msc.
Algoritmo • El Algoritmoes un proceso para resolver problemas • Fuedesarrolladopor el matemáticopersa Abu Jafar Mohammed Ibn Musa Al Khwarizmi. • Un algoritmoesunafórmula para resolver un problema. • Un algoritmoes un conjunto de acciones o secuencia de operacionesqueejecutadas en un determinadoordenresuelven el problemaplanteado. • Un algoritmoes un procesometódicoque define unaseriefinita de pasossencillos y sin ambigüedades para la solución de un problema • La programaciónconsiste en adaptar el algoritmo al ordenador • El algoritmoesindependiente de la implementación en algúnlenguaje de programación
Características de un Algoritmo • Un algoritmodebe: • Estarbiendefinido. • Serpreciso. • Finito.
Metodología para DiseñarAlgoritmos • Un algoritmo es una formula para obtener la solución de un problema. • La solución puede ser planteada de diferentes formas. • El diseño de un algoritmo es un proceso creativo. • No existe un conjunto de reglas que indiquen expresamente cómo escribir un algoritmo en forma correcta
Metodología para DiseñarAlgoritmos • Los pasos para resolver un problema son: • Análisis del problema. • Diseño del algoritmo. • Verificación del algoritmo.
Metodología para DiseñarAlgoritmos • En la Fase de Análisis del Problema se: • Identifica el problema. • Se determina la información que se debe producir como salida. • Se identifica la información necesaria para resolver el problema. • Se identifican los elementos que se tienen y los elementos que se deben solicitar para resolver el problema. • Se establece el camino a seguir o la solución que se va implementar.
Metodología para DiseñarAlgoritmos • En la Fase de Diseño del Algoritmo se: • Se busca la manera más fácil para simplificar la propuesta. • Se identifican los procesos más importantes y se colocan en orden ascendente según su importancia y precedencia (esto sirve como un algoritmo inicial). • El algoritmo inicial se va refinando sucesivamente hasta obtener una solución más detallada y fácil de traducir a un lenguaje de programación
Metodología para DiseñarAlgoritmos • En la Fase de Verificación del Algoritmo: • Se verifica que el algoritmo cumpla con los procesos diseñados y produzca el resultado esperado. • Se realiza una prueba del algoritmo mediante su ejecución manual con datos significativos y se comprueba si se obtienen los resultados esperados para la salida
Programas de Computadora • Un programa es un conjunto de instrucciones que, ejecutadas ordenadamente, resuelven un problema. En otras palabras, es la implementación del algoritmo. • Un programa de computadora es una secuencia de instrucciones que le indican al computador que realice las operaciones específicas para lograr el resultado deseado. • Consiste de uno o más módulos o rutinas cada uno de los cuales puede estar compuesto de varios subprogramas.
DefinicionesBásicas • Lenguaje de Máquina. • Lenguaje de Bajo Nivel: Ensamblador. • Lenguaje de Alto Nivel. • Compilar. • Base de Datos. • Sistema Operativo. • Almacenamiento.
DefinicionesBásicas: Lenguaje de Máquina: • Es un lenguajequepuedeserinterpretadodirectamentepor los circuitosinternos de la máquina. • Estábasado en instruccionescompuestasporsecuencias de ceros (0) y unos (1). • Ventajas: • - No requieretraducción, la máquina lo interpreta. • - Opera directamente con la máquina. • - Puedesereficiente en el manejo de losrecursos. • Desventajas: • - Difícil de aprender, implementar y mantener. • - Esúnico y particular para cadaprocesador.
DefinicionesBásicas: Lenguaje de BajoNivel Ensamblador. Es un lenguajefuente para codificarsentenciassimbólicas. Haceuso de nemotécnicos para representarinstrucciones de máquina. Un ensambladorconviertecadainstrucción en instrucciones de lenguaje de máquina. Ventajas: • No es tan complicadocomo el lenguaje de máquina. • Eficiente en el manejo de recursos. Desventajas: • Cadaprocesadortienesupropiojuego de instrucciones en ensamblador • Debesertraducido – ensamblado.
DefinicionesBásicas: Lenguaje de Alto Nivel Es un lenguajeorientado al problema o procedimiento. Son los máscercanos al lenguajehumano. Ejemplo: COBOL, PL/I, FORTRAN, etc. Otros son los lenguajes de ProgramaciónOrientado a Objetos (OOPL) : C++, Smalltalk, Java, etc. Ventajas: • Son independientes del procesador. • Son másfáciles de aprender, implementar y mantener. • Tiene un caráctergenérico. Desventajas: • Menoseficiente en el manejo de recursos. • Requiere un proceso de traducción – compilación.
OtrasDefinicionesBásicas • Compilar Estraducir un programaescrito en un lenguaje de alto nivel a lenguaje de máquina, quees la forma en que la computadorapuedeejecutarlasacciones o instrucciones. • Base de Datos Esunacolección de datoscompleta e integrada para evitarduplicados, quepermiterecuperarinformación para satisfacer a unaampliavariedad de usuarios. • Sistema Operativo Esunacolecciónorganizada de software que se usa para ayudar y controlarlasoperaciones de unacomputadora. • Almacenamiento Se refiere a los dispositivos en que los datos se almacenan para posteriormenteserrecuperados.
Desarrollar un Programa de Computadora • El programadordebeescribirlassentencias o instrucciones del códigofuente, en un editor. • El conjunto de sentenciasfuente se denomina “programafuente.” • El programafuentees la entrada para el compilador. • El compiladorconvierte el programafuente en un conjunto de comandosentendiblespor el computadorllamado “programaejecutable”. • Si se encuentraalgún error en la sintaxis de los comandos en el programafuente, el compiladorlistarácadauno de ellos y no produce el programaejecutable.
Editor Programa Fuente Compilador Programa Ejecutable Lista de Programas Pasos de un Programa de Computadora
Funcionamiento del Compilador/Enlazador • El compiladorcrea un programaobjeto y un listado del programaobjeto. • El programaobjeto se usacomo la entrada al enlazador para realizar lo que se llama el paso de “edición de enlace”. • El enlazadorcombina el programaobjetoreciéncreado, con otrosarchivosobjetosyaexistentes para producir un programaejecutable. • Los otrosarchivosobjetogeneralmenteresiden en un archivo en disco llamado “Librería de Enlace”.
Funcionamiento del Compilador / Enlazador Librerías de Programas Objeto Compilador Enlazador Programa objeto Programa fuente Programa Ejecutable
Datos e Instrucciones • Un programa de computadora, para quepuedaserejecutadodebesercargado en memoria. • La unidad de procesamiento del ordenadorsólopuedetrabajar con los datos e instruccionesqueresiden en la memoria.
Dato • El dato es cualquier objeto o elemento de información que se usa a través de las diversas operaciones dentro de un programa. • Son los elementos sobre los que se opera cuando se efectúa una instrucción. • Un dato tiene un nombre que lo identifica y distingue de los demás elementos del programa. • El nombre no es más que una forma de referenciar la dirección de memoria que ocupa el dato.
Tipo de Dato • El tipo de dato es una definición que identifica los valores válidos para un conjunto de datos y las operaciones que sobre ellos se pueden realizar. • Normalmente se puede establecer una relación de orden sobre los datos de naturaleza escalar o con valores determinísticos. • Cada tipo de dato tiene una representación en el computador. • Para cada tipo de dato el computador reserva una cantidad de memoria para almacenarlo • Todo, absolutamente todo, en la memoria de un computador se representa por medio de código binario.
Clasificación de los Tipo de Dato • Los tipos de datos se clasifican en: • Primitivos: tipos básicos o simples predefinidos en el sistema. Pueden ser numérico, lógico o carácter. • Definidos por el usuario: tipos de datos complejos definidos por el programador.
Tipo de DatoPrimitivo Numérico • Los tipos primitivos numéricos más importantes son: • Entero: es un subconjunto finito del conjunto matemático de los números enteros. No tiene parte decimal. • Real: es un subconjunto finito del conjunto matemático de los números reales, tienen signo y parte decimal.
Tipo de DatoPrimitivoLógico o Booleano • El tipo primitivo lógico o booleno: • Es aquel que sólo puede tomar uno de los dos valores, verdadero o falso (1 ó 0). • Las operaciones lógicas retornan un valor lógico.
Tipo de Dato Caracter • El tipo de dato primitivo carácter: • Es el conjunto finito y ordenado de caracteres que reconoce la computadora: letras, dígitos, caracteres especiales, código ASCII y UNICODE. • Los valores usualmente se representan dentro de un par de comillas simples. • Se puede usar el código del carácter o su posición dentro del conjunto de caracteres válidos que se esté usando.
El tipo de dato numérico entero es un subconjunto finito de los números enteros del mundo real. Pueden ser positivos o negativos Tipos de Datos Con los tipos enteros pueden utilizarse los calificadoressigned y unsigned. Estos calificadores indican si el número tiene signo o no. Si se usan solos, sin indicar el tipo de dato se asume int. Por ejemplo, las siguientes declaraciones son equivalentes: unsignedint x; equivale a: unsigned x;
Ejemplo: • Nacionalidad = “Venezo- lano” (S/N)? • Carácter o Char • Su valor lo comprenden todos los caracteres alfabé- ticos, mayúsculas y minúsculas (A – Z), numéricos (0 – 9) y símbolos especiales (#,@,%,&). • Carácter String o cadena • Su valor esta representado por un conjunto de ca- racteres. • “Abril” “Reporte Anual de Fallas Técnicas” “1º de mayo, Día Tipo de datos Lógicos o boléanos Son aquellos datos cuyos únicos valores sólo pue- den ser: Verdadero (V) o Falso (F), puede encon- trarse, Verdadero (True) o Falso (False). Se utiliza para representar las opciones (si/no) a determina- das condiciones.
Tipos de datos numéricos reales El tipo de dato numérico real es un subconjunto finito de los números reales. Pueden ser positivos o negativos.
Constantes y Variables • Constantes: • Son instancias de un tipo de dato que tienen un valor fijo que se le da cuando se define la constante. • No puede ser modificado durante la ejecución del programa o corrida del algoritmo. • Variables: • Son instancias de un tipo de dato, cuyo valor puede cambiar durante la ejecución del programa o corrida del algoritmo. • No varía su nombre y su tipo. • Variables: • Acumuladoras • Contadoras
Variables • Las variables deben ser definidas o declaradas antes de usarlas. • Una variable se declara dando un nombre significativo y tipo. • El nombre o identificador, es una palabra que no es propia del lenguaje, la construye y usa el programador basándose en ciertas reglas • El nombre, por lo general, tiene que empezar por una letra, el tamaño y caracteres permitidos para formar el identificador dependen del lenguaje. • En algunos lenguajes, a la variable al declararla se le asigna un valor por defecto, si no se le asigna un valor inicial.
Constantes • Las constantes pueden llevar asociados un nombre, si no lo tienen se llaman literales. • El valor de la constante se debe suministrar al definir la constante y no puede cambiar a lo largo de la ejecución del programa. • El tipo de dato de la constante se especifica o no en la declaración dependiendo del lenguaje. • Ejemplo de definición de una constante: Const PI=3,1416 • La ventaja de las constantes con nombre, es que se puede usar el nombre en cualquier lugar del programa y luego el compilador lo sustituye por su valor.
Variables y Constantes en la Memoria • Cuando el compiladorconsigueunadeclaración de una variable o unaconstante con nombre, automáticamentereserva en memoriaespacio para guardarla. • El espacioreservado en memoriadepende del tipo de dato de la variable o constante. • En esaubicación de memoria se guarda el valorasociado a la variable o constante • Cuando el programa se ejecutabusca el valor de la variable o constante en esaubicación de memoria.
Expresiones: Tipos y Operadores • Una expresión es una combinación de constantes, variables, signos de operación, paréntesis y nombres especiales de funciones estándares, con un sentido unívoco y definido. • La evaluación de una expresión da como resultado un único valor. • Toda expresión tiene asociado un tipo que se corresponde con el tipo del valor que devuelve la expresión cuando se evalúa. • Existen dos tipos de expresiones: • Numéricas. • Lógicas.
Expresiones Numéricas: Operadores Aritméticos • Las expresiones numéricas son una combinación de variables y constantes numéricas con operadores aritméticos, que al evaluarse devuelven un valor numérico. • Los operadores aritméticos se utilizan en las expresiones numéricas. • Algunos de los operadores aritméticos más usados son: • + Suma • - Resta • * Multiplicación • / División
Otros Operadores Aritméticos • Otros operadores aritméticos soportados en algunos lenguajes de programación son: • Resto: devuelve el resto de una división entera. • División entera: devuelve el cociente de una división en la que no se consideran los decimales. • Potencia: devuelve el valor de una base elevada a una potencia dada. • Todos los operadores estudiados son binarios, utilizan dos operandos y el operador se sitúa en medio de ambos operandos.
Operadores Unarios • Los operadores unarios son un tipo de operador que sólo necesitan de un operando. • Algunos de los operadores unarios más comunes son: • Signo negativo: devuelve el valor actual del operando multiplicado por menos uno (-1). • Decremento: devuelve el valor actual del operador decrementado en una unidad. • Incremento: devuelve el valor actual del operador incrementado en una unidad.
Evaluación de Expresiones • El resultado que retorna de la evaluación de una expresión depende del orden en que se evalúen los operadores. • Ejemplo: • Sea la siguiente expresión aritmética: 2 + 3 * 2 + 3 • Si se evalúa en el orden de aparición de los operadores : • (((2 + 3) * 2) + 3) El resultado = 13 • Si se evalúa primero la suma (+) y luego la multiplicación (*): • (2 + 3) * (2 + 3) El resultado = 25 • Si se evalúa primero la multiplicación y luego la suma: • 2 + (3 * 2) + 3 El resultado = 11
Reglas de Precedencia en lasExpresiones • Para evaluarlasexpresiones, cadaoperadortieneunaprioridad o regla de precedencia para suevaluacióndentro de la expresión. • Cadalenguajepuedeestablecer sus propiasreglas de prioridad o precedencia de operadores. • El orden de precedenciamásusado para los operadoresaritméticosbásicos, es: • 1- ^ • 2- *, /, div y mod • 3- + y – • Se evalúaprimero el operador con mayor prioridad. • Entre dos operadoresquetienen la mismaprecedencia se usa la regla de la asociatividadpor la izquierda. • Se puedenutilizar los paréntesis () para cambiar el orden en que se evalúan los operadores de unaexpresiónaritmética.
ExpresionesLógicas: OperadoresRelacionales y Lógicos • Una expresión lógica es aquella que sólo puede devolver uno de dos valores: Verdadero o Falso. • Los operadores que pueden aparecer en una expresión lógica son de dos tipos: lógicos o relacionales. • Los operadores lógicos sólo trabajan sobre expresiones o datos que retornan valores booleanos. • Los operadores relacionales trabajan con expresiones numéricas para realizar comparaciones que retornan un valor booleano. • Las expresiones combinan tanto los operadores lógicos como relacionales, se evalúa más de una condición o relación por medio los de operadores lógicos
Operadores Relacionales • Los operadores relacionales más utilizados son: • < menor que • > mayor que • = igualdad (en C/C++: ==) • <> diferente (en C/C++: !=) • menor o igual que • mayor o igual que
EjerciciosobreExpresionesLógicas • Ejercicio: • Evalúe las siguientes expresiones si se le asigna a: • la variable x el valor de 2 • la variable y el valor de 4 • 1. x == y • 2. x <> y • 3. y > x • 4. x >= y
OperadoresLógicos • Los operadores lógicos se utilizan para evaluar más de una condición al mismo tiempo. • Los operadores lógicos más utilizados son: • Y (and, &&) • O (or, !!) • No (not, ~, !) • O exclusivo (xor, ^) • El “No” es un operador unario todos los demás son operadores binarios.
FuncionesIncorporadas • Las funciones incorporadas son funciones que se incorporan al lenguaje y que son diferentes de las operaciones básicas. • Se consideran estándar en la mayoría de herramientas y lenguajes de programación. • Son dependientes del lenguaje y normalmente se encuentran en librerías externas que se pueden incluir en un programa. • Las librerías más comunes son las librerías de soporte matemático y las de entrada / salida. • La sintaxis y el nombre de las funciones puede variar de un lenguaje a otro, pero la funcionalidad suele mantenerse entre las diversas herramientas de programación.
Lenguaje Sentencia Ejemplo Pascal use use conio; C y C++ include #include <iostream> Java import Import java.io.*; Uso de lasFuncionesIncorporadas
Lenguaje Operador Ejemplo Pascal := var := 5 + 3; C y C++ = var = 5 + 3; Java = var = Math.sin(90.0); Operación de Asignación • La operación de asignación consiste en atribuir un valor a una variable. • El valor asignado es una expresión, una constante u otra variable • Var: representa la variable a la que se le asigna el valor dado en la expresión a la derecha del operador de asignación.
Fases de la Operación de Asignación • La operación de asignación se realiza en 2 fases: • Se evalúa la expresión de la parte derecha de la asignación y se obtiene un único valor. • Se asigna ese valor a la variable de la parte izquierda. • En la parte izquierda de la operación de asignación sólo puede haber una variable y al asignarle el valor pierde el valor anterior. • Si la variable de la parte izquierda participa en la expresión, se evalúa primero la expresión antes de realizar la asignación. Ejemplo x = x + 1. • El tipo de dato resultante después de evaluar la expresión (parte derecha), tiene que ser del mismo tipo de dato o un tipo compatible con el de la variable a la cual se le va a asignar el resultado de la operación.
Recomendaciones al Programar • Para minimizar la ocurrencia de errores al programar se recomienda: • Reutilizar código bueno. • No asumir los datos de entrada como válidos. • No asumir que los datos de entrada están en la secuencia correcta. • Diseñar los tamaños de los campos de datos de modo que puedan contener en el campo el valor actual más grande. • Usar comentarios en los programas. • Desarrollar programas legibles y fáciles de entender.