Cuando se pide que el programa sea ejecutado, éste deberá estar en formato binario lenguaje binario-, sólo entonces el procesador ejecuta el programa instrucción por instrucción, hasta que el programa termina.
La definición de programa va de la mano de la definición de algoritmo. Un algoritmo es una secuencia no ambigua, finita y ordenada de instrucciones que han de seguirse para resolver un problema. Un programa implementa a un algoritmo, es decir, lo traduce a un lenguaje de programación. El programa puede estar compuesto de instrucciones escritas en lenguaje natural, en nuestro caso el español, o bien en un lenguaje de alto nivel.
Otra manera en que se ejecuta un programa, es ejecutar las instrucciones conforme son encontradas, una a una. A este proceso se le llama interpretar y a los programas que lo hacen se les conoce como intérpretes.
4.2.2 Programación. es un proceso por el cual se escribe en un lenguaje de programación, se prueba, se depura y se mantiene el código fuente de un programa.
4.2.3 Lenguaje de programación. es un lenguaje que consiste en un conjunto de símbolos y reglas sintácticas y semánticas que definen su estructura y el significado de sus elementos y expresiones. Un lenguaje de programación permite a uno o más programadores especificar de manera precisa: sobre qué datos una computadora debe operar, cómo deben ser estos almacenados, transmitidos y qué acciones debe tomar bajo una variada gama de circunstancias.
Una característica relevante de los lenguajes de programación es precisamente que más de un programadores puedan tener un conjunto común de instrucciones que puedan ser comprendidas entre ellos para realizar la construcción del programa de forma colaborativa.
El lenguaje de programación que usaremos en nuestro curso para implementar programas de computadora, es el lenguaje C#. El lenguaje C# es un lenguaje que permite escribir programas orientados a objetos.
4.3 Datos.
4.3.1 Definición de datos. es una representación simbólica (numérica, alfabética, booleana, entre otras), atributo o característica de una entidad. El dato no tiene valor semántico (sentido) en sí mismo, pero convenientemente tratado (procesado) se puede utilizar en la realización de cálculos o toma de decisiones. Los datos es la materia prima para los programas, y a partir de ellos se construye la información (datos de salida).
Los datos son comunicados por varios tipos de símbolos tales como las letras del alfabeto, números, movimientos de labios, puntos y rayas, señales con la mano, dibujos, etc. Estos símbolos se pueden ordenar y reordenar de forma utilizable y se les denomina información.
Los datos son símbolos que describen condiciones, hechos, situaciones o valores. Los datos se caracterizan por no contener ninguna información. Un dato puede significar un número, una letra, un signo ortográfico o cualquier símbolo que represente una cantidad, una medida, una palabra o una descripción.
Ing. Francisco Ríos Acosta Apuntes de Fundamentos de Programación. Instituto Tecnológico de la Laguna, a 18 de agosto del 2008. pag. 4 de 17 La importancia de los datos está en su capacidad de asociarse dentro de un contexto para convertirse en información. Por si mismos los datos no tienen capacidad de comunicar un significado y por tanto no pueden afectar el comportamiento de quien los recibe. Para ser útiles, los datos deben convertirse en información para ofrecer un significado, conocimiento, ideas o conclusiones.
Los datos se clasifican en : variables constantes expresiones Las variables son datos que pueden sufrir cambios en su valor durante la ejecución de un programa o un alogoritmo-. Por ejemplo, la velocidad de un carro, el atributo nombre de un objeto Alumno, la edad de un objeto Persona, el radio de un círculo. Las constantes son datos cuyo valor no puede ser cambiado en el transcurso de un programa. Ejemplos que podemos citar son : PI representando al valor 3.1416, MAXALU representando al número máximo de alumnos en un grupo, VELLUZ cuyo valor es 300 000 m/seg representa a la velocidad de la luz. Las constantes de tipo literal son aquellas que se denotan directamente por un valor, por ejemplo : el número entero 100, -30.75 que es un número real, una mensaje de error ERROR DE SINTAXIS.
Las expresiones están compuestas de operandos ya sea variables y/o constantes, que forman parte de una operación sujeta a determinados operadores. Por ejemplo veamos las 4 expresiones :
MAXALU / 2.0
(b sqrt(b*b 4*a*c)) / (2.0 * a)
hola + mundo
PI * pow(radio,2.0)
4.3.2 Tipos de datos. establecen los posibles valores que puede tomar un dato. Siempre que manejemos un dato debemos de asociarle además de un identificador, el tipo de dato al que pertenece. Por ejemplo, el atributo calificación de un objeto de la clase Alumno, es de tipo entero y los rangos de valores que puede tomar son del 0 al 100, es decir, el 0, 1, 2, 3, 4, ,99,100. El nombre de un objeto Persona es de tipo cadena, y sus valores deberán contener sólo letras y blancos. El área de un círculo es de tipo real númerico con punto flotante, enteros y decimales-. El tipo de dato para un objeto siempre será el nombre de la clase a la que pertenece. Por ejemplo, un alumno será de tipo Alumno su clase-.
Los lenguajes de programación tienen tipos de datos predefinidos, que también reciben el nombre de tipos de datos básicos o primitivos. El lenguaje C# proporciona los tipos de datos básicos : TIPO DE DATO short
int
long
float
double
decimal
string
char
bool DESCRIPCIÓN entero corto
Números enteros
Enteros largos
Números de punto flotante
Números de punto flotante de doble precisión
Valores monetarios
Secuencia de caracteres
Un solo caracter
Valores booleanos RANGO DE VALORES -32768 hasta 32767 -231 hasta 231-1 -263 hasta 263-1 -3.4 x 1038 hasta 3.4 x 1038 -1.7 x 10308 hasta 1.7 x 10308
Hasta 28 cifras significativas
No aplicable 0 hasta 216-1
true o false Veamos algunos ejemplos donde definimos los atributos de objetos en una clase indicando su tipo de dato y su identificador, en el lenguaje C#.
Ing. Francisco Ríos Acosta Apuntes de Fundamentos de Programación. Instituto Tecnológico de la Laguna, a 18 de agosto del 2008. pag. 5 de 17 class Alumno { string noControl; string nombre; int calif;
}
class Persona { string nombre; int edad; char sexo;
}
class Empleado { string nombre; string puesto; decimal salario;
}
class circulo { float radio; float abscisaCentro; float ordenadaCentro;
}
Notemos que la declaración de un atributo incluye al tipo, al identificador, terminando en el caracter (;).
4.3.3 Identificadores. es un nombre con el que reconocemos algún elemento de nuestro código, ya sea una clase, una variable,un objeto, un método, una constante, un atributo, una propiedad, entre otros. Este identificador es usado para referenciar al elemento mismo sea variable, objeto, método, clase, etc..
Las reglas para formar identificadores en C# son : Deben comenzar con letra o con guión bajo. Pueden continuar con letras, dígitos y/o guiones bajos. No deben ser iguales a una palabra reservada del lenguaje. Existen diferentes notaciones para la construcción de identificadores, nosotros utilizaremos 2 : Notación Camello. Notación Pascal. La notación Camello nos dice que la palabra de inicio del identificador debemos empezarla con minúscula. Si existen mas palabras en el identificador, deberán iniciarse con mayúscula. Esta notación la usaremos para identificadores de atributos, variables objetos-. Algunos ejemplos son :
noControl razonSocial noSeguroSocial radio noLlantasDelanteras
La notación Pascal es lo mismo que la Camello, con la diferencia de que todas las palabras son iniciadas con mayúsculas. esta notación es usada para nombrar clases, métodos, propiedades. Enseguida tenemos algunos ejemplos :
class Alumno {
}
Digamos que algunos métodos de la clase Alumno son : AsignarCalificacion(), AsignarNombre(), VisuaNoControl().
Ing. Francisco Ríos Acosta Apuntes de Fundamentos de Programación. Instituto Tecnológico de la Laguna, a 18 de agosto del 2008. pag. 6 de 17 4.3.4 Almacenamiento, direccionamiento y representación en memoria. El almacenamiento de datos se refiere al lugar donde ellos residen. Existen 2 formas de almacenar datos : en memoria RAM y en memoria secundaria disco, usb-. Los datos almacenados en memoria RAM se pierden son volátiles- cuando la computadora es apagada o cuando termina su ejecución el programa que los ha creado y almacenado. La memoria secundaria permite que los datos permanezcan almacenados de manera permanente en un sistema de archivos.
El direccionamiento es un proceso asociado al manejo de la memoria de una computadora. La memoria está compuesta de unidades denominadas bytes. Un byte a su vez se compone de 8 bits. Un bit mantiene un valor binario : 1 o 0. Los datos se almacenan en memoria usando uno o mas bytes según el tipo del dato. Cada byte en memoria tiene una dirección única, de manera que sabiendo esta dirección, podemos acceder al valor de un dato. Los valores de dirección de memoria se representan usando la notación hexadecimal. El identificador de un dato es una referencia a la dirección de memoria donde se almacena el dato. Por ejemplo, digamos que tenemos una variable entera cuyo identificador es i, su declaración es :
int i;
La variable i tendrá su lugar en memoria y según el lenguaje utilizado será el número de bytes que se le asignen para representarlo en memoria. i D0FF La caja representa los bytes en memoria que se le han asignado a la variable i. El número hexadecimal D0FF es la dirección de memoria que le ha correspondido a los bytes donde se almacenará el valor de la variable i. Nosotros como programadores no sabemos el valor de la dirección de memoria que se le ha reservado a nuestra variable i. Lo que si conocemos es el identificador con el cual vamos a manejar al dato entero que representa la i. De manera que sólo con saber como hacemos una sentencia de asignación en el lenguaje que usemos en nuestro caso el lenguaje C#-, podemos acceder al dato y depositar en los bytes que le corresponden un valor determinado. Veamos la sentencia de asignación a la variable i que termina en caracter (;).
i = 100;
Después de ser ejecutada la sentencia de asignación a la variable i, debemos abstraer que los bytes que corresponden al dato representado por la variable i, tendrán o almacenan el valor del número entero 100. i D0FF En lenguaje C# los diferentes tipos de datos básicos o predefinidos se representan usando cierta cantidad de bytes, según sea el rango de valores que manejen. La tabla a continuación muestra dicha información. TIPO DE DATO short
int
long
float
double
decimal
string
char
bool DESCRIPCIÓN entero corto
Números enteros
Enteros largos
Números de punto flotante
Números de punto flotante de doble precisión
Valores monetarios
Secuencia de caracteres
Un solo caracter
Valores booleanos No. de bytes 2
4
8
4
8
16
2 bytes por caracter
2
1 100
Ing. Francisco Ríos Acosta Apuntes de Fundamentos de Programación. Instituto Tecnológico de la Laguna, a 18 de agosto del 2008. pag. 7 de 17 4.3.5 Sistema de numeración binaria y hexadecimal. Los datos númericos tienen diferentes maneras de ser representados. La representación por default es la decimal, pero existen otros sistema igualmente útiles para ciertas ocasiones. Otras 2 representaciones muy usadas son la binaria, la octal y la hexadecimal.
El sistema de numeración binaria tiene como alfabeto sólo 2 símbolos : { 0, 1 }. Para formar un número binario sólo podemos echar mano de estos 2 símbolos. Un número en cualquier sistema númerico se forma de dígitos que tienen un cierto valor significativo, que está dado por una potencia del número base. Por ejemplo, un número en sistema decimal digamos el 51, se concibe su valor de acuerdo a : 101=10
5
5 x 10=50 100=1
1
1 x 1=1 valor
50+1=51 Ahora veamos al número binario 111101 que valor decimal representa. 25=32
1
1 x 32=32 24=16
1
1 x 16=16 23=8
0
0 x 8=0 22=4
0
0 x 4=0 21=2
1
1 x 2=2 20=1
1
1 x 1=1 valor
32+16+0+0+2+1=51 El 51 decimal es representado en binario como 110011.
Podemos convertir un valor decimal a un número binario haciendo divisiones sucesivas del número decimal entre la base a la cual se requiere cambiar. En cada división se cambia el dividendo por el cociente de la anterior división. Las divisiones se efectúan hasta que el cociente sea 0. Hagámoslo con el número 51 : 51 / 2 =
25 / 2 =
12 / 2 =
6 / 2 =
3 / 2 =
1 / 2 = cociente
25
12
6
3
1
0 Residuo
1
1
0
0
1
1 Bit menos significativo
Bit mas significativo Un número mas pequeño digamos el 12 : 12 / 2 =
6 / 2 =
3 / 2 =
1 / 2 = cociente
6
3
1
0 Residuo
0
0
1
1 Bit menos significativo
Bit mas significativo Ejercicios propuestos : Convierte el número binario 1010101010 a decimal. Convierte el número decimal 112 a binario. Convierte el número binario 11111000 a decimal.
Ing. Francisco Ríos Acosta Apuntes de Fundamentos de Programación. Instituto Tecnológico de la Laguna, a 18 de agosto del 2008. pag. 8 de 17 El sistema numérico hexadecimal tiene como alfabeto a 16 símbolos { 0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F }. A partir de la combinación de estos símbolos se construyen los números hexadecimales. Ejemplos de números hexadecimales son 21, AA, F4AC, 1234, CBFE. Su correspondiente número decimal para cada número hexadecimal es el mostrado en la tabla siguiente. Valor decimal
32+1=33
160+10=170
61440+1024+160+12=62636
4096+512+48+4=4660 163=4096
F
15 X 4096=61440
1
1 X 4096=4096
C 162=256
4
4 X 256=1024
2
2 X 256=512
B 161=16
2
2 x 16=32
A
10 x 16=160
A
10 X 16=160
3
3 X 16=48
F 160=1
1
1 x 1=1
A
10 x 1=10
C
12 X 1=12
4
4 X 1=4
E Házlo de ejercicio
La conversión de un decimal a un hexadecimal se efectúa de manera similar a como lo hicimos con el binario, sólo debemos cambiar el divisor a la base 16. Veamos algunos ejemplos.
El número decimal 33 en hexadecimal es el 21. 33 / 16 =
2 / 16 = cociente
2
0 Residuo
1
2 Bit menos significativo
Bit mas significativo El número decimal 62716 en hexadecimal es el F4FC. 62716 / 16 =
3919 / 16 =
244 / 16 =
15 / 16 = cociente
3919
244
15
0 Residuo
12=C
15=F
4
15=F Bit menos significativo
Bit mas significativo En ocasiones se requiere de una conversión de binario a hexadecimal o al contrario, de hexadecimal a binario. La regla que se sigue es que para cada símbolo hexadecimal, le corresponden 4 símbolos binarios. En la tabla siguiente se han listado algunos ejemplos de conversión de binario a hexadecimal si lo vemos de izquierda a derecha, y de hexadecimal a binario si lo vemos de derecha a izquierda. Los números binarios se han separado en grupos de 4 símbolos de derecha a izquierda. binario
101 1100
1100 1111
1001
01 0001 hexadecimal
5A
AF
9
11
Ing. Francisco Ríos Acosta Apuntes de Fundamentos de Programación. Instituto Tecnológico de la Laguna, a 18 de agosto del 2008. pag. 9 de 17 4.4 Operadores, operandos y expresiones.
Operadores. Los operadores nos permiten manipular datos, sean variables, constantes, otras expresiones, objetos, atributos de objetos, entre otros, de manera que podamos (1) transformarlos, (2) usarlos en decisiones para controlar el flujo de ejecución de un programa, (3) formar valores para asignarlos a otros datos. El tipo de datos involucrado en una expresión se relaciona muy de cerca con los operadores utilizados. En nuestro curso veremos 7 tipos de operadores : aritméticos. relacionales lógicos asignación incremento decremento concatenación A continuación listaremos en tablas, a cada clasificación de operadores utilizando el lenguaje C#.
Operadores aritméticos. sus operandos son numéricos int, float, double. operador + descripción suma uso a + b +a Tipo según operandos binario monario conversión implícita int + float = float int + double = double float + double = double – resta a b -a binario monario idem operador + *
/
% multiplicación
división
residuo a * b
a / b
a % b binario
binario
binario idem operador +
idem operador +
no aplicable Ejercicios propuestos : Indica la conversión implícita para short + int. Operadores relacionales. sus operandos son numéricos int, float, double. operador <
>=
==
!= descripción menor que
menor o igual que
mayor que
mayor o igual que
igual que
diferente que uso a < b
a b
a >= b
a == b
a != b Tipo según operandos binario
binario
binario
binario
binario
binario Operadores lógicos. sus operandos son expresiones relacionales. operador &&
||
! descripción y
o
no uso a && b
a || b
! a Tipo según operandos binario
binario
monario
Ing. Francisco Ríos Acosta Apuntes de Fundamentos de Programación. Instituto Tecnológico de la Laguna, a 18 de agosto del 2008. pag. 10 de 17 Operadores de asignación. sus operandos son numéricos int, float, double. operador =
+=
-=
*=
/=
%= descripción asignación
suma
resta
multiplicación
división
residuo uso a = b
a += b, a = a + b
a = b, a = a – b
a *= b, a = a * b
a /= b, a = a / b
a %= b, a = a % b Tipo según operandos binario
binario
binario
binario
binario
binario Operadores de incremento y decremento. sus operandos son numéricos int, float, double. operador ++
— descripción incremento
decremento uso a++, postfijo, a=a+1 ++a, prefijo, a=a+1
a–, postfijo, a=a-1 –a, prefijo, a=a-1 Tipo según operandos monario monario
monario monario Operador de concatenación. se utilza para concatenar cadenas, sus operandos son de tipo string. operador +
+= descripción concatenación
asignación y concatenación uso s = s1 + s2
s += s1, concatena los caracteres de s1 a s. Tipo según operandos binario
binario Operandos. Son los datos a los que se les asocia un operador para efectuar una determinada operación con sus valores. Recordemos que los datos pueden ser variables o constantes. En cuanto a los datos variables ya sabemos que se les asocia un identificador y un tipo de dato, además que su identificador es una referencia a la dirección de memoria donde se ha almacenado el valor del dato. Por ejemplo, el operador + es usado para la suma de las variables x y y , su resultado es asignado al dato x mediante el uso del operador de asignación =.
x = x + y;
Los datos constantes involucrados como operandos pueden ser : literales, que son especificados por medio de un valor escrito en el código. simbólicas, especificadas por medio de un identificador asociado con un literal. Son mas recomendadas que el uso de literales. ¿Por qué? discútelo con tu profesor. Ejemplo de constantes literales :
int ancho = 80; string mensaje=ERROR; 80 y ERROR son constantes literales. Observa que las literales también tienen tipo. Notemos que el 80 no se ha escrito con un punto al final. Las constantes literales de tipo cadena string- se deben ecerrar entre comillas. Una constante literal de tipo float debe terminar en f ó F. Las doubles no deben tener esta terminación. Enseguida se muestran los ejemplos correspondientes a constantes float -> 200.56F, y double -> 3.1416.
float x = 200.56F; double pi=3.1416;
Las constantes literales de tipo caracter char- deberán ser escritas encerradas entre apóstrofes. Deberán contener un solo caracter , por ejemplo M asignado al dato variable sexo :
char sexo=M;
Ing. Francisco Ríos Acosta Apuntes de Fundamentos de Programación. Instituto Tecnológico de la Laguna, a 18 de agosto del 2008. pag. 11 de 17 Ejemplo de constantes simbólicas :
const float PI=3.1416f;
Luego podemos usar la constante simbólica PI en una expresión, mediante su identificador :
float area, radio=1.5f; area = PI * radio * radio;
Notemos que una constante simbólica usa un identificador asociado a un literal, y que su definición requiere de la palabra reservada del lenguaje const.
Expresiones. involucran operandos y operadores, siempre el resultado de la evaluación de una expresión es de un cierto tipo. La evaluación de una expresión la veremos en la siguiente sección. Por ahora diremos que dependiendo de los operadores involucrados, la expresión se denominará de asignación, aritmética, relacional, lógica, de incremeno, de decremento, de concatenación. Existen expresiones compuestas, pero el resulado será de un solo tipo. Veamos algunos ejemplos donde explicaremos algunas cuestiones acerca de las expresiones. expresión int num = 100 + 40.3;
int noVueltas = 10 * 3;
float x = 10.0 + 75.2;
float x = 10.0F + 75.2F;
string s = HOLA + MUNDO;
char sexo = M;
char sexo = M; comentarios No podemos mezclar constantes literales enteras y dobles para asignarlas a un dato entero.
Las constantes literales son todas enteras. La expresión es valida.
Error. Las constantes literales cuando trabajamos con float, deben terminar con f.
Se ha corregido el error.
Tenemos 2 constantes literales de tipo string cadena-. La expresión esta bien. El resultado depositado en la variable s, es la concatenación de las 2 constantes literales cadena, s tiene le valor de HOLA MUNDO.
ERROR, una constante literal string no puede asignarse a un dato tipo char. Los datos tipo char sólo pueden contener un solo caracter, además de que una constante literal char debe ser encerrada entre apóstrofes.
La expresión de asignación ahora es correcta, ya que la estado ERROR
OK
ERROR
OK
OK
ERROR
OK constante literal es de tipo char, es decir, se ha encerrado entre apóstrofes.
4.5 Prioridad de operadores, evaluación de expresiones.
Prioridad de operadores. Los programas de computadora evalúan expresiones de tipo aritméticas, relacionales, lógicas, de incremento, de decremento, de asignación, entre otras, tomando en cuenta las prioridades predefinidas por el lenguaje para los diferentes operadores. Esto lo apuntamos, debido a que las expresiones pueden involucrar a diferente tipo de operadores, por ejemplo :
! x < 0 && y >= x * 12.0 5.5
Digamos que x tiene el valor de 10, y el valor de 200.4, entonces ¿cuál sería el valor que retorna la expresión?. Para calcularlo deberemos conocer la prioridad de ejecución de los diferentes tipos de operadores en el lenguaje de programación que en nuestro caso es el C#. La prioridad de ejecución puede ser alterada por el programador por medio del uso de los paréntesis. Otra cuestión importante en la evaluación de una expresión, es que ésta es ejecutada de izquierda a derecha por la computadora. Entonces para saber cómo es evaluada una expresión, debemos conocer 3 cuestiones : (1) la prioridad de ejecución de los operadortes involucrados, (2) la evaluación es realizada de izquierda a derecha, (3) el uso de paréntesis permite la alteración de la prioridad de ejecución.
Ing. Francisco Ríos Acosta Apuntes de Fundamentos de Programación. Instituto Tecnológico de la Laguna, a 18 de agosto del 2008. pag. 12 de 17 En la tabla mostrada a continuación podemos ver la prioridad de ejecución de ciertos operadores en C#. NIVEL DE PRIORIDAD 1 2 OPERADORES () ! – + ++ — (Nota : el menos y el mas cuando son usados como operadores monarios) 3 * / % 4 + – (Nota : usados como operadores binarios) > >= 5
6 <
==
Página anterior | Volver al principio del trabajo | Página siguiente |