Problemas, algoritmos y
programas
Fundamentos básicos;
Lenguajes de alto y bajo nivel;
Paradigmas de programación;
Herramientas para la resolución de problemas.
Introducción a la programación
Resolución de un problema:
1. Definición o análisis del problema
2. Diseño del algoritmo
3. Transformación del algoritmo en un programa
4. Ejecución y validación del programa
Problema Algoritmo Programa
Resolución de un problema
Análisis del problema Diseño de un algoritmo Resolución del problema
con el ordenador
Análisis del problema
Definición del problema Especificaciones de entrada Especificaciones de salida
Diseño de un algoritmo
Diseño descendente Refinamiento por pasos Herramientas de
programación
Resolución del problema
con ordenador
Codificación del Ejecución del programa Validación del
programa programa
Ejemplo de diseño descendente
Cuadrado perfecto: número cuya raíz cuadrada es un número entero.
Algoritmo
Conjunto finito de especificaciones (reglas, sentencias, operaciones,
instrucciones,... ) que describen un proceso de resolución objetivo para un
determinado problema. Dichas especificaciones actúan sobre un conjunto de
datos de entrada (ejemplar) generando un conjunto de datos de salida que
describen una solución del problema en cuestión.
OJO: La especificación de un algoritmo se debe hacer de manera independiente
de los computadores y de los lenguajes de programación.
Origen del término: traducción al latín de un trabajo del matemático persa
Muhammad ibn Musa al-Khwarizmi publicado en el s. IX.
Algoritmos
Características: Partes:
Preciso Entrada
Definido Proceso
Finito Salida
Eficiente Especificaciones de salida:
¿Cuáles son los datos de
Especificaciones de salida?
entrada: ¿Cuántos datos de salida se
¿Qué datos son de producirán?
entrada? ¿Qué precisión tendrán los
¿Cuántos datos se resultados?
introducirán? ¿Se debe imprimir una
¿Cuántos son datos de cabecera?
entrada válidos?
Programa
Secuencia de instrucciones especificadas en un
lenguaje de programación, cada una especifica
las operaciones que el computador debe
realizar para resolver un problema. Por tanto,
un programa es una implementación concreta
(en un lenguaje de programación y
computador determinados) de un algoritmo.
Descripción de un algoritmo
Diagrama de flujo
Seudocódigo
Diagrama de flujo
Entrada/ no
Terminal Proceso Salida Decisión
si
Conector
Decisión Indicador Linea distinta pag.
Conector
múltiple de dirección conectora
Proceso Proceso
impresora teclado pantalla
predefinido manual
Seudocódigo
Empieza con Inicio y termina con Fin
Comentario en una línea precedido con //
Leer(<lista_de_variables>)
Operador asignación ←: <nombre_de_variable> ← <expresión>
Escribir(''Cadena de texto'', <lista_de_expresiones>)
Tipos de instrucciones
Instrucciones Condicionales
Condicional múltiple
Instrucciones repetitivas
Sentencias Repetitivas
Instrucciones repetitivas
Ejemplo
Var
//Datos de entrada
numero : real;
//Datos de salida
suma : real;
Inicio
suma ← 0; // se inicializa a cero, por ser la variable que acumula el resultado
Escribir(“Introduce los números a sumar. 0 para acabar”) ;
Leer(numero) ; //La primera lectura de datos se hace fuera del bucle
mientras (numero != 0) hacer
suma ← suma + numero ; // suma tiene como nuevo valor asociado el resultado
que almacenaba anteriormente sumado con el nuevo número leído
Escribir(“Introduce el siguiente número") ;
Leer(numero) ;
FinMientras
Escribir(“El resultado de la suma es”, suma) ;
Fin
Ejemplo
Var
//Datos de entrada
numero : real;
//Datos de salida
suma : real;
Inicio
suma ← 0;
hacer
Escribir(“Introduce los números a sumar. 0 para acabar”) ;
Leer(numero) ;
suma ← suma + numero;
mientras (numero != 0) ;
Escribir(“El resultado de la suma es”, suma) ;
Fin
Documentación de código
• Documentación y Normas de estilo:
– Comentarios
– Indentación
– Expresiones
– Líneas en blanco
– Selección de identificadores
Comentarios
• Objetivos:
– Facilitar el depurado y el mantenimiento del software
– No permitir que pasado un tiempo el código que hemos
desarrollado se transforme en un extraño
• Tipos de comentarios:
– Comentarios de directorio: Son comentarios que se sitúan al
principio de los ficheros que componen un programa. La
información que se coloca en cada fichero es:
• Nombre del programa
• Autor
• Fecha de realización y de las posteriores modificaciones
(opcional el historial de las modificaciones que se hacen:
quién, en qué fecha y porqué se hacen)
• Finalidad o descripción del programa
• Descripción de las variables de entrada y/o salida globales
Comentarios
• Comentarios prólogo:
– Son los comentarios que han de acompañar a cada subprograma.
Se colocan antes de su declaración. Debe figurar al menos:
• Finalidad del subprograma
• Indicaciones generales de cómo trabaja y
• Un comentario para cada variables que se le pasan como
parámetros de entrada/salida
• Comentarios explicatorios:
– Son los comentarios que se insertan en el código para explicar
aquellas partes del mismo cuya finalidad no es obvia con su simple
lectura. Situados a la derecha del código. Se debe comentar el
porqué y no qué se hace. Ej:
a = a + 1; //Se suma 1 al valor de a
Es inútil mejor:
//contador de las veces que se da la situación
Indentación y Expresiones
• Colocar un espacio a ambos lados de un operador binario a = b + c;
• Colocar un espacio siempre después de las comas o puntos y comas
• No se colocan espacios en blanco después de un paréntesis abierto ni antes
de uno cerrado
• Usar paréntesis para resolver ambigüedades y dividir expresiones
complejas
• En general las reglas de escritura de textos que no son programas
Selección de identificadores
• Nombres significativos: Mejor: velocidad = espacio
* tiempo ; que v = e * t ; Hacer uso de las
abreviaturas. No válido: Numero_de_columnas o
nc válido: numcols o cols
• Usualmente nombres descriptivos para variables
globales y cortos para variables locales. Por
costumbre:
– Contadores para los bucles: i, j, k
– Matrices: A, B, C
– Strings: s, t
– Punteros: p, q
– Nombres activos para funciones (verbo más
opcionalmente sustantivo)
Herramientas de programación
• Construcción de una aplicación
– Edición
– Compilación y enlazado
– Make y makefiles
• Depuración
– GNU Debugger (GDB)
– Valgrind