Es el nombre utilizado para referenciar variables, constantes, tipos, funciones y otros objetos definidos por el usuraio.
Un identificador puede tener uno o mas caracteres (letras, digitos y caracter de subrayado), siendo significativos los primeros 32.
El primer caracter debe ser una letra o un simbolo de _.
Se consideran caracteres distintos las mayusculas y las minusculas.
Se recomienda poner identificadores representativos.
Cuando un identificador se asocia a una entidad concreta entonces es el “nombre” de dicha entidad, y en adelante la representa en el programa. Por supuesto puede ocurrir que varios identificadores se refieran a una misma entidad (polimorfismo).
Sintaxis general: tipo nombre_identificador;
Ejemplo: objeto x;
domingo, 9 de diciembre de 2007
4.3.4 Almacenamiento Direccionamiento y Representacion en Memoria
Supongamos que la memoria utilizada tiene un tamaño de 4 Gigabytes y por tanto sus direcciones se representan con 32 bits. Las direcciones de memoria son números naturales en el rango [0, 232 - 1]. Pero este número natural es susceptible de ser almacenado él mismo en memoria. Es decir, se puede almacenar la representación binaria de una dirección de memoria en la propia memoria. Al tener un tamaño de 32 bits o 4 bytes, se utilizan para ello cuatro posiciones de memoria consecutivas.
Una dirección de memoria, por tanto, se puede considerar de dos formas posibles: o como una dirección de una celda de memoria, o como un número natural susceptible de ser manipulado como tal. Supóngase que en la posición de memoria 0×00000100 se encuentra almacenado el número entero de 32 bits 0×0153F2AB y que en la posición 0×00000200 se debe almacenar la dirección de dicho número. Para ello se almacena, a partir de la posición 0×00000200 el número 0×00000100 utilizando los cuatro bytes a partir de esa posición y se hace en orden creciente de significación al utilizar el esquema little endian.
Tras almacenar la dirección de memoria de un dato en la posición 0×00000200, ¿es posible obtener de nuevo el número 0×0153F2AB? La respuesta es afirmativa, pero no de forma inmediata, se debe obtener de memoria primero los cuatro bytes almacenados en la posición 0×00000200 y utilizarlos como una dirección de memoria de donde obtener los cuatro bytes contenidos en la posición 0×00000100. El acceso a este último dato se ha realizado de forma indirecta, es decir, mediante un acceso previo a memoria para obtener la dirección del dato final. Utilizando la notación funcional de operaciones sobre memoria, el acceso al dato se logra ejecutando Lectura(Lectura(0×00000200)).


4.3.5 Sistema de numeración binaria y hexadecimal.
El sistema binario es el que usan los ordenadores, que es como si sólo tuvieran un dedo, su unidad básica de memoria, el bit, sólo puede tomar dos valores, inactivo o activo, y se codifican como 0 y 1, respectivamente. Los ordenadores se quedan sin dedos enseguida, en cuanto tienen que contar más de uno, así que añaden más dígitos. Por ejemplo, veamos el número binario 10110. Estamos en base 2, así que el número se calcula así: 0 * 2^0 + 1 * 2^1 + 1 * 2^2 + 0 * 2^3 + 1 * 2^4 = 2 + 4 + 16 = 22 (decimal) Este tipo de numeración resulta muy útil cuando cada bit puede significar cosas diferentes para un ordenador. El sistema hexadecimal, que es el rey de los sistemas de numeración, al menos en lo que respecta a los ordenadores. Usa 16 dígitos, los archiconocidos 0 a 9 y para los otros seis se usan las letras A, B, C, D, E y F, que tienen valores 10, 11, 12, 13, 14 y 15, respectivamente. Se usan indistintamente mayúsculas y minúsculas. Por ejemplo, un número hexadecimal 4F3D: 13 * 16^0 + 3 * 16^1 + 15 * 16^2 + 4 * 16^3 = 13 + 3 * 16+ 15 * 256 + 4 * 4096 = 20285 Este sistema de numeración tiene muchas ventajas: • La conversión entre binario y hexadecimal es tan simple como en octal, la única diferencia es que los bits se agrupan de cuatro en cuatro. 0000 es 0, 0001 es 1, 0010 es 2 … 1111 es F. • El byte, es la unidad de memoria más usada por los ordenadores y agrupa ocho bits. Para codificar un número de 8 bits sólo se necesitan dos dígitos hexadecimales. El mayor número expresable por un byte, 11111111(binario), equivale a 255(decimal) y a FF(hexadecimal). • Y para palabras de dos bytes (16 bits), se usan sólo cuatro dígitos hexadecimales. (El número 16 aparece mucho cuando se habla de ordenadores.) • Para 32 bits: 8 dígitos hexadecimales, y sucesivamente. Con la práctica podrás hacer conversiones de hexadecimal a binario de memoria: 3E equivale a 00111110

4.4 Operadores, operandos y expresiones.
OPERADORES: ES EL SÍMBOLO QUE ASIGNA YA SEA UNA OPERACIÓN O UNA RELACIÓN ENTRE LOS OPERANDOS, DE LOS CUALES HABLAREMOS MAS TARDE, LOS OPERANDOS SE CLASIFICAN EN 3 GRUPOS DISTINTOS:
A) ARITMÉTICOS
B) RELACIONES
C) LÓGIOS
A) ARITMÉTICOS
B) RELACIONES
C) LÓGIOS
OPERADORES ARITMÉTICOS
COMO SU NOMBRE LO INDICA SON AQUELLOS QUE REALIZAN OPERACIONES O CÁLCULOS ARITMÉTICOS, LOS CUALES SON: SUMA(+), RESTA(-), MULTIPLICACIÓN(*), DIVISIÓN REAL(/), DIVISIÓN ENTERA(DIV), RESIDUO(MOD), EXPONENCIACIÓN(^). POR EJEMPLO:
COMO SU NOMBRE LO INDICA SON AQUELLOS QUE REALIZAN OPERACIONES O CÁLCULOS ARITMÉTICOS, LOS CUALES SON: SUMA(+), RESTA(-), MULTIPLICACIÓN(*), DIVISIÓN REAL(/), DIVISIÓN ENTERA(DIV), RESIDUO(MOD), EXPONENCIACIÓN(^). POR EJEMPLO:
a) 15+7=22
b) 77-76=1
c) 2*1=2
d) 4 DIV 2=2
e) 10 MOD 2=0
OPERADORES RELACIONALES
ESTAS TE PERMITEN HACER COMPARACIONES DE VALORES DE TIPO NUMÉRICO Y DE TIPO CARÁCTER, SIRVEN PARA EXPRESAR LAS CONDICIONES EN LOS ALGORITMOS PARA ASI PROPORCIONAR RESULTADOS LÓGICOS.
TIPOS DE OPERADORES RELACIONALES
- > MAYOR QUE
- <>
- > = MAYOR O IGUAL QUE
- < = MENOR O IGUAL QUE
- < > DIFERENTE
- = IGUAL
EJEMPLOS:
SI A = 10, B = 20, C = 30
EJEMPLOS NO LÓGICOS:
A <>
OPERADORES LÓGICOS
ESTOS OPERADORES SE UTILIZAN PARA ESTABLECER RELACIONES ENTRE VALORES LÓGICOS. ESTOS VALORES PUEDEN SER RESULTADO DE UNA EXPRESIÓN RELACIONAL.
TIPOS DE OPERADORES LÓGICOS
AND Y
OR O
NOT NEGACIÓN
4.5 Prioridad de operadores, evaluación de expresiones.
Determina el orden en que habrán de realizarse las operaciones en una expresión determinada. Para obtener la prioridad se deben conocer las siguientes reglas:
Las operaciones que están encerradas entre paréntesis se evalúan primero. Si existen diferentes paréntesis anidados (interiores unos a otros), las expresiones más internas se evalúan primero.
Las operaciones aritméticas dentro de una expresión suelen seguir el siguiente orden de prioridad.
En caso de coincidir varios operadores de igual prioridad en una expresión o subexpresión encerrada entre paréntesis, el orden de prioridad en este caso es de izquierda a derecha.
Cuando se desea realizar una operación con baja prioridad por adelantado, debe agruparse a los operandos involucrados.
4 + 12 /2 = 10 (sin agrupar)
(4 + 12) /2 = 8 (con agrupador)
Ejemplo:
Obtener los resultados de las expresiones:
-4 * 7 + 2 ^ 3 / 4 - 5
Solución:
-4 *7 + 2 ^ ¾ -5
Resulta:
-4 * 7+ 8/4 -5
-28 + 8/4 -5
-28 + 2 - 5
-26 - 5
-31
Los paréntesis tienen prioridad sobre el resto de las operaciones.
A * (B+3) La constante 3 se suma primero al valor de B, después este resultado se multiplica por el valor de A.
(A*B) +3 A y B Se multiplican primero y a continuación se suma 3.
A + (B/C) + D Esta expresión equivale a A+ B/C + D
Las operaciones que están encerradas entre paréntesis se evalúan primero. Si existen diferentes paréntesis anidados (interiores unos a otros), las expresiones más internas se evalúan primero.
Las operaciones aritméticas dentro de una expresión suelen seguir el siguiente orden de prioridad.
En caso de coincidir varios operadores de igual prioridad en una expresión o subexpresión encerrada entre paréntesis, el orden de prioridad en este caso es de izquierda a derecha.
Cuando se desea realizar una operación con baja prioridad por adelantado, debe agruparse a los operandos involucrados.
4 + 12 /2 = 10 (sin agrupar)
(4 + 12) /2 = 8 (con agrupador)
Ejemplo:
Obtener los resultados de las expresiones:
-4 * 7 + 2 ^ 3 / 4 - 5
Solución:
-4 *7 + 2 ^ ¾ -5
Resulta:
-4 * 7+ 8/4 -5
-28 + 8/4 -5
-28 + 2 - 5
-26 - 5
-31
Los paréntesis tienen prioridad sobre el resto de las operaciones.
A * (B+3) La constante 3 se suma primero al valor de B, después este resultado se multiplica por el valor de A.
(A*B) +3 A y B Se multiplican primero y a continuación se suma 3.
A + (B/C) + D Esta expresión equivale a A+ B/C + D
Operador | Prioridad |
^ | Alta |
*,/,Div | Media |
+,-,Mod | Baja |
Relacionales | Muy baja |
4.6 Estructura básica de un programa.
Estructura básica de un programa en C
La mejor forma de aprender un lenguaje es programando con él. El programa más sencillo que se puede escribir en C es el siguiente:
main( )
{
}
Como nos podemos imaginar, este programa no hace nada, pero contiene la parte más importante de cualquier programa C y además, es el más pequeño que se puede escribir y que se compile correctamente. En el se define la función main, que es la que ejecuta el sistema operativo al llamar a un programa C. El nombre de una función C siempre va seguida de paréntesis, tanto si tiene argumentos como si no. La definición de la función está formada por un bloque de sentencias, que esta encerrado entre llaves {}.
Un programa algo más complicado es el siguiente:
include<stdio.h>
include<conio.h>
void main( )
{
include<conio.h>
void main( )
{
clrscr();
printf(“Hola mundo.\n”);
printf(“Hola mundo.\n”);
getch();
}
}


Con el visualizamos el mensaje Hola mundo. en el terminal. En la primera línea indica que se tengan en cuenta las funciones y tipos definidos en la librería stdio (standard input/output). Estas definiciones se encuentran en el fichero header stdio.h. Ahora, en la función main se incluye una única sentencia que llama a la función printf. Esta toma como argumento una cadena de caracteres, que se imprimen van encerradas entre dobles comillas “ “. El símbolo \n indica un cambio de línea.
Hay un grupo de símbolos, que son tratados como caracteres individuales, que especifican algunos caracteres especiales del código ASCII. Los más importantes son:
\a Alerta
\b Espacio atrás
\f Salto de página
\n Salto de línea
\r Retorno de carro
\t Tabulación horizontal
\v Tabulación vertical
\\ Barra invertida
\’ Comilla simple
\” Comillas dobles
\OOO Visualiza un carácter cuyo código ASCII es OOO en octal
\xHHH Visualiza un carácter cuyo código ASCII es HHH en hexadecimal
\b Espacio atrás
\f Salto de página
\n Salto de línea
\r Retorno de carro
\t Tabulación horizontal
\v Tabulación vertical
\\ Barra invertida
\’ Comilla simple
\” Comillas dobles
\OOO Visualiza un carácter cuyo código ASCII es OOO en octal
\xHHH Visualiza un carácter cuyo código ASCII es HHH en hexadecimal
Un programa C puede estar formado por diferentes módulos o fuentes. Es conveniente mantener los fuentes de un tamaño no muy grande, para que la compilación sea rápida. También, al dividirse un programa en partes, puede facilitar la legibilidad del programa y su estructuración. Los diferentes fuentes son compilados de forma separada, únicamente los fuentes que han sido modificados desde la última compilación, y después combinados con las librerías necesarias para formar el programa en su versión ejecutable.
Como los lenguajes han cambiado de c a java(que es un derivado de c y c++) para aquellos que apenas empezamos en java un primer programa seria:
import java.io.*;
class primero{
public static void main(){
public static void main(){
system.out.println(“Hola mundo.”);
}
}


4.7 Proceso de creación de un ejecutable.
En Java, en principio, no se pueden crear autoejecutables ya que este es un lenguaje multiplataforma y los archivos autoejecutables son dependientes de la plataforma. Esto provoca que tengamos que usar la consola para ejecutar nuestros programas; lo que supone un gran inconveniente para usuarios sobre todo acostumbrados a los entornos gráficos. Existen varias soluciones para este asunto. Aquí se explican tres de ellas. La primera es la de crear ejecutables dependientes de la plataforma ; la segunda permite hacer más fácil la ejecución en cada plataforma sin impedir su ejecución en otra plataforma; la tercera es válida para cualquier plataforma y aporta otras muchas posibilidades. Podemos crear un ejecutable de la plataforma de varias maneras: Podemos usar traducir el código java a código C con Toba o J2C. De esta forma sólo nos queda compilar el código C para crear el ejecutable. Toba es un proyecto libre cuyo desarrollo ha quedado estancado cuando Java iba por la versión 1.1, pero podemos descargarlo todavía desde su página web. Existe un compilador que además de permitirnos, como cualquier otro compilador, crear bytecodes a partir de ficheros .java, nos da la posibilidad de compilar el fuente (archivos .java) para obtener un ejecutable de la plataforma y también permite crear un ejecutable de la plataforma a partir del bytecode. De esta forma el código obtenido es mucho más rápido. El programa se llama GJC y forma parte la familia de compiladores GCC del proyecto GNU que se desarrolla bajo la GPL (General Public License). Si lo que queremos es crear un archivo ejecutable .exe (para plataforma Windows) y prescindir de la cualidad de multiplataforma de este lenguaje, lo que hay que hacer es conseguir un programa que realice esta tarea. Esto lo hacen algunas IDE’s y el programa Jto Exe. Al crear un .exe lo que hacemos es sustituir los archivos de clase de Java, al contrario que la siguiente opción que complementa y no sustituye. En particular el programa Jto Exe necesita de la máquina virtual de Java para poder ejecutar el programa de modo seguiremos necesitando instalar la JVM al contrario que las dos opciones anteriores.

Suscribirse a:
Entradas (Atom)