Академический Документы
Профессиональный Документы
Культура Документы
Prez
Castillo
Unidad I
Generalidades de
Algortmica
1422492
1.1 Conceptos
Algortmica y Principios de
Programacin
1.2 Aplicaciones
Elaborado
19-Febrero-2009
Presentado 20-Febrero-2009
1 Generalidades de Algortmica
La historia de la informtica seala a Abu Abdullah Muhammad bin Musa al-Khwarizmi, una de las
grandes figuras de la matemtica rabe medieval como descubridor del concepto de algoritmo.
En su obra "aljabar wa-al-muqabala" sienta las bases del algebra, cuyo nombre procede del
comienzo del ttulo, as como "algoritmo" procede del nombre del autor, al-Khwarizmi.
Al igual que los idiomas sirven de vehculo de comunicacin entre los seres humanos, existen
lenguajes que realizan la comunicacin entre los seres humanos y las computadoras. Estos
lenguajes permiten expresar los programas o el conjunto de instrucciones que el operador
humano desea que la computadora ejecute.
Los lenguajes de computadoras toman diferentes formas; los de las primeras computadoras, como
la ENIAC y la EDSAC, se componan en el lenguaje real de las mquinas mismas. La dificultad de
programar las mquinas de esta manera limitaba drsticamente su utilidad y proporcionaba un
fuerte incentivo para que se desarrollaran lenguajes de programacin ms orientados hacia la
expresin de soluciones con la notacin de los problemas mismos.
Los primeros lenguajes de programacin se conocieron como Lenguajes Ensambladores, un
ejemplo es: TRANSCODE, desarrollado para la computadora FERUT. En los lenguajes
ensambladores se define un cdigo especial llamado mnemnico para cada una de las operaciones
de la mquina y se introduce una notacin especial para especificar el dato con el cual debe
realizarse la operacin.
A mediados de los aos 60's aparecieron los primeros lenguajes de propsito general como
FORTRAN, FORTRAN IV, ALGOL, COBOL, BASIC, PL/I, ADA, C,C++, PASCAL, etc. pero el desarrollo de
nuevas tecnologas, tanto en arquitectura de computadoras como en lenguajes de programacin,
contina a paso acelerado, cada vez con mayor velocidad, el panorama est cambiando de una
etapa de sistemas y lenguajes especialmente desarrollados para aplicaciones individuales. Los
lenguajes de programacin actuales son los conocidos como Lenguajes visuales, como por ejemplo
Visual Fox, Visual Basic, Visual C .
1.1 Conceptos
Algoritmo
Un algoritmo es la expresin de una secuencia precisa de operaciones que conduce a la resolucin
de un problema.
Sistema de reglas que permiten obtener una salida especfica a partir de una entrada especfica.
Cada paso debe estar definido exactamente, de forma que pueda traducirse a lenguaje de
computadora.
Conjunto de operaciones que se utilizan para resolver un problema especfico. En este conjunto de
instrucciones se indica la secuencia de operaciones que se deben realizar para, a partir de los
datos de entrada, obtener el resultado buscado.
El concepto de algoritmo es anterior a los ordenadores, y ampliamente utilizado en el mundo de la
ciencia para la resolucin metdica de problemas. Sin embargo, con la aparicin de los
ordenadores se comprob que era una herramienta ideal, ya que cualquier algoritmo puede
transformarse en un programa informtico.
Caractersticas del algoritmo:
Tiene que ser finito (con un final), preciso (detallar el orden de las operaciones a realizar) y
unvoco (al aplicar el algoritmo a los mismos datos de entrada, siempre se obtendr el mismo
resultado a la salida).
Toda regla debe definir perfectamente la accin a desarrollar
Todos sus pasos deben ser simples y tener un orden definido.
Un Algoritmo no debe resolver un solo problema particular sino una clase de problemas.
Un Algoritmo debe ser eficiente y rpido.
Mtodos para escribir algoritmos:
Diagramas de Flujo y pseudocdigo
Programa
Un programa para ordenador es la expresin de un algoritmo en un lenguaje artificial formalizado.
Conjunto de Instrucciones que controlan el funcionamiento del ordenador con un conjunto de
caractersticas
1.2 Aplicaciones
Aplicacin de un algoritmo de Split-Window para la
estimacin de la temperatura de la superficie terrestre desde
datos AVHRR-NOAA
Estimaciones de temperatura de la superficie terrestre, en das parciales a completamente
despejados, fueron realizadas a partir de los datos proporcionados por el sensor Advanced Very
High Resolution Radiometer (AVHRR), a bordo de la serie de satlites de la National Oceanic and
Atmospheric Administration (NOAA) por aplicacin de un algoritmo basado en el mtodo de SplitWindow
Programacin
Existe una tendencia a identificar el proceso de creacin de un programa informtico con la
programacin, que es cierta cuando se trata de programas pequeos para uso personal, y que
dista de la realidad cuando se trata de grandes proyectos.
El proceso de creacin de software, desde el punto de vista de la ingeniera, incluye los siguientes
pasos:
1. Reconocer la necesidad de un programa para solucionar un problema o identificar la
posibilidad de automatizacin de una tarea.
2. Recoger los requisitos del programa. Debe quedar claro qu es lo que debe hacer el
programa y para qu se necesita.
3. Realizar el anlisis de los requisitos del programa. Debe quedar claro cmo debe realizar el
programa las cosas que debe hacer. Las pruebas que comprueben la validez del programa
se pueden especificar en esta fase.
4. Disear la arquitectura del programa. Se debe descomponer el programa en partes de
complejidad abordable.
Ingeniera de software
Es la disciplina o rea de la informtica que ofrece mtodos y tcnicas para desarrollar y mantener
software de calidad.
Esta ingeniera trata con reas muy diversas de la informtica y de las Ciencias de la Computacin,
tales como construccin de compiladores, Sistemas Operativos, o desarrollos Intranet/Internet,
abordando todas las fases del ciclo de vida del desarrollo de cualquier tipo de Sistema de
Informacin y aplicables a infinidad de reas (negocios, investigacin cientfica, medicina,
produccin, logstica, banca, control de trfico, meteorologa, derecho, Internet, Intranet, etc.).
Una definicin precisa an no ha sido contemplada en los diccionarios, sin embargo se pueden
citar las enunciadas por algunos de los ms prestigiosos autores:
1 - Ingeniera de Software es el estudio de los principios y metodologas para el desarrollo
y mantenimiento de sistemas software (Zelkovitz, 1978)
2 - Ingeniera de software es la aplicacin prctica del conocimiento cientfico al diseo y
construccin de programas de computadora y a la documentacin asociada requerida
para desarrollar, operar y mantenerlos. Se conoce tambin como Desarrollo de Software o
Produccin de Software ( Bohem, 1976).
3 - Ingeniera de Software trata del establecimiento de los principios y mtodos de la
ingeniera a fin de obtener software de modo rentable, que sea fiable y trabaje en
mquinas reales (Bauer, 1972).
4 - Es la aplicacin de un enfoque sistemtico, disciplinado y cuantificable al desarrollo,
operacin y mantenimiento del software; es decir, la aplicacin de la ingeniera al
software (IEEE, 1993).
1.4 Formalidades
Los algoritmos pueden ser expresados de muchas maneras, incluyendo al lenguaje natural,
pseudocdigo, diagramas de flujo y lenguajes de programacin entre otros.
Las descripciones en lenguaje natural tienden a ser ambiguas y extensas.
El usar pseudocdigo y diagramas de flujo evita muchas ambigedades del lenguaje natural.
Dichas expresiones son formas ms estructuradas para representar algoritmos; no obstante, se
mantienen independientes de un lenguaje de programacin especfico.
Estructura general de un algoritmo
Algoritmo <nombre_del_algoritmo>
Inicio
definicin de constantes
declaracin de variables
Sentencia 1
Sentencia 2
.
.
.
Sentencia n
Fin
La descripcin de un algoritmo usualmente se hace en tres niveles:
1. Descripcin de alto nivel. Se establece el problema, se selecciona un modelo matemtico y
se explica el algoritmo de manera verbal, posiblemente con ilustraciones y omitiendo
detalles.
2. Descripcin formal. Se usa pseudocdigo para describir la secuencia de pasos que
encuentran la solucin.
3. Implementacin. Se muestra el algoritmo expresado en un lenguaje de programacin
especfico o algn objeto capaz de llevar a cabo instrucciones.
Tambin es posible incluir un teorema que demuestre que el algoritmo es correcto, un anlisis de
complejidad o ambos.
Diagrama de flujo que expresa un algoritmo para calcular la raz cuadrada de un nmero x
Diagramas de Flujo
Los diagramas de flujo son descripciones grficas de algoritmos; usan smbolos conectados con
flechas para indicar la secuencia de instrucciones y estn regidos por ISO.
Los diagramas de flujo son usados para representar algoritmos pequeos, ya que abarcan mucho
espacio y su construccin es laboriosa.
Por su facilidad de lectura son usados como introduccin a los algoritmos, descripcin de un
lenguaje y descripcin de procesos a personas ajenas a la computacin.
Pseudocdigo es la descripcin de un algoritmo que asemeja a un lenguaje de programacin pero
con algunas convenciones del lenguaje natural.
Tiene varias ventajas con respecto a los diagramas de flujo, entre las que se destaca el poco
espacio que se requiere para representar instrucciones complejas.
Pseudocdigo
El pseudocdigo no est regido por ningn estndar. pseudo viene de falso y por ende es un
cdigo al que aunque es entendible no se aplica al proceso que debe realizar la maquina.
Mquina de Turing
La mquina de Turing es un modelo matemtico, diseado por Alan Turing, que formaliza el
concepto de algoritmo. A este modelo se le refiere comnmente como la "descripcin de ms bajo
nivel" por el hecho de que no utiliza ninguna expresin coloquial.
Implementacin
Muchos algoritmos son ideados para implementarse en un programa.
Sin embargo, los algoritmos pueden ser implementados en otros medios, como una red neuronal,
un circuito elctrico o un aparato mecnico.
Algunos algoritmos inclusive se disean especialmente para implementarse usando lpiz y papel.
El algoritmo de multiplicacin tradicional, el algoritmo de Euclides, la criba de Eratstenes y
muchas formas de resolver la raz cuadrada son slo algunos ejemplos.
63
}
64
return sb.toString();
65
}
66
/**
67
* Codifica
68
* Se leen 3 bytes y se obtiene la cadenas de texto de 4 caracteres
69
* @param sInputFilePath La ruta de binario
70
* @return String codificacin del archivo
71
*/
72
public static String encodeBinaryData(String sInputFilePath){
73
String sBase64Data = "";
//codificada
74
java.io.BufferedInputStream bis = null; //lectura
75
StringBuilder strb = new StringBuilder();//escritura
76
try{
77
bis = new java.io.BufferedInputStream(
78
new java.io.FileInputStream(sInputFilePath)
79
);
80
int iReadBytes = 0;
81
byte data[] = new byte[3];
/*82-85*/
85
while( (iReadBytes = bis.read(data, 0,3)) != -1){
86
strb.append( Base64Encoder.encodeBase64(data, iReadBytes) );
87
//System.out.println("Escribe:"+strb);
88
}
89
sBase64Data = strb.toString();
90
}catch(Exception ex){
91
sBase64Data = null;
92
System.out.println( ex.getMessage() );
93
}finally{
94
try {
95
if (bis != null) bis.close();
96
} catch (java.io.IOException ex) {
97
System.out.println( ex.getMessage() );
98
}
99
}
100
return sBase64Data;
101
}
102
103 }
104
105
Bibliografa
The Art of Computer Programming, Knuth, D. E. [quien fue tambin, el creador del TeX]
Introduction to Algorithms (2nd ed), Cormen, T. H., Leiserson, C. E., Rivest, R. L. y Stein, C.
Tirso de Andrs, Homo Cybersapiens. La Inteligencia artificial y la humana, 2002, ISBN 84313-1982-8
Luis M Gonzalo, Inteligencia Humana e Inteligencia Artificial, Madrid, 1987. ISBN 84-7118490-7
http://www.javamexico.com/blogs/gabo/algoritmo_para_aplicar_base64