Está en la página 1de 62

Análisis y Diseño de Algoritmos

Dra. María Victoria Carreras Cruz


CV Vicky Carreras
 Licenciada en Cibernética Matemática.
 Especialista en Informática Médica.
 Especialista en Antropología Filosófica.
 MBA.
 Master en Ciberseguridad
 Doctora en Ciencias Computacionales.
 Egresada del Programa ADIT del IPADE.
 Categoría Docente Titular.
 Investigadora en el área de Señales Médicas.
 Patente “Procesamiento e interpretación automatizada de imágenes, apoyada en la
segmentación y equipo para llevar a cabo este procedimiento”, otorgada el 11/09/2012
con expediente MX/a/2008/007657.
 Directora de Ing. en Tecnologías de Información y Sistemas Inteligentes, Ing. en
Inteligencia de Datos y Ciberseguridad Universidad Panamericana
 mvcruz@up.edu.mx Whats 55-54011126
Plan del Curso. 1er. Parcial
 3. DATOS, TIPOS DE DATOS Y
 1. DISEÑO DE ALGORITMOS OPERACIONES PRIMITIVAS
 1.1 Algoritmos  3.1 Tipos de Datos
 1.2 Pseudocódigo y diagramas de flujo
 3.2 Constantes
 3.3 Variables
 1.3 Fases en la resolución de  3.3.1 Declaración de Variables
problemas  3.3.2 Manejo de Variables
 1.4 Paradigmas de programación  3.4 Operaciones básicas y expresiones
 1.5 Programación estructurada
 4. INSTRUCCIONES Y TIPOS DE
INSTRUCCIONES
 2. INTRODUCCION A LA  4.1 Tipos de instrucciones
PROGRAMACION  4.2 Instrucciones de asignación
 2.1 Lenguajes de Programación  4.3 Instrucciones de lectura y escritura de
 2.2 Estructura de un programa resultados
 2.3 Compilador
 4.4 Estructuras de selección
 4.5 Estructuras de repetición
 2.4 Sintaxis
Plan del Curso. 2do. Parcial
 5. FUNCIONES
 6. ARREGLOS
5.1 Funciones definidas por el
 6.1 Arreglos unidimensionales
usuario  6.1.1 Declaración y uso
 5.1.1 Declaración y uso  6.1.2 Cadenas de caracteres
5.2 Paso de parámetros por valor  6.1.3 Funciones de manejo de
5.3 Paso de parámetros por cadenas
referencia  6.2 Arreglos bidimensionales
5.4 Funciones predefinidas  6.2.1 Declaraciones y uso
 6.2.2 Ejemplos de programas con
matrices
 6.3 Aplicaciones prácticas de
procesamiento de arreglos.
 6.3.1 Métodos de ordenación:
burbuja, inserción, selección y Shell.
 6.3.2 Búsqueda secuencial y binaria
Plan del Curso. Final
 7. ESTRUCTURAS
 7.1 Datos definidos por el usuario
 7.1.1 Estructura de registros.
 7.1.2 Enumeraciones.
 7.1.3 Arreglos de Estructuras
Fechas de Examen
 Primer Parcial semana 12/sept 30 %
 80 % examen

 20 % tareas

 Segundo Parcial semana 23/oct 30 %


 80 % examen

 20 % tareas

 Final 27/nov/2022 40 %
 60 % examen

 20 % tareas

 20 % proyecto (Defensa del Proyecto Final 21/nov)


Bibliografía

 Joyanes,L. Fundamentos Generales de Programación.


(2012). Primera edición. McGraw Hill. ISBN:
9786071508188

 Deitel, P.,Deitel, H. (2007). Cómo programar en C#.


México.Pearson Education. ISBN: 9702610567. p. 1104.
Charles Babbage, 1864
“Tan pronto como exista una Máquina Analítica, no cabe duda
de que fijará los futuros derroteros de la ciencia. Y siempre
que se busque un resultado por este medio, surgirá la pregunta:
¿cuál es el curso de computación mediante el cual puede la
máquina obtener estos resultados en el menor tiempo posible?”
Ada Augusta Byron,
Condesa de Lovelace
“La Máquina analítica no tiene ninguna
intención de originar nada. Puede hacer
cualquier cosa que queramos sólo con
ordenarle que lo haga”.

2do. martes de octubre se celebra la figura de Ada Lovelace, la


primera programadora de la historia, para aumentar el
reconocimiento de las mujeres en ciencia, tecnología,
ingeniería y matemáticas.

Matemática, programadora, poeta, informática


teórica, inventora, traductora, escritora e ingeniera

https://elpais.com/ccaa/2017/05/19/madrid/1495185447_527225.html
Diagrama de Lovelace de la nota G,
primer algoritmo informático publicado
Alna Kay
“Sabes, la informática invierte lo
normal. En la ciencia normal, tienes
un mundo y tu trabajo consiste en
buscar sus reglas. En informática, tú
le das a la computadora las reglas y
ella crea el mundo”.

Pionero en la programación orientada a


objetos y el diseño de sistemas
de interfaz gráfica de usuario (GUI).
Donald E. Knuth
“La programación de una computadora es una forma de
arte, como la poesía o la música”.

Autor de The Art of Computer Programming, investigador dentro del análisis de


algoritmos y compiladores. Profesor Emérito de la Universidad de Stanford.
Knuth
 Programador conocido por su humor geek.

 Ofrece una recompensa de 2.56 dólares a


quien encuentre errores conceptuales o
tipográficos en sus libros (la razón detrás de
la extraña cifra es que «256 centavos son 1
dólar hexadecimal»).
Computadora

 Herramienta para resolver problemas.


 Dispositivo electrónico utilizado para procesar
información y obtener resultados.
Algoritmo. Raíz
 Mohámed ben Musa, célebre matemático persa del siglo IX.

 En árabe

 Abu Abdallah Muḥammad ibn Mūsā al-Jwārizmī


 ‫أبو عبد هللا محمد بن موسى الخوارزمي ابو جعفر‬

 Alcanzó gran reputación por el enunciado de las reglas paso a paso para
sumar, restar, multiplicar y dividir números decimales.

 Escribió entre los años 800 y 825 su obra Quitad Al Mugabala, donde se
recogía el sistema de numeración hindú y el concepto del cero.

 Fibonacci tradujo esta obra al latín y la tituló: Algoritmi Dicit.


Algoritmo. Definición
 Conjunto ordenado, definido y finito de
operaciones o reglas (paso a paso) que permite
hallar la solución de un problema mediante una
serie de datos precisos.

 El más conocido de los ejemplos antiguos de


algoritmos no triviales es el algoritmo de Euclides
para calcular el máximo común divisor.
Características de los Algoritmos
 1.- Preciso: Su ejecución no debe implicar ninguna decisión subjetiva,
ni precisar el uso de la intuición ni de la creatividad. Debe indicar el
orden de realización de cada paso.

 2.- Definido: Si se sigue un algoritmo dos veces con los mismo datos,
se debe obtener el mismo resultado cada vez.

 3.- Finito: Debe tener un número finito de pasos, debe terminarse en


algún momento.

 4.- Presentación formal: Para ser entendido por cualquier persona.


Se puede expresar en pseudocódigo, diagrama de flujo, etc.
Características de los Algoritmos
 5.- Eficiente: Evaluar los recursos de cómputo que requiere para
almacenar datos y para ejecutar operaciones frente al beneficio que
ofrece. En cuanto menos recursos requiere será más eficiente el
algoritmo.
Cuando nos disponemos a resolver un problema, es posible que haya toda una gama de
algoritmos disponibles. En este caso es importante decidir cuál de ellos hay que utilizar.
Dependiendo de nuestras prioridades y de los límites del equipo que esté disponible para
nosotros, quizá necesitemos seleccionar el algoritmo que requiera menos tiempo, o el que
utilice menos espacio, o el que sea más fácil de programar y así sucesivamente. La
respuesta puede depender de muchos factores, tales como los números implicados, la
forma en que se presenta el problema, o la velocidad y capacidad de almacenamiento del
equipo de computación disponible.
Partes de un Algoritmo (Estructura de
un Programa)

 Entrada (input)  Proceso  Salida (output)


Algoritmo de Resolución
(Técnicas para obtener las
salidas a partir de las entradas)
¿En qué orden debo definirlos?
 Salida: Objetivo

 Entrada: ¿Con qué cuento para lograrlo?

 Proceso: ¿Cómo le hago?


Ejemplo de Algoritmo
 Una receta de cocina, si describe precisamente la
forma de preparar cierto plato, proporcionándonos las
cantidades exactas que deben utilizarse y también
instrucciones detalladas acerca del tiempo que debe
de guisarse.

 Entrada: ingredientes y utensilios empleados


 Procesamiento: elaboración de la receta en la cocina
 Salida: plato terminado, por ejemplo: pizza
¿Me ayudan por fa?
 Necesito llegar al Club Libanés
Resolución de un problema con computadora.
1. Definición o análisis del problema
 Requiere una clara definición, donde se contemple exactamente lo
que debe hacer el programa y el resultado o solución deseada. Deben
responderse las siguientes preguntas:
 ¿Cuál es la salida deseada (tipo y cantidad)?

 ¿Qué entradas se requieren para lograr esa salida

(tipo y cantidad)?
 ¿Qué método produce la salida

deseada a partir de las entradas definidas?


Resolución de un problema con computadora.
2. Diseño del algoritmo

 “Divide y Vencerás”
 El diseño del algoritmo es totalmente
independiente del lenguaje de programación en
el que se vaya a codificar posteriormente. Las
dos herramientas más utilizadas comúnmente
para diseñar algoritmos son los diagramas de
flujo y pseudocódigos.
Resolución de un problema con computadora.
3. Transformación del algoritmo en un
programa

 Escritura en un lenguaje de
programación de la representación
del algoritmo desarrollada en las
etapas precedentes.
Resolución de un problema con computadora.
4. Ejecución y validación del programa
Arreglar

Algoritmo en
Pseudocódigo codificación

O Diagrama de Programa Introducir en Compilar


Flujo Fuente memoria
por el teclado

Lenguaje de
Máquina

Programa
Enlace Ejecutable
?
Validación
Arreglar con Datos
de Prueba
?
Software
 Conjunto de programas escritos para
una computadora.
 Lista de instrucciones que especifica
las operaciones que debe realizar el
hardware.
 Software de Sistema: Conjunto de programas
indispensables para que la máquina funcione.
Programas del sistema.

 Software de Aplicaciones: Programas que


realizan tareas concretas. Ej: Nóminas,
Contabilidad, Análisis Estadístico, etc.
Software de Sistema. Tipos.
 Sistema Operativo: Facilita la escritura y el uso de los demás
programas a la computadora. Dirige las operaciones globales de la
computadora, la instruye para ejecutar otros programas y controla el
almacenamiento y recuperación de archivos (programas y datos) de
memoria externa.

 Lenguajes de Programación: Sirven para escribir programas que


permitan la comunicación usuario/máquina. Los programas traductores
(compiladores o intérpretes) convierten las instrucciones escritas en
lenguajes de programación en instrucciones escritas en lenguaje de
máquina (0 y 1, bits) que ésta pueda entender.

 Programas de Utilidad: Utility. Facilitan el uso de la computadora Ej:


Editor de texto.
Lenguaje de Programación
 Tiene un número limitado de símbolos y también un número limitado
de palabras.

 Constituido por un conjunto de reglas sintácticas y semánticas.


 Sintácticas: especifican la formación de instrucciones válidas.

 Semánticas: especifican el significado de estas instrucciones.

 La escritura o codificación del programa puede resultar una tarea


sencilla si conocemos las reglas sintácticas y semánticas que
constituyen el lenguaje de programación.
Lenguajes de Programación
 Lenguajes utilizados para escribir programas de
computadoras.

 Los principales son:


 Lenguaje de Máquina:

 Lenguaje Nativo de la Computadora.

 Secuencias de 0 y 1

 Lenguaje de Bajo Nivel (ensambladores)

 Lenguajes de Alto Nivel


Concepto de Programa
 Concepto desarrollado por Von Neumanm en 1946.

 Unión de una secuencia de instrucciones que una computadora puede


interpretar y ejecutar y una (o varias) estructuras de datos que almacenan
la información independiente de las instrucciones que dicha secuencia de
instrucciones maneja.

 Para ello se usan lenguajes de programación que sirven para programar la


secuencia de instrucciones requerida.

 Normalmente implementa (traduce a un lenguaje de programación


concreto) un algoritmo.

 “Formado por algoritmos y estructuras de datos”, Niklaus Wirth.


Paradigmas de Programación
 Enfoques diferentes para la construcción de soluciones a problemas.
 Afectan el proceso completo de desarrollo de software.

 Procedimental o Imperativo: Conjunto de instrucciones que se


ejecutan una por una, de principio a fin de modo secuencial, excepto
cuando intervienen instrucciones de salto de secuencia o control.

 Declarativo: Solicita del programador que describa el problema en lugar


de encontrarle una solución algorítmica. Utiliza el principio del
razonamiento lógico. Ej: Prolog

 Orientado a Objetos: Se basa en el diseño y construcción de objetos


que se componen de datos y operaciones que manipulan esos datos. Ej:
Java y C#
Compilador
 Programa que traduce los programas fuente escritos en lenguaje de
programación por el programador a lenguaje de máquina. El programa
traducido se llama código objeto.
 Fases de la compilación
 Escritura del programa fuente con un editor y guardarlo en un
dispositivo de almacenamiento.
 Introducir el programa fuente en memoria.
 Compilar el programa.
 Verificar y corregir errores de compilación.
 Obtención del programa objeto.
 El enlazador (linker) obtiene el programa ejecutable.
 Se ejecuta el programa y, si no existen errores, se
tendrá la salida deseada.
¿Qué es programar?
“Es el único trabajo en el que puedo pensar como un ingeniero y un artista. Es
un elemento increíble, riguroso y técnico que me encanta porque tienes que
pensar de un modo muy preciso. Por otro lado, tiene una parte ampliamente
creativa donde las fronteras de la imaginación son sus únicos límites”.

Andy Hertzfeld,
co-diseñador de
Macintosh
Cuando se ejecuta un programa, se
pueden producir tres tipos de errores:
 Errores de compilación: Producto de un uso incorrecto de las reglas
del lenguaje de programación y suelen ser errores de sintaxis.

 Errores de ejecución: Se producen por instrucciones que la


computadora puede comprender pero no ejecutar. Ej: 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 su fuente


suele ser el diseño del algoritmo. Son los más difíciles de detectar.
Byte
 Unidad elemental de memoria. Octeto. (1
byte contiene ocho bits)

 Tiene la capacidad de almacenar un


carácter de información, y está formado
por un conjunto de unidades más
pequeñas de almacenamiento
denominadas bits, que son dígitos
binarios (0 ó 1).
Unidades de medida de
almacenamiento
 La memoria central de una computadora puede tener
desde unos centenares de millares de bytes hasta
millones de bytes.

 Como el byte es una unidad elemental de


almacenamiento, se utilizan múltiplos para definir el
tamaño de la memoria central.
Unidades de medida de
almacenamiento
 Para la memoria y el almacenamiento se utiliza el sistema binario,
donde cada unidad son 1024 de la unidad anterior, así pues tenemos:

 1 bytes son 8 bits


 1024 bytes son 1 Kilobyte (K, KB, Kibi, KiB o Kibibyte)
 1024 K son 1 Megabyte (Mega, MB, MiB o Mebibyte)
 1024 MB son 1 Gigabyte (Giga, GB, GiB o Gibibyte)
 1024 GB son 1 Terabyte (Tera, TB, TiB o Tebibyte)
 1024 TB son 1 Petabyte (Peta, PB, PiB o Pebibyte)
 1024 PB son 1 Exabyte (EB, EiB o Exbibyte)
 1024 EB son 1 Zettabyte (ZB, ZiB o Zebibyte)
 1024 ZB son 1 Yottabyte (YB, YiB o Yobibyte)
Conceptos asociados a cada celda o
posición de memoria
 Dirección: Cada celda o  Contenido: Información
byte tiene asociada una única almacenada en una posición
dirección que indica su de memoria. La dirección es
posición relativa en memoria y permanente y única, el
mediante la cual se puede contenido puede cambiar
acceder a la posición para
mientras se ejecuta un
almacenar o recuperar
programa.
información. Siempre que se
almacena una nueva
información en una posición,
se destruye (desaparece)
cualquier información que en
ella hubiera y no se puede
recuperar.
Casillero de Hotel
Variables
 Posición con nombre en memoria donde se
almacena un valor de un cierto tipo de dato y
puede ser modificado.

 Tiene un nombre (un identificador) que describe


su propósito.
Tipos de Datos
 Enteros: Probablemente el tipo de dato más familiar.
int edad
 Reales: Números decimales.
double precio
 Caracteres: Cualquier elemento de un conjunto de caracteres
predefinidos o alfabeto: letras, dígitos, símbolos y signos de
puntuación.
char genero
 Cadenas de caracteres: Conjunto de caracteres.
string direccion
 Bool: Sus valores son verdadero (true) y falso (false). Llamado
variable lógica.
bool fuma
Tipo Descripción Valores que acepta
string Cadenas de caracteres Cualquier cadena
sbyte Byte con signo Desde -128 hasta 127
byte Byte sin de
Enteros signo
2 bytes con Desde 0 hasta 255
short signo
Enteros de 2 bytes sin Desde -32.768 hasta 32.767
ushort signo
Enteros de 4 bytes con Desde
Desde 0–2,147,483,648
hasta 65.535 hasta
int signo
Enteros de 4 bytes sin 2,147,483,647
uint signo Desde 0 hasta 4.294.967.295
Desde
–9,223,372,036,854,775,808
Enteros de 8 bytes con hasta
long signo 9,223,372,036,854,775,807
Desde 0
Enteros de 8 bytes sin Hasta
ulong signo
Caracteres Unicode 18,446,744,073,709,500,000
char de 2 bytes
Valor de coma flotante Desde 0 hasta 65,535
float de 4 bytes
Valor de coma flotante Desde 1.5E-45 hasta 3.4E+38
double de 8 bytes Desde 5E-324 hasta 1.7E+308
bool Verdadero/falso
Valor de coma flotante true ó false
decimal de 16 bytes (tiene 28- Desde 1E-28 hasta 7.9E+28
Operaciones Aritméticas
Operador Significado
+ suma
- resta
* producto
/ división
% módulo (resto de la división)
 Una expresión combina varias operaciones y devuelve un valor.

 Los operadores *, / y % tienen precedencia sobre la suma y la resta.

 Se pueden utilizar paréntesis para agrupar subexpresiones.


Ejemplos de Operaciones Aritméticas

 1
 2+2
 4 + 6/2
 (4+6) / 2 ( 3*5 + 12 ) % 7
Diagramas de Flujo
 Técnica de representación de algoritmos más antigua
y la más utilizada.

 Representación gráfica del algoritmo o proceso


(secuencia de pasos que se realizan para obtener un
cierto resultado).

 Utiliza símbolos estándar que contienen los pasos del


algoritmo y están unidos por flechas (líneas de flujo)
que indican la secuencia en que se debe ejecutar.
Simbología y Significado
 Óvalo o Elipse: Inicio y término (Abre y cierra el diagrama).

 Rectángulo: Actividad (Representa la ejecución de una o más


actividades o procedimientos).

 Rombo: Decisión (Formula una pregunta).

 Círculo: Conector (Representa el enlace de actividades con


otra dentro de un procedimiento).
Calcula el promedio de dos números

Inicio

Promedio = (Numero1 + Numero2)/2

Fin
No se leían los datos.
¿Cómo va a saber el algoritmo qué va a calcular?
Inicio

Leer Numero1
Leer Numero2

Promedio = (Numero1 + Numero2)/2

Fin
No estaban declarados los tipos de los datos.
¿Cómo va a saber el algoritmo dónde los va a guardar?
Inicio

int Numero1
int Numero2

Leer Numero1
Leer Numero2

Promedio = (Numero1 + Numero2)/2

Fin
No estaba declarado el tipo del resultado.
¿Cómo va a saber el algoritmo dónde lo va a guardar?
Inicio

int Numero1
int Numero2
double Promedio

Leer Numero1
Leer Numero2

Promedio = (Numero1 + Numero2)/2

Fin
No mostraba el resultado.

Inicio

int Numero1
int Numero2 ¡Ahora si
double Promedio
está
Leer Numero1
completo!
Leer Numero2

Promedio = (Numero1 + Numero2)/2

Mostrar Promedio

Fin
Pseudocódigo

• Lenguaje artificial e informal que ayuda a los programadores a desarrollar algoritmos.

• Conveniente y sencillo, aunque no es un lenguaje de programación real.

• Representación de un algoritmo parecida al inglés. No hay un estándar para pseudocódigo; algunas


personas utilizan muchos detalles y otras usan menos.

• Excelente herramienta para el seguimiento de la lógica de un algoritmo y para transformarlo con
facilidad a un programa.

• Los programas en pseudocódigo no se ejecutan en las computadoras, sino que sólo ayudan al
programador a “resolver” un programa antes de intentar escribirlo en un lenguaje de programación.

• Un programa en pseudocódigo cuidadosamente preparado puede convertirse fácilmente en su


correspondiente programa en un lenguaje dado. En muchos casos esto se hace mediante un simple
reemplazo de las instrucciones en pseudocódigo por su equivalente en el lenguaje en cuestión.
Componentes de Pseudocódigo

• Encabezado de Algoritmo: Cada algoritmo comienza con un encabezado que


lo nombra.
Algoritmo: Función que realiza.
• Propósito: Breve frase que explica lo que hace el algoritmo. Describe sólo el
procesamiento general, no todo el procesamiento.
Propósito: Objetivo del algoritmo.
• Entrada: Lista cualquier requisito precursor.
• Devolución: Todo algoritmo debe mostrar lo que devuelve, si no hay nada
que devolver se debe especificar una devolución nula.
• Instrucciones identadas: Más adentro o más afuera según el bloque al que
correspondan.
• Final del Algoritmo: End Función que realiza
Ejemplo

Algoritmo: Promedio de dos


Propósito: Encuentra el promedio de dos números
Entrada: Dos números
Devuelve: Un número
1.Suma los dos números
2.Divide el resultado entre 2
3.Devuelve el resultado del paso 2
End Promedio de dos
Ejemplo. Algoritmo más formal

Algoritmo: Promedio de dos


Propósito: Encuentra el promedio de dos números
Entrada: int numero1, int numero 2;
Devuelve: double promedio;
1. int suma = numero1 + numero2;
2. promedio = suma / 2;
3. Imprime promedio;
End Promedio de dos
Ejemplo. Algoritmo formal más
óptimo
Algoritmo: Promedio de dos
Propósito: Encuentra el promedio de dos números
Entrada: int numero1, int numero2;
Devuelve: double promedio;
1. promedio = (numero1 + numero2) / 2;

2. Imprime promedio;

End Promedio de dos


Algoritmo que, al recibir como datos dos
números reales, calcule la suma, resta y
multiplicación de dichos números.
Encabezado: suma, resta y multiplicación
Propósito: Diseñar un algoritmo que realice la suma, resta y
multiplicación de dos números reales

Entrada: double num1, double num2;


Salida: double suma, double, resta, double multiplicacion;

Leer num 1;
Leer num2;
suma=num1 + num2;
resta=num1 – num2;
multiplicacion= num1 * num2;

Imprimir (“El resultado de la suma es ” + suma);


Imprimir (“El resultado de la resta es ” + resta)
Imprimir (“El resultado de la multiplicación: “ + multiplicacion);

Fin: suma, resta y multiplicación


Algoritmo que, al recibir como datos el costo de un artículo vendido
y la cantidad de dinero entregada por el cliente, calcule el cambio
que se debe entregar al cliente.

Algoritmo: Cambio
Propósito: Entregar al cliente el cambio por su artículo comprado
Entrada: double precio, double pagado;
Salida: double cambio;
1. Leer costo;
2. Leer pagado;
3. cambio = pagado-precio;
4. Imprime (“El cambio del cliente es” + cambio);
Fin: Cambio
En una casa de cambio necesitan construir un programa
tal que al dar como dato una cantidad expresada en
dólares, convierta esa cantidad a pesos. El cliente tiene
suficiente dinero para pagar.

Entrada: double dolares, double tipo_de_cambio;


Salida: double conversion;
1.Imprimir (“Deme la cantidad de dólares que desea
cambiar: “);
2.Leer dolares;
3.Imprimir (“Deme el tipo de cambio actual: “);
4.Leer tipo_de_cambio;
5.conversion= dolares * tipo_de_cambio;
6.Imprimir (“Por la cantidad de dólares “ + dolares + “la
cantidad de pesos entregada es “ + conversion);
Fin: Cambio de moneda

También podría gustarte