Professional Documents
Culture Documents
Qu es la informtica?
Ciencias de la Computacin se define de diferentes maneras por
diferentes autores.
Wikipedia (http://en.wikipedia.org/wiki / Computer_science) define la
informtica como la conjunto de una variedad de disciplinas relacionadas
con la informtica, tanto terica como prctica: fundamentos tericos de
la informacin y la computacin, teora de lenguajes, anlisis y el
desarrollo de algoritmos, la implementacin de sistemas de computacin,
grficos por computadora, bases de datos, comunicaciones de datos, etc.
La Oficina Nacional de Coordinacin de los EE.UU. para Desarrollo y la
investigacin de redes y tecnologa de la informacin (NITRD) define la
informtica en una forma amplia de manera similar:
El estudio sistemtico de la informtica y los sistemas de
cmputo. El cuerpo de los conocimientos resultantes de esta
disciplina contiene teoras para la comprensin de los
sistemas de computacin y mtodos; diseo de la metodologa,
algoritmos, herramientas y mtodos para el ensayo de
conceptos, mtodos de anlisis y verificacin, y la
representacin del conocimiento y la aplicacin.
(http://www.nitrd.gov/pubs/bluebooks/1995/section.5.html)
Otra definicin amplia viene de la Association for Computing Machinery
(ACM) modelo de plan de estudios. Se dice que la informtica es el
"estudio de las computadoras y los procesos algortmicos, incluidos sus
principios, su hardware y software de diseo, sus aplicaciones y su
impacto en la sociedad ".
Una famosa definicin de la informtica por Gibbs y Tucker (Gibbs y
Tucker, "Un modelo de programa de estudios para un Licenciado en Artes
Liberales en Ciencias de la Computacin ", Com. de la ACM, vol. 29, no.
3, marzo de 1986) hace hincapi en la anlisis y elaboracin de
algoritmos como el eje central de la informtica.
Tambin es justo preguntar, "Cmo la informtica es una ciencia?" En
contraste con la fsica, la biologa, y qumica, ciencias de la
computacin no se basa en el estudio del mundo natural. En ese sentido,
la informtica es
ms que las matemticas como ciencia. Algunos
sostienen que la informtica es realmente arte de la computadora (donde
"el arte" significa prctica). Por otro lado, los cientficos utilizan
el mtodo cientfico para proponer y probar hiptesis, y algunos
descubrimientos muy no-obvios en ciencias de la computacin tienen
importantes consecuencias en el mundo real.
Un ejemplo, que se discutir ms tarde, es el descubrimiento de que
algunos problemas importantes simplemente no pueden ser resueltos
por computacin.
A pesar de las muchas variaciones, esencialmente todas las definiciones
de la informtica hacen hincapi en el estudio de los algoritmos.
da
Cruz
Jones
Figura
1-4
Ada
Lovelace
(http://www-groups.dcs.st-and.ac.uk/
historia / PictDisplay / Lovelace.html).
Figure 1-5 Hollerrith Tabulator & Sorter, photograph IBM Corporate Archives
Figure 1-7 The Aiden/IBM Mark 1 Computer installed at Harvard, photograph IBM Corporate Archives.
Una de las personas que han trabajado con Aiken en la Mark I era de
Grace Murray Hopper, un recin encargado teniente en los EE.UU. la
Reserva Naval. Hopper ha participado con la programacin de la Mark I
desde el principio. Uno de sus ms importantes contribuciones al campo
de la computacin fue el concepto de un compilador. Hopper fue
preocupado por el error-plagado naturaleza del cdigo escrito, y ha
desarrollado una pieza de software que se traducira un conjunto de
instrucciones del programador, escrita en un alto nivel de lenguaje
simblico, en la mquina del lenguaje. El primer compilador desarrollado
por Hopper fue nombrado A-0, y fue escrito en 1952. Gracia Murray Hopper
es tambin acreditado como la persona que acu el trmino "bug".
Durante el verano de 1947, la computadora Mark II, su sucesor en el Mark
I, estaba actuando extraamente. A veces se producen la correcta
respuesta, y otras veces el mismo programa que producir resultados
errneos. Hopper localizar el problema a un rel defectuoso en el
equipo. Cuando se examin fsicamente el rel para corregir el problema,
ella descubri que una polilla haba sido atrapado en el rel, causando
fallos en el funcionamiento. Una vez eliminado la polilla del rel, la
mquina funcion con normalidad. El "error" fue grabado en una pgina
del bloc de notas de laboratorio con la inscripcin "En primer lugar
real de error encontrado."
Figura
1-8
El
primer
equipo
de
error
(http://www.history.navy.mil/photos/images/h96000/h96566kc.htm).
Despus de la Segunda Guerra Mundial termin, los aliados descubrieron
que Konard Zuse, un ingeniero alemn, ha sido el desarrollo de
computadoras para su uso por los alemanes. Zuse del primer equipo, el
Z1, fue construido entre 1936 y 1938. El mquina que figuran todas las
partes de un computadora moderno, sin embargo, no era fiable. Su
construccin mecnica es muy complejo y propenso a errores. Zuse la Z3
fue
el
primer
programa
completamente
funcional
controlada
por
computadora en el mundo.
El Z3 se termin en 1941 y antes de Aiken Mark I. Zuse 's logros son an
ms increble dado el material y la escasez de trabajadores en Alemania
durante la Segunda Guerra Mundial. Zuse ni siquiera pudo obtener la
cinta de papel, por lo que tuvo que hacer su propia perforacin de
agujeros en la pelcula de cine descartado. Zuse tambin invent lo que
podra ser el primero de alto nivel de lenguaje de computadora,
"Plankalkul", aunque, tambin, era desconocido fuera de Alemania.
La labor realizada por el cdigo de breakers en Bletchley Park (entre
Londres y Birmingham, UK) durante la Segunda Guerra Mundial los aliados
siempre con la informacin que result, literalmente, la marea de la
guerra. Computadoraes desempeado un papel fundamental en la labor de
los breakers y cdigo hecho posible para ellos para romper el Enigma
Lorenz
y
los
algoritmos
de
cifrado.
Colossus,
un
computadora
desarrollado en Bletchley Park para romper sistemas de cifrado, empez a
funcionar
en
1943.
Colossus
fue
uno
de
los
primeros
grandes
computadoraes de emplear tubos de vaco, y fue capaz de leer
la informacin almacenada en cinta de papel a una tasa de 5000
caracteres
por
segundo.
Colossus
tambin
figura
limitada
programabilidad.
Cuando los aliados invadieron el norte de frica en 1942, descubrieron
en
que
el
despertador
suena
casa para el trabajo o la escuela.
hasta
que
salga
de
la
de programacin de
con
los
medios
Capitulo 2
ALGORITMOS
Definicin de un algoritmo
Un algoritmo es un mtodo para resolver una clase de problemas. Si bien
la computadora cientficos piensan mucho acerca de algoritmos, el
trmino se aplica a cualquier mtodo de resolver un determinado tipo de
problema. La reparacin manual de su automvil se describe un
procedimiento, que tambin podra ser llamado un algoritmo, para la
sustitucin de las zapatas del freno. El paso a paso de viaje
instrucciones de MapQuest que podra llamarse un algoritmo para llegar
de un lugar a otro.
Ejemplo-el diseo de una escalera
Usted puede ser sorprendido, como lo fuimos nosotros, saber que cada
escalera debe ser diseado para adaptarse a las circunstancias
de elevacin total (total de "lugar") y el total de medida horizontal
(total
"Ejecutar").
Figura
2-1
muestra
estas
dimensiones.
Si usted busca la web, usted puede encontrar mtodos de algoritmos para
el diseo de escaleras.
Para hacer encajar las escaleras de una persona natural de andar, la
relacin de cada uno de los pasos del lugar (altura de elevacin) y su
plazo (horizontal distancia) deben ser coherentes con una frmula.
Algunos dicen que la siguiente frmula debe ser satisfecho:
(* lugar 2) + run = de 25 a 27 pulgadas
Otros dicen que la siguiente frmula ms sencilla funciona bien:
lugar run = + 17 a 18 pulgadas
Muchos dicen que el lugar ideal para cada paso es de 7, pero algunos
dicen que las medidas al aire libre debe ser 6 en alto porque la gente
es ms probable que se transporten cargas pesadas fuera. En cualquier
caso, para cualquier situacin particular, el aumento total de
la escalera probablemente no ser un mltiplo de 6 o 7 pulgadas Por lo
tanto,
el
aumento
de
cada
paso
debe
ser
alterado
para
crear
toda
una
serie
de
medidas.
Estas normas conducen a un procedimiento para el diseo de una escalera.
Nuestro algoritmo para el diseo de un conjunto de escaleras sern los
siguientes:
1 Divida el total por el lugar 7 en ronda y el resultado al nmero
entero
ms
cercano
para
obtener
el
nmero
de
pasos.
2 A continuacin, dividir el total por ejecutar (el nmero de pasos - 1)
(ver
Fig.
2-1)
para
calcular
la
duracin
de
cada
paso.
3 Vamos a aplicar una de las frmulas para ver cmo cerrar este par de
lugar
y
ejecutar
los
parmetros
es
el
ideal.
4 A continuacin, vamos a completar el mismo los clculos con un paso
ms
y
menos
un
paso,
y
tambin
calcular
el
valores de la frmula de las combinaciones de lugar y plazo.
5 Vamos a aceptar la combinacin de lugar y ejecutar que mejor se adapte
a
la
frmula
para
el
ideal.
Un algoritmo es una forma de resolver un tipo de problema, y un
algoritmo
es
aplicable
a
muchos
particular
de los casos el problema. Un buen algoritmo es una herramienta que puede
ser utilizado una y otra vez, como es el caso de nuestro
algoritmo de diseo de escalera.
Ejemplo-encontrar
el
mximo
comn
denominador
En matemticas, un exitoso y famoso algoritmo til es el algoritmo de
Euclides
para
encontrar
el
mayor
comn divisor (GCD) de dos nmeros. El GCD es el mayor entero que se
dividen
por
igual
los
dos
nmeros
en cuestin. Euclides describe su algoritmo de alrededor de 300 AEC.
Sin tener el algoritmo de Euclides, cmo encontrar una la GCD de 372 y
84?
Uno
tendra
que
factor
los dos nmeros, y encontrar el mayor factor comn. Como los nmeros en
cuestin
convertido
en
ms
y
ms
grandes,
Caracterizacin
de
ALGORITMOS
Para ilustrar cmo los diferentes algoritmos pueden tener diferentes
caractersticas
de
rendimiento,
vamos
a
discutir
una
variedad de algoritmos de computadora que los cientficos han desarrollado para
resolver
problemas
comunes
en
la
informtica.
Secuencial
de
bsqueda
Supongamos que uno es contar con una lista de las personas en la clase, y es
una
pregunta
para
buscar
el
nombre
Debbie
Drawe. Una bsqueda secuencial es una "fuerza bruta" un algoritmo que puede
utilizar.
Con
una
bsqueda
secuencial,
la
simplemente algoritmo compara cada uno de los nombres en la lista con el nombre
de
la
que
estamos
buscando.
La
bsqueda
termina
cuando
el algoritmo encuentra un nombre correspondiente, o cuando el algoritmo ha
inspeccionado
todos
los
nombres
en
la
lista.
Aqu est pseudocdigo para la bsqueda secuencial. La doble barra "/ /" indica
un
comentario.
Tenga
en
cuenta,
tambin, la manera en que usamos la variable ndice para referirse a un
elemento
particular
en
list_of_names.
Por
ejemplo,
list_of_names [3] es el tercer nombre en la lista.
ANLISIS DE ALGORITMOS
Si sabemos cunto tiempo toma cada declaracin a ejecutar, y sabemos
cmo
son
muchos
los
nombres
en
la
lista,
que
puede calcular el tiempo necesario para el algoritmo a ejecutar. Sin
embargo,
lo
importante
a
saber
sobre
un
algoritmo usualmente no es cunto tiempo tomar para resolver cualquier
problema
en
particular.
Lo
importante
a
saber
es
la forma en que el tiempo necesario para resolver el problema varan
segn
el
tamao
del
problema
de
los
cambios.
El algoritmo de bsqueda secuencial llevar ms tiempo ya que el nmero
de
comparaciones
se
convierte
en
mayor.
El
real
trabajo del algoritmo es en comparar a cada nombre el nombre de la
bsqueda. La mayora de los otros estados en el algoritmo de obtener
ejecutado slo una vez, pero siempre y cuando la condicin, mientras que
sigue siendo cierto, las comparaciones se producen una y otra vez.
Si el nombre que estamos buscando est en la lista, en promedio, el
algoritmo
tendr
que
buscar
en
la
mitad
de
los
nombres
en la lista antes de encontrar un partido. Si el nombre que est
buscando
no
est
en
la
lista,
el
algoritmo
tendr
que
ver
todos
los
nombres
en
la
lista.
Si la lista es el doble de largo, aproximadamente el doble de las
comparaciones ser necesario. Si la lista es de un milln de
veces ms largo, aproximadamente un milln de veces ms comparaciones
ser
necesario.
En
ese
caso,
el
tiempo
dedicado
a las declaraciones ejecutado slo una vez se convertirn en
insignificantes con respecto al plazo de ejecucin global. El
tiempo de ejecucin de la algoritmo de bsqueda secuencial crece en
proporcin
al
tamao
de
la
lista
registrada.
Nosotros decimos que la "orden de crecimiento" del algoritmo de bsqueda
secuencial
es
n.
La
notacin
de
esto
es
T
(n).
Nosotros
tambin decir que un algoritmo cuyo orden de crecimiento es constante en
algunos de los factores T (n), tiene una NL theta de decir.
"La bsqueda secuencial tiene una theta de n." El tamao del problema es
n,
la
longitud
de
la
lista
registrada.
Desde
que
para los grandes problemas que el tiempo-una-slo una-o-pocas veces-slo
hacer
declaraciones
poca
diferencia,
que
ignorar
los
constante o casi constante de los tiempos y simplemente centrarse en el
hecho
de
que
el
tiempo
crecer
en
proporcin
a
la
longitud
de
la
lista
registrada.
Por supuesto, para cualquier bsqueda, el tiempo necesario depender de
que
en
la
lista
del
partido
se
produce.
Si el primer nombre es una coincidencia, entonces no importa cunto
tiempo es la lista. Si el nombre no se da en la lista, la
buscar siempre la comparacin de exigir el nombre de la bsqueda con
todos
los
nombres
en
la
lista.
Nos dicen que el algoritmo de bsqueda secuencial es (n) porque en el
caso
promedio,
y
el
peor
de
los
casos,
su
desempeo
desacelera en proporcin al n, la longitud de la lista. A veces los
algoritmos se caracterizan por la mejor ejecucin del caso,
pero generalmente el rendimiento promedio y, en particular, el peor de
los casos se inform de la ejecucin. El promedio es generalmente el
caso
para el establecimiento de mejores expectativas, y el peor de los casos
prev un lmite en la que uno puede confiar.
(n).
En el peor de los casos, los elementos a los que se ordenan en orden
inverso, de modo que cada elemento de comparacin ser necesario
con todos los elementos ya ordenados. El segundo nmero se compara con
la
primera,
la
tercera
con
la
segunda
y en primer lugar, el cuarto con el tercer, segundo y primero, etc Si
hubiera
cuatro
nmeros
en
orden
inverso,
el
nmero
de
las comparaciones seran seis. En general, el nmero de comparaciones en
el
peor
de
los
casos
para
el
tipo
de
insercin
sern:
n2
/
2
n
/
2
El nmero de comparaciones crecer como el cuadrado del nmero de
elementos
a
ser
ordenados.
El
negativo
plazo de n / 2, y la divisin de n2 por la constante 2, significa que la
tasa
de
crecimiento
en
el
nmero
de
comparaciones
no ser la tarifa que implicara n2. Sin embargo, en caso de grandes
valores de n, esos trminos que no sean
n2 ser relativamente insignificante. Imagine el peor de los casos de
clasificacin
de
un
milln
de
nmeros.
El
plazo
n2
abrumar
a
los
dems
trminos
de
la
ecuacin.
Dado que por lo general un informa de la orden de crecimiento de un
algoritmo como el peor de los casos el orden de crecimiento, la
insercin
especie tiene una theta de n2, o (n2). Si uno calcula el promedio para
el caso del crecimiento de la insercin de clase, tambin un
considera una ecuacin cuadrtica, es slo algo menor, ya que, en
promedio,
cada
nuevo
elemento
se
comparar
con
slo la mitad de los elementos ya ordenados. Por lo tanto, dicen que el
desempeo
de
la
insercin
tipo
es
(n2).
Combinar tipo-Un ejemplo de orden de crecimiento de n (n lg) - Q (n lg
n)
Otro algoritmo para ordenar los nmeros utiliza la recursividad, una
tcnica
que
se
discutir
con
ms
detalle
en
breve,
dividir el problema en muchos pequeos problemas antes de recombinacin
de
los
elementos
de
la
plena
solucin.
Primero,
esta solucin requiere una rutina para combinar dos series de nmeros
ordenados
en
un
nico
conjunto.
Imagine dos montones de cartas, cada uno de ellos ordenados de menor a
mayor,
con
las
cartas
boca
arriba
en
dos
montones,
y los dos ms pequeas tarjetas de muestra. La fusin de rutina se
comparan las dos cartas que estn mostrando, y los lugares
tarjeta de pequeos boca abajo en lo que ser la fusionado montn.
Luego, la rutina se comparan las dos cartas que muestran despus de
la primera se ha puesto boca abajo sobre la fusionado montn. Una vez
ms,
la
rutina,
recoge
la
tarjeta
de
menor,
y
lo
pone
boca abajo sobre la fusionado montn. La fusin de rutina contina de
esta manera hasta que todas las cartas han sido trasladados
ordenados
en
la
fusionado
montn.
Aqu est pseudocdigo para la fusin de rutina. Se espera que para
trabajar en dos listas previamente ordenada de los nmeros, y
que combina las dos listas en una lista ordenada, que devuelve. La
variable ndice sigue la pista de donde se est trabajando
en
sorted_list.
La rutina compara la primera (arriba) los nmeros en las dos listas
originales,
y
pone
el
menor
de
los
dos
en
sorted_list. A continuacin, se descarta el nmero de la lista original,
lo
que
significa
que
el
nmero
que
se
utiliza
para
la
ser el segundo uno en la lista original se convierte en el primer nmero
en
esa
lista.
Una
vez
ms
la
rutina
compara
la
primera
nmeros en las dos listas, y de nuevo se mueve a los ms pequeos
sorted_list.
La rutina contina de esta manera hasta que uno de las listas originales
se convierte en vaco. En ese punto, se aade el resto de
lo
hace.
Aqu
est
pseudocdigo
para
la
fusin
tipo. Se toma la lista de nmeros para ser ordenados, y devuelve una
lista ordenada de los nmeros.
Vamos a seguir la ejecucin de merge_sort cuando uno pide con esta lista
de nmeros:
Nms = (1, 6, 4, 2)
1 En primer lugar, hacemos un llamamiento merge_sort pasar la lista
nms. Esto es lo que llamamos el "alto nivel" de la recursividad,
el nivel 0.
2 merge_sort pide merge_sort de nuevo, pasando una lista de los dos
primeros nmeros en nms. Esto Ordenar la parte delantera la mitad de la
lista. Este es el nivel 1 de la recursividad.
3 Ahora merge_sort pide merge_sort de nuevo, pasando slo el primer
nmero en nms. Este es el nivel 2.
4 Ahora merge_sort simplemente devuelve, es a un elemento en la lista,
merge_sort vuelve al nivel 1.
5 Ahora merge_sort pide merge_sort de nuevo, pasando slo el segundo de
los dos primeros nmeros en Nms. Este es el nivel 2.
6 Una vez ms, simplemente devuelve merge_sort, es a un elemento en la
lista, merge_sort vuelve al nivel 1.
7 En el nivel 1 de la recursividad, merge_sort ahora ha result_A y
result_B. merge_sort llamadas fusionar a los dos nmeros en orden y, a
continuacin, devuelve la ordenada par de nmeros de volver al nivel 0.
La primera mitad de la lista est ordenada.
8 de nivel 0, merge_sort pide merge_sort de nuevo, pasando una lista de
los dos ltimos nmeros en nms. Este tipo de la parte de atrs la mitad
de
los
nms.
Es
volver
al
nivel
1
de
la
recursividad.
9 merge_sort pide merge_sort de nuevo, pasando slo el primero de los
dos ltimos nmeros de nms. Esto es el nivel 2 de la recursividad de
nuevo.
10 Dado que la lista contiene slo un nmero, merge_sort simplemente
vuelve al nivel 1.
11 merge_sort pide merge_sort de nuevo, pasando slo el ltimo de los
nmeros de nms. Este es el nivel 2 de la recursividad de nuevo.
12 Dado que la lista contiene slo un nmero, merge_sort simplemente
vuelve al nivel 1.
13 En el nivel 1 de la recursividad, merge_sort ahora ha result_A y
result_B. merge_sort llamadas fusionar a las dos listas en el orden y, a
continuacin, devuelve la ordenada serie de dos nmeros de volver al
nivel
0.
dos
niveles
de
recursividad.
Un
problema
con
ocho
nmero tendr tres niveles, y un problema con 16 nmeros de cuatro.
Resumiendo lo largo de todo el problema, entonces, nos encontramos con
la combinacin tipo tiene una theta de n (n lg). Hay (lg n) los niveles,
cada una con de theta una n. Por lo tanto, el tipo de combinacin tiene
un
orden
de
crecimiento
de
(n
(lg
n)).
Esta es una gran cosa, porque para las grandes series de nmeros, n (lg
n)
es
mucho
menor
que
n2.
Supongamos
que
que un milln de nmeros debe ser ordenada. El tipo de insercin
requerir
del
orden
de
(106)
2,
o
1000000000000 unidades de tiempo, mientras que el tipo de combinacin se
requieren en el orden de los 106 (LG 106), o 106 (20),
o 20.000.000 unidades de tiempo. El tipo de combinacin ser casi cinco
rdenes de magnitud ms rpido. Si una unidad de tiempo es
una millonsima de segundo, el tipo de combinacin se completa en 20
segundos,
y
el
tipo
de
insercin
requerir
a
la
semana
y medio!
Bsqueda binaria-un ejemplo de orden de crecimiento de (lg n)-Q (lg n)
Anteriormente hemos discutido el algoritmo de bsqueda secuencial y
encontr
a
su
desempeo
se
(n).
Uno
puede
buscar
mucho ms eficaz si uno sabe la lista est en orden para comenzar. La
mejora
de
la
eficiencia
es
similar
a
la
mejorar la utilidad de una gua telefnica cuando las entradas se
ordenan por orden alfabtico. De hecho, para la mayora de
comunidades, una gua telefnica, donde las entradas no fueron ordenados
alfabticamente
unthinkably
sera
ineficaz!
Si la lista para ser buscado ya est ordenado de menor a mayor, el
algoritmo
de
bsqueda
binaria
puede
encontrar
en cualquier entrada (lg n) tiempo. Si la lista contiene 1000000
entradas, lo que significa que la bsqueda binaria se busque el
tema despus de leer menos de 20 entradas. La bsqueda secuencial, en
promedio,
tendr
que
leer
500.000
entradas.
Qu
diferencia!
El binario de bsqueda repetitiva de obras de dividir la lista en la
mitad.
Se
comienza
comparando
el
elemento
en
el
media de la lista con el tema tratado. Si el tema de bsqueda es menor
que
el
elemento
en
el
medio
de
la
lista,
la bsqueda binaria lee el elemento en el centro de la primera mitad de
la lista. Entonces, si la bsqueda es el tema ms grande
que ese elemento, la bsqueda binaria lee el siguiente elemento en el
centro
de
la
segunda
mitad
de
la
primera
mitad
de
la lista. Finalmente, la bsqueda se encuentra el elemento buscado, o
llega a la conclusin de que el elemento no est presente en la lista.
Aqu est un pseudocdigo de bsqueda binaria:
datos
genticos
de
494
antropolgicamente
definido
las poblaciones humanas, por ms de 1.600 polimorfismos (diferencias en
las
secuencias
de
ADN
entre
los
individuos).
Sin embargo, los investigadores han recogido datos de slo alrededor del
6
por
ciento
de
la
poblacin
posible
polimorfismo
combinaciones, de modo que la mayor parte de las entradas en la base de
datos
estn
ausentes.
Cuando la poblacin genetistas tratan de encontrar el mayor nmero
posible
subconjunto
de
la
poblacin
y
de
los
polimorfismos
que existen datos completos (es decir, medidas existen para todos los
polimorfismos de todas las poblaciones), los investigadores estn
frente a un problema computacionalmente intratable. Este problema
requiere
que
cada
subconjunto
de
los
elementos
en la matriz ser examinados, y el nmero de subconjuntos es muy grande!
El nmero de subconjuntos entre los elementos n es 2n, ya que cada
elemento
puede
ser
en
un
subconjunto
o
no. Para nuestro problema, el nmero de elementos de nuestro conjunto es
el
nmero
de
posibles
entradas
en
la
base
de
datos.
Eso
es decir, la base de datos ALFRED nos presenta 2 (494 * 1600)
subconjuntos para investigar! Para exhaustiva prueba de la mayor
subconjunto de datos completos, habra que enumerar todos los subgrupos,
y cada uno de prueba para ver si en todas las entradas
el
subconjunto
que
figuran
las
mediciones!
Evidentemente, el orden de crecimiento de este tipo de algoritmo es 2n;
(2n).
Esta
es
una
funcin
exponencial
de
n,
no
un polinomio, y hace una diferencia muy importante. Un algoritmo
exponencial rpidamente se convierte en intratable.
lg n
n lg n
n2
2n
Clasificacin
constante: en tiempo de ejecucin es fijo, y no depende
de n. La mayora de las instrucciones se ejecutan una
vez,
o slo un par de veces, independientemente de la
cantidad de informacin que est siendo procesado.
logartmico: cuando n aumenta, tambin lo hace en tiempo
de ejecucin, pero mucho ms lentamente que n no. Cuando
n
dobles, lg n aumenta en un constante, pero no hasta el
doble
n
aumenta
a
n2.
En
comn
programas
que
resolver
grandes
problemas
transformndolos en problemas ms pequeos.
lineal: tiempo de ejecucin vara directamente con n.
Normalmente, una pequea cantidad de procesamiento se
realiza
en
cada uno de los elementos.
cuando n se duplica, el tiempo de duracin de poco ms
de dobles. Comunes en los programas que romper
por un problema en subproblemas ms pequeos, resolver
de forma independiente y, a continuacin, combinar
soluciones.
cuadrticas: cuando n se duplica, en tiempo de ejecucin
aumenta cuatro veces. Prctica slo para los pequeos
problemas;
normalmente el programa procesa todos los pares de
entrada (por ejemplo, en un doble bucle anidada).
exponencial: cuando n se duplica, el tiempo de duracin
de las plazas. Esto es a menudo el resultado de una
natural,
"fuerza
bruta"
solucin. Estos problemas no son computables en un
tiempo razonable cuando el problema se convierte en
en todos los grandes.
...
A partir de Estado 1, y coloca a la extrema izquierda de la cinta, la
mquina
lee
el
smbolo
1.
Instruccin
2 se aplica a esta situacin, por lo que la instruccin de la causa 1, y
se sustituye por un 0, la mquina del Estado a permanecer 1,
y la mquina para mover la celda 1 a la derecha en la cinta.
A continuacin, la dice otra TM 1. Instruccin 2 se aplica de nuevo, por
lo que el TM cambios el segundo 1 a un 0, y se mueve
la derecha de nuevo, permaneciendo en estado 1.
Cuando el TM lee el smbolo 0, la instruccin 1 se aplica, por lo que la
instruccin
hace
que
el
1
a
0
se
sustituir
por
un
1,
la mquina para permanecer en el estado 1, y la mquina se desplace a la
derecha
una
vez
ms.
Como la mquina avances en la cinta, cada 1 ser cambiado a un 0, y cada
0
pasar
a
ser
1. Por ltimo, la mquina dar lectura a un blanco. En ese caso, la
instruccin
3
se
aplicarn,
y
la
mquina
va
a
detener.
Este simple TM es una mquina para complementar (invertir) los bits de
un
nmero
binario.
El
resultado
de
la
clculo
ser
una
cinta
que
contiene
estos
smbolos:
0
0
1
0
1
0
1
1
...
Como complemento de los bits de un nmero binario es con frecuencia una
tarea
necesaria,
por
lo
que
esta
es
una
til
TM.
Un poco ms compleja tarea es la de complementar y un creciente nmero
binario.
Esta
operacin
es
a menudo utilizado por las computadoras para llevar a cabo la resta
binaria. De hecho, en los "viejos tiempos" cuando el nico clculo
mquinas disponibles eran mquinas mecnicas, las personas que realizan
la
sustraccin
de
la
misma
manera
en
base
10,
utilizando los 10 del complemento mtodo. Para restar 14 de 17 en base
10,
se
encontraron
los
9
del
complemento,
de
14,
que
es 85 (restar 1 del 9 al obtener el 8, y restar 4 de 9 a obtener el 5).
Se
incrementa
85
por
1,
para
obtener
86,
o
lo que se llama los 10 del complemento. Adicin de 17 y 86 dio 103.
Haciendo caso omiso de llevar el dgito dio la respuesta de 3!
Para realizar la resta binaria por la 2 del complemento mtodo, el
subtrahend
se
complementa
y
incrementa y, a continuacin, aade a la minuend. Por ejemplo, para
restar
2
de
5,
que
pueden
complementar
e
incrementar
la
2, y aadir que a 5 para obtener 3:
010 2 (en base 2: 0 cuatro, el 1 de dos, 0 unidades)
101 2 complementarse (1S -> 0s; 0s -> 1s)
110 2 y complementado incrementa
(adicin de 001 a 101 -> 110 en base 2)
+101 5 (1 cuatro, 0 doses, 1 unidad)
1011 3 (en base 2: 0 cuatro, 1 dos, 1 unidad -ignorar el llevar poco a la izquierda)
1
0
0
1
1
0
1
0
0
0
cinta original
complementar completa
despus de ejecutar la instruccin 5
despus de ejecutar la instruccin 4
detenido despus de ejecutar la instruccin 8
cinta
original
Despus de que el complemento est completa, y todos los 0s convertirse
en 1s, el TM de copia de seguridad de ms de la cinta en varias
ocasiones
instruccin de ejecucin 5. Es decir, que una copia de seguridad de cada
cambio de 1 a 0. En este caso, sin embargo, el TM nunca
encuentro un 0, donde la instruccin 4 pondra a la TM en el estado 3 y
TM
iniciar
el
movimiento
hacia
el
final
de
la
cinta
y
un
buen
detener.
cinta
original
Otra forma un TM puede fallar es por entrar en un bucle infinito. Si la
instruccin
7
supra
se
especifica
un
paso
a
la
izquierda en lugar de la derecha, entrada de determinadas cintas que
contienen slo 1s y 0s que causa la TM para entrar en una interminable
bucle, se desplazan hacia adelante y hacia atrs sin cesar entre dos
clulas
adyacentes
en
la
cinta.
Algoritmos puede especificarse como TM y, al igual que todos los
algoritmos,
TM
debe
ser
la
prueba
de
exactitud,
dado
aportes esperados.
TESIS DE CHURCH-TURING
La mquina de Turing se piensa que es un modelo muy general de la
computacin. En 1936, Alonzo Church lgico avanzada la tesis de que
cualquier procedimiento algortmico para manipular smbolos, llevada a
cabo por los seres humanos o de cualquier mquina, puede ser llevada a
cabo por algunos TM.
No es posible demostrar con rigor esta proposicin, por la nocin de un
algoritmo no se especifica matemticamente.
Sin embargo, la Iglesia-la tesis de Turing ha sido ampliamente probado,y
es ahora aceptado como cierto. Uno no desea escribir un TM para una
tarea compleja como el diseo de un conjunto de escaleras para una
escalera, pero se podra hacer.
La importancia de tener un modelo de clculo es que el modelo se ha
utilizado para demostrar que algunos tareas no puede lograrse con una
TM. Si la Iglesia-la tesis de Turing es cierto, entonces las tareas para
las que uno no puede TM tener xito son tareas que simplemente no tienen
solucin algortmica.
Insoluble PROBLEMAS
Sera muy til disponer de una forma rpida de saber si un determinado
programa, siempre y cuando con cualquier conjunto particular de los
insumos, llevar a cabo a la terminacin y detener, o en lugar continuar
interminablemente. En equipo la ciencia, esto se conoce como la
"detencin de problema." Habida cuenta de un programa, y un conjunto de
insumos, el programa se ejecute a la realizacin o no? Hay algn un
algoritmo que puede aplicar, por cualquier programa y cualquier conjunto
de insumos, determinar si el programa se ejecutar a la realizacin o
no?
Uno podra sugerir simplemente ejecuta el programa, siempre que el
particular insumos, y ver si el programa se detiene o no. Si el programa
se ejecute a la realizacin y detener, sabrs que se detiene. Sin
embargo, si el programa a seguir para ejecutar, usted nunca se sabe si
el programa continuar para siempre, o detener el tiempo. Lo que se
de
un
algoritmo
para
encontrar
la
raz
CAPITULO 4
SOFTWARE
aqu est el cdigo (y una explicacin de cada instruccin), para un 16bits. Estos tres
instrucciones que aadir el valor almacenado en la memoria la ubicacin
64 a que en la ubicacin 65, y almacenar el resultado
en la ubicacin 66.
0110000001000000 (de carga de la A-registro de 64)
0100000001000001 (Aadir el contenido de 65)
0111000001000010 (Almacn de la A-registro en el 66)
Una vez que el programador cre todas las instrucciones de la mquina,
probablemente escrito por el poco las pautas sobre el papel,
el programador de almacenar las instrucciones en la memoria utilizando
interruptores en el panel frontal del equipo.
A continuacin, el programador que configurar el registro de P (programa
contra el registro) el contenido a la ubicacin de la primera
instruccin en el programa y, a continuacin, pulse "Ejecutar". El bucle
operacionales bsicos de la computadora es leer
la instruccin almacenados en la ubicacin de memoria apuntado por el
registro P, incrementar el registro P, ejecute el
instruccin que se encuentra en la memoria, y repetir.
Una de las primeras mejoras en la programacin de la productividad fue
la ensamblador. Un ensamblador puede leer mnemotcnicos
(letras y nmeros) para instrucciones de la mquina, y para cada
mnemotcnico generar el lenguaje de mquina
en unos y ceros.
Asamblea lenguas se denominan de segunda generacin idiomas. Con la
programacin en lenguaje ensamblador, el
programador puede trabajar en el mundo de letras y palabras en lugar de
unos y ceros. Los programadores escribir su cdigo
utilizando los cdigos de mnemotc que se traducen directamente en la
mquina las instrucciones. Estos son tpicos de esa mnemotcnicos:
LDA m de carga de la A-registro de la ubicacin de memoria m.
ADA m Aadir el contenido de la memoria m para el contenido de la Aregistro, y dejar
la suma en la A-registro.
ALS A la izquierda Mays; cambio de los bits en el registro A-1 bit
izquierda, y la menos importante poco cero.
Saltar la SSA en seal de una, si la ms importante de bits en la Aregistro es de 1, pase la prxima
instruccin, de lo contrario, ejecutar la siguiente instruccin.
JMP m Ir a la direccin de m para la siguiente instruccin.
La labor de un montador es directa; traducir el mnemotcnico "opcdigos" en la correspondiente mquina
instrucciones.
Aqu est el cdigo en lenguaje ensamblador para el programa anterior
que aade dos nmeros y almacena el resultado en
tercera ubicacin:
LDA 100 / / carga de la A-registro de 100 octal = 64
ADA 101 / / Aadir a la A-reg el contenido de 101 (65)
STA 102 / / Almacenar el registro A-contenidos en 102 (66)
Casi nadie los cdigos directamente en los unos y ceros del lenguaje de
mquina ms. Sin embargo, los programadores
suelen utilizar el lenguaje ensamblador para los programas que son muy
82137947
81214332
81332311
82479999
82569885
(4,1)
Si uno est trabajando a partir de una muestra y con la intencin de
inferir la desviacin estndar de la poblacin mayor, la
mejor estimacin se obtiene dividiendo la suma de las desviaciones por
(n-1) en lugar de n. Aqu s es el estndar de la muestra
desviacin, y es la media de la muestra:
(4,2)
Una frmula equivalente a menudo til para el clculo es el siguiente:
(4,3)
de salida
gradeProj.pl $ 6 $ 5 $ 1 $ 5 $ 2
# Probar el estudiante del programa contra el extracto de archivo
$ 5 $ 3 / home / fac / CHR / public_html / plc / access_log_extract $ 5
$ 4
# Imprimir los resultados
nenscript -2-r $ 5 $ 2 $ 5 $ 1 $ 5 $ 3 $ 5 $ 4
Este script es una secuencia de comandos de la Bourne shell (intrprete
de comandos) para Unix, y que ejecuta una flexibilidad
conjunto de comandos que de otro modo sera necesario escribir mucho ms
y ser mucho ms propensos a los errores de
ejecucin.
La primera lnea, el comienzo con un #! (llamado el asunto), le dice a
Unix para ejecutar los comandos en el archivo
usando el programa sh, tambin conocido como el shell de Bourne. Las
lneas que comienzan con # son lneas de comentarios. El
restantes son lneas de comandos cuyos parmetros se construyen a partir
de las variables definidas por el original
argumentos de lnea de comandos.
El Bourne shell scripting idioma es uno de los muchos lenguajes de
scripting se puede clasificar como trabajo
lenguaje de control (JCL) lenguajes de scripting. Otros incluyen la C
shell (CSH), el Korn shell (ksh), Bash (Bourne
Again Shell), JCL y JES2 (de IBM para mainframes idiomas), y MS-DOS
Batch. Todos ellos son similares
en el sentido de que puede aceptar un archivo de comandos como entrada,
incorporar los valores de los parmetros disponibles en ejecucin
tiempo, y ejecutar la secuencia de comandos. Salvo en el caso de JCL y
JES2, todos ellos tienen limitada la programacin
as como los controles, e incluir las expresiones condicionales y la
capacidad de bucle y rama durante la ejecucin de la
archivo de comandos.
He aqu un ejemplo de MS-DOS Batch archivo que se copia una lista de
archivos en un directorio llamado DUPLICAT. Lneas
comienzo con dos puntos de observacin son las lneas. Las lneas que
comienzan con un solo colon son "etiquetas" a que se refiere
otros estados. Tenga en cuenta la declaracin condicional que crea el
directorio si no existe ya. Tambin
tomar nota de la estructura de bucle GOTO utilizando la declaracin con
la copia-FILES etiqueta.
(lambda n
(cond ((null? n) 0)
(Otra cosa (eval (cons' + n)))
)))
Esta solucin introduce dos nuevos elementos del rgimen de sintaxis.
Para entender esta versin, usted necesita saber
que la comilla simple antes de la '+' Plan de paradas de la evaluacin
de la funcin '+', y en su lugar las fuerzas de Plan de
para el tratamiento de '+' como un simple carcter tomo. Adems, la
funcin de los contras crea una nueva lista aadiendo un elemento
al frente de una lista, en este caso, aadiendo el "+" al frente de la
lista de nmeros que se suman.
La programacin funcional tiene las propiedades deseables de simple
sintaxis y la semntica, y compacto cdigo.
Adems, desde una funcin no puede cambiar cualquiera de los parmetros
que le pasan, y dado que la cesin no se utiliza
programa para cambiar el estado, "efectos secundarios" (los cambios en
las variables que soportar despus de la ejecucin de cdigo) se
eliminado, con las consiguientes mejoras en la fiabilidad.
Histricamente, la programacin funcional ha encontrado defensores en
los mbitos de la inteligencia artificial y de expertos
sistemas. El popular editor Emacs est escrito en LISP, tambin, como es
el sistema de tarifa programa de bsqueda empleados por
Orbitz (http://www.paulgraham.com/icad.html).
DISEO DE IDIOMA
Equipo lenguajes de programacin se han desarrollado para que sea ms
fcil para los seres humanos para dirigir el cmputo.
En algunas veces en el pasado se pens que un solo idioma podra ser
mejor para todas las tareas de programacin.
Por ejemplo, IBM tiene previsto "unificar" cientficas y empresariales
de la programacin en la dcada de 1960 con PL1, en sustitucin de
tanto FORTRAN y COBOL. En el decenio de 1980 se hablaba de Pascal para
sustituir a todos los dems idiomas a causa de su
superior tipo de control y estructura de bloque.
A medida que el tiempo ha pasado, sin embargo, ms idiomas, no menos,
han entrado en uso, y an otras nuevas aparecen.
Creemos que esto se debe a la maduracin de la disciplina de
programacin. As como cualquier mecnico se puede llevar varios
diferentes herramientas para trabajar con una tuerca de 10 mm (apertura
de llave, caja de llave, cuervos pies llave, superficial
toma, toma profunda, etc), cualquier programador capaz de llevar el
conocimiento de varios idiomas a fin de que
puede seleccionar el mejor para una circunstancia particular.
Algunos idiomas proporcionar un mejor tiempo de ejecucin de ejecucin,
algunas de ellas extraordinariamente compacto sintaxis para una rpida
"Uno-off" de programas, algunos ofrecen caractersticas especialmente
fuerte para la manipulacin de texto, algunos para trabajar con matrices
de nmeros, etc En la evaluacin de un idioma, informtica cientficos
consideran muchas propiedades.
Desde los primeros das, la eficiencia de la ejecucin ha sido una
propiedad deseable. De hecho, se FORTRAN
o ms casos de ", y que utiliza entre corchetes para indicar las partes
opcionales de una produccin. EBNF usos
parntesis y vertical "o" separadores para indicar varias opciones para
un solo elemento. Podemos reescribir
por encima de la gramtica utilizando este EBNF notacin:
expresin -> (term (+
expresin -> term | term expresin add_op
A partir de esta norma, que puede generar:
expresin -> term
expresin -> + expresin term
expresin -> expresin + + term term
expresin -> expresin term + + + term term
...
expresin -> term term + + + term term term ... +
As, la notacin EBNF dice simplemente:
expresin -> (term (+ | -) term)
Una expresin es un trmino seguido por cero, uno, o muchos trminos
aditivo.
Aqu est un ejemplo de EBNF utiliza para representar un elemento
opcional en una produccin de:
-en caso de declaracin -> if (expresin) una declaracin [else]
Esta produccin dice que si una declaracin-consta de la palabra clave
si, seguido de un parntesis abierto, seguido por
una expresin, seguida de un parntesis cerrado, seguido de un programa
de declaracin, opcionalmente, seguido por el
palabra clave y otra declaracin de otro programa.
Un requisito muy importante para un lenguaje de programacin gramtica
es que sea inequvoco.
Dada una expresin en la lengua, debe existir una y slo una vlida
derivacin en la lengua.
Para ilustrar una gramtica ambigua, considere la posibilidad de esta
simplificacin de la gramtica de matemticas
expresiones:
1 expresin -> expresin operador expresin | identificador |
nmero | - expresin | (expresin)
2 operador -> + | - | * | /
Podemos analizar de nuevo la expresin (X * 3 + 4) procedentes de la
izquierda a la derecha, y el resultado
ser el mismo rbol que analizar derivados de la gramtica ms compleja.
Sin embargo, esta simplificacin de la gramtica tambin
permitir un enfoque de derecha, con el siguiente resultado:
2 * (3 + 5) + (6 + 8)
4.6 Describir la forma en que un programa se pasa de:
El escner una a la intrprete.
b El analizador al analizador semntico.
4.7 Aqu est un contexto libre de la gramtica en BNF forma:
CAPITULO 5
PROGRAMACION EN JAVA
INTRODUCCIN
Java es una de un gran nmero de lenguajes de programacin de
computadoras en uso hoy en da. Dado que se trata de un lenguaje
bastante nuevo,
haber sido por primera vez en 1994 por Sun Microsystems, su diseo
aprovecha las ventajas de las modernas ideas acerca de lo que
es un buen lenguaje de programacin. Histricamente, los nuevos
lenguajes de programacin en general se han tomado aos para
convertirse en popular, pero Java disfrutado de un crecimiento sin
precedentes en popularidad desde el da de su liberacin. De hecho, hoy
Java es, con algunas medidas que el lenguaje ms popular para los nuevos
trabajos (http://www.tiobe.com/tpci.htm).
Muchos libros se han escrito la enseanza de programacin Java, y no es
nuestro propsito en este captulo
para proporcionar un completo tutorial sobre la programacin Java. En
lugar de ello, vamos a introducir las estructuras bsicas de
programacin
y tcnicas con Java. Esperamos que esta exposicin a un muy buen idioma
ayudar a los lectores a comprender
ideas presentadas en otros captulos sobre temas de software,
algoritmos, sistemas operativos, etc
En este captulo vamos a mostrar pequeo pero completo de programas se
puede probar por ti mismo. Si an no
tener acceso a un compilador Java y Java Virtual Machine (tambin
llamado Java Runtime Environment), puede
descargar rpidamente la totalidad del paquete de Java, incluida la
excelente documentacin, directamente desde el sitio web de Domingo
(http://java.sun.com/javase/). Para trabajar con este captulo,
descargue el Java Standard Edition Kit de desarrollo de
(JDK), que tambin incluye el Java Runtime Environment.
Tambin es una buena idea para descargar la documentacin (llamado
JavaDocs) a su propio equipo, si tiene
la habitacin de su disco. Puede llegar a la misma documentacin en
lnea en el sitio web Domingo, pero su acceso
ser ms rpido si los archivos son residentes en su propio computadora.
Para escribir programas en Java, puede utilizar cualquier editor o
procesador de textos que te gusta. Hay tambin varios
entornos de desarrollo integrados (IDEs) disponibles. En primer lugar le
recomendamos que simplemente utilice un editor con
que ya estn cmodos, de los IDEs tienen una curva de aprendizaje de su
propia para usted para hacer frente a, y
Nuestro enfoque ser sobre los fundamentos de la lengua.
TIPOS DE JAVA
Cada lenguaje de programacin define un conjunto de tipos de datos que
reconoce. En el caso de los principios de FORTRAN,
la nica lengua reconocida enteros y nmeros de punto flotante. Ms
lenguas modernas reconocen una mayor
gama de tipos de datos, tales como nmeros de los diferentes niveles de
precisin, cierto-o-falsos valores, y de cadenas alfanumricas
caracteres. La mayora de las lenguas modernas tambin permiten al
programador definir nuevos tipos de datos.
Puede parecer extrao para llamar a los caracteres uno de los tipos
integral, pero la razn es que cada personaje es
representado por un valor entero. Por ejemplo, cuando un tipo "A", el
teclado enva el valor 65,
el cdigo entero de "A", para el equipo. El cdigo de "B" es 66, etc
minsculas tienen cdigos diferentes.
Por ejemplo, el cdigo entero "a" es 97, y el cdigo de "b" es 98. Por
lo tanto, las cartas son slo nmeros enteros por debajo,
y el software trata bits como nmeros o cdigos de caracteres en funcin
del contexto.
Los tipos primitivos de Java, por categora, son las siguientes:
Cada programa en Java es una clase, y es por eso que la primera lnea
dice que se trata de una clase pblica (disponible para
el uso por cualquier persona) llamado "Primitivo". La prxima lnea dice
que este es el comienzo de un "mtodo" llamado "principal". Cualquier
Java
programa debe tener un "principal" mtodo declarado exactamente como es
este. La lnea
"public static void main (String [] args) ("
es donde se inicia el programa. Esta lnea ser en todos sus programas.
Esta lnea le dice a la Mquina Virtual de Java
(JVM), donde para comenzar a publicar su programa.
"Pblico" significa que cualquiera puede ejecutar el programa,
"esttica" significa que slo hay un mtodo principal para la clase,
"Nula" significa que el principal mtodo no mostrar los valores, y
"String [] args" significa que si el usuario proporcionado ninguna
"Argumentos de lnea de comandos", que estn disponibles para el
programa en una serie de variables de cadena llamado "args". Algunos de
probablemente este no tiene sentido ahora mismo, por lo que por ahora
simplemente recordar que cada uno de sus programas
debe tener un mtodo principal, y la primera lnea del mtodo principal
debe ser escrito exactamente como este ejemplo est escrito.
Observe que cada declaracin en Java termina con un punto y coma! Aviso,
tambin, que el lenguaje Java es sensible a maysculas y minsculas ".
a los
Java,
elemento de la
de cadenas,
desde la lnea
highWindWarning
wonLostRecord
mothersMaidenName
Estructuras de control bsicas
Todos los lenguajes de programacin proporcionan maneras de alterar la
secuencia de instrucciones que efectivamente se
ejecutado cuando un programa se ejecuta. Esta capacidad para seleccionar
lo que la lgica a aplicar, o elegir un adecuado
nmero de veces para desplazarse a travs de una seccin de cdigo, es
lo que hace que los programas lo suficientemente flexible como para ser
til en el mundo real. Imagine un programa para calcular el promedio de
calificaciones de los estudiantes en una clase,
pero imagino que el programa exige a todas las clases tienen exactamente
el mismo nmero de estudiantes, y
no tiene ninguna manera de manejar correctamente la falta de un grado!
Este programa rgido que no se vale la pena
a escribir.
si
Los ms comunes estructura de control para la seleccin de un bloque de
cdigo a ejecutar es el caso de declaracin. El si
declaracin puede ser utilizada en su forma simple o, en su ampliarse si
otra forma-. Aqu est un ejemplo de un simple
en caso de declaracin:
if (grado> 0) (
sumOfGrades = + sumOfGrades grado;
numberOfGrades + +;
)
Esta declaracin dice que, si la variable es de grado mayor que 0, a
continuacin, agregue el grado de valor a la variable
sumOfGrades, y el incremento de la variable numberOfGrades por 1. De lo
contrario, no hacer nada. Cualquiera de los dos
declaraciones despus de la declaracin si ser ejecutado, o no ser,
porque son tanto dentro de la
llaves que siguen el caso. Las llaves marca un bloque de cdigo.
Si la prueba condicin es verdadera, entonces el bloque de cdigo de la
declaracin si se llevar a cabo. Si la condicin
es falsa, el bloque de cdigo se evitar.
Aqu est la sintaxis de la simple declaracin si:
if (<conditional expression>) <sentencia>
La expresin condicional debe evaluar a true o false. Si la expresin
condicional es cierto,
la siguiente declaracin ser ejecutado, pero no otra cosa. El
<sentencia> tambin puede ser un compuesto
declaracin, que es otra manera de decir que <sentencia> puede ser un
bloque de cdigo encerrado en llaves.
Un complejo de declaracin o bloque de cdigo se adjunta en llaves, y
dentro de cada declaracin debe ser denunciado
con un punto y coma.
Aqu est un ejemplo de un si-else:
A primera vista, parece que esta versin guarda el cdigo. Sin embargo,
en este caso particular, este cdigo nos expone
al peligro. Si el archivo nunca debe estar vaco, la primera
HERENCIA
Usted puede estar pensando que una de acelerar () mtodo puede no
funcionar para todas las instancias de la clase
Automvil. Puede ser la aceleracin de un Ferrari comportamiento debe
ser el modelo diferente de la aceleracin
comportamiento de un Kia. Si queremos el modelo de estas diferencias,
podemos tomar ventaja de la programacin OO
llamado paradigma de la herencia.
Una clase puede heredar de otro, en cuyo caso la nueva clase (llamada
subclase o clase subordinant
o un nio de clase) lleva todas las variables y los mtodos del ms alto
nivel de clase (llamado superclase o superior
clase o clase padre). Adems, el nio de clase puede agregar variables
de estado nico para el nio de clase, y aadir
mtodos de comportamiento nicas para el nio de clase. Adems, el nio
de clase puede invalidar los mtodos de la clase padre
con el fin de dar al nio un comportamiento diferente clase, aunque el
nombre de la aplicacin del mtodo de comportamiento
tiene el mismo nombre que el mtodo de la clase padre.
Este tipo de consideraciones llevan a desarrolladores de software a
crear una clase de jerarqua. El programador define
la ms general las variables de estado y el comportamiento en los
mtodos de nivel superior clases. Entonces, al escribir la subordinant
clases, el programador utiliza el Estado heredado y el comportamiento
cuando se ajusta, y aade las variables de estado, mtodos,
general y los mtodos para subordinant clases con el fin de aplicar las
diferencias entre el superior y
subordinant clases.
La belleza de esta tcnica es que las clases que se han escrito y
probado no cambian. Los programas informticos existentes
funcionalidad puede ser reutilizado. Cuando el programador requiere
nuevas funciones en una clase, el programador puede heredar
a partir de una existente, prueba de clase, y escribir un nuevo software
simplemente para cumplir los nuevos requisitos.
Si uno decide a acelerar la aplicacin de la () mtodo diferente para
diferentes automviles, una
que escribir la clase padre de automviles y, a continuacin, han
subordinant heredar de las clases de automviles.
En nuestro ejemplo, es posible que varias clases de diseo a heredar de
automviles, una clase llamada EconomyCar,
una clase llamada FamilyCar, y una clase llamada SportsCar. Cada una de
estas clases subordinant heredar
acelerar la () mtodo de la clase de automviles, y podra anular la
heredado acelerar ()
mtodo para cambiar el comportamiento de la aceleracin de las
instancias de la clase subordinant. Si una clase subordinant no
sobre el mtodo de la clase superior, las instancias de la clase
subordinant responder a la justa como mtodo
instancias de la clase superior hacer. Si mi Ford "es" una FamilyCar, mi
Ford tambin "es" un automvil, porque
FamilyCar hereda de automviles.
Instancia y variables estticas y mtodos
Un toque de complejidad es que algunos informacin de estado y de
algunos comportamientos pertenecen a la clase, mientras que otros
pertenecen a los casos de una clase. Por ejemplo, queremos mantener la
velocidad de cada uno de automviles como parte de
el estado de cada coche (en el estado de cada caso). Por otra parte,
queremos mantener una
de contar el nmero total de automviles como parte del estado de la
clase de automviles. Parece natural
velocidad que debera estar asociada con un coche particular, pero
necesitamos un lugar central para realizar un seguimiento del total de
nmero de automviles.
Tal vez estamos estirando la analoga un poco, pero imaginar un Ford en
la carretera. Tiene una velocidad que puede
medida, pero despus de la Ford sale de la fbrica, no hay manera fcil
para la Ford que se le mantenga al corriente de la total
nmero de automviles que se han construido. Si queremos saber cuntos
automviles se han
construido, debemos volver a la fbrica y conseguir la cuenta. La
fbrica es la clase.
Variables como la velocidad, que representan el estado de una instancia
de una clase, se denominan variables de instancia.
Variables como contar, que son mantenidos por la propia clase, se
denominan variables static. La palabra static
significa muchas cosas en ciencias de la computacin, y este uso de la
palabra esttica puede ser confuso. Otros idiomas etiqueta
la misma idea con un nombre diferente, por ejemplo, Visual Basic
llamadas variables de este tipo "compartidos" variables,
porque son compartidos por todas las instancias de una clase. Ese plazo
puede ser ms til para aprender, de modo que cuando vea
"Esttico", piensa a s mismo "compartido", o "clase".
Del mismo modo, los mtodos pueden ser mtodos de instancia o mtodos.
Si dos diferentes instancias de una clase tanto
llamar al mtodo de instancia acelerar (), ser como si hubiera dos
copias de ese mtodo, y
cada instancia tiene su propio. (En realidad, no habr dos copias del
cdigo, pero cada caso tendr su propio
"Pila" para las variables locales, que se mantendr la ejecucin de las
dos llamadas por separado, como si el cdigo existe en dos
lugares.) Por otra parte, si dos diferentes instancias de una clase
llamada el mtodo getAutomobileCount (),
los dos casos va a utilizar exactamente el mismo cdigo, porque slo hay
una copia, y que es compartida.
Variables y mtodos siempre sern variables de instancia y los mtodos,
a menos que especficamente les etiqueta
esttica. Si la etiqueta de una variable o mtodo esttico, la variable
o mtodo slo existen a nivel de la
clase, y se repartirn entre los casos.
A continuacin se muestra el ejemplo del Automvil de clase. Observe que
no hay ningn mtodo principal en el Automvil
clase. Esta clase no puede ser ejecutado directamente. Si tuviramos que
aadir un pblico principal mtodo, la clase podra ser ejecutado,
y cualquiera que sea el principal mtodo se codificaron para lograr que
se haga. Sin embargo, esta Automvil
clase est destinada a ser una "fbrica" de automviles para crear
objetos para su uso por otros programas y clases,
en lugar de ser un programa que se va a ejecutar por s mismo. Usted
puede pensar en la clase de automviles como la creacin de un nuevo
datos
tipo de automviles.
Anuncio tambin que en la clase de automviles hay un mtodo llamado de
automviles, el nombre de la
mtodo es el mismo que el nombre de la clase. El mtodo llamado de
automviles es el constructor de la clase.
Siempre que otro programa necesita un ejemplo de un automvil, el otro
programa que utilice la nueva palabra clave
a peticin de un nuevo automvil. Podemos decir desde el constructor de
automviles que el constructor
espera que cuatro parmetros cada vez que un nuevo automvil es
solicitada; se trata de la marca, el modelo, ao,
y el caballo de fuerza. Los dos primeros parmetros son valores de
cadena, y los dos ltimos son ints.
Cuando otro programa pide un ejemplo de un automvil, el constructor va
a crear un
Automvil objeto y volver al otro programa una referencia a los nuevos
automviles. Una referencia es una
direccin. El otro programa puede utilizar la referencia a la creacin
del nuevo AutoMobile objeto de manipular la misma.
Herencia
OO programacin hace fcil agregar la funcionalidad de software sin
reescribir el cdigo de una ya ha
escrito y probado. Supongamos que queremos aadir las distinciones entre
tipos de automviles. Un Ferrari puede ir
mucho ms rpido que un Kia, a fin de acelerar la () el mtodo debe ser
diferente, y tal vez otros comportamientos
tambin debera ser diferente para automviles tan diferentes.
Podemos aadir una nueva clase llamada SportsCar que se heredan de
automviles, y podemos dar la
SportsCar una clase diferente de acelerar () mtodo. Aqu est la clase
Java para SportsCar:
Cerrar el flujo de
El arroyo de las clases I / O se agrupan en un paquete llamado Java
java.io. Un paquete es slo uno
relacionados con la recogida de clases. Uno puede crear los paquetes de
las propias clases, pero no ser el que se especifica que
en esta breve introduccin a la lengua. La razn de mencionar el nombre
del paquete aqu es que un programador
debe importar un paquete con el fin de tomar ventaja de las clases
dentro de ella. Con el fin de utilizar el flujo de las clases
vamos a discutir pronto, su programa debe tener una declaracin en el
principio, incluso antes de la clase
declaracin, que dice:
importacin java.io. *;
El asterisco significa la importacin de todas las clases en el paquete.
Si el programador quiere slo uno de los
clases, el programador puede sustituir el nombre de la clase para el
asterisco. Por lo general, un tipo simplemente como la lnea que
que han demostrado.
El flujo de clases en Java se dividen en dos grandes categoras:
Reader / Writer y flujo de entrada /
Flujo de salida. Si la clase est en el lector / escritor de la
categora, es un arroyo de la lectura y la escritura de caracteres
datos-letras, nmeros y smbolos. Si la clase est en el flujo de
entrada / flujo de salida categora,
es un arroyo de la lectura y la escritura-octetos de datos en bruto, 8
bits a la vez.
Los estudiantes a veces se confunde pensando en la diferencia entre los
datos de caracteres y bytes. No se
octetos utilizados para codificar los caracteres? S que son. De hecho,
se podra obtener, junto con slo el flujo de entrada /
Clases de flujo de salida, y dejar que los programas se encargar de
hacer sentido de los datos mediante la conversin de los datos que
personajes que, cuando era apropiado.
Sin embargo, a menudo las fuentes de datos consisten en datos de
caracteres, y es muy conveniente disponer de I / O para las clases
que la situacin comn. Si la informacin existe en forma de caracteres,
un Reader / Writer interpretar
la informacin correcta y devolver un conjunto de caracteres para el
programa. Esto ahorra el tener que programador
escribir un tedioso conversin que de otro modo sera necesario con
frecuencia.
Si la informacin existe en alguna otra forma de caracteres, tales como
nmeros binarios en entero o floatingpoint
formato, como en un archivo de imagen, entonces no tiene sentido para
interpretar los patrones de bits como caracteres. En ese
caso, el programador debe utilizar el flujo de entrada / flujo de salida
clases, que simplemente la transferencia
bytes. A continuacin, el programa se encargar de interpretar
correctamente los bytes.
Otra situacin exige el uso de flujo de entrada / flujo de salida las
clases, tambin. Esto es cuando un
no le importa lo que los datos representan. Este sera el caso, por
ejemplo, cuando la tarea consiste en copiar un archivo. El
programa de hacer la copia no necesita saber cul es el contenido del
archivo de medios, sino slo a las necesidades de copia
cada byte en un nuevo archivo. En ese caso, utilizando el flujo de
RESUMEN
Java es un moderno orientado a objetos lenguaje de programacin. En este
captulo se discuti la forma de compilar y ejecutar
Programas Java. Hablamos de la "primitiva" en los tipos de datos Java,
as como los utilizados con frecuencia "de referencia" tipos
incluida la matriz de cadenas y tipos. Nos explic el uso de estructuras
de control selectivo para la ejecucin de cdigo
y la iteracin. Estas declaraciones incluyen-si la otra persona, para,
al mismo tiempo, hacer-al mismo tiempo, y cambiar las declaraciones.
Java tiene la ventaja de OO concepto de clases, y la consiguiente
principios de la herencia, encapsulacin,
y polimorfismo. Un ejemplo de una clase se denomina un objeto, y los
objetos han estado y comportamiento. Clases de definir
tanto instancia y variables static, que se manifiestan el estado de un
objeto. Las clases tambin definir tanto instancia y
los mtodos estticos, que dotar a los objetos con sus comportamientos
caractersticos. Java tambin proporciona el concepto de una
interfaz, que permite aplicar un comportamiento similar entre las
diferentes clases.
Manejo de errores en Java se logra utilizando los objetos de excepcin.
Cuando se produce un error, un programa puede
lanzar una excepcin, que puede describir el problema. Las excepciones
pueden ser capturadas en la aplicacin
cuando el cdigo de generacin de la excepcin es encerrado en un bloque
try. Tras el bloque try puede ser mltiple
bloques de captura y finalmente un bloque. Bloques de captura puede
especificar que las subclases de excepcin que
se asa. Cdigo en un ltimo bloque siempre se ejecutar, si se produce
un error en el bloque try o no.
Si la solicitud no una excepcin, la excepcin se propague a la JVM, que
manejar la excepcin de que la presentacin de informes y se da por
concluido el programa.
Entrada y salida se produce en Java utilizando los arroyos. Una
secuencia es una secuencia de elementos de datos. Los muchos tipos de
arroyos disponible en Java se pueden clasificar en Entrada /
OutputStreams, que manejar materias primas como datos binarios
bytes, y Reader / Writer arroyos que tengan en cuenta los datos de
carcter, y realizar automticamente la traduccin y
de codificaciones de caracteres. Por eficiencia, la buena prctica de
programacin es una recapitulacin base en el flujo de un objeto
el buffer de flujo para proporcionar eficiente de la memoria I / O.
El escner de clase en Java es una clase prctica de la lectura de texto
desde el teclado, un archivo, o de otro tipo de entrada.
La clase PrintWriter es otra clase de comodidad que facilita la tarea
comn de formato escrito
texto en un archivo.
REPASO DE PREGUNTAS
5.1 Escribir un programa Java que divide el nmero 74,3 y 12,6 por
informes el resultado de la divisin. Almacenar
el dividendo y divisor en el llamado dividendo de variables y divisor
antes de realizar la divisin.
Cul ser el tipo de estas variables? Cul ser el tipo de resultado?
Cul es el cociente?
5.2 Escribir un programa Java para calcular el rea de un crculo cuyo
radio es de 5. Por el valor de PI, el uso 3.14.
Ahora reescribir su programa para que utilice el valor exacto de PI como
una constante en
la clase de matemticas que viene con Java. Aqu es cmo utilizar la
clase de matemticas constante:
doble pi = Math.PI;
Cunto cuesta cambiar el resultado?
5.3 Escribir un programa Java que le pide al usuario para un nmero y, a
continuacin le dice al usuario si el nmero es
incluso un mltiplo de 5. Uso de escner para leer el nmero del
usuario, y usar el modulo operador
(%) Para decidir si el nmero es un mltiplo de 5.
5.4 Escribir un programa Java que pide un usuario para entrar en cinco
cuerdas, una a la vez. Que se guarde el Cuerdas
en una matriz de cadenas. Entonces tienes el programa de visualizacin
de las palabras en orden inverso. Para un uso, o una
al mismo tiempo, o hacer un bucle while para leer en las cuerdas, y otra
para, al mismo tiempo, o bucle while
para imprimir a cabo.