Fundamentos - Campus virtual

Anuncio
Fundamentos
Algoritmos y programación. Alcance de la informática. Desarrollo de
máquinas algorítmicas. Repercusiones sociales de la informática.
Arquitectura de computadoras. Almacenamiento y manipulación de bits.
75.40 - 95.14 Algoritmos y Programación I
Curso Prof. Servetto
1
Algoritmos y Programación
Definiciones, ejemplos e implicaciones.
75.40 - 95.14 Algoritmos y Programación I
Curso Prof. Servetto
2
Algoritmo
Realizar una
operación
matemática
(pasos
aprendidos en
la escuela)
Operar un
microondas
(instrucciones en la
puerta)
Construir
aeroplanos
a escala
(instruccion
es en papel)
Conjunto de pasos que
definen cómo realizar una
tarea para resolver un
problema
Ejecutar una
obra musical
en un
instrumento
(partitura)
Preparar un
plato de
comida
(receta)
75.40 - 95.14 Algoritmos y Programación I
Curso Prof. Servetto
3
Algoritmo
 El matemático persa Musa al-Juarismi (780-850), considerado como el
padre del álgebra y como el introductor de nuestro sistema de
numeración denominado arábigo, inventó el algoritmo, es decir, la
resolución metódica de problemas de álgebra y cálculo numérico
mediante una lista bien definida, ordenada y finita de operaciones.
 Una vez encontrado un algoritmo para realizar una tarea, la ejecución
de esa tarea deja de requerir la comprensión de los principios en los
que se basa el algoritmo: la ejecución de la tarea se reduce al mero
proceso de seguir los pasos del algoritmo.
 En cierto sentido, un algoritmo representa la inteligencia requerida
para resolver un problema.
75.40 - 95.14 Algoritmos y Programación I
Curso Prof. Servetto
4
Ejemplo
Algoritmo de Euclides para encontrar el máximo común
divisor de dos enteros positivos
1.
2.
3.
4.
Asignar a M el valor del mayor de los números de entrada
Asignar a N el valor del menor de los números de entrada
Dividir M entre N y llamar R al residuo
Si R no es 0, entonces asignar a M el valor de N y a N el valor de R y
continuar desde el paso 3, si no, el máximo común divisor es el
valor actual de N
75.40 - 95.14 Algoritmos y Programación I
Curso Prof. Servetto
5
Programación
 Antes que una máquina como una computadora pueda realizar una
tarea, se debe diseñar y representar un algoritmo para ejecutar esa
tarea en una forma que sea compatible con la máquina.
 La representación de un algoritmo para que lo pueda ejecutar una
computadora se denomina programa.
 El proceso de desarrollar programas, codificarlos en formas
compatibles para una máquina e insertarlos en la máquina se
denomina programación.
 Los programas y algoritmos que representan se refieren
colectivamente como software, en contraste con las computadoras
en sí, tanto con sus componentes internos como externos
(periféricos), que se conocen como hardware.
75.40 - 95.14 Algoritmos y Programación I
Curso Prof. Servetto
6
Algoritmos y Programación
 Es a través de la habilidad de capturar y expresar inteligencia (o al
menos comportamiento inteligente) por medio de algoritmos, que se
puede construir máquinas que ejecuten tareas útiles.
 El nivel de inteligencia mostrado por las máquinas está limitado por
la inteligencia que se puede expresar a través de algoritmos.
 Se puede construir una máquina para realizar una tarea sólo si existe
un algoritmo para realizar esa tarea, en cambio, si no existe un
algoritmo para resolver un problema, entonces la solución de ese
problema está más allá de las capacidades de las máquinas.
75.40 - 95.14 Algoritmos y Programación I
Curso Prof. Servetto
7
Algoritmos y Programación
 En 1930, Kurt Gödel publicó su teorema de incompletitud, que
establece que en cualquier teoría matemática que involucre a nuestro
tradicional sistema de aritmética, hay proposiciones cuya verdad o
falsedad no puede establecerse algorítmicamente: cualquier estudio
completo de nuestro sistema aritmético excede las capacidades de la
algoritmia.
 Este teorema impactó los fundamentos de las matemáticas, y el
consecuente estudio de las capacidades de la algoritmia significó el
comienzo de la Ciencia de la Computación o Informática.
75.40 - 95.14 Algoritmos y Programación I
Curso Prof. Servetto
8
Alcance de la Informática
El rol central de los algoritmos en la Informática. Disciplinas de base y campos de la
Informática.
75.40 - 95.14 Algoritmos y Programación I
Curso Prof. Servetto
9
El rol central de los algoritmos en la
Informática
Representación de
Descubrimiento de
Comunicación de
Ejecución de
Limitaciones de
75.40 - 95.14 Algoritmos y Programación I
Análisis de
Algoritmos
Curso Prof. Servetto
Aplicación de
10
Disciplinas Base y Campos de la Informática
Actualmente, la Informática se ha establecido como la Ciencia de los Algoritmos, y sus
campos se basan en disciplinas como matemáticas, ingeniería, psicología, biología,
administración de negocios y lingüística
Algoritmia y
Programación
Descubrir
soluciones
algorítmicas
eficientes de
problemas y
representarlas
para que los
resuelvan
computadoras
Arquitectura
de
Computadoras
Estructura y
organización de
computadoras, y
avances y
aplicación de
tecnologías de
hardware
75.40 - 95.14 Algoritmos y Programación I
Sistemas
Operativos y
Redes
Interfaz entre las
computadoras y el
mundo exterior, y
coordinación de
actividades y asignación
de recursos de una
computadora
Comunicación entre
máquinas, problemas
inherentes y tecnologías
involucradas
Sistemas de
Bases de Datos
Ingeniería de
Software
Inteligencia
Artificial
Almacenamiento y
recuperación de datos
en sistemas de
cómputo, y
combinación de
técnicas para obtener
sistemas de
almacenamiento
masivos centralizados
que puedan dar la
apariencia de tener
una gran cantidad de
organizaciones
apropiadas para varias
aplicaciones
La estructura algorítmica
de los grandes sistemas
automatizados se debe
guiar por un proceso de
ingeniería similar al de
las máquinas mismas
Estudio de la
inteligencia humana y
del comportamiento
inteligente para
diseñar algoritmos
que, o imiten el
razonamiento y la
percepción de la
mente humana, o
cumplan las mismas
funciones de otra
forma en base a las
posibilidades y
ventajas de las
computadoras
Curso Prof. Servetto
En muchos casos en el
desarrollo de sistemas no
hace falta descubrir
algoritmos nuevos sino
identificar qué sistemas
automatizados se necesitan
y cómo van a interactuar
con los ya existentes
11
Campos de Estudio de la Informática
 ¿Qué problemas pueden resolverse mediante procesos algorítmicos?
 ¿Cómo se puede facilitar el descubrimiento de algoritmos?
 ¿Cómo se pueden mejorar las técnicas de representación y
comunicación de algoritmos?
 ¿Cómo se puede analizar y comparar las características de distintos
algoritmos?
 ¿Cómo pueden utilizarse algoritmos para manipular información?
 ¿Cómo pueden aplicarse algoritmos para producir comportamiento
inteligente?
 ¿Cómo afecta a la sociedad la aplicación de algoritmos?
75.40 - 95.14 Algoritmos y Programación I
Curso Prof. Servetto
12
Desarrollo de Máquinas
Algorítmicas
Perspectiva histórica
75.40 - 95.14 Algoritmos y Programación I
Curso Prof. Servetto
13
El ábaco fue uno de los primeros
dispositivos para efectuar
operaciones aritméticas sencillas.
Tiene sus raíces en la antigua
China y también se utilizó en la
civilizaciones Griega y Romana.
75.40 - 95.14 Algoritmos y Programación I
La Rueda de Pascal o Pascalina,
construida por Blaise Pascal
(Francia) con ruedas dentadas, es
considerada una de las
calculadoras más antiguas (1642).
Inicialmente solo permitía realizar
adiciones, pero en el curso de los
diez años siguientes añadió
mejoras, siendo finalmente capaz
de hacer restas.
Curso Prof. Servetto
Gottfried Leibniz (Alemania)
extendió las ideas de Blaise
Pascal y, en 1671, introdujo el
Staffelwalze (tambor de paso,
también conocido como el
Stepped Reckoner o aritmómetro
de Leibniz), un dispositivo que,
así como ejecutaba adiciones y
sustracciones, podía multiplicar,
dividir y sacar raíces cuadradas
mediante una serie de pasos de
adiciones.
14
La máquina analítica es el
diseño de un computador
moderno de uso general
realizado por el profesor
británico de matemáticas
Charles Babbage, que
representó un paso importante
en la historia de la
computación. Fue inicialmente
descrita en 1816, aunque
Babbage continuó refinando el
diseño hasta su muerte en
1871.
75.40 - 95.14 Algoritmos y Programación I
Curta (inventada por Curt Herzstark)
fue una calculadora mecánica
introducida en 1948 en
Liechtenstein. Era pequeña y tenía
una manivela para ser operada.
Podía ser usada para realizar
operaciones de adición, sustracción,
multiplicación, división, y, con más
dificultad, raíces cuadradas y otras
operaciones. El diseño de Curta fue
una variante del aritmómetro de
Leibniz, acumulando valores en
ruedas dentadas, que eran sumados
o complementados por un
mecanismo de tambor de paso.
Curso Prof. Servetto
Mark I, fue el primer ordenador
electromecánico, construido en IBM
y enviado a Harvard en 1944. Tenía
760.000 ruedas y 800 kilómetros de
cable y se basaba en la máquina
analítica de Charles Babbage. El
computador empleaba señales
electromagnéticas para mover las
partes mecánicas. Funcionaba con
relés, se programaba con
interruptores y leía los datos de
cintas de papel perforado.
15
La EDVAC (Electronic Discrete
Variable Automatic Computer) fue
diseñada por John Mauchly y John P.
Eckert en la Univ. de Pennsylvania
(1945). Tanto los programas como
los datos de trabajo estaban
almacenados en un solo espacio de
almacenamiento unificado. Este
diseño básico, que sería conocido
como la arquitectura de von
Neumann, serviría como la base
para el desarrollo de las primeras
computadoras digitales de propósito
general, llamadas de primera
generación (válvulas de vacío).
75.40 - 95.14 Algoritmos y Programación I
El IBM 1401 (1960 a 1964)
llegó a monopolizar casi un
tercio del mercado mundial.
Comprendía perforado y
lectura de tarjetas a alta
velocidad, cinta magnética para
entrada y salida, impresión de
alta velocidad, programa
almacenado, y capacidad
aritmética y lógica. Se destacó
como un sistema de segunda
generación (transistores).
Curso Prof. Servetto
El PET (Personal Electronic
Transactor) fue una de las
primeras computadoras
personales o de tercera
generación, producida por
Commodore a finales de los 70;
éstas se basaban en la invención
de Jack St. Clair Kilby y Robert
Noyce, el circuito integrado (o
microchip), que condujo más
adelante a la invención del
microprocesador, por Ted Hoff y
Federico Faggin en Intel.
16
Evolución Histórica
Orígenes
 Los dispositivos de Pascal y Leibniz (siglo XVII) fueron los antepasados de las
computadoras de escritorio de hoy, y los derivados de estas máquinas,
incluyendo la calculadora Curta (siglo XX), continuaron siendo producidos hasta
que a principios de los años 1970 sus equivalentes electrónicos finalmente
llegaron a ser fácilmente disponibles y baratos.
 El primer intento de Charles Babbage para diseñar una máquina fue la máquina
diferencial, que fue un computador diseñado específicamente para construir
tablas de logaritmos y de funciones trigonométricas evaluando polinomios por
aproximación. Si bien este proyecto no vio la luz por razones económicas y
personales, Babbage comprendió que parte de su trabajo podía ser aprovechado
en el diseño de un computador de propósito general, de manera que inició el
diseño de la máquina analítica (siglo XIX).
75.40 - 95.14 Algoritmos y Programación I
Curso Prof. Servetto
17
Evolución Histórica
La máquina Analítica de Babbage
 La máquina analítica de Babbage debía funcionar con un motor a vapor y habría tenido 30
metros de largo por 10 de ancho. Para la entrada de datos y programas había pensado utilizar
tarjetas perforadas, que era un mecanismo ya utilizado en la época para dirigir diversos equipos
mecánicos (p.e. los telares de Jacquard, 1805). La salida debía producirse por una impresora, un
equipo de dibujo y una campana. La máquina debía también perforar tarjetas que podrían ser
leídas posteriormente. La máquina analítica trabajaba con una aritmética de coma fija en base 10
y poseía una memoria capaz de almacenar 1.000 números de 50 dígitos cada uno. Una unidad
aritmética estaría encargada de realizar las operaciones aritméticas.
 Augusta Ada Byron, Condesa de Lovelace, publicó un artículo (mediados del siglo XIX) en el que
demostraba cómo la máquina analítica podía programarse. Como reconocimiento a su trabajo,
ella ha sido descrita en muchas ocasiones como la primera programadora. El Lenguaje de
programación Ada, actualmente utilizado, lleva su nombre.
75.40 - 95.14 Algoritmos y Programación I
Curso Prof. Servetto
18
Evolución Histórica
Siglo XIX
 1854: el lógico inglés George Boole publica su Álgebra de Boole. El sistema
de Boole redujo a argumentos lógicos las permutaciones de tres operadores
básicos algebraicos: y, o, y no. A causa del desarrollo del álgebra de Boole,
Boole es considerado por muchos como el padre de la teoría de la
informática.
 1869: La primera máquina lógica en usar el álgebra de Boole para resolver
problemas más rápido que humanos, fue inventada por William Stanley Jevons.
La máquina, llamada el piano lógico, usó un alfabeto de cuatro términos lógicos
para resolver silogismos complicados.
75.40 - 95.14 Algoritmos y Programación I
Curso Prof. Servetto
19
Evolución Histórica
Siglo XIX
 1879: a los 19 años de edad, Herman Hollerith es contratado como
asistente en las oficinas del censo estadounidense y desarrolló un sistema
de cómputo mediante tarjetas perforadas en las que los agujeros
representaban información sobre el sexo o la edad, entre otros. Gracias a
la máquina tabuladora de Hollerith el censo de 1890 se realizó en dos años y
medio, cinco menos que el censo de 1880. Se tardaba tanto en hacer el censo
debido a la llegada masiva de inmigrantes.
 1884: Dorr Felt desarrolló su comptómetro, el cual fue la primera
calculadora que se operaba con sólo presionar teclas en vez de, por ejemplo,
deslizar ruedas.
75.40 - 95.14 Algoritmos y Programación I
Curso Prof. Servetto
20
Evolución Histórica
Siglo XX
 1906: el estadounidense Lee De Forest inventa el tubo de vacío. El Audion, como
se llamaba, tenía tres elementos dentro de una bombilla del vidrio evacuada. Los
elementos eran capaces de hallar y amplificar señales de radio recibidas de
una antena. El tubo al vacío encontraría uso en varias generaciones
tempranas de 5 computadoras, a comienzos de 1930.
 1919: los inventores estadounidenses W. H. Eccles y F. W. Jordan desarrollan el
primer circuito multivibrador o biestable (en léxico electrónico flip-flop). El flipflop permitió diseñar circuitos electrónicos que podían tener dos estados
estables, alternativamente, pudiendo representar así el 0 como un estado y el
otro con un 1. Esto formó la base del almacenamiento y proceso del bit binario,
estructura que utilizan las actuales computadoras.
75.40 - 95.14 Algoritmos y Programación I
Curso Prof. Servetto
21
Evolución Histórica
Siglo XX
 1931: Kurt Gödel publicó un documento sobre los lenguajes formales
basados en operaciones aritméticas. Lo usó para codificar arbitrariamente
sentencias y pruebas formales, y mostró que los sistemas formales, como
las matemáticas tradicionales, son inconsistentes en un cierto sentido, o que
contienen sentencias improbables pero ciertas. Sus resultados son
fundamentales en las ciencias teóricas de la computación.
 1936: Alan Turing describe la máquina de Turing, la cual formaliza el concepto de
algoritmo.
 1936: Konrad Zuse completa la primera computadora electromecánica,
aunque no 100% operativa, la Z1.
75.40 - 95.14 Algoritmos y Programación I
Curso Prof. Servetto
22
Evolución Histórica
Siglo XX
 1938: se encuentra la primera generación de computadoras que eran a base
de tubos de vacío, esta generación abarca desde 1938 hasta 1958 donde inicia
la segunda generación.
 1940: Samuel Williams y George Stibitz completaron en los laboratorios Bell
una calculadora electromecánica que podía manejar números complejos.
 1941: la computadora Z3 fue creada por Konrad Zuse. Fue la primera
máquina programable y completamente automática.
 1942: John Vincent Atanasoff y Clifford Edward Berry completaron una
calculadora de propósito especial para resolver sistemas de ecuaciones
lineales simultáneas, la cual fue llamada la "ABC " (Atanasoff Berry
Computer).
75.40 - 95.14 Algoritmos y Programación I
Curso Prof. Servetto
23
Evolución Histórica
Siglo XX
 1944: en Estados Unidos se construyó, en la Universidad de Harvard, la Harvard
Mark I (primera máquina electromecánica), diseñada por un equipo encabezado
por Howard H. Aiken.
 1944: en Inglaterra se construyeron los ordenadores Colossus (Colossus Mark
I y Colossus Mark 2), con el objetivo de descifrar las comunicaciones de los
alemanes durante la Segunda guerra mundial.
 1946: en la Universidad de Pensilvania se construye la ENIAC (Electronic
Numerical Integrator And Calculator), que fue la primera computadora
electrónica de propósito general. Esta máquina ocupaba todo un sótano de la
Universidad, tenía más de 18.000 tubos de vacío, consumía 200 kW de energía
eléctrica y requería todo un sistema de aire acondicionado; tenía la
capacidad para realizar cinco mil operaciones aritméticas por segundo.
75.40 - 95.14 Algoritmos y Programación I
Curso Prof. Servetto
24
Evolución Histórica
Siglo XX
 1947: en Laboratorios Bell, John Bardeen, Walter H. Brattain y William
Shockley inventan el transistor.
 1949: Jay Forrester desarrolla la primera memoria, la cual reemplazó los no
confiables tubos al vacío como la forma predominante de memoria por los
próximos diez años.
 1950: Alan Turing expone un artículo que describe lo que ahora conocemos
como la prueba de Turing. Su publicación explora el desarrollo natural y
potencial de la inteligencia y comunicación humana y de computadoras.
 1951: comienza a operar la EDVAC, a diferencia de la ENIAC, no era decimal, sino
binaria y tuvo el primer programa diseñado para ser almacenado.
 1953: se crean memorias a base de magnetismo (conocidas como memorias
de núcleos magnéticos).
75.40 - 95.14 Algoritmos y Programación I
Curso Prof. Servetto
25
Evolución Histórica
Siglo XX
 1953: IBM fabrica su primera computadora a escala industrial, la IBM 650.
Se amplía el uso del lenguaje ensamblador para la programación de las
computadoras.
 1954: se desarrolla el lenguaje de programación de alto nivel Fortran.
 1956: Darthmouth da una conferencia en a partir de la que nace el
concepto de inteligencia artificial.
 1957: IBM pone a la venta la primera impresora de matriz de puntos.
 1958: comienza la segunda generación de computadoras, caracterizados por
usar circuitos transistorizados en vez de válvulas al vacío.
 1960: se desarrolla COBOL, el primer lenguaje de programación de alto
nivel transportable entre modelos diferentes de computadoras.
75.40 - 95.14 Algoritmos y Programación I
Curso Prof. Servetto
26
Evolución Histórica
Siglo XX
 1960: aparece ALGOL, el primer lenguaje de programación estructurado y
orientado a los procedimientos.
 1960: se crea el primer compilador de computador.
 1962: un comité industrial gubernamental define el código estándar de caracteres
ASCII.
 1963: DEC (Digital Equipment Corporation) lanza el primer minicomputador
comercialmente exitoso.
 1964: la aparición del IBM 360 marca el comienzo de la tercera generación de
computadoras. Las placas de circuito impreso con múltiples componentes
elementales pasan a ser reemplazadas con placas de circuitos integrados.
 1964: aparece el CDC 6600, la primera supercomputadora comercialmente
disponible.
75.40 - 95.14 Algoritmos y Programación I
Curso Prof. Servetto
27
Evolución Histórica
Siglo XX
 1964: en el Dartmouth College, John George Kemeny y Thomas Eugene Kurtz
desarrollan el lenguaje BASIC (el Dartmouth BASIC).
 1966: la mayoría de ideas y conceptos que existían sobre redes se aplican a la
red militar ARPANET.
 1966: aparecen los primeros ensayos que más tarde definirían lo que hoy es la
programación estructurada.
 1967: en IBM, David Noble ―bajo la dirección de Alan Shugart― inventa el
disquete (disco flexible).
 1969: en los laboratorios Bell de AT&T, un grupo de empleados de dicho laboratorio
entre los que se encuentran Ken Thompson, Dennis Ritchie y Douglas Mcllroy―
crean el sistema operativo Unix.
 1970: el profesor suizo Niklaus Wirth desarrolla el lenguaje de programación Pascal.
75.40 - 95.14 Algoritmos y Programación I
Curso Prof. Servetto
28
Evolución Histórica
Siglo XX
 1971: Intel presenta el primer procesador comercial y a la vez el primer chip
microprocesador, el Intel 4004.
 1971: Ray Tomlinson crea el primer programa para enviar correo electrónico.
Como consecuencia, la arroba se usa por primera vez con fines informáticos.
 1971: en el MIT, un grupo de investigadores presentan la propuesta del primer
"Protocolo para la transmisión de archivos en Internet" (FTP).
 1972: en los Laboratorios Bell, Ken Thompson y Dennis M. Ritchie crean el
lenguaje de programación C.
 1973: La división de investigación Xerox PARC desarrollo el primer ordenador que
utilizó el concepto de Computadora de Escritorio llamado Xerox Alto, además de
ser el primer ordenador en utilizar una interfaz gráfica (GUI) y un mouse.
75.40 - 95.14 Algoritmos y Programación I
Curso Prof. Servetto
29
Evolución Histórica
Siglo XX
 1974: Vint Cerf y Robert Kahn crean el TCP (protocolo de control de transmisión).
 1974: Se crea el sistema Ethernet para enlazar a través de un cable único a las
computadoras de una LAN (red de área local).
 1974: Gary Kildall crea el sistema operativo CP/M (Control Program for
Microcomputer). Violando sus derechos de autor, se desarrolla el sistema operativo MSDOS.
 1981: se lanza al mercado el IBM PC, que se convertiría en un éxito comercial,
marcaría una revolución en el campo de la computación personal y definiría nuevos
estándares.
 1981: se termina de definir el protocolo TCP/IP.
 1981: Apple presenta el primer computador personal que se vende a gran escala, el
Apple II.
75.40 - 95.14 Algoritmos y Programación I
Curso Prof. Servetto
30
Evolución Histórica
Siglo XX
 1982: creación del protocolo SMTP, que permitía por primera vez el intercambio
de correos electrónicos en ARPANET.
 1983: Compaq fabrica el primer clon PC IBM compatible, el Compaq portable.
 1983: ARPANET se separa de la red militar que la originó, de modo que, ya sin
fines militares, se puede considerar esta fecha como el nacimiento de Internet.
 1983: Bjarne Stroustrup publica el lenguaje de programación C++.
 1984: las compañías Philips y Sony crean los CDRoms para computadores.
 1984: HewlettPackard lanza su popular impresora láser llamada LaserJet.
 1990: Tim Berners Lee idea el hipertexto para crear la World Wide Web (www)
una nueva manera de interactuar con Internet. También creó las bases del protocolo
de transmisión HTTP, el lenguaje de documentos HTML y el concepto de los URL.
75.40 - 95.14 Algoritmos y Programación I
Curso Prof. Servetto
31
Evolución Histórica
Siglos XX y XXI
 1991: Linus Torvalds comenzó a desarrollar Linux, un sistema operativo compatible
con Unix.
 1991: comienza a popularizarse la programación orientada a objetos.
 1991: surge la primera versión del estándar Unicode.
 1995: se especifica la versión 1.5 del DVD, base actual del DVD.
 1996: se crea Internet2, más veloz que la Internet original.
 2000: un equipo de investigadores de IBM construye el prototipo de computador
cuántico.
 2007: La empresa Dell lanza al mercado la primera computadora portátil (laptop)
con la distribución Linux Ubuntu preinstalada.
 2007: Apple lanza el iPhone 2G.
75.40 - 95.14 Algoritmos y Programación I
Curso Prof. Servetto
32
Repercusiones Sociales
Sobre cómo el progreso de la informática repercute en los principios y la
organización de la sociedad.
75.40 - 95.14 Algoritmos y Programación I
Curso Prof. Servetto
33
Principales Áreas de Repercusión
 El derecho: cuestionamientos sobre los derechos de la propiedad
intelectual y las obligaciones que generan.
 La Ética: desafíos frente a los cambios en el comportamiento social.
 El Gobierno: debates sobre el alcance de las regulaciones sobre las
tecnologías informáticas y sus aplicaciones.
 La Filosofía: disputas sobre la presencia de comportamiento
inteligente o de inteligencia en sí misma.
 La sociedad en general: cuestionamientos acerca de si las nuevas
aplicaciones implican más libertad o nuevos controles.
75.40 - 95.14 Algoritmos y Programación I
Curso Prof. Servetto
34
Enfoques Éticos según los Principios que
Conducen a las Decisiones
 Éticas basadas en las consecuencias: analizan las consecuencias frente
a varias opciones. P. e. el utilitarismo entiende que la decisión
“correcta” es aquella que produce el mayor bien para el mayor
número de personas. Parecería resolver el dilema ético, pero por otro
lado permitiría que la mayoría de la sociedad esclavice a una minoría.
 La ética que inherentemente enfatiza las consecuencias tiende a ver
al ser humano como un medio para un fin menospreciando su
individualidad.
75.40 - 95.14 Algoritmos y Programación I
Curso Prof. Servetto
35
Enfoques Éticos según los Principios que
Conducen a las Decisiones
 La ética basada en el “deber” no toma en consideración las decisiones
y sus consecuencias sino que propone que los miembros de la
sociedad tienen obligaciones y deberes que son el fundamento para
la toma de decisiones. P. e. si uno acepta como obligación el respeto
por el otro, entonces rechaza la esclavitud.
 Opositores a la ética basada en el “deber” sostienen que no puede
resolver problemas que involucren deberes que entran en conflicto:
p. e. ¿se debe decir la verdad aún violando una confidencia de un
colega? ¿debe una nación defenderse en una guerra aún si el
resultado de las batallas conducen a la muerte de muchos de sus
ciudadanos?
75.40 - 95.14 Algoritmos y Programación I
Curso Prof. Servetto
36
Enfoques Éticos según los Principios que
Conducen a las Decisiones
 La ética basada en el “contrato” imagina una sociedad sin
fundamentos éticos: los individuos deben valerse por sí mismos y
estar permanentemente en guardia contra agresiones de otros.
Propone que los miembros de la sociedad deberían realizar contratos
entre ellos, p. e. yo no te robo si tu no me robas.
 Opositores a la ética basada en el “contrato” sostienen que no
provee una base lo suficientemente amplia para resolver dilemas
éticos ya que sólo provee pautas de comportamiento para contratos
establecidos (se puede hacer lo que uno quiera ante situaciones no
cubiertas por un contrato).
75.40 - 95.14 Algoritmos y Programación I
Curso Prof. Servetto
37
Enfoques Éticos según los Principios que
Conducen a las Decisiones
 La ética basada en la virtud ( Platón / Aristóteles) sostiene que el
“buen comportamiento” no es el resultado de aplicar normas sino
que deviene del “buen carácter”.
 Es la ética basada en caracteres la que subyace en el enfoque
normalmente tomado cuando se enseña ética a los profesionales de
diversos campos. En lugar de presentar teorías éticas específicas, el
enfoque es introducir casos de estudio que exponen a una variedad
de cuestiones éticas en las áreas de especialización de los
profesionales. Entonces, al discutir los pro y contras en estos casos,
los profesionales se vuelven más conscientes, perspicaces, y sensibles
a los peligros que acechan en su vida profesional y así crecen en
carácter.
75.40 - 95.14 Algoritmos y Programación I
Curso Prof. Servetto
38
Cuestiones Sociales
 Generalmente, se acepta que la sociedad es diferente de lo que hubiera
sido sin la revolución de la computación. Nuestra sociedad ¿es mejor de lo
que hubiera sido sin esta revolución? ¿es peor? Si su posición en la
sociedad fuera otra ¿su respuesta cambiaría?
 ¿Es aceptable participar en la sociedad tecnológica de hoy sin tratar de
entender lo básico de la tecnología?
 Usando dinero en efectivo en transacciones comerciales, la gente maneja
sus finanzas sin pagar costos de servicios financieros, pero la mayor parte
de estos servicios se cobran. P. e. si un empleador le paga a sus empleados
únicamente con cheques y todas las instituciones financieras cobran por el
servicio de cheques ¿podría tratarse de un trato discriminatorio? ¿qué
pasa si el empleador insiste en pagar sólo con cheques?
75.40 - 95.14 Algoritmos y Programación I
Curso Prof. Servetto
39
Cuestiones Sociales
 En el campo de la educación, a medida que avanzan las tecnologías se debe reconsiderar
el nivel de abstracción con el que se presentan los temas ¿Cómo afecta el uso de
calculadoras las habilidades para resolver problemas matemáticos? ¿Cómo afectan las
correcciones ortográficas y gramaticales el dominio de la ortografía y la gramática? ¿Qué
otros ejemplos se pueden encontrar que involucren controversias similares?
 El concepto de bibliotecas públicas se basa en la premisa de que todos los individuos
deben tener acceso a la información ¿Se puede decir que Internet cumple esa premisa?
 A medida que la sociedad se automatiza es más fácil para los gobiernos controlarnos,
esto ¿es bueno o malo?
 La sociedad es demasiado dependiente de las tecnologías de información y
comunicación ¿Qué pasaría se hubiera una interrupción a largo plazo de internet y/o de
la telefonía celular?
 El sistema GPS de los teléfonos inteligentes permite que ciertas aplicaciones detecten la
localización de otros teléfonos ¿Esto es bueno? ¿Qué riesgos entraña?
75.40 - 95.14 Algoritmos y Programación I
Curso Prof. Servetto
40
Arquitectura de Computadoras
Diseño conceptual y estructura operacional fundamental de un sistema de
computadora
75.40 - 95.14 Algoritmos y Programación I
Curso Prof. Servetto
41
Computadora
 La computadora (del inglés: computer; y este del latín: computare, 'calcular'),
también denominada computador u ordenador (del francés: ordinateur; y este
del latín: ordinator), es una máquina electrónica que recibe y procesa datos para
convertirlos en información conveniente y útil. Una computadora está formada,
físicamente, por numerosos circuitos integrados y otros muchos componentes de
apoyo, extensión y accesorios, que en conjunto pueden ejecutar tareas diversas
con suma rapidez y bajo el control de un programa.
 Desde el punto de vista funcional es una máquina que posee, al menos, una
unidad central de procesamiento, una memoria principal y algún periférico o
dispositivo de entrada y otro de salida. Los dispositivos de entrada permiten el
ingreso de datos, la CPU se encarga de su procesamiento (ejecución de
programas y operaciones arimético-lógicas) y los dispositivos de salida los
comunican a otros medios.
75.40 - 95.14 Algoritmos y Programación I
Curso Prof. Servetto
42
Computadora
 La computadora recibe datos, los procesa y emite la información
resultante, la que luego puede ser interpretada, almacenada, transmitida a
otra máquina o dispositivo o sencillamente impresa; todo ello a criterio de
un operador o usuario y bajo el control de un programa.
 Básicamente, la capacidad de una computadora depende de sus
componentes de hardware, en tanto que la diversidad de tareas radica
mayormente en el software que admita ejecutar y contenga instalado.
 Una computadora digital representa toda la información usando el sistema
binario. Texto, números, imágenes, sonido y casi cualquier otra forma de
información puede ser transformada en una sucesión de bits, o dígitos
binarios, cada uno de los cuales tiene un valor de 1 o 0. La unidad de
almacenamiento más común es el byte, igual a 8 bits.
75.40 - 95.14 Algoritmos y Programación I
Curso Prof. Servetto
43
Componentes
 Las tecnologías utilizadas en computadoras digitales han
evolucionado mucho desde la aparición de los primeros modelos en
los años 1940, aunque la mayoría todavía utiliza la Arquitectura de
von Neumann, publicada por John von Neumann a principios de esa
década, que otros autores atribuyen a John Presper Eckert y John
William Mauchly.
 La arquitectura de Von Neumann describe una computadora con tres
(3) componentes principales: la unidad central de procesamiento, la
memoria primaria, principal o central, y los dispositivos de entrada y
salida (E/S). Estas partes están interconectadas por canales de
conductores denominados buses.
75.40 - 95.14 Algoritmos y Programación I
Curso Prof. Servetto
44
Unidad Central de Procesamiento
 La unidad central de procesamiento (del inglés Central Processing Unit, CPU), es
el hardware dentro de un computador u otros dispositivos programables, que ejecuta
las instrucciones de un programa mediante la realización de las operaciones básicas aritméticas,
lógicas y de entrada/salida del sistema.
 Una computadora puede tener más de una CPU; esto se llama multiprocesamiento. Todas las
CPU modernas son microprocesadores, lo que significa que contienen un solo chip. Algunos
circuitos integrados (CI) pueden contener varias CPU en un solo chip; estos CI son denominados
procesadores multi-core o multinúcleo. Un CI que contiene una CPU también puede contener los
dispositivos periféricos, y otros componentes de un sistema informático; esto se llama un sistema
en un chip (SoC).
 No todos los sistemas computacionales se basan en una unidad central de procesamiento. Una
matriz de procesadores o procesador vectorial tiene múltiples elementos de cómputo en
paralelo, sin una unidad considerada el "centro". En el modelo de computación distribuida, se
resuelven problemas mediante un conjunto interconectado y distribuido de procesadores.
75.40 - 95.14 Algoritmos y Programación I
Curso Prof. Servetto
45
Unidad Central de Procesamiento
Una unidad central de procesamiento o CPU consta básicamente de los siguientes tres elementos:
 La unidad aritmético lógica (ALU, por sus siglas del inglés: Arithmetic-Logic Unit) es el dispositivo diseñado y
construido para llevar a cabo las operaciones elementales como las operaciones aritméticas, operaciones
lógicas (Y, O, NO), y operaciones de comparación o relacionales. En esta unidad es en donde se hace todo el
trabajo computacional.
 La unidad de control (UC) sigue la dirección de las posiciones en memoria que contienen la instrucción que
el computador va a realizar en ese momento; recupera la información poniéndola en la ALU para la
operación que debe desarrollar. Transfiere luego el resultado a ubicaciones apropiadas en la memoria. Una
vez que ocurre lo anterior, la unidad de control va a la siguiente instrucción (normalmente situada en la
siguiente posición, a menos que la instrucción sea una instrucción de salto, informando al ordenador de que
la próxima instrucción estará ubicada en otra posición de la memoria).
 Los registros: memorias de alta velocidad y poca capacidad que permiten guardar transitoriamente y
acceder a valores muy usados, generalmente en operaciones matemáticas.
Los procesadores pueden constar además de otras unidades adicionales como la unidad de coma flotante.
75.40 - 95.14 Algoritmos y Programación I
Curso Prof. Servetto
46
Memoria Primaria
 La memoria primaria, conocida como memoria de acceso aleatorio (RAM, por sus siglas del inglés: RandomAccess Memory), se compone de celdas de almacenamiento de bits numeradas, que contienen los
programas en ejecución y datos con que operan. Está directamente conectada a la CPU a través de buses de
direcciones (para seleccionar la dirección del dato o del periférico al que se quiere acceder), datos (por
donde circulan los datos) y control (para seleccionar la operación a realizar sobre el dato -lectura, escritura o
modificación).
 Se dice que es de acceso aleatorio porque la CPU puede acceder a cualquier celda por su número o
dirección en la misma cantidad de tiempo, sea para copiar su contenido a un registro o viceversa.
Actualmente, las celdas de memoria tienen capacidades de almacenamiento para 32 o 64 bits.
 La gran diferencia de velocidad entre el procesador y la memoria primaria dio origen a la memoria caché, de
muy alta velocidad, típicamente entre 10 y 100 veces más que la memoria primaria, y que se emplea para
mejorar la eficiencia o rendimiento del CPU. Parte de la información de la memoria principal se duplica en la
memoria caché. Comparada con los registros, la caché es ligeramente más lenta, pero de mayor capacidad.
Sin embargo, es más rápida, aunque de mucha menor capacidad que la memoria principal.
75.40 - 95.14 Algoritmos y Programación I
Curso Prof. Servetto
47
Unidad Central de Procesamiento
Memoria Central
Unidad
aritmético-lógica
Bus
…
Unidad de control
Registros
75.40 - 95.14 Algoritmos y Programación I
Curso Prof. Servetto
48
Limitaciones Tecnológicas
 El canal o bus de transmisión de los datos compartido entre CPU y memoria genera un
cuello de botella de Von Neumann, un rendimiento limitado (tasa de transferencia de
datos) entre la CPU y la memoria en comparación con la cantidad de memoria. En la
mayoría de computadoras modernas, la velocidad de comunicación entre la memoria y la
CPU es más baja que la velocidad a la que puede trabajar esta última, reduciendo el
rendimiento del procesador y limitando seriamente la velocidad de proceso eficaz, sobre
todo cuando se necesitan procesar grandes cantidades de datos. La CPU se ve forzada a
esperar continuamente a que lleguen los datos necesarios desde o hacia la memoria.
 El problema de rendimiento puede ser aliviado (hasta cierto punto) utilizando diversos
mecanismos: introduciendo una memoria caché entre la CPU y la memoria principal,
proporcionando cachés separadas y buses independientes para datos e instrucciones (la
llamada arquitectura Harvard modificada), utilizando algoritmos y lógica de predicción de
saltos, e implementando un mecanismo de procesamiento adelantado de instrucciones
(pipelining).
75.40 - 95.14 Algoritmos y Programación I
Curso Prof. Servetto
49
Memoria Secundaria
 La memoria primaria está directamente conectada a la CPU de la
computadora. Se puede transferir información muy rápidamente entre un
registro del microprocesador y localizaciones de la memoria principal.
 La memoria secundaria requiere que la computadora use sus canales de
entrada/salida para acceder a la información y se utiliza para
almacenamiento a largo plazo de información persistente. Sin embargo, la
mayoría de los sistemas operativos usan los dispositivos de
almacenamiento secundario como área de intercambio para incrementar
artificialmente la cantidad aparente de memoria principal en la
computadora (a esta utilización del almacenamiento secundario se le
denomina memoria virtual). La memoria secundaria también se llama de
«almacenamiento masivo». Un disco duro es un ejemplo de
almacenamiento secundario.
75.40 - 95.14 Algoritmos y Programación I
Curso Prof. Servetto
50
Memoria Secundaria
 Habitualmente, la memoria secundaria o de almacenamiento masivo tiene
mayor capacidad que la memoria primaria, pero es mucho más lenta. El
tiempo necesario para acceder a un byte de información dado almacenado
en un disco duro de platos magnéticos es de unas milésimas de segundo
(milisegundos). En cambio, el tiempo para acceder al mismo tipo de
información en una memoria de acceso aleatorio (RAM) se mide en milmillonésimas de segundo (nanosegundos).
 Esto ilustra cuan significativa es la diferencia entre la velocidad de las
memorias de estado sólido y la velocidad de los dispositivos rotantes de
almacenamiento magnético u óptico: los discos duros son del orden de un
millón de veces más lentos que la memoria primaria.
75.40 - 95.14 Algoritmos y Programación I
Curso Prof. Servetto
51
Almacenamiento y Manipulación
de Bits
Información binaria, operaciones booleanas y notación hexadecimal
75.40 - 95.14 Algoritmos y Programación I
Curso Prof. Servetto
52
Información Binaria
 Dentro de las computadoras actuales, la información se codifica en
patrones de ceros y unos. Estos dígitos binarios se denominan bits (del
inglés binary digits).
 Se utilizan patrones de bits para representar instrucciones a la
computadora, valores numéricos, caracteres alfabéticos y signos de
puntuación, imágenes y sonido.
 Para entender cómo se almacenan y manipulan bits individuales dentro de
una computadora, conviene imaginar que el 0 representa al valor falso, y el
1 al valor verdadero.
 Las operaciones que manipulan valores verdadero/falso se denominan
booleanas, en honor al matemático George Boole (1815–1864), quien fue
un pionero en el campo de la lógica matemática.
75.40 - 95.14 Algoritmos y Programación I
Curso Prof. Servetto
53
Operaciones Booleanas
Tres de las operaciones básicas
son Y (AND), O (OR) y O
EXCLUSIVO (XOR – eXclusive OR),
que son similares a las
aritméticas de multiplicación y
suma debido a que combinan a
dos valores de entrada para
producir un tercero como
resultado, pero con valores
verdadero/falso en vez de
numéricos.
75.40 - 95.14 Algoritmos y Programación I
Conjunción
Disyunción
Disyunción Exclusiva
Curso Prof. Servetto
54
Operaciones Booleanas
Lógica Proposicional Bivalente Extensional
 Las operaciones AND, OR y XOR reflejan la verdad o falsedad de una
proposición lógica compuesta por la conjunción, disyunción o
disyunción exclusiva de dos proposiciones simples. Sus
representaciones simbólicas usuales son: P  Q, P  Q, P  Q.
 Otra operación básica es NO (NOT), que difiere de las anteriores
porque sólo tiene un valor de entrada. Su resultado es el opuesto al
valor de entrada: si la entrada es el valor verdadero, entonces el
resultado es falso, y viceversa.
 La operación NOT refleja la verdad o falsedad de la negación de una
proposición simple:  P.
75.40 - 95.14 Algoritmos y Programación I
Curso Prof. Servetto
55
Notación Hexadecimal
 Para considerar las actividades internas de una
computadora se debe tratar con patrones o strings
(sucesiones, cadenas o secuencias) de bits. Las
secuencias largas de bits se denominan a menudo
streams (oleada o sarta) de bits.
 Los streams son difíciles de interpretar para la mente
humana, y sus transcripciones resultan tediosas y
propensas a errores. Para simplificar la representación
de tales patrones de bits, conviene usar una notación
abreviada llamada hexadecimal, que toma ventaja del
hecho de que los patrones dentro de una computadora
tienen longitudes múltiplo de 4.
 En particular, la notación hexadecimal usa un símbolo
simple (dígito hexadecimal) para representar un patrón
de 4 bits.
75.40 - 95.14 Algoritmos y Programación I
Curso Prof. Servetto
Patrón de Bits
Dígito
Hexadecimal
0000
0
0001
1
0010
2
0011
3
0100
4
0101
5
0110
6
0111
7
1000
8
1001
9
1010
A
1011
B
1100
C
1101
D
1110
E
1111
F
56
Descargar