Algoritmos y Resolución de Problemas
Algoritmos y Resolución de Problemas
2023 Lic. Ariel Ferreira Szpiniak 1 2023 Lic. Ariel Ferreira Szpiniak 2
Problemas
Pasos para solucionar un problema Pasos para solucionar un problema
Problema
Análisis
• El objetivo del análisis es entender el problema a resolver.
• Análisis • El problema debe estar bien definido para poder obtener una solución satisfactoria.
El problema debe ser claramente especificado y entendido . Especificación: datos, • Los datos de entrada y los resultados deben ser precisamente descriptos.
resultados
• Diseño
Construcción de una solución general del problema. Preguntas orientadoras
Datos de entrada: ¿Cuáles y cuántos son los valores de entrada? ¿Qué nombre significativo
• Implementación Algoritmo
puedo darle a esos datos?
Traducción del algoritmo a un lenguaje de programación de Dibujo o esquema que permita entender mejor el problema
alto nivel.
Programa fuente
• Compilación Resultados (salida): ¿Cuáles y cuántos son los valores del resultado? ¿Qué nombre significativo
Traducción del programa a un lenguaje entendido por la puedo darle a esos resultados?
computadora. Programa ejecutable
• Ejecución y Prueba Relaciones o subproblemas: en caso de existir, describir las relaciones existentes entre los
Corrida y prueba de funcionamiento del programa en la Solución datos, los resultados u otra información adicional que sea necesaria para la resolución del
computadora. problema. O suproblemas en caso de ser un problema más complejo.
2023 Lic. Ariel Ferreira Szpiniak 3 2023 Lic. Ariel Ferreira Szpiniak 4
Pasos para solucionar un problema Problemas
Análisis (cont.) Pasos para solucionar un problema
Problema
Podemos dividir el análisis en dos etapas:
Etapa 1: se analiza el problema libremente y se trata de lograr una síntesis • Análisis
El problema debe ser claramente especificado y entendido . Especificación: datos,
del problema a resolver. resultados
• Diseño
Construcción de una solución general del problema.
Etapa 2: luego de tener en claro el problema a resolver se tratan de • Implementación Algoritmo
identificar los datos de entrada, los resultados y las relaciones que puedan Traducción del algoritmo a un lenguaje de programación de
existir entre datos, resultados u otros componentes del problema. Al alto nivel.
Programa fuente
finalizar la Etapa 2 se debe obtener lo siguiente: • Compilación
Traducción del programa a un lenguaje entendido por la
computadora. Programa ejecutable
• Dato/s:
• Resultado/s: • Ejecución y Prueba
Corrida y prueba de funcionamiento del programa en la Solución
• Relaciones o subproblemas:
computadora.
2023 Lic. Ariel Ferreira Szpiniak 5 2023 Lic. Ariel Ferreira Szpiniak 6
2023 Lic. Ariel Ferreira Szpiniak 7 2023 Lic. Ariel Ferreira Szpiniak 8
Noción de Algoritmo Noción de Algoritmo
Acción, Entorno y Procesador Acciones primitivas y descomposición
Consideremos los siguientes enunciados:
En los enunciados E1 y E2 hemos supuesto que el procesador
E1: 1/2 docena de huevos revueltos E2: Cálculo de la media de dos números sabía ejecutar las acciones enumeradas. En ese caso las
con una calculadora acciones se denominan primitivas.
a) Romper seis huevos en un plato;
b) Batir la clara y la yema con un tenedor; a) pulsar C ;
Definición: para un procesador dado, una acción es primitiva
c) Calentar el aceite en una sartén al fuego;
b) teclear el primer número; si el enunciado de dicha acción es suficiente para poder
d) Cuando el aceite esté caliente, verter el
contenido del plato;
c) pulsar + ; ejecutarla sin información suplementaria.
e) Sacar la sartén del fuego cuando el d) teclear el segundo número;
revuelto esté cocido. e) pulsar % ; Si una acción no es primitiva debe ser descompuesta en dos o
f) teclear 2; más acciones primitivas.
g) pulsar = . {Aparece el resultado}
Definición: descomponer una acción -no primitiva- es
encontrar una serie de acciones primitivas que realicen lo
requerido por dicha acción.
2023 Lic. Ariel Ferreira Szpiniak 9 2023 Lic. Ariel Ferreira Szpiniak 10
2023 Lic. Ariel Ferreira Szpiniak 11 2023 Lic. Ariel Ferreira Szpiniak 12
Noción de Algoritmo Noción de Algoritmo
Entorno de trabajo, variable y tipo Entorno de trabajo, variable y tipo
Variable
Entorno de trabajo Definición: son datos que tienen la posibilidad de cambiar su valor.
Ejemplo: saldo
Definición: el entorno de trabajo es el espacio donde conviven los
distintos utensilios que pueden ser usados por el procesador para Constante
ejecutar las acciones primitivas. El procesador modifica el entorno Definición: son datos que no pueden cambiar su valor.
de trabajo mediante la ejecución de las acciones. Ejemplo: mesesDelAnio = 12
Dato Tipo
Definición: un dato es la representación de un objeto del mundo Definición: es un conjunto de valores posibles que se encuentran
real mediante el cual podemos modelar aspectos del problema que ligados a un conjunto de operaciones para crearlos y manipularlos. Todo
dato, tanto constante como variable, debe pertenecer a un tipo.
se quiere resolver. Son los valores de información de los que se
necesita disponer y en ocasiones transformar. Ejemplos: saldo Z (saldo pertenece a Entero). mesesDelAnio=12 Z
(mesesDelAnio es igual a 21 y pertenece a Entero)
2023 Lic. Ariel Ferreira Szpiniak 13 2023 Lic. Ariel Ferreira Szpiniak 14
2023 Lic. Ariel Ferreira Szpiniak 15 2023 Lic. Ariel Ferreira Szpiniak 16
Noción de Algoritmo Significado de la Noción de Algoritmo Significado de
asignación la asignación
Una asignación x e es ejecutada siguiendo estos
• Al producirse la asignación el valor anterior se pierde.
pasos:
• La ocurrencia de una variable en el lado derecho de una
1. Se evalúa la expresión e asignación denota su valor actual.
• Una misma variable puede aparecer en la parte izquierda y
2. Se reemplaza el valor almacenado en la variable x, por
derecha de una asignación.
el valor de e.
Por ejemplo: x1
x e { x=X0 ^ X0=eval(e) }
¿Qué valor tiene x aquí?
2023 Lic. Ariel Ferreira Szpiniak 17 2023 Lic. Ariel Ferreira Szpiniak 18
Algoritmo Algoritmo
Definición Definición (cont.)
Algoritmo: del árabe al-Jwarizmi, matemático del siglo IX
Definición 1: Un algoritmo es una sucesión finita de
instrucciones o pasos no ambiguos que se pueden ejecutar
Características:
en un tiempo finito para resolver un problema.
• Debe ser preciso e indicar el orden de realización de cada
paso.
Definición 2: Dado un procesador, un entorno de trabajo y un • Se debe obtener el mismo resultado cada vez que se aplica a
tratamiento a ejecutar por dicho procesador sobre ese entorno, los mismo datos.
un algoritmo es el enunciado de una secuencia finita de • Se debe terminar en algún momento.
acciones que resuelve un problema determinado.
En la vida cotidiana empleamos algoritmos en multitud de
ocasiones. También existen ejemplos de índole matemática
(algoritmo de la división, Euclides, Gauss, Valor Medio, etc.)
2023 Lic. Ariel Ferreira Szpiniak 19 2023 Lic. Ariel Ferreira Szpiniak 20
Algoritmo Notación Algorítmica
Estructura y Notación Acciones conocidas por el Procesador
2023 Lic. Ariel Ferreira Szpiniak 21 2023 Lic. Ariel Ferreira Szpiniak 22
a x+1 a x+y
// a contiene la suma de x más 1 // a contiene la suma de x e y
Salida:a Salida:a
Fin Fin
2023 Lic. Ariel Ferreira Szpiniak 23 2023 Lic. Ariel Ferreira Szpiniak 24
Pasos para solucionar un problema Problemas
Implementación Pasos para solucionar un problema
Es la traducción del algoritmo a un lenguaje entendido por la computadora. ¿Qué lenguaje Problema
entiende la computadora?
• Análisis
Código binario Bajo nivel Alto nivel Bloques
El problema debe ser claramente especificado y entendido . Especificación: datos,
01100001 01110110 ADD ECX, R9D if username == user1: resultados
01100001 01101110
01111010 01100001
ADD ECX, R8D
ADD ECX, EDX
print "Access granted"
elif username == user2:
• Diseño
MOVD XMM0, ECX
CVTDQ2PD XMM0, XMM0 print "Welcome" Construcción de una solución general del problema.
MOVSD XMM1, realVal else:
print "Access denied" • Implementación Algoritmo
Traducción del algoritmo a un lenguaje de programación de
Implementar consiste en traducir el algoritmo a un lenguaje de alto nivel.
programación de alto nivel (C, BASIC, COBOL, Pascal, Java, Programa fuente
PHP, C++, FORTRAN, Perl, Pyton, Ruby). Pero hay muchos • Compilación
lenguajes, por lo tanto pueden haber varios programas que Traducción del programa a un lenguaje entendido por la
computadora. Programa ejecutable
solucionen el mismo problema resuelto por un algoritmo.
• Ejecución y Prueba
Corrida y prueba de funcionamiento del programa en la Solución
La gran ventaja de los lenguajes de alto nivel es que consiguen distanciarse del
lenguaje máquina y se aproximan al lenguaje algorítmico. computadora.
2023 Lic. Ariel Ferreira Szpiniak 25 2023 Lic. Ariel Ferreira Szpiniak 26
2023 Lic. Ariel Ferreira Szpiniak 29 2023 Lic. Ariel Ferreira Szpiniak 30
Problemas
Pasos para solucionar un problema Pasos para solucionar un problema
Compilación Problema
Compilador (y depurador) on line para C y C++
www.onlinegdb.com/online_c_compiler • Análisis
El problema debe ser claramente especificado y entendido . Especificación: datos,
resultados
• Diseño
Construcción de una solución general del problema.
• Implementación Algoritmo
Traducción del algoritmo a un lenguaje de programación de
alto nivel.
Programa fuente
• Compilación
Traducción del programa a un lenguaje entendido por la
computadora. Programa ejecutable
• Ejecución y Prueba
Corrida y prueba de funcionamiento del programa en la Solución
computadora.
2023 Lic. Ariel Ferreira Szpiniak 31 2023 Lic. Ariel Ferreira Szpiniak 32
Pasos para solucionar un problema Pasos para solucionar un problema
Ejecución y Prueba Ejecución y Prueba
• Ejecutar (o “correr”) el resultado de la compilación, es decir, el Si compilo el programa holaMundo.c de la siguiente manera:
programa ejecutable.
gcc holaMundo.c (compila el programa holaMundo.c, y genera un
• Cuando se ejecuta un programa, la computadora (el sistema archivo ejecutable llamado a.out)
operativo) crea un proceso donde pone a funcionar ese programa.
- Procesamiento de datos de entrada. Lo ejecuto así: ./a.out
- Detección de errores semánticos.
Si compilo el programa holaMundo.c de la siguiente manera:
• Prueba o Testeo
- Probar el programa con una serie de valores de
gcc -o holaMundo holaMundo.c (compila el programa holaMundo.c, y
entrada y verificar que produce el resultado
genera un archivo ejecutable llamado holaMundo)
esperado en todos los casos.
Lo ejecuto así: ./holaMundo
2023 Lic. Ariel Ferreira Szpiniak 33 2023 Lic. Ariel Ferreira Szpiniak 34
Ejemplo Ejemplo
Programa Fuente en C Programa Assembler
.section .bss
# [1] int k,l,m
.lcomm _K,2
int k, l, m; .lcomm _L,2
int k, l, m; .lcomm _M,2
.comm HEAP,262144#
void main(){ [3] void main(){
void main(){ .globl _main
l = 3; _main:
l = 3; .globl CMAIN
m = 5; CMAIN:
m = 5; .globl program_init
k = l + m; program_init:
k = l + m; pushl %ebp
} movl %esp,%ebp
} movb $1,U_SYSWIN32_ISCONSOLE
call FPC_INITIALIZEUNITS
# [4] l=3;
movw $3,_L
# [5] m=5;
movw $5,_M
# [6] k=l+m;
movswl _L,%eax
movswl _M,%edx
addl %eax,%edx
movw %dx,_K
# [7] }
2023 Lic. Ariel Ferreira Szpiniak 35 2023 Lic. Ariel Ferreira Szpiniak 36
Ejemplo Ejemplo
Programa Objeto Programa Ejecutable
Archivo visto a
través de un editor
de texto.
2023 Lic. Ariel Ferreira Szpiniak 37 2023 Lic. Ariel Ferreira Szpiniak 38
2023 Lic. Ariel Ferreira Szpiniak 39 2023 Lic. Ariel Ferreira Szpiniak 40
Pasos para solucionar un problema Pasos para solucionar un problema
Diseño Implementación
Traducción del algoritmo a C (lenguaje que utilizaremos en la
Algoritmo AreaBaldosa asignatura)
Léxico
#include <stdio.h>
lado Z+ // variable dato /* léxico */
int lado;
areaCuad Z+ // variable resultado
int areaCuad;
Inicio
/* función principal (main) en todo programa C */
Entrada:lado void main(){
areaCuad lado * lado scanf("%d",&lado); // dir de memoria de la var lado
areaCuad = lado * lado;
Salida:areaCuad printf("%d",areaCuad );
Fin /* otra forma: printf("El area es: %d \n",areaCuad );* /
}
2023 Lic. Ariel Ferreira Szpiniak 41 2023 Lic. Ariel Ferreira Szpiniak 42
2023 Lic. Ariel Ferreira Szpiniak 43 2023 Lic. Ariel Ferreira Szpiniak 44
Ejemplo de problema más complejo Ejemplo de problema más complejo
Doña Rosa tiene un patio de forma rectangular y quiere cubrirlo con cerámicos
cuadrados. ¿Puedes ayudarla a calcular cuántos cerámicos necesitará? Doña Rosa tiene un patio de forma rectangular y quiere cubrirlo con
cerámicos cuadrados. ¿Puedes ayudarla a calcular cuántos cerámicos
Análisis (cont)
necesitará?
Etapa 2 (identificar los datos de entrada, los resultados y las relaciones o
Diseño
subproblemas):
Etapa 1 (definir el entorno de trabajo o léxico: tipos y variables)
●
Dato: Largo y ancho del patio. Son números. Nombres: largoPatio y anchoPatio.
Lado del cerámico. Es un número. Nombre: ladoCeramico.
ladoCeramico R+ // dato de entrada
• Resultado: cantidad de cerámicos. Es un número. Nombre: cantCeramicos. largoPatio R+ // dato de entrada
• Relaciones o subproblemas: anchoPatio R+ // dato de entrada
- Calcular el área del patio (areaPatio) areaPatio R+ // intermedio
areaCeramico R+ // intermedio
- Calcular el área de un cerámico (areaCeramico) cantCeramicos R+ // resultado
- Calcular la cantidad de cerámicos: cantCeramicos es igual a areaPatio dividido
areaCeramico
2023 Lic. Ariel Ferreira Szpiniak 45 2023 Lic. Ariel Ferreira Szpiniak 46
2023 Lic. Ariel Ferreira Szpiniak 47 2023 Lic. Ariel Ferreira Szpiniak 48
Ejemplo de problema más complejo Ejemplo de problema más complejo
Traducción del algoritmo a C Compilación (gcc -o patio patio.c)
#include <stdio.h>
/* léxico */
float ladoCeramico, largoPatio, anchoPatio, areaPatio,
areaCeramico, cantCeramicos;
2023 Lic. Ariel Ferreira Szpiniak 49 2023 Lic. Ariel Ferreira Szpiniak 50
• Análisis
El problema debe ser claramente especificado y entendido . Especificación: datos,
resultados
• Diseño
Construcción de una solución general del problema.
• Implementación Algoritmo
Traducción del algoritmo a un lenguaje de programación de
alto nivel.
Programa fuente
• Compilación
Traducción del programa a un lenguaje entendido por la
computadora. Programa ejecutable
• Ejecución y Prueba
Corrida y prueba de funcionamiento del programa en la Solución
computadora.
2023 Lic. Ariel Ferreira Szpiniak 51 2023 Lic. Ariel Ferreira Szpiniak 52
Computadora Componentes
Definición: Máquina capaz de aceptar
datos a través de un medio de entrada, HW SW
procesarlos automáticamente bajo el
control de un programa y proporcionar la Base (S.O.)
DOS, UNIX, Windows,
información resultante a través de un MAC, etc.
medio de salida. Unidad Central de Proceso
Aplicación
Utilitarios
Unidad de Memoria
Entrada Computadora Salida Lenguajes de
programación
Dispositivos de Entrada/Salida Esparcimiento
Educativos
Otros
2023 Lic. Ariel Ferreira Szpiniak 53 2023 Lic. Ariel Ferreira Szpiniak 54
HW HW
Unidad Central de Proceso Unidad de Memoria
(UCP/CPU) Memoria principal (o primaria):
• Conjunto de celdas de memoria direccionables vía un único
Controla el procesamiento de la información nombre
• Acceso directo por referencia para:
Unidad de Control: - Carga
• Carga instrucciones en memoria - Recuperación de información
• Interpreta y devuelve el resultado de la ejecución • Programas residen en este tipo de memoria al ser ejecutados
2023 Lic. Ariel Ferreira Szpiniak 55 2023 Lic. Ariel Ferreira Szpiniak 56
HW
Dispositivos de Entrada/Salida HW
(Input/Output) Modelo Refinado de Computadora
Los dispositivos de E/S permiten la comunicación ente el usuario
y el computador.
Mem UCP
Dispositivos de entrada: Dispositivos de entrada/salida:
• Teclados
• Placa de red E S
• Ratón
• Lectores de disco • Modem
UC UAL
• etc.
• Placa de sonido
Dispositivos de salida: • etc.
• Impresoras
• Pantalla
• etc.
2023 Lic. Ariel Ferreira Szpiniak 57 2023 Lic. Ariel Ferreira Szpiniak 58
SW SW
Lenguajes de Programación Instrucciones para la computadora
Tipos de instrucciones ejecutadas por una computadora:
• de E/S: lectura/escritura de información • Contenido de memoria expresado en bits (dígitos binarios)
• Ciclo: Repetición de una secuencia de instrucciones computador (por ej., diferentes máquinas pueden representar
las instrucciones con códigos diferentes)
• Procedimiento: Grupo de instrucciones que pueden ser
referenciadas y ejecutadas
2023 Lic. Ariel Ferreira Szpiniak 59 2023 Lic. Ariel Ferreira Szpiniak 60
SW SW
Lenguajes de bajo nivel Ejemplo de lenguaje Assembler
Lenguajes con un pobre nivel de abstracción, en el sentido
de que sus instrucciones se asemejan mucho a las de ...
máquina lealU_SYSWIN32_OUTPUT,%edi
movl %edi,-4(%ebp)
Ejemplo: Lenguaje de Ensamblado (Assembler) pushl $.L7
pushl -4(%ebp)
• En este tipo de lenguajes las instrucciones son pushl $0
nombradas call FPC_WRITE_TEXT_SHORTSTR
por códigos mnemotécnicos. pushl -4(%ebp)
Por ejemplo: ADD, SUB, MPY, DIV, etc. call FPC_WRITELN_END
pushl $.L4
• Las instrucciones son traducidas a código de máquina call FPC_IOCHECK
mediante un ensamblador. ...
2023 Lic. Ariel Ferreira Szpiniak 61 2023 Lic. Ariel Ferreira Szpiniak 62
SW SW
Lenguajes de alto nivel Lenguaje C
• Lenguaje de alto nivel que usaremos en la materia.
• Lenguajes con un mayor nivel de abstracción, en el sentido
de que sus instrucciones asemejan al lenguaje natural. • Fue creado en 1972 por Dennis Ritchie, en los Laboratorios Bell, como
evolución del lenguaje B.
• Pueden ser independientes de la máquina. Por lo tanto,
pueden ser traducidos a distintos lenguajes de máquina. • En 1983 el Instituto de Estándares Americanos estableció un estándar
que definiera al lenguaje C, conocido como ANSI C.
2023 Lic. Ariel Ferreira Szpiniak 63 2023 Lic. Ariel Ferreira Szpiniak 64
SW SW
Ejemplo de un programa C Características de un buen programa
Este programa muestra por pantalla el mensaje “Hola mundo”.
• Confiabilidad
#include <stdio.h>
2023 Lic. Ariel Ferreira Szpiniak 65 2023 Lic. Ariel Ferreira Szpiniak 66
2023 Lic. Ariel Ferreira Szpiniak 67 2023 Lic. Ariel Ferreira Szpiniak 68
Citar/Atribuir: Ferreira, Szpiniak, A. (2023) Teoría 1: Introducción.
Introducción a la Algorítmica y Programación (3300). Departamento de Computación.
Facultad de Cs. Exactas, Fco-Qcas y Naturales. Universidad Nacional de Río Cuarto.
Compartir Igual: Si usted mezcla, transforma o crea nuevo material a partir de esta obra,
usted podrá distribuir su contribución siempre que utilice la misma licencia que la obra original.
Este material está bajo una Licencia Creative Commons Atribución-CompartirIgual 4.0 Internacional