Está en la página 1de 41

Universidad Autónoma de Nuevo León

Facultad de Ingeniería Mecánica y Eléctrica

Actividad Fundamental #1
Algoritmos simples y Fundamentos de la complejidad computacional
Semestre Enero-Junio 2022

Docente: Ing. Selene Guadalupe Pinal Gómez

Marti Yudith López Sanchez 1739118


EQUIPO 4 Gerson Alejandro Ochoa Banda 1801185
Jorge Isaac De León Pérez 1932783
Ángel Ricardo Sanchez Hernández 1948834
UNIDAD DE APRENDIZAJE: Jesús Alberto Cruz Torres 1954170
Algoritmos Computacionales Ana Laura Durán Ramírez 1969975
Eleanor Michelle Alarcon Torres 1994606
HORA: Martes N1-N3 Franco García Gutiérrez 1997731
INTRODUCCIÓN
En esta presentación se hablara sobre las dos unidades temáticas de la
unidad de aprendizaje de algoritmos computacionales, hablaremos
principalmente de lo que son los algoritmos asi como tambien
describiendo los conceptos que van de la mano con este tema, como lo
son el pseudocódigo, las variables y constantes, temas que se utilizan
mucho en la programación, así como también mencionaremos a los
diagramas de flujo. Por otra parte en la unidad temática dos
abordaremos temas relacionados a la computación, como lo son el
hardware y el software, así como también de cómo se aplican los
algoritmos, y por último se mostrarán algunos ejemplos de los
algoritmos, el cual es nuestro tema principal.
Algoritmos Simples
ALGORITMOS COMPUTACIONALES
Los algoritmos son instrucciones bien definidas que se dan en un orden lógico, las cuales

permiten un número ordenado de acciones. El área de los algoritmos computacionales es uno de

los de mayor investigación dentro de un conjunto de ciencias como las matemáticas, la

informática y otras ramas que en su conjunto se denominan ciencias de la computación.

En este sentido, los algoritmos computacionales pueden entenderse de una manera detallada y

escrita entre personas, pero en el caso de las computadoras es necesario desarrollar dichos

algoritmos en un lenguaje que estos lo puedan interpretar. A raíz de esto se desarrollan los

lenguajes de programación.

Por otra parte, se tiene al pseudocódigo, es un tipo de lenguaje abstracto que puede ser escrito e

interpretado con independencia del lenguaje de programación. Se utilizan para poder expresar de

manera detallada las acciones a llevar a cabo por un algoritmo computacional.


Tipos
Algoritmos cualitativos

Son sencillos algoritmos muy detallados y escritos en lenguaje convencional (cómo el


castellano o el inglés), los cuales sirven como árboles de proceso para organizar la
información sobre algún tema en específico.

Pueden ser utilizados como método de planificación y diseño de algoritmos mucho


más complejos, tales como los computacionales o los cuantitativos.

Algoritmos cuantitativos

Este tipo de algoritmos utiliza solamente lenguaje matemático para expresar los
procesos y cuestiones dentro del algoritmo. Normalmente es utilizado para ordenar
procesos matemáticos de cálculo como ecuaciones largas o de resultado diverso.
Algoritmos computacionales:

Se puede diferenciar estos algoritmos de los cuantitativos pues usan


el pseudocódigo como lenguaje. Debido a esto, aprovechan tanto
cálculos matemáticos como escritura de programación para obtener
el máximo detalle del significado de cada parte del algoritmo, y es
debido a su misma complejidad que es necesario el uso de un
computador para su creación o entendimiento.

Algoritmos no computacionales

Este tipo de algoritmos son de escritura bastante sencilla y fluida,


por lo que no necesita del uso de computadores para su escritura o
lectura, que solo requiere de herramientas menos avanzadas como
calculadoras convencionales.
Alcances
Un alcance es una región de un programa de tamaño
máximo en que los enlaces no cambian (o al menos
ninguno es destruido). Típicamente un alcance el es
cuerpo de un módulo, una clase, una subrutina o
un enunciado de control de flujo estructurado a
veces llamado bloque. Se usa simplemente alcance
para hacer referencia a la región de un programa en la
que un nombre o una asociación tiene validez.
Aplicaciones
Joyanes Aguilar señala que los algoritmos sirven para escribir
programas que permitan la comunicación usuario/máquina. Un
buen ejemplo es un editor de textos que permite la escritura y
edición de documentos. Los programas que realizan tareas
concretas; nóminas, contabilidad, análisis estadístico, etc., se
denominan programas de aplicación. Peter Norton, en su libro
titulado Introducción a la Computación, menciona que programar
es una manera de enviar instrucciones a la computadora. Para estar
seguros de que la computadora (y otros programadores) pueden
entender esas instrucciones, los programadores usan lenguajes
definidos para comunicarse.
PSEUDOCÓDIGO

Es una forma de expresar los distintos


pasos que va a realizar un programa,
de la forma más parecida a un lenguaje
de programación.

Su principal función es la de
representar por pasos la solución a un
problema o algoritmo, de la forma más
detallada posible, utilizando un
lenguaje cercano al de programación.
Características del Pseudocódigo

❏ Representar un método que facilita la programación


y solución del algoritmo del programa.
❏ Ser una forma de representación, fácil de utilizar y de
manipular, que simplifica el paso del programa, al
lenguaje de programación.
❏ Independencia al código en el que se va a escribir el
programa, proporcionando un método que facilita la
posterior programación y la resolución del algoritmo
del programa.
Ventajas del Pseudocódigo

● Permite representar de forma fácil operaciones repetitivas


complejas.
● Ocupan menos espacio en el desarrollo del problema
● Es más sencillo pasar el pseudocódigo a un lenguaje de
programación formal.
● Si se siguen las reglas de identificación se puede observar
claramente los niveles en la estructura del programa
● Mejora la claridad de la solución de un problema
Desventajas del Pseudocódigo

● Puede ser muy difícil de entender si el problema es


muy extenso
● No todos usamos las mismas syntaxis para
referirnos al desarrollo del mismo problema
● No usa las reglas de un determinado programa
● La lógica no es la misma de un individuo a otro
● Las instrucciones no siempre tienen un orden claro
Estructura del Pseudocódigo
● Comienza con la palabra clave Proceso o Algoritmo seguida del nombre
del programa.
● Le sigue una secuencia de instrucciones. Una secuencia de instrucciones
es una lista de una o más instrucciones y/o estructuras de control.
● Finaliza con la palabra FinProceso (o FinAlgoritmo).
● La indentación no es significativo, pero se recomienda para que el código
sea más legible.
● No se diferencia entre mayúsculas y minúsculas. Preferible las
minúsculas, aunque a veces se añaden automáticamente los nombres
con la primera letra en mayúsculas.
VARIABLES
Una variable en programación es un elemento de datos cuyo valor puede cambiar durante el curso de la
ejecución de un programa. El nombre de la variable debe seguir el convenio de denominación de un identificador
(carácter alfabético o número y el signo de subrayado). Cuando se define más de una variable en una sola
declaración, el nombre debe ir separado por comas. Cada declaración de variable debe finalizar con un signo de
punto y coma. Los nombres de variables no pueden coincidir con una palabra reservada
¿Para qué sirven las variables?

En primera instancia, se puede decir


que una variable funciona tanto para
guardar datos, así como para asignar y
representar valores en una expresión de
programación. Sin embargo, el objetivo
principal de una variable en
programación es facilitar la tarea del
programador.
Características de una variable

1. Asignación de memoria: Cuando definimos qué es una variable de programación, hicimos


énfasis en que es un elemento del coding para guardar información, como valores y datos. En la
programación, la computadora le asigna a la variable una posición en su memoria, en función al
tipo de datos que almacene la misma.

2. Declaración: Cuando hablamos de cómo declarar una variable, nos referimos a asignarle un
nombre y un tipo; de esta manera, el sistema le podrá otorgar una abstracción de la memoria para
almacenar los datos y su valor.

3. Alcance: Según las características de las variables en programación, por medio del alcance se
podrá determinar hasta dónde se puede leer o manipular la información o el valor de una variable.
Tipos de variables
1. Numérica

Un ejemplo de variables de programación son las numéricas en las que, tal como su nombre lo indica, podemos almacenar
números. No necesitas agregar comillas, sólo el dígito. Asimismo, si quieres guardar números decimales, solo necesitas
utilizar el punto (.) entre los números enteros y los fraccionados, ya que hay lenguajes de programación en que las comas (,)
se usan para añadir otros datos a la variable.

2. Cadena de texto

En el caso de una variable en programación que almacena texto, este necesita estar entre comillas. Pueden ser comillas
simples o dobles, pero se recomienda el uso de las sencillas, porque hay momentos en los que las comillas dobles no se
pueden utilizar.

★ Existen dos tipos de cadena de texto: cadena de longitud fija y cadena de longitud variable. En la primera, se estipula
cuántos caracteres va a contener, mientras que la segunda no define la extensión.
3. Booleana

Este término se refiere a un valor lógico, que, en el caso de la programación, representa la dicotomía de verdadero y falso.
Usualmente, para representar este valor se coloca “true” o “false”, haciendo alusión en inglés a verdadero y falso,
respectivamente.

4. Elementos HTML

También, puedes utilizar una variable en programación para seleccionar elementos dentro del HTML de tu programa o
aplicación. Solo necesitas colocarles un identificador (id). Además, en el caso de Javascript, necesitas utilizar un selector
para asignar los elementos a la variable. Esto último, depende del lenguaje de programación y el software que utilices

5. Arreglos

Un arreglo es, básicamente, una variable donde puedes almacenar más de un elemento, incluyendo otras variables. Solo
necesitas redactar la lista entre corchetes [ ] y separar cada elemento con una coma..
6. Objetos

Es muy similar a la anterior; La diferencia es que se va a colocar entre llaves { } y dentro de esta se
pueden agregar propiedades y valores. Por ejemplo, {color: verde}, en el cual color corresponde a la
propiedad y verde al valor.

7. Funciones

Dentro de la disciplina de la programación web, una función se define como una forma en que los
algoritmos y expresiones se agrupan en códigos simbólicos para determinar acciones. En este caso,
para ejecutar la variable se necesita colocar la palabra reservada function(){}.
CONSTANTES
Una constante, en programación, se define como un valor fijo que un programa no puede modificar

mientras se está ejecutando. A estos valores fijos también se les conoce como literales. Se trata como

una variable común, excepto que su valor no puede alterarse después que se haya definido.

Las constantes pueden tener cualquiera de los tipos de datos básicos, como una constante entera,

flotante, carácter o cadena de caracteres.

Es igual a una variable en su declaración y en la capacidad de poder mirar el valor que tiene

almacenado dentro de ella. Sin embargo, no se puede cambiar su valor mientras el programa está en

ejecución.
Tipos de constantes
•– Boolean el tipo de datos booleano solo puede tener uno de los
dos valores siguientes: 0 (Falso) y 1 (Verdadero).

•– Entero un literal entero es una secuencia de dígitos. Puede ser


una constante decimal, octal o hexadecimal.

•– Punto flotante una constante de punto flotante es un número que


está compuesto por una parte entera, un punto decimal y una parte
fraccionaria.

•– Cadena de caracteres una cadena de caracteres contiene un


conjunto de caracteres con las características del tipo carácter. Las
constantes de cadena de caracteres están entre comillas dobles “”.
SECUENCIA, DECISIÓN, ITERACIÓN

También conocido como estructura secuencial, es aquella en la que una instrucción o acción sigue a otra en
secuencia. En este tipo de programación se presentan operaciones de inicio a fin, inicialización de variables,
operaciones de asignación, cálculo, sumarización, entre otras.

Las sentencias de decisión o también llamadas de CONTROL DE FLUJO son estructuras de control que realizan
una pregunta la cual retorna verdadero o falso (evalúa una condicion) y selecciona la siguiente instrucción a ejecutar
dependiendo la respuesta o resultado.

La iteración es el acto de repetir un proceso, para generar una secuencia de resultados (posiblemente ilimitada), con
el objetivo de acercarse a un propósito o resultado deseado. En el contexto de las matemáticas o la informática, la
iteración (junto con la técnica relacionada de recursión) es un bloque de construcción estándar de algoritmos.
DIAGRAMAS DE FLUJO

★ Un diagrama de flujo es una forma visual que nos


permite representar un algoritmo o proceso. A partir
de esto el diagrama de flujo se puede utilizar en
diferentes elementos y conexiones, así permitiendo
representar un algoritmo de forma visual,
estructurada y organizada.
★ Su representación gráfica se da a partir de figuras
donde cada una representa un paso a seguir y
estas formas se conectan a través de líneas y
flechas que sirven para hacer un proceso fluido y
en orden
Los elementos de un diagrama son:

➢ Inicio y final: Es la forma en la cual se indica el “inicio del proceso” y “final del proceso”. Su
icono suele ser un rectángulo con las esquinas redondeadas.

➢ Asignación/ definición: Permite asignar un valor o definir una variable, son los procesos o
actividades que se necesitan para resolver el problema. En este caso, suele estar
representado con un rectángulo.

➢ Datos de entrada o de salida: Representa la impresión de datos en la salida. Se


representa con un recuadro con las esquinas inclinadas y una flecha hacia fuera.
➢ Proceso: Representa cualquier tipo de operación

➢ Decisión: Indica que des del punto que nos encontramos, puede haber más de un camino
para seguir, según la condición dada. En este caso se usa un rombo.

➢ Línea o flechas del flujo: Indica la instrucción que se va a realizar, o la dirección del flujo
del proceso.
Fundamentos de la complejidad
computacional
TÉCNICAS DE ANÁLISIS Y DISEÑO DE ALGORITMOS
Existen varias técnicas de diseño de algoritmos que permiten desarrollar la solución al problema planteado, algunas de ellas son:

Algoritmo divide y vencerás: El método está basado en la resolución recursiva de un problema dividiéndolo en dos o más subproblemas de igual tipo o

similar.

Algoritmos voraces (greedy): seleccionan los elementos más prometedores del conjunto de candidatos hasta encontrar una solución. En la mayoría

de los casos la solución no es óptima.

Algoritmos paralelos: permiten la división de un problema en subproblemas de forma que se puedan ejecutar de forma simultánea en varios

procesadores.

Algoritmos probabilísticos: algunos de los pasos de este tipo de algoritmos están en función de valores pseudoaleatorios

Algoritmos determinísticos: El comportamiento del algoritmo es lineal: cada paso del algoritmo tiene únicamente un paso sucesor y otro antecesor.

Algoritmos no determinísticos: El comportamiento del algoritmo tiene forma de árbol y a cada paso del algoritmo puede bifurcarse a cualquier número

de pasos inmediatamente posteriores, además todas las ramas se ejecutan simultáneamente.


¿Como se hace un análisis de algoritmos?
Definición o análisis del problema: consiste en el estudio detallado del problema. Se debe identificar los datos de
entrada, de salida y la descripción del problema.

Diseño del algoritmo: que describe la secuencia ordenada de pasos que conduce a la solución de un problema
dado: algoritmo.

Transformación del algoritmo en un programa (codificación): Se expresa el algoritmo como un programa en un


lenguaje de programación.

Ejecución y validación del programa.


NATURALEZA DE PROBLEMAS DE ALGORITMOS
La complejidad algorítmica es una medida que evalúa el orden del recuento de operaciones , realizado por un
determinado algoritmo o en función del tamaño de los datos de entrada. Es una aproximación del número de pasos
necesarios para ejecutar un algoritmo.

La teoría de la complejidad computacional es la rama de las Ciencias de la Computación que estudia y clasifica a los
problemas de acuerdo a su complejidad inherente.

El análisis de algoritmos busca determinar la cantidad de recursos que emplea un algoritmo, mientras que la Teoría de la
Complejidad intenta caracterizar a todos los posibles algoritmos para resolver un problema dado
· Clasificándolos por objetivo a cumplir identificamos al menos en tres tipos:

❏ De decisión: son aquellos que sólo admiten como resultado un valor de veracidad (true
o false, sí o no). suelen aparecer en cuestiones matemáticas
❏ Problemas funcionales o «Function problems» (búsqueda de resultados): son
aquellos que proponen encontrar una solución específica (si existe) para el planteo
dado. están estrechamente relacionados con problemas de funcionales.
❏ Problemas de optimización: A diferencia de los problemas de decisión, para los
cuales solo hay una respuesta correcta para cada entrada, los problemas de
optimización tienen que ver con encontrar la mejor respuesta para una entrada en
particular.
IMPLEMENTACIÓN HARDWARE/SOFTWARE

● En el contexto de software o aplicación de hardware, la implementación abarca todos los procesos de post – venta
que participan en algo y funcionan en su entorno, incluidos los requisitos de análisis, instalación, configuración,
personalización, hacer funcionar, pruebas, integraciones de sistemas, formación de usuarios, entrega y hacer los
cambios necesarios.

● El proceso de implementación normalmente engloba


componentes de software en todas las capas y en todos los
niveles de servicios de infraestructura necesarios para poder
utilizar una solución de software.
● Las tareas de implementación se agrupan en dos etapas: diseño
de la implementación e implementación de despliegue.
Diseño de implementación. Se crea una arquitectura de implementación general seguida de las
especificaciones de implementación detalladas. En esta fase se llevan a cabo las tareas:
● Diseñar la arquitectura sobre cómo los bloques lógicos se añadirán a los componentes
físicos.
● Describir las especificaciones de implementación con las que se cuentan.
● Diseñar el plan de implementación
Implementación de despliegue. Consiste en llevar a la prácitca la planeación o diseño de la
implementación. En esta fase se realizan las siguientes tareas
● Configurar el hardware
● Instalar, actualizar y migrar los componentes del software a implementar.
● Configurar y personalizar el sistema de acuerdo a las necesidades de quien lo vaya a
utilizar.
● Desarrollar servicios e integrarlos a otras aplicaciones (si es que es necesario)
● Usar el sistema en un ambiente de pruebas (prototipos y pilotos)
● Pasar a ambiente de producción (implementación definitiva)
NOTACIÓN COMPLEJIDAD ASINTÓTICA

La notación asintótica vendría siendo la manera, o el lenguaje


que analiza la ejecución de un algoritmo, es decir cuanto tiempo
tarda este en ejecutarse, ya que si a un algoritmo se le brindan
demasiados datos de entrada este tardará más tiempo en
ejecutarse y se volverá más lento.
Para calcular el tiempo que tarda la computadora es la que
realiza ese trabajo de una forma interna, esto a través de algunas
funciones las cuales determinan cuantos datos de entrada se
brindaron y así suponer cuánto tardará en ejecutar.
Algunos ejemplos de funciones que utilizan las notaciones:
● Función logarítmica - log n
● Función lineal - an + b
● Función cuadrática - an^2 + bn + c
● Función polinómicas - an^z + . . . + an^2 + a*n^1 + a*n^0, donde z es
constante
● Función exponencial - a^n, donde a es constante
Representación
gráfica de lo que
realiza una notación
asintótica
EJEMPLOS DE ALGORITMOS

Algoritmo 1: Programa que calcule el área de un


triángulo e imprima dicha área.
1. Inicio
2. Escribir “Ingresa la base del triángulo”
3. Leer b
4. Escribir “Ingresa la altura del triángulo”
5. Leer h
6. Realizar la operación A=(b*h)/2
7. Imprimir el área del triángulo
8. Fin
Algoritmo 2: Ingresar dos números y luego mostrar por mensaje
cuál es el mayor.

1. Inicio
2. Escribir “Ingresa un número”
3. Leer n1
4. Escribir “Ingresa otro numero”
5. Leer n2
6. Si n1>n2
7. Imprimir “El numero mayor es”+n1
8. Sí no
9. Imprimir “El numero mayor es”+n2
10. Fin
Algoritmo 3: Algoritmo que permita ingresar el número de partidos ganados, perdidos y
empatados, por algún equipo en el torneo de apertura, se debe de mostrar su puntaje total,
teniendo en cuenta que por cada partido ganado obtendrá 3 puntos, empatado 1 punto y
perdido 0 puntos.

1. Inicio
2. Escribir “Ingresa los partidos ganados”
3. Leer PG
4. Escribir “Ingresa los partidos empatados”
5. Leer PE
6. Escribir “Ingresa los partidos perdidos”
7. Leer PP
8. PPG= PG*3
9. PPE=PE*1
10. PT=PPG+PPE
11. Imprimir “El total de puntos es de”+PT
12. Fin
Algoritmo 4: Algoritmo que solicite la edad de 2 hermanos y muestre un mensaje
indicando la edad del mayor y cuantos años tiene de diferencia tiene con el menor.

1. Inicio
2. Escribir “Edad del primer hermano”
3. Leer E1
4. Escribir “Edad del segundo hermano”
5. Leer E2
6. Si E1>E2
7. DE=E1-E2
8. Imprimir “El primer hermano con edad de”+E1+ “es mayor por” +DE+ “años”
9. Sí no
10. DE=E2-E1
11. Imprimir “El segundo hermano con edad de”+E2+ “es mayor por”+DE+ “años”
12. Fin
CONCLUSIÓN
Los temas que presentamos son temas de los cuales hicimos
investigación y como lo pudimos notar el tema principal fue el algoritmo
donde se explicó que son los algoritmos y también vimos los tipos de
estos, así como también vimos cómo representar los algoritmos en un
lenguaje de programación y también en forma de diagramas. También
mencionamos las variables y constantes las cuales ayudan al algoritmo
a funcionar.

En conclusión un algoritmo es una serie de pasos para llegar a un fin o


resultado, introduciendo ya sea uno o varios datos de entrada y este nos
devuelva una salida.
FUENTES BIBLIOGRÁFICAS
Aplicatta. (s. f.). Implementación de software. Applicatta. http://applicatta.cl/index.php/soluciones/metodologia-applicatta/implementacion-de-software
Oracle. (s. f.). Implementación (Descripción general técnica de Sun Java Enterprise System 5). Oracle Docs.
https://docs.oracle.com/cd/E19528-01/820-0888/aaucr/index.html
Urrutia, D. (2021, 5 agosto). Qué es Implementación - Definición, significado y ejemplos. Arimetrics.
https://www.arimetrics.com/glosario-digital/implementacion

Prather, J. P. (2022). Learn X in Y Minutes: Scenic Programming Language Tours. Aprende X en Y minutos. Recuperado 17 de febrero de 2022, de

https://learnxinyminutes.com/docs/es-es/asymptotic-notation-es/#:%7E:text=Las%20notaciones%20asint%C3%B3ticas%20son%20lenguajes,de%20

crecimiento%20de%20un%20algoritmo

Computer, D. C. S., Cormen, T. C., & Balkcom, D. B. (s. f.). Notación asintótica (artículo) | Algoritmos. Khan Academy. Recuperado 17 de febrero de

2022, de https://es.khanacademy.org/computing/computer-science/algorithms/asymptotic-notation/a/asymptotic-notation

Epitech Escuela Superior de Informatica. (06 de Mayo de 2021). Diagrama de flujo en programacion

También podría gustarte