Unidad 1: Algoritmos y Programas
Unidad 1: Algoritmos y Programas
Unidad 1: Algoritmos y Programas
http://creativecommons.org/licenses/by-nc-sa/2.5/es/legalcode.es
(3)
(unidad 1)
algoritmos y
programas
(1.1) esquema de la unidad
(1.1) computadora y sistema operativo___________________________________________________ 6
(1.1.1) computadora............................................................................................................................................................. 6
(1.1.2) hardware y software................................................................................................................................................8
(1.1.3) Sistema Operativo....................................................................................................................................................8
(1.2) codificación de la información______________________________________________________11
(1.2.1) introducción............................................................................................................................................................... 11
(1.2.2) sistemas numéricos.................................................................................................................................................. 11
(1.2.3) sistema binario de numeración.......................................................................................................................... 13
(1.2.4) representación de texto en el sistema binario ............................................................................................... 13
(1.2.5) representación binaria de datos no numéricos ni de texto ........................................................................ 14
(1.2.6) múltiplos para medir dígitos binarios............................................................................................................... 14
(1.3) algoritmos________________________________________________________________________ 15
(1.3.1) noción de algoritmo ............................................................................................................................................... 15
(1.3.2) características de los algoritmos......................................................................................................................... 16
(1.3.3) elementos que conforman un algoritmo......................................................................................................... 16
(1.3.4) fases en la creación de algoritmos..................................................................................................................... 17
(1.4) aplicaciones ______________________________________________________________________ 17
(1.4.1) programas y aplicaciones ..................................................................................................................................... 17
(1.4.2) historia del software. La crisis del software..................................................................................................... 17
(1.4.3) el ciclo de vida de una aplicación ..................................................................................................................... 18
(1.5) errores ___________________________________________________________________________ 20
(1.6) lenguajes de programación _______________________________________________________ 21
(1.6.1) breve historia de los lenguajes de programación .......................................................................................... 21
(1.6.2) tipos de lenguajes ................................................................................................................................................. 26
(1.6.3) intérpretes ............................................................................................................................................................... 27
(1.6.4) compiladores.......................................................................................................................................................... 28
(1.7) programación ____________________________________________________________________ 29
(1.7.1) introducción ............................................................................................................................................................. 29
(1.7.2) programación desordenada .............................................................................................................................. 29
(1.7.3) programación estructurada............................................................................................................................... 29
(1.7.4) programación modular.......................................................................................................................................30
(1.7.5) programación orientada a objetos ..................................................................................................................30
(5)
fundamentos de programación
(Unidad 1) algoritmos y programas
(1.8) índice de ilustraciones ____________________________________________________________ 31
(6)
1er curso de administración de sistemas informáticos
autor: Jorge Sánchez – www.jorgesanchez.net
En definitiva los componentes sobre los que actualmente se hace referencia son:
♦ Procesador. Núcleo digital en el que reside la CPU del ordenador. Es la
parte fundamental del ordenador, la encargada de realizar todas las
tareas.
♦ Placa base. Circuito interno al que se conectan todos los componentes
del ordenador, incluido el procesador.
♦ Memoria RAM. Memoria principal del ordenador, formada por un circuito
digital que está conectado mediante tarjetas a la placa base. Su contenido
se pierde cuando se desconecta al ordenador. Lo que se almacena no es
permanente. Mientras el ordenador está funcionando contiene todos los
programas y datos con los que el ordenador trabaja.
♦ Memoria caché. Memoria ultrarrápida de características similares a la
RAM, pero de velocidad mucho más elevada por lo que se utiliza para
almacenar los últimos datos utilizados de la memoria RAM.
♦ Periféricos. Aparatos conectados al ordenador mediante tarjetas o
ranuras de expansión (también llamados puertos). Los hay de entrada
(introducen datos en el ordenador: teclado, ratón, escáner,...), de salida
(muestran datos desde el ordenador: pantalla, impresora, altavoces,...) e
incluso de entrada/salida (módem, tarjeta de red).
♦ Unidades de almacenamiento. En realidad son periféricos, pero que
sirven para almacenar de forma permanente los datos que se deseen del
ordenador. Los principales son el disco duro (unidad de gran tamaño
interna al ordenador), la disquetera (unidad de baja capacidad y muy
lenta, ya en desuso), el CD-ROM y el DVD.
(8)
1er curso de administración de sistemas informáticos
autor: Jorge Sánchez – www.jorgesanchez.net
(9)
fundamentos de programación
(Unidad 1) algoritmos y programas
1995
1996
1997
1998
S.E.
1999
Professional Server
Microsoft
2000 Windows
Millenium Edition
2001
Home Professional
2002
2003
2004
2005
2006
Versiones
2007 Versiones Business,
Home Enterprise
2008 y Ultimate
♦ Unix. Sistema operativo muy robusto para gestionar redes de todos los
tamaños. Actualmente en desuso debido al uso de Linux (que está
basado en Unix), aunque sigue siendo muy utilizado para gestionar
grandes redes (el soporte sigue siendo una de las razones para que se
siga utilizando)
♦ Solaris. Versión de Unix para sistemas de la empresa Sun.
♦ Linux. Sistema operativo de código abierto, lo que significa que el código
fuente está a disposición de cualquier programador, lo que permite
adecuar el sistema a las necesidades de cada usuario.
Esta libertad ha hecho que posea numerosas distribuciones, muchas de
ellas gratuitas. La variedad de distribuciones y opciones complica su
(10)
1er curso de administración de sistemas informáticos
autor: Jorge Sánchez – www.jorgesanchez.net
(11)
fundamentos de programación
(Unidad 1) algoritmos y programas
La historia ha demostrado que los sistemas posicionales son mucho mejores para
los cálculos matemáticos por lo que han retirado a los no posicionales. La razón:
las operaciones matemáticas son más sencillas utilizando sistemas posicionales.
Todos los sistemas posicionales tienen una base, que es el número total de
símbolos que utiliza el sistema. En el caso de la numeración decimal la base es
10; en el sistema binario es 2.
El Teorema Fundamental de la Numeración permite saber el valor decimal
que tiene cualquier número en cualquier base. Dicho teorema utiliza la fórmula:
Donde:
♦ Xi Es el símbolo que se encuentra en la posición número i del número que
se está convirtiendo. Teniendo en cuenta que la posición de las unidades
es la posición 0 (la posición -1 sería la del primer decimal)
♦ B Es la base del sistemas que se utiliza para representar al número
Por ejemplo si tenemos el número 153,6 utilizando e sistema octal (base ocho), el
paso a decimal se haría:
(12)
1er curso de administración de sistemas informáticos
autor: Jorge Sánchez – www.jorgesanchez.net
39:2 = 19 resto 1
19:2 = 9 resto 1
9:2 = 4 resto 1
4:2 = 2 resto 0
2:2 = 1 resto 0
1:2 = 0 resto 1
Ahora las cifras binarias se toman al revés. Con lo cual, el número 100111 es
el equivalente en binario de 39.
(13)
fundamentos de programación
(Unidad 1) algoritmos y programas
(14)
1er curso de administración de sistemas informáticos
autor: Jorge Sánchez – www.jorgesanchez.net
(1.4) algoritmos
(1.4.1) noción de algoritmo
Según la RAE: conjunto ordenado y finito de operaciones que permite hallar
la solución de un problema.
Los algoritmos, como indica su definición oficial, son una serie de pasos que
permiten obtener la solución a un problema. La palabra algoritmo procede del
matemático Árabe Mohamed Ibn Al Kow Rizmi, el cual escribió sobre los años
800 y 825 su obra Quitad Al Mugabala, donde se recogía el sistema de
numeración hindú y el concepto del cero. Fibonacci, tradujo la obra al latín y la
llamó: Algoritmi Dicit.
El lenguaje algorítmico es aquel que implementa una solución teórica a un
problema indicando las operaciones a realizar y el orden en el que se deben
efectuarse. Por ejemplo en el caso de que nos encontremos en casa con una
bombilla fundida en una lámpara, un posible algoritmo sería:
(1) Comprobar si hay bombillas de repuesto
(2) En el caso de que las haya, sustituir la bombilla anterior por la nueva
(3) Si no hay bombillas de repuesto, bajar a comprar una nueva a la tienda y
sustituir la vieja por la nueva
(15)
fundamentos de programación
(Unidad 1) algoritmos y programas
(16)
1er curso de administración de sistemas informáticos
autor: Jorge Sánchez – www.jorgesanchez.net
(1.5) aplicaciones
(1.5.1) programas y aplicaciones
♦ Programa. La definición de la RAE es: Conjunto unitario de
instrucciones que permite a un ordenador realizar funciones
diversas, como el tratamiento de textos, el diseño de gráficos, la
resolución de problemas matemáticos, el manejo de bancos de
datos, etc. Pero normalmente se entiende por programa un conjunto de
instrucciones ejecutables por un ordenador.
Un programa estructurado es un programa que cumple las condiciones
de un algoritmo (finitud, precisión, repetición, resolución del problema,...)
♦ Aplicación. Software formado por uno o más programas, la
documentación de los mismos y los archivos necesarios para su
funcionamiento, de modo que el conjunto completo de archivos forman
una herramienta de trabajo en un ordenador.
(17)
fundamentos de programación
(Unidad 1) algoritmos y programas
(1) Análisis. En esta fase se determinan los requisitos que tiene que cumplir la
aplicación. Se anota todo aquello que afecta al futuro funcionamiento de la
aplicación. Este paso le realiza un analista
(2) Diseño. Se especifican los esquemas de diseño de la aplicación. Estos
esquemas forman los planos del programador, los realiza el analista y
representan todos los aspectos que requiere la creación de la aplicación.
(3) Codificación. En esta fase se pasa el diseño a código escrito en algún
lenguaje de programación. Esta es la primera labor que realiza el
programador
(4) Pruebas. Se trata de comprobar que el funcionamiento de la aplicación es
la adecuada. Se realiza en varias fases:
(18)
1er curso de administración de sistemas informáticos
autor: Jorge Sánchez – www.jorgesanchez.net
Análisis
Diseño
Codificación
Pruebas
Mantenimiento
Ilustración 4, Ciclo de vida de una aplicación
(19)
fundamentos de programación
(Unidad 1) algoritmos y programas
(1.6) errores
Cuando un programa obtiene una salida que no es la esperada, se dice que
posee errores. Los errores son uno de los caballos de batalla de los
programadores ya que a veces son muy difíciles de encontrar (de ahí que hoy en
día en muchas aplicaciones se distribuyan parches para subsanar errores no
encontrados en la creación de la aplicación).
tipos de errores
(20)
1er curso de administración de sistemas informáticos
autor: Jorge Sánchez – www.jorgesanchez.net
SUM 8 16
DATOS SEGMENT
saludo db "Hola mundo!!!","$"
DATOS ENDS
CODE SEGMENT
assume cs:code,ds:datos
START PROC
mov ax,datos
mov ds,ax
mov dx,offset saludo
mov ah,9
int 21h
mov ax,4C00h
int 21h
START ENDP
CODE ENDS
END START
1
Ejemplo tomado de la página http://www.victorsanchez2.net
(22)
1er curso de administración de sistemas informáticos
autor: Jorge Sánchez – www.jorgesanchez.net
Puesto que el ensamblador es una representación textual pero exacta del código
máquina; cada programa sólo funcionará para la máquina en la que fue concebido
el programa; es decir, no es portable.
La ventaja de este lenguaje es que se puede controlar absolutamente el
funcionamiento de la máquina, lo que permite crear programas muy eficientes. Lo
malo es precisamente que hay que conocer muy bien el funcionamiento de la
computadora para crear programas con esta técnica. Además las líneas
requeridas para realizar una tarea se disparan ya que las instrucciones de la
máquina son excesivamente simples.
Fortran
1954
Algol Lisp
1958 Cobol
1958
1960
CPL
Basic 1963 Simula PL/I
1964 1964 1963
B Logo
Pascal 1969 1968
1970
C Sh
1971 1971
SmallTalk
1973
Modula
1975 Awk
1978
C++
1983
Quick Basic Perl
1984 1987
Turbo Pascal
1988
VBScript
1993
Delphi JavaScript Java PHP
1995 1995 1995 1995
Java 2
ASP 1998
1996
C#
2000
(23)
fundamentos de programación
(Unidad 1) algoritmos y programas
PROGRAM HOLA
PRINT *, '¡Hola, mundo!'
END
Poco a poco fueron evolucionando los lenguajes formando lenguajes cada vez
mejores (ver ). Así en 1958 se crea LISP como lenguaje declarativo para
expresiones matemáticas.
Programa que escribe Hola mundo en lenguaje LISP:
IDENTIFICATION DIVISION.
PROGRAM-ID. HELLO.
ENVIRONMENT DIVISION.
DATA DIVISION.
PROCEDURE DIVISION.
MAIN SECTION.
DISPLAY "Hola mundo"
STOP RUN.
(24)
1er curso de administración de sistemas informáticos
autor: Jorge Sánchez – www.jorgesanchez.net
PROGRAM HolaMundo;
BEGIN
Writeln('¡Hola, mundo!');
END.
lenguajes de cuarta generación (4GL)
En los años 70 se empezó a utilizar éste término para hablar de lenguajes en los
que apenas hay código y en su lugar aparecen indicaciones sobre qué es lo que
el programa debe de obtener. Se consideraba que el lenguaje SQL (muy utilizado
en las bases de datos) y sus derivados eran de cuarta generación. Los lenguajes
de consulta de datos, creación de formularios, informes,... son lenguajes de cuarto
nivel. Aparecieron con los sistemas de base de datos
Actualmente se consideran lenguajes de éste tipo a aquellos lenguajes que se
programan sin escribir casi código (lenguajes visuales), mientras que también se
propone que éste nombre se reserve a los lenguajes orientados a objetos.
lenguajes orientados a objetos
En los 80 llegan los lenguajes preparados para la programación orientada a
objetos todos procedentes de Simula (1964) considerado el primer lenguaje con
facilidades de uso de objetos. De estos destacó inmediatamente C++.
A partir de C++ aparecieron numerosos lenguajes que convirtieron los
lenguajes clásicos en lenguajes orientados a objetos (y además con mejoras en el
entorno de programación, son los llamados lenguajes visuales): Visual Basic,
Delphi (versión orientada a objetos de Pascal), Visual C++,...
En 1995 aparece Java como lenguaje totalmente orientado a objetos y en el
año 2000 aparece C# un lenguaje que toma la forma de trabajar de C++ y del
propio Java.
El programa Hola mundo en C# sería:
using System;
class MainClass
{
public static void Main()
{
Console.WriteLine("¡Hola, mundo!");
}
}
(25)
fundamentos de programación
(Unidad 1) algoritmos y programas
<html>
<head>
<title>Hola Mundo</title>
</head>
<body>
<script type="text/javascript">
document.write("¡Hola mundo!");
</script>
</body>
</html>
(26)
1er curso de administración de sistemas informáticos
autor: Jorge Sánchez – www.jorgesanchez.net
(1.7.3) intérpretes
A la hora de convertir un programa en código máquina, se pueden utilizar dos
tipos de software: intérpretes y compiladores.
En el caso de los intérpretes se convierte cada línea a código máquina y se
ejecuta ese código máquina antes de convertir la siguiente línea. De esa forma si
las dos primeras líneas son correctas y la tercera tiene un fallo de sintaxis,
veríamos el resultado de las dos primeras líneas y al llegar a la tercera se nos
notificaría el fallo y finalizaría la ejecución.
El intérprete hace una simulación de modo que parece que la máquina
entiende directamente las instrucciones del lenguaje, pareciendo que ejecuta
cada instrucción (como si fuese código máquina directo).
El BASIC era un lenguaje interpretado, se traducía línea a línea. Hoy en día la
mayoría de los lenguajes integrados en páginas web son interpretados, la razón
es que como la descarga de Internet es lenta, es mejor que las instrucciones se
vayan traduciendo según van llegando en lugar de cargar todas en el ordenador.
Por eso lenguajes como JavaScript (o incluso, en parte, Java) son interpretados.
proceso
Un programa que se convierte a código máquina mediante un intérprete sigue
estos pasos:
(1) Lee la primera instrucción
(2) Comprueba si es correcta
(3) Convierte esa instrucción al código máquina equivalente
(4) Lee la siguiente instrucción
(5) Vuelve al paso 2 hasta terminar con todas las instrucciones
ventajas
(27)
fundamentos de programación
(Unidad 1) algoritmos y programas
(1.7.4) compiladores
Se trata de software que traduce las instrucciones de un lenguaje de
programación de alto nivel a código máquina. La diferencia con los intérpretes
reside en que se analizan todas las líneas antes de empezar la traducción.
Durante muchos años, los lenguajes potentes han sido compilados. El uso
masivo de Internet ha propiciado que esta técnica a veces no sea adecuada y
haya lenguajes modernos interpretados o semi-interpretados, mitad se compila
hacia un código intermedio y luego se interpreta línea a línea (esta técnica la
siguen Java y los lenguajes de la plataforma .NET de Microsoft).
ventajas
(28)
1er curso de administración de sistemas informáticos
autor: Jorge Sánchez – www.jorgesanchez.net
(1.8) programación
(1.8.1) introducción
La programación consiste en pasar algoritmos a algún lenguaje de ordenador a fin
de que pueda ser entendido por el ordenador. La programación de ordenadores
comienza en los años 50 y su evolución a pasado por diversos pasos.
La programación se puede realizar empleando diversas técnicas o métodos.
Esas técnicas definen los distintos tipos de programaciones.
10 X=RANDOM()*100+1;
20 PRINT “escribe el número que crees que guardo”
30 INPUT N
40 IF N>X THEN PRINT “mi numero es menor” GOTO 20
50 IF N<X THEN PRINT “mi numero es mayor” GOTO 20
60 PRINT “¡Acertaste!”
El código anterior crea un pequeño juego que permite intentar adivinar un número
del 1 al 100.
(29)
fundamentos de programación
(Unidad 1) algoritmos y programas
PROGRAM ADIVINANUM;
USES CRT;
VAR x,n:INTEGER;
BEGIN
X=RANDOM()*100+1;
REPEAT
WRITE(“Escribe el número que crees que guardo”);
READ(n);
IF (n>x) THEN WRITE(“Mi número es menor”);
IF (n>x) THEN WRITE(“Mi número es mayor”);
UNTIL n=x;
WRITE(“Acertaste”);
(30)
1er curso de administración de sistemas informáticos
autor: Jorge Sánchez – www.jorgesanchez.net
/**
*Calcula los primos del 1 al 1000
*/
public class primos {
/** Función principal */
public static void main(String args[]){
int nPrimos=10000;
boolean primo[]=new boolean[nPrimos+1];
short i;
for (i=1;i<=nPrimos;i++) primo[i]=true;
for (i=2;i<=nPrimos;i++){
if (primo[i]){
for (int j=2*i;j<=nPrimos;j+=i){
primo[j]=false; }
}
}
for (i=1;i<=nPrimos;i++) {
System.out.print(" "+i);
}
}
}
(31)