I.S.C. Salvador Cruz Alfaro Apuntes: Fundamentos de Programación
Instituto Tecnológico Superior de la Sierra Negra de Ajalpan P á g i n a | 55
4 Introducción a la programación
4.1 Clasificación del software.
4.1.1 Software del sistema.
Al resultado de la programación de sistemas se le conoce como software de base o software de
sistemas. Al software de sistemas pertenecen los programas cuya finalidad es servir a otros programas y
ejecutar funciones comunes para todos los usuarios de la computadora.
El software de sistemas implementa funciones de control que permiten al software de aplicación
comunicarse con otros elementos del software.
Entre los programas que pertenecen al software de sistemas se encuentran: los sistemas operativos ,
compiladores , ensambladores , cargadores, manejadores de bases de datos, etc.
4.1.2 Software de aplicación.
El software de aplicación implementa los procedimientos requeridos para realizar las funciones de
procesamiento de la información. El software de aplicación es el software específico para aplicaciones
particulares de los usuarios de un sistema de cómputo. Su utilización se restringe a cierto ámbito( a diferencia
del software de sistemas). Normalmente, en la codificación del software de aplicación no se utiliza un lenguaje
de bajo nivel, sino que se codifican en lenguajes de alto nivel y se traducen ya sea por compiladores o por
intérpretes (los cuales forman parte del software de sistemas). Podemos decir que el software de aplicación se
apoya en el software de sistemas, lo cual no puede decirse en sentido inverso.
En lo que sigue del curso desarrollaremos software de aplicación, utilizando un compilador (software de
base) para el lenguaje C# (C Sharp).
4.2 Conceptos de la programación.
4.2.1 Definición de programa.
Un programa es un conjunto de instrucciones internas, utilizadas para ejecutarse en una computadora
y producir un resultado concreto.
4.2.2 Definición de programación.
La programación es el proceso de escribir programas para computadora. Generalmente, los programas
para computadora se escriben en lenguajes de alto nivel o en lenguaje ensamblador (bajo nivel).
4.2.3 Definición de lenguaje de programación.
Para que una computadora pueda ejecutar una instrucción, ésta debe estar escrita en un lenguaje que
"entienda" la máquina. La máquina está compuesta por circuitos eléctricos.
Originalmente, la programación de las computadoras se hacía abriendo y cerrando los circuitos de éstas.
Para introducir las órdenes en la computadora sólo se podían manejar dos estados con cada circuito: "cerrado"
y "abierto" (esto es, con corriente y sin corriente). Debido a que la introducción de instrucciones con apertura y
cierre de circuitos por métodos manuales era muy lento, se inventó el concepto de programa. Para escribir los
I.S.C. Salvador Cruz Alfaro Apuntes: Fundamentos de Programación
Instituto Tecnológico Superior de la Sierra Negra de Ajalpan P á g i n a | 56
programas, se convino en que un 0 (cero) significaría "abierto" (esto es, sin corriente), y un 1 (uno) significaría
"cerrado" (esto es, con corriente). Con la invención del transistor el concepto de "cerrado" se cambió a "alto
voltaje" y el de abierto a "bajo voltaje" . Actualmente, el alto voltaje es un valor cercano a 5 voltios, y el bajo
voltaje uno cercano a 2 voltios.
Se necesita un grupo de varios circuitos para representar cada carácter de un lenguaje humano, y varios
grupos para representar una palabra. Así que escribir conjuntos de instrucciones (programas) implica largas
cadenas de unos y ceros, con una alta probabilidad de cometer errores (y una gran dificultad para corregirlos).
Para facilitar la escritura de programas, se inventaron los lenguajes de programación "de bajo nivel"
(ensambladores) con nemotécnicos de palabras de un lenguaje humano y, posteriormente, los "de alto nivel"
que utilizan palabras completas. La escritura de programas en lenguajes diferentes al de la máquina hace
necesario el uso de programas traductores (ensambladores, compiladores e intérpretes)
Podemos definir a un lenguaje de programación como un lenguaje que está formado por un subconjunto
de símbolos y palabras pertenecientes a un lenguaje natural. Aunque el lenguaje natural comúnmente utilizado
para crear lenguajes de programación es el inglés, con UNICODE es posible usar caracteres de todos los
lenguajes naturales existentes.
4.3 Datos.
4.3.1 Definición.
Dato
Representación formal de hechos, conceptos o instrucciones adecuada para su comunicación,
interpretación y procesamiento por seres humanos o medios automáticos.
4.3.2 Tipos de datos.
Tipo de dato
Especificación de un dominio (rango de valores) y de un conjunto válido de operaciones a los que
normalmente los traductores asocian un esquema de representación interna propio.
Clasificación de los tipos de datos
En función de quién los define:
Tipos de datos estándar
Tipos de datos definidos por el usuario
I.S.C. Salvador Cruz Alfaro Apuntes: Fundamentos de Programación
Instituto Tecnológico Superior de la Sierra Negra de Ajalpan P á g i n a | 57
En función de su representación interna:
Tipos de datos escalares o simples
Tipos de datos estructurados
Tipos de datos primitivos en Java
El lenguaje Java define 8 tipos de datos primitivos:
Números enteros
byte, short, int, long
4 tipos básicos para representar números enteros (con signo):
I.S.C. Salvador Cruz Alfaro Apuntes: Fundamentos de Programación
Instituto Tecnológico Superior de la Sierra Negra de Ajalpan P á g i n a | 58
Literales enteros
Los literales enteros pueden expresarse:
En decimal (base 10): 255
En octal (base 8): 0377 �3 ∗ 8� � 7 ∗ 8� � 7 255�
En hexadecimal (base 16): 0xff �15 ∗ 16� � 15 255
Los literales enteros son de tipo int por defecto ������ � 2�� � 2�� � 1�
Un literal entero es de tipo long si va acompañado del sufijo l o L:
1234567890L es de tipo long
Nota: Se prefiere el uso de L porque l (L minúscula) puede confundirse con 1 (uno).
Números en coma flotante
float double
Según el estándar IEEE 754-1985
Literales reales
Cadenas de dígitos con un punto decimal
123.45 0.0 0.001
En notación científica �������� 10���� � !��
123�45 123# � 45 12# � 6
Por defecto, los literales reales representan valores de tipo doublé.
Para representar un valor de tipo float, hemos de usar el sufijo f o F:
123.45F 0.0f 0.001f
I.S.C. Salvador Cruz Alfaro Apuntes: Fundamentos de Programación
Instituto Tecnológico Superior de la Sierra Negra de Ajalpan P á g i n a | 59
Caracteres
char
Literales de tipo carácter
Valores entre comillas simples
‘a’ ‘b’ ‘c’ … ‘1’ ‘2’ ‘3’ … ‘*’ …
Códigos UNICODE (en hexadecimal): \u????
‘\u000a’ (avance de línea)
‘\u000d’ (retorno de carro)
Secuencias de escape para representar caracteres especiales:
La clase Character define funciones (métodos estáticos) para trabajar con caracteres:
isDigit(), isLetter(), isLowerCase(), isUpperCase()
toLowerCase(), toUpperCase()
I.S.C. Salvador Cruz Alfaro Apuntes: Fundamentos de Programación
Instituto Tecnológico Superior de la Sierra Negra de Ajalpan P á g i n a | 60
Datos de tipo booleano
boolean
Representa algo que puede ser verdadero (true) o falso (false).
Literales
Cadenas de caracteres
La clase String
String no es un tipo primitivo, sino una clase predefinida
Una cadena (String) es una secuencia de caracteres
Las cadenas de caracteres, en Java, son inmutables: no se pueden modificar los caracteres individuales de la
cadena.
Literales
Texto entra comillas dobles “ ”
“Esto es una cadena”
“‘Esto’ también es una cadena”
Las secuencias de escape son necesarias para introducir determinados caracteres dentro de una cadena:
“\”Esto es una cadena entre comillas\””
Concatenación de cadenas de caracteres
El operador + sirve para concatenar cadenas de caracteres
Si cualquier operando es un String, toda operación se convierte en una concatenación de cadenas.
En java cualquier cosa puede convertirse automáticamente en una cadena de caracteres (un objeto de tipo String).
I.S.C. Salvador Cruz Alfaro Apuntes: Fundamentos de Programación
Instituto Tecnológico Superior de la Sierra Negra de Ajalpan P á g i n a | 61
4.3.3 Identificadores.
Una variable no es más que un nombre simbólico que identifica una dirección de memoria:
“Suma el contenido de la posición 3001 y la 3002 y lo almacenas en la posición 3003”
VS
total = cantidad1 + cantidad2
“Suma cantidad1 y cantidad2 y lo almacenas en total”
Declaración de variables
Para usar una variable en un programa hay que declararla.
El ordenador conoce así cómo codificar la información que se va a almacenar en la posición de memoria
correspondiente.
Al declarar una variable, se reserva el espacio de memoria necesario para almacenar un valor del tipo de la
variable.
El identificador asociado a la variable se puede utilizar para acceder al dato almacenado en memoria y para
modificarlo.
I.S.C. Salvador Cruz Alfaro Apuntes: Fundamentos de Programación
Instituto Tecnológico Superior de la Sierra Negra de Ajalpan P á g i n a | 62
Declaración de variables en Java
<tipo> identificador;
<tipo> lista de identificadores;
Las variables se han de declarar antes de poder usarlas.
Los identificadores de las variables son los nombres que utilizaremos para referirnos a ellas.
Al declarar una variable, hay que definir su tipo: la variable sólo admitirá valores del tipo especificado.
En una misma declaración se pueden declarar varias variables, siempre que sean del mismo tipo. En este
caso, los identificadores de las variables se separan por comas.
Ejemplos:
I.S.C. Salvador Cruz Alfaro Apuntes: Fundamentos de Programación
Instituto Tecnológico Superior de la Sierra Negra de Ajalpan P á g i n a | 63
Identificadores en Java
El primer símbolo del identificador será un carácter alfabético (a, …, z, A, …, Z, ‘_’, ‘$’) pero no un dígito. Después
de ese primer carácter, podremos poner caracteres alfanuméricos (a, …, z) y (0, 1, …, 9), signos de dólar ‘$’ o
guiones de subrayado ‘_’.
Los identificadores no pueden coincidir con las palabras reservadas, que ya tienen significado en Java:
Las mayúsculas y las minúsculas se consideran diferentes.
‘$’ y ‘_’ se interpretan como una letra más.
‘$’ no se suele utilizar en la práctica (lo usa el compilador).
Ejemplos válidos
a, pepe, r456, tu_re_da, AnTeNa, antena, usd$
Ejemplos no válidos
345abc, mi variable, Nombre.Largo, cañada, camión
Convenciones
Los identificadores deben ser descriptivos: deben hacer referencia al significado de aquello a lo que se refieren.
int n1, n2; // MAL
int anchura, altura; // BIEN
Los identificadores asociados a las variables se suelen poner en minúsculas.
int CoNTaDoR; // MAL
int contador; // BIEN
Cuando el identificador está formado por varias palabras, la primera palabra va en minúsculas y el resto de
palabras se inician con una letra mayúscula.
int mayorvalor; // MAL
int mayor_valor; // ACEPTABLE
int mayorValor; // MEJOR
I.S.C. Salvador Cruz Alfaro Apuntes: Fundamentos de Programación
Instituto Tecnológico Superior de la Sierra Negra de Ajalpan P á g i n a | 64
Inicialización de las variables
En una declaración, las variables se pueden inicializar:
int i = 0;
float pi = 3.1415927f;
double x = 1.0, y = 1.0;
NOTA: La inicialización puede consistir en una expresión compleja que se evalúa cuando se ejecuta el
programa.
Definición de constantes en Java
Una constante hace referencia a un valor que no puede modificarse
final <tipo> identificador = <valor>;
Las constantes se definen igual que cuando se declara una variable y se inicializa su valor.
Con la palabra reservada final se impide la modificación del valor almacenado
Convenciones
Los identificadores asociados a las constantes se suelen poner en mayúsculas.
final double PI = 3.141592;
Si el identificador está formado por varias palabras, las distintas palabras se separan con un guión de
subrayado.
final char RETORNO_DE_CARRO = ‘\n’; final double ELECTRONIC_CHARGE = 1.6E-19;
I.S.C. Salvador Cruz Alfaro Apuntes: Fundamentos de Programación
Instituto Tecnológico Superior de la Sierra Negra de Ajalpan P á g i n a | 65
4.3.4 Almacenamiento, direccionamiento y representación en memoria.
Almacenamiento
La computadora posee determinada cantidad de almacenamiento interno denominado memoria
principal, memoria RAM o memoria volátil. Esta memoria se activa al encender la computadora y se desactiva
al apagarla. Para que un programa se ejecute, debe cargarse en la memoria principal, así como los datos
necesarios. Como es más costosa, es un recurso escaso donde sólo se almacenan los datos que se requieren de
inmediato, y los demás se relegan a los dispositivos de almacenamiento externo, donde la capacidad de
almacenamiento es mayor, pero también el tiempo de recuperación. Por otra parte, el costo del
almacenamiento externo es más bajo.
Direccionamiento
La memoria principal de la computadora se divide en pequeñas unidades de tamaño uniforme
denominadas palabras, que tienen una dirección única.
Cada una de éstas palabras es capaz de almacenar una unidad de información (como, por ejemplo,
resultados numéricos), y determina el número más grande y el más pequeño que puede almacenar.
El tamaño de la palabra depende de la computadora, pero siempre se especifica en múltiplos de 8 bits.
Así, existen computadoras con tamaños de palabra de 8, 16, 32 y 64 bits.
Cada palabra de la memoria principal tiene una dirección fija que va de cero hasta el número total de
palabras - 1. Las direcciones de memoria sirven para identificar cada palabra individualmente, de tal manera
que pueda accederse al dato contenido en ella. A fin de simplificar su comprensión, las memorias se consideran
como una hilera de palabras.
Por ejemplo, suponiendo que la memoria principal de una computadora tiene un tamaño de palabra de
8 bits, la cinta de color amarillo que se muestra enseguida podría representar las tres primeras palabras:
Dirección Valor en decimal
0000 0 1 0 0 1 0 1 1 75
0001 0 1 0 0 0 0 0 1 65
0002 0 0 1 1 0 0 1 0 50
Palabra
Representación en memoria
La representación en memoria de los caracteres no reviste mayor complicación, debido a que los
códigos utilizados, como el ASCII (American Standard Code for Information Interchange), les asignan valores
enteros positivos.
En el caso de los datos numéricos hay que considerar la distinción entre números negativos y positivos,
y la que hay entre números de punto flotante y enteros.
Los signos se manejan normalmente mediante el bit más significativo de la palabra (el situado a la
extrema izquierda), y se le denomina bit de signo. Cuando el bit de signo almacena un cero, el número se
I.S.C. Salvador Cruz Alfaro Apuntes: Fundamentos de Programación
Instituto Tecnológico Superior de la Sierra Negra de Ajalpan P á g i n a | 66
considera positivo; cuando almacena un uno el número es negativo. Es por esto que, si el tamaño de la palabra
es de m bits, quedan m-1 bits para representar la magnitud del número almacenado.
Los números de punto flotante se manejan en formato logarítmico, con un número fijo de bits para la
base y otro para la mantisa. El estándar para los números de punto flotante lo fija el IEEE.
Debido al formato logarítmico, los cálculos que se hacen con tipos de punto flotante no son tan
precisos como los que se hacen con tipos enteros.
4.3.5 Sistema de numeración binaria y hexadecimal.
Sistema de numeración binario
Las memorias de las computadoras se componen de microcircuitos que son capaces de conducir bajo
voltaje (aprox. 2 voltios) y alto voltaje (aprox. 5 voltios). Estos dos estados se representan con los símbolos 0 y
1. A este sistema de numeración que utiliza dos símbolos se le denomina binario, y a los dígitos 0 y 1 se les
denomina dígitos binarios o simplemente bits (binary digits).
Nuestro sistema de numeración decimal toma su nombre de los diez únicos símbolos (0, 1, 2, 3, 4, 5, 6,
7, 8, 9) que pertenecen al código.
Esta diferencia entre los dos sistemas de numeración complica la comunicación entre las personas y las
computadoras.
Para resolver el problema se requiere convertir de un sistema a otro para codificar la información.
Sistema hexadecimal
Al sistema que utiliza 16 símbolos se le denomina hexadecimal. Los símbolos hexadecimales y sus
equivalentes en binario y decimal se muestran en la siguiente tabla.
Hex Bin Dec
0 0000 0
1 0001 1
2 0010 2
3 0011 3
4 0100 4
5 0101 5
6 0110 6
7 0111 7
8 1000 8
9 1001 9
A 1010 10
B 1011 11
C 1100 12
D 1101 13
E 1110 14
F 1111 15
I.S.C. Salvador Cruz Alfaro Apuntes: Fundamentos de Programación
Instituto Tecnológico Superior de la Sierra Negra de Ajalpan P á g i n a | 67
Por ejemplo, en el código ASCII la letra 'Y' tiene asociado el número decimal 89. Si queremos manejar la
letra 'Y' con la computadora, necesitamos comunicarle el código de la letra (89) en el sistema de numeración
que ella entiende, esto es, convertir el número 89 a binario.
La conversión se logra tomando en cuenta que cada dígito tiene asociado un peso que depende de su
posición en la secuencia de símbolos en la cifra.
Así, el número 89 puede expresarse como 9x10 elevado a la potencia 0 + 9x10 elevado a la potencia 1,
esto es: 9x1 + 8x10.
Para convertir de binario a decimal podemos utilizar la siguiente tabla:
7 6 5 4 3 2 1 0 Exponente
1 1 1 1 1 1 1 1 Binario
128 64 32 16 8 4 2 1 Valor decimal
7 6 5 4 3 2 1 0 Exponente
1 1 1 1 1 1 1 1 Binario
128 64 32 16 8 4 2 1 Valor
decimal
De la tabla anterior, podemos escribir el 89 en binario como:
89 = 01011001 = 64 + 16 + 8 +1
A la inversa, si tuvieramos la serie de dígitos binarios 01011001 y quisieramos conocer su equivalencia en
decimal, escribiríamos:
0x2^7+1x2^6+0x2^5+1x2^4+1x2^3+0x2^2+0x2^1+1x2^0=
= 0 + 1x64 + 0 + 1x16+ 1x8 + 0 + 0 + 1x1 =
= 64 + 16 + 8 + 1 = 89
I.S.C. Salvador Cruz Alfaro Apuntes: Fundamentos de Programación
Instituto Tecnológico Superior de la Sierra Negra de Ajalpan P á g i n a | 68
La conversión del número hexadecimal F9B5 a decimal sería:
F9B5 = Fx16^3 + 9x16^2 + Bx16^1 + 5x16^0
= 15x16x16x16 + 9x16x16 + 11x16 +5x1 =
= 61,440 + 2,304 + 176 + 5
= 63,925
--------------------------------------------------------------------------------
En general, la conversión al sistema decimal del número abcde de un sistema numérico de base n es:
a x n^4 + b x n^3 + c x n^2 + d x n^1 + e x n^0
I.S.C. Salvador Cruz Alfaro Apuntes: Fundamentos de Programación
Instituto Tecnológico Superior de la Sierra Negra de Ajalpan P á g i n a | 69
4.4 Operadores, operandos y expresiones.
Operadores aritméticos Java incluye cinco operadores para realizar operaciones aritméticas:
Operador Operación
+ Suma
- Resta
* Multiplicación
/ División
% Módulo (resto de la división)
Si los operandos son enteros, se realizan operaciones enteras.
En cuanto uno de los operandos es de tipo float o double, la operación se realiza en coma flotante.
No existe un operador de exponenciación: para calcular x hay que utilizar la función Math.pow(x,a)
División ( / )
Operación Tipo Resultado
7/3 int 2
7/3.0f float 2.33333333f
5.0/2 double 2.5
7.0/0.0 double +Infinity
0.0/0.0 double NaN
Si se dividen enteros, el resultado es entero y el resto se pierde.
Una división entera por cero produce una excepción.
Una división por cero, en coma flotante, produce Infinite o NaN.
Módulo ( % ) o resto de dividir
Operación Tipo Resultado
7%3 int 1
4.3%2.1 Doublé ~ 0.1
I.S.C. Salvador Cruz Alfaro Apuntes: Fundamentos de Programación
Instituto Tecnológico Superior de la Sierra Negra de Ajalpan P á g i n a | 70
Operadores relacionales
Operadores de comparación para números y caracteres. Generan un resultado booleano.
Operador Significado
== Igual a
!= Diferente que
< Menor que
> Mayor que
<= Menor o igual
>= Mayor o igual
Ejemplos
Comparación Resultado
25<=25 True
25<>25 False
25<>4 True
25==25 True
56==2 False
Operadores lógicos/booleanos
Operandos booleanos. Tienen menos precedencia que los operadores de comparación.
Operador Nombre Significado
! NOT Negación lógica
&& AND “y” lógico
|| OR “o” inclusivo
^ XOR “o” exclusivo
NOT (!) cambia el valor booleano.
AND (&&) devuelve true si los dos son operandos son true. No evalúa el segundo operando si el
primero es false
OR (||) devuelve false si los dos son false. No evalúa el segundo operando si el primero es true. Si uno
de los dos es true, devuelve true.
XOR (^) devuelve true si los dos operandos son diferentes. Con operandos booleanos es equivalente a
!=.
Ejemplos
Número x entre 0 y 10 �0 $ %� && �% $ 10�
Número x fuera del intervalo [0,10]
! (�0 ) %�&&�% ) 10�*
ó
�0 + %� | |�% + 10�
Top Related