Sunteți pe pagina 1din 40

Algoritmos y Programación

Organización
• Parte 1: Objetivos e introducción

• Parte 2: Proceso de diseño de un algoritmo

• Parte 3: El lenguaje Fortran

• Parte 4: Software de cálculo científico


Scilab
Parte 1

Objetivos e Introducción
Objetivos
 Desarrollar buenos algoritmos
 Implementar el algoritmo en el lenguaje
 Documentación
 Actualización, mantenimiento y extensión
del código
 Aplicar los conocimientos a un caso
particular

Estos puntos son imprescindibles para el desarrollo de


software, sobre todo cuando el desarrollo se hace con la
participación de varias personas que trabajan en equipo.
Introducción
• CPU (Central Procesor Unit)
• RAM (Random Access Memory -Main Memory) - ROM –
(Read Only Memory) DD (Disc Drive) – CD (Compct Disc)–
DVD (Digital Versatile Disc)– PD (Pen Drive)
• Keyboard – VDU (Visual Display Unit) - Printer

• Conceptos y definiciones básicas


• Tipos de lenguajes: sus características
• FORTRAN y Scilab: breve reseña
Conceptos y definiciones básicas
 Instrucción: orden o acción clara y precisa.
 Algoritmo: descripción precisa de una suceción de
instrucciones para realizar un trabajo en un número finito de
pasos.
 Programa: es la codificación de un algoritmo en algún
lenguaje.
 Proceso: ejecución de una o varias instrucciones en
forma secuencial.
 Variable: es un lugar de memoria donde se almacena un
dato que puede ir cambiando. Tiene los siguientes atributos:
nombre y tipo de dato. El tipo de dato delimita las
operaciones que podrán realizarse con la variable.
Tipos de lenguajes: sus características
Interprete: las líneas de programa se van
traduciendo a lenguaje de máquina una a una a
medida que el flujo del programa pasa por ellas,
esto hace más lento el proceso de ejecución. A
este grupo pertenece Scilab.

Compilado: una vez escrito el programa


fuente este es traducido al lenguaje de máquina
en bloque. A este grupo pertenece el lenguaje
FORTRAN (FORmula TRANslator). El proceso de
ejecución es rápido.
Obtención del ejecutable en un lenguaje
compilado

1) Escritura del código fuente: escribir el código utilizando


un editor.

2) Compilar: es un proceso (llevado a cabo por un programa) que


oficia de traductor entre el lenguaje de programación y el lenguaje
objeto o lenguaje de máquina. Acepta un archivo fuente (.f .for .h) y
genera un archivo objeto (.obj .mod). Consta de los siguientes pasos:
preprocesamiento, compilación y optimización, generación del código
objeto.

3) Linkeditar: es un proceso que enlaza las referencias simbólicas


entre los módulos objeto, buscando la definición de las variables o
funciones que faltan en los objetos o las librerías para producir el
programa ejecutable. Cuando encuentra la definición de un objeto
buscado la copia en el archivo resultante de salida
FORTRAN: breve reseña
FORTRAN (FORmula TRANSlator) es el primer
lenguaje científico, desarrollado en la década de 1950 y
ampliamente utilizado hasta hoy en ciencia e ingeniería.
Es un lenguaje de alto nivel, lo cual facilita la tarea del
programador al generar el código fuente (archivo de
texto o en código ASCII). Es de tipo compilado,
minimizando por ello los tiempos de ejecución.
Es un lenguaje pensado para resolver fórmulas,
contiene un gran número de funciones predefinidas que
permite escribir códigos cortos y claros, tanto para
comprender como para modificar, sobre todo si están
bien documentados
Scilab: breve reseña
Scilab fue desarrollado en el Institut National de
Recherche en Informatique et Automatique
(INRIA) y posteriormente colaboró la Ecole
Nationale de Ponts et Chaussees (ENPC).
Sus principales carácterísticas son las siguientes:
es un software para cálculo científico,
interactivo, programable, de libre uso (con la
condición de siempre hacer referencia a sus
autores) y está disponible para diferentes
plataformas: Windows, Linux, Sun, Alpha, etc. El
sitio oficial de Scilab es www.scilab.org. Allí se
encuentra información general, manuales, etc.
Parte 2

Proceso de diseño de un algoritmo


(Herramientas para extraer el algoritmo de un código existente)
Contenido
1) Fases para resolver un problema
2) Pasos para desarrollar un programa
3) Diseño estructurado programación
4) Representaciones de los algoritmos
5) Control de calidad y tipos de errores
6) Depuración y prueba
7) Documentación
Fases para resolver un problema
 Adoptar un modelo matemático
• Formulación  Elegir y/o generar el modelo numérico

 Proceso algebraico para encontrar el


• Solución conjunto solución

 Presentación de resultados para su


• Interpretación evaluación

Formulación Solución Interpretación


NOTA:

 El código se especializa en la solución


(proceso sistematizado, largo y complejo)

 Se deja al usuario la formulación y la


interpretación de resultados
(proceso creativo)
Pasos para desarrollar un programa
a) Análisis preliminar
b) El algoritmo
c) Representar el algoritmo y codificar
d) Prueba y depuración de errores
e) Documentación
f) Mantenimiento y extensión de
capacidades
a) Análisis preliminar
Es el proceso de interpretación detección y
ordenamiento de las etapas que llevan a la
resolución del problema.
Sus etapas son:
 Interpretar la esencia del problema
 Detectar los datos relevantes y necesarios (entrada)

 Identificar la información/resultados a obtener (salida)

 Análisis de las combinaciones de composiciones posibles


y/o necesarias, su orden e interrelación

 Evaluar cada planteo para asegurar la mejor solución


b) ¿Qué es un algoritmo y para que sirve?
ALGORITMO
Es la secuencia de pasos lógicos que permiten
encontrar la solución de un problema
mediante una sucesión finita de pasos.

¿Cuáles son los atributos principales de un


buen algoritmo?
 Sean suficientemente generales (prever contingencias)
 Sean claros para facilitar la comprensión, su implementación
y sus posteriores modificaciones o extensiones
 Cada paso es determinado (sin ambigüedades y sin depender
de la casualidad)
 Debe involucrar un número finito de pasos
Diseño estructurado
El diseño estructurado es una serie de reglas que
ayudan a desarrollar “buenos” algoritmos,
para obtener programas eficientes y consistentes

Diseño modular: consiste en dividir el


algoritmo (programa) en módulos o
subprogramas que se escriben y prueban por
separado. (Como las divisiones de un libro)

Diseño “Top – Down”: es un proceso efectivo


para reconocer los módulos.
Los algoritmos se componen de:

Instrucciones elementales
 Asignación
 Entrada / Salida

Estructuras de control (composiciones)


 Secuencial
 Alternativa (o decisión o bifurcación)
 Repetitiva (o iterativa o bucle)
Instrucciones elementales

• Asignación: es la instrucción fundamental, permite almacenar


información (dato) en una variable. La asignación no es una
igualdad. No son posibles asignaciones donde los tipos son
incompatibles (x = 3 significa: “guarde en x el número 3”)

• Entrada / Salida: permiten la comunicación con todo aquello


que está fuera del algoritmo, o bien a toda persona ajena a su
desarrollo, usuarios.
Entrada: permite asociar un valor a una variable desde
fuera del algoritmo.
Salida: permiten mostrar los resultados obtenidos por el
algoritmo al usuario.
Estructuras lógicas básicas
(composiciones)

• Secuencia: ejecutar instrucciones en forma


consecutiva. Se realizan una vez en el mismo lugar
del algoritmo.
• Alternativa o selección: permite decidir en función
del valor de verdad (V / F) de una expresión lógica,
habilitando la ejecución de un solo proceso en cada
caso.
• Repetitiva o iterativa: permite repetir una
composición tantas veces como sea necesario. El
número de veces debe ser finito.
• NOTA: las composiciones descriptas
pueden combinarse dependiendo de la
situación.
Pueden darse en:
un mismo nivel (una después de otra)
en forma anidada (una dentro de otra)

Todas las posibles combinaciones son


válidas.
c) Representar el algoritmo y codificar
 Diagramas: permiten especificar y representar
el algoritmo, involucra la construcción
propiamente dicha.
de llaves
de flujo
 Pseudocódigo: es un “puente” entre los
diagramas y el código fuente. Utiliza
instrucciones similares a las de un código en
lugar de los símbolos.
 Código fuente: es un archivo de texto,
escrito con las reglas de sintaxis del lenguaje de
programación
Diagrama de llaves
Principio del algoritmo: comprende las instrucciones que se
realizan por UNICA vez y al COMIENZO del algoritmo.
(inicialización de variables mediante asignaciones o instrucciones de
entrada)

Cuerpo del algoritmo: formado por las composiciones que


resuelven el nudo del problema, respetando el orden e
interrelación de la etapa de análisis.

Fin del algoritmo: comprende las instrucciones que se


realizan por UNICA vez y al FINAL del algoritmo.
(mostrar resultados mediante instrucciones de salida )
Simbología
 LLAVES: para estructuras que respeten el esquema
principio – cuerpo – final.
 CORCHETES: para composiciones secuenciales.
 “o” exclusivo: para separar posibilidades de composición
alternativa
 Intermedio INT: para composiciones secuenciales
intermedias.
 Sin acción S / A : para composiciones secuenciales vacías.
Principio del algoritmo Proceso Principio

Nombre del
Cuerpo del algoritmo
algoritmo

Fin del algoritmo Proceso Final


Diagrama de flujo
Consta de símbolos gráficos que permiten construir los
patrones lógicos del algoritmo. Permite la visualización de
la estructura global, y una evaluación de la misma.
 Composiciones secuenciales
 Expresiones lógicas de decisión
 Conexiones
 Intersecciones
 Inicio o final
 Entrada o Salida
 Conteo controlado
Pseudocódigo
Se definen palabras clave que se escriben
en imprenta mayúscula:
 Secuencia: se escribe cada instrucción en una
linea
 Alternativa:
IF / THEN / ELSE / END IF
(ELSE IF)
 Repetitiva:
DO / IF… EXIT / END DO
DO / Vc = inicia , termina , paso / END DO
Correspondencia
SECUENCIA

LLAVE FLUJO PSEUDOCÓDIGO

Tarea 1 Tarea 1 Tarea 1

Tarea 2 Tarea 2 Tarea 2

Tarea 3 Tarea 3
Tarea 3
Correspondencia
ALTERNATIVAS

LLAVE FLUJO PSEUDOCÓDIGO

Princ. Alt.
Principio alternativa
IF ( cond) THEN
V F
Cond. Tareas 1
Expresión lógica Tareas 1
ELSE
Tareas 1 Tareas 2
Tareas 2
END IF
Expresión lógica Tareas. 2

Fin Alt.
Fin alternativa
Correspondencia
REPETITIVAS

LLAVE FLUJO PSEUDOCÓDIGO

DO
Principio repetitiva V
IF (cond) EXIT
Cond.
F Tareas
Cuerpo de Tareas END DO
Repetir
(criterio repetitiva
de fin o
Cond.)

Fin repetitiva
DO
Tareas
IF (cond) EXIT

F V END DO
Cond.
Correspondencia
REPETITIVAS (cont)

FLUJO PSEUDOCÓDIGO FLUJO PSEUDOCÓDIGO

DO DO vc = in, fin, paso


V
Cond.
Tareas Tareas
V F
Cond.
IF (cond) EXIT END DO
F
Tareas

END DO
Etapas de desarrollo de programas
• Las etapas se presentan secuencialmente, si se cometen
errores estos suelen provocar que se revean pasos anteriores.
Para programas no demasiado complejos las etapas son:

(1) Análisis Diseño Pseudocódigo

Errores al tratar datos

Prueba de Compilación Código


ejecución y linkeo Fuente

Errores al compilar

Errores al ejecutar
d) Prueba y depuración de errores
Son acciones que se realizan sobre el código

Objetivo es asegurar la confiabilidad de los resultados

Se preparan lotes de datos para controlar que se estén


cubriendo todas las posibilidades
Detectar y depurar los errores.
Los errores pueden ser de los siguientes tipos:
de sintaxis (compilación) Simples de detectar y corregir

de enlace o construcción (linkeo)

en tiempo de ejecución

en la lógica Problemáticos de solucionar


e) Documentación

Comprende desde
la elección de los nombres de las variables,
comentarios en el cuerpo del código
a la escritura de manuales

MUY IMPORTANTE
DOCUMENTAR AL MAXIMO
f) Mantenimiento y extensión de
capacidades
Comprende las mejoras y actualizaciones en
la codificación
y
adicionar al código nuevas rutinas o funciones
que permitan resolver problemas con mayor
complejidad en relación a los que motivaron
el desarrollo original

Es invaluable para estas etapas contar con la máxima


documentación
Ejemplo:

Raíces de un polinomio cuadrático.


(Aplicación de fórmula de Bascara)

Elaborar un programa que permita encontrar


las raíces de polinomios cuadráticos, cuya
expresión general es:
y = a x2 + b x + c
o lineales, cuya expresión es:
y = b x +c
r = (-b ±√b2 - 4 a c)/ 2 a
Análisis Preliminar

Serán datos del programa los coeficientes: a, b y c.


Serán los resultados del programa la/las raíces: r / r1, r2
Si a=0  el polinomio es lineal
Si b≠0 tiene una raíz r = - c/b
Si b=0 no tiene raíz, la recata es paralela al eje x
Si a≠0 
b2 = b*b
rad = b2 - 4 *a*c (radicando de Bascara)
den = 2*a
Si rad =0 hay una raíz real doble
Si rad >0 hay dos raíces reales distintas
Si rad <0 hay dos raíces complejas conjugadas
Algoritmo

Leer los coeficientes del polinomio: a, b y c

Si a=0 y b≠0 la raíz es r = - c/b


Si a=0 y b=0 no hay raíz

Si a≠0 calculo b2 = b*b, rad = b2 - 4 *a*c, den = 2*a


Si rad =0: r1 = r2 = -b / den
Si rad >0 : r1 = (-b + √rad) /den y r2 = (-b - √rad) /den
S i rad <0: r1 = (-b/den ; i √rad)/den) y : r2 = (-b/den ; - i √rad)/den)
Pseudo código
Start Program
Read a,b,c
If (a==0) then # Polinomio lineal
If (b/=0) then
r = -c/b
Else
„recta paralela al eje x‟
End if
Else
b2= b*b
rad= b2 - 4*a*c
den= 2*a
IF (rad==0) then # Una raíz real doble
r1=r2= - b/den
Else if (rad>0) then # Dos raíces reales distintas
r1=(-b+SQRT(rad))/den
r2=(-b-SQRT(rad))/den
Else # Dos raíces complejas conjugadas
r1(1)= -b/den
r1(2)= +SQRT(-rad)/den
r2(1)= -b/den
r2(2)= -SQRT(-rad)/den
End If
End if
End program

S-ar putea să vă placă și