Metodología 5

Anuncio
Electricidad y Electrónica Industrial
Informática II
Universidad Tecnológica de Puebla
Informática II
Manual de asignatura
Carrera
Electricidad y Electrónica Industrial
Programa 2004
Universidad Tecnológica de Puebla
Lic. Jorge Cerezo Sánchez
Pagina
0
Electricidad y Electrónica Industrial
Informática II
Contenido
Horas
Página
Teoría Práctica Total
I
Sistemas numéricos.
4
2
6
3
II Algoritmos
2
8
10
15
III Metodología de la programación
3
2
5
19
IV Lenguajes de programación
8
31
39
28
V Canales de comunicación
5
10
15
42
Anexos (Manual de prácticas y ejercicios)
Universidad Tecnológica de Puebla
Lic. Jorge Cerezo Sánchez
45
Pagina
1
Electricidad y Electrónica Industrial
Informática II
I
Sistemas Numéricos
I.1 INTRODUCCIÓN.
Saber en la Teoría (4 hrs.)
EL SISTEMA DECIMAL (Base 10):
Este sistema está formado por diez símbolos, llamados números arábicos.
También es llamado sistema de base 10. Usando los diez símbolos
separadamente 0, 1, 2, 3, ..., 9 nos permite representar el valor de los números en
unidades individuales, pero para representar mas de nueve números es necesario
combinarlos. Cuando usamos símbolos en combinación, el valor de cada uno de
ellos depende de su posición con respecto al punto decimal, designando así
un símbolo para las unidades, otro para las decenas, otro para las centenas, otro
para los millares (de miles, no de millón), en adelante.
El símbolo correspondiente a las unidades asume la posición mas izquierda antes
del punto decimal. Esta designación de posición determina que la potencia del
número se corresponde con la distancia en que está del punto decimal, y es por
ello que la primera posición se llama UNIDAD (100 = 1). Matemáticamente esto
puede ser representado como:
unidad = 100
decena = 101
centena = 102
Por ejemplo: El valor en combinación de los símbolos 234 es determinado por la
suma de los valores correspondientes a cada posición:
2 x 102
+
3 x 101
+
4 x 100
+
3 x 10
+
4x1
Que equivale a:
2 x 100
Efectuando las multiplicaciones esto da:
Universidad Tecnológica de Puebla
Lic. Jorge Cerezo Sánchez
Pagina
2
Electricidad y Electrónica Industrial
200
+
Informática II
30
+
4
Cuya suma da como resultado: 234
Para representar un número base diez es posible colocar su valor seguido
de la base en sub-índice (18.97410) o bien seguido de la letra d entre
paréntesis: 645(d).
EL SISTEMA BINARIO (Base 2):
Es un sistema de números de base igual a 2, lo que nos lleva a representar los
números con sólo dos símbolos distintos: 0 y 1.
Es usado para representar números del mismo modo que el sistema decimal,
donde cada símbolo puede ser usado individualmente o en combinación. Por ello
con sólo un símbolo en sistema binario podemos representar apenas dos valores
(cero y uno) a diferencia del sistema decimal donde un sólo símbolo podía
representar hasta diez. Combinando dos símbolos binarios logramos generar los
cuatro primeros valores del sistema binario, que se muestran abajo:
00
01
10
11
(El
uno
se
movió
una
posición
a
la
izquierda)
Para un número mas grande, el símbolo 1 debe ser movido otra vez, haciendo
aparecer una tercera columna, tal como ocirrió antes con la segunda. aplicando
todas las combinaciones posibles de 0's y 1's, se obtiene:
Binario Decimal
Universidad Tecnológica de Puebla
000
0
001
1
010
2
011
3
100
4
Lic. Jorge Cerezo Sánchez
Pagina
3
Electricidad y Electrónica Industrial
Informática II
101
5
110
6
111
7
En este sistema se emplea el mismo concepto de posicionamiento y potencia que
en el anterior. A continuación se ven algunos ejemplos de posicionamiento y
potencia de los símbolos:
En este sistema se emplea el mismo concepto de posicionamiento y potencia que
en el anterior. A continuación se ven algunos ejemplos de posicionamiento y
potencia de los símbolos:
Para números enteros (a la izquierda del punto decimal):
Trigésimo-Segundo (32) =25
Décimo-Sexto
(16)= 24
Octavo
(8) = 21
Cuarto
(4) = 22
Segundo
(2) = 21
Primero
(1) = 20
Cuando los símbolos 0 y 1 son usados para representar números binarios, cada
símbolo es llamado dígito binario, o simplemente BIT. El número binario 10102 es
llamado número binario de cuatro dígitos o número binario de 4-bits.
Este sistema es muy empleado en circuitería digital por ser fácil de representar y
transmitir electrónicamente. Comúnmente (aunque no siempre) el símbolo cero del
sistema binario está representado por un estado eléctrico bajo, usualmente
correspondiente a la masa o a los 0V. Del mismo modo el símbolo 1 es
representado por un estado alto que, por lo general, se corresponde con la tensión
de fuente (suele ser 5V en sistemas digitales). Pero esto es "por lo general". Hay
muchos casos donde si bien el sistema es binario los símbolos son representados
eléctricamente de otra forma. Tal es el caso del estándar de comunicaciones
seriales 232C donde el 1 es representado por una tensión negativa de entre 5V y
25V, mientras que el 0 es representado por una tensión positiva del mismo rango.
CONVERSIÓN ENTRE SISTEMAS
Universidad Tecnológica de Puebla
Lic. Jorge Cerezo Sánchez
Pagina
4
Electricidad y Electrónica Industrial
Informática II
DE BINARIO A DECIMAL:
Para poder transformar números binarios en su correspondiente decimal basta
multiplicar el dígito binario (que sólo puede ser 0 o 1) por 2 elevado a la potencia
correspondiente a la distancia de ese símbolo al punto decimal. Luego se suman
los valores obtenidos y se consigue el número final.
Ejemplos:
102 = 1x21 + 0x20 = 1x2 + 0x1 = 2 + 0 = 210
1012 = 1x22 + 0x21 + 1x20 = 1x8 + 1x4 + 0x2 + 1x1 = 4 + 0 + 1 = 510
10012 = 1x23 + 0x22 + 0x21 + 1x20 = 1x8 + 0x4 + 0x2 + 1x1 = 8 + 0 + 0 + 1 = 910
DE DECIMAL A BINARIO:
Aquí veremos el método de divisiones y multiplicaciones sucesivas.
Para convertir un número ENTERO decimal a una nueva base, el número decimal
es sucesivamente dividido por la nueva base. Como en nuestro caso la nueva
base es 2 el número será sucesivamente dividido por 2, O sea, el número original
es dividido por 2, el resultado de ese cociente es dividido por 2 sucesivamente
hasta que el cociente de 0. El resto de cada división es un número binario que
conforma el número resultante de la conversión. El primer resultado producido (el
primer resto obtenido) corresponde al bit mas próximo al punto decimal (o lo que
se conoce como bit de menor peso). Los sucesivos bits se colocan a la izquierda
del anterior. Nótese que esto es como escribir en sentido contrario al empleado
normalmente.
Veamos esto con un ejemplo:
Convertiremos a binario el número 1810
18 / 2 = 9 y resta 0 (este cero es el bit mas próximo al punto binario)
9 / 2 = 4 y resta 1 (este uno es el bit que le sigue a la izquierda al cero obtenido
arriba)
4 / 2 = 2 y resta 0 (este cero es el bit que le sigue a la izquierda al uno obtenido
arriba)
2 / 2 = 1 y resta 0 (este cero es el bit que le sigue a la izquierda al cero obtenido
arriba)
Con 1 no se puede continuar dividiendo pero se coloca éste a la izquierda del cero
obtenido arriba, quedando como bit de mayor peso.
Universidad Tecnológica de Puebla
Lic. Jorge Cerezo Sánchez
Pagina
5
Electricidad y Electrónica Industrial
Informática II
Entonces, 1810 = 100102.
EL SISTEMA OCTAL (Base 8):
Este sistema es muy usado en trabajos digitales, por su fácil conversión de y hacia
el sistema binario. Tiene su base igual a ocho, lo que genera la necesidad de ocho
símbolos para representar valores en este sistema y para esta finalidad se
seleccionaron los primeros ocho símbolos del sistema decimal: 0, 1, 2, 3, 4, 5, 6 y
7.
A continuación del 7 y para seguir contando hacia adelante, hay que agregar una
nueva columna a la izquierda la cual tendrá como valor inicial un 1. De esta forma
es posible obtener otras ocho nuevas combinaciones tal como sucedía en los
otros sistemas comentados anteriormente. Estos son algunos de los valores para
cada símbolo.
Septuagésimo-Cuarto
(64) = 82
Octavo
(8) = 81
Unidad
(1) = 80
Un Octavo
= 8-1
Un Sesenta y Cuatroavos
= 8-2
Los números octales son parecidos a los números decimales excepto por los
símbolos 8 y 9, que no son usados.
CONVERSIÓN DE DECIMAL A OCTAL:
En esta caso basta usar el mismo método de conversión con los números binarios.
Pero en vez de hacer divisiones sucesivas por 2 hay que efectuarlas por 8. Nótese
que el divisor corresponde a la base del sistema al cual se va a convertir. Lo
mismo sucede con las multiplicaciones sucesivas, necesarias para convertir
números fraccionarios.
Ejemplo 1: Convertir 24510
245 / 8 = 30 y resta 5 (dígito mas próximo al punto octal)
30 / 8 = 3 y resta 6 (dígito a la izquierda del 5 obtenido arriba)
No se puede seguir dividiendo, por lo que el 3 queda como dígito de mayor peso a
la izquierda del 6 obtenido arriba.
Resultado: 24510 = 3658
Ejemplo 2: Convertir 17510
Universidad Tecnológica de Puebla
Lic. Jorge Cerezo Sánchez
Pagina
6
Electricidad y Electrónica Industrial
Informática II
175 / 8 = 21 y resta 7 (dígito mas próximo al punto octal)
21 / 8 = 2 y resta 5 (dígito a la izquierda del 7 obtenido arriba)
No se puede seguir dividiendo, por lo que el 2 queda como dígito de mayor peso a
la izquierda del 7 obtenido arriba.
Resultado: 17510 = 2578
SISTEMA HEXADECIMAL (Base 16):
Este sistema requiere el uso de 16 símbolos, siendo formado por los mismos
empleados en el sistema decimal y seis letras del alfabeto arábico comprendidas
entre A y F. Dado que las computadoras usualmente agrupan conjuntos de bits en
múltiplos de cuatro este sistema permite representar a cada grupo con un simple
símbolo. Por ello es que es tan usado en estos días. En la tabla de abajo se
muestra la relación entre los sistemas.
Decimal
Binario
Octal
Hexa
0
0000
0
0
1
0001
1
1
2
0010
2
2
3
0011
3
3
4
0100
4
4
5
0101
5
5
6
0110
6
6
7
0111
7
7
8
1000
10
8
9
1001
11
9
10
1010
12
A
11
1011
13
B
12
1100
14
C
13
1101
15
D
14
1110
16
E
15
1111
17
F
Universidad Tecnológica de Puebla
Lic. Jorge Cerezo Sánchez
Pagina
7
Electricidad y Electrónica Industrial
Informática II
Al igual que en los otros sistemas en Hexadecimal, cuando se llega a la F y se
requiere seguir contando hacia adelante se torna necesario agregar una nueva
columna a la izquierda de la actual la cual inicialmente deberá estar en 1. Esto
permite generar otros 16 símbolos nuevos diferentes a los anteriores.
CONVERSIÓN DE HEXADECIMAL A BINARIO:
Para efectuar la conversión basta con colocar los cuatro bits correspondientes a
cada símbolo del número hexa respetando su posición original. Para saber el valor
de cada símbolo sólo tiene que mirar la tabla de relación entre sistemas mostrada
arriba.
Por ejemplo: Para convertir 7A216
7
0111
A
1010
2
0010
Resultado: 7A216 = 0111101000102
Otro ejemplo: Para convertir 3D4.F16
3
0011
D
1101
4
0100
.
.
F
1111
Resultado: 3D4.F16 = 001111010100.11112
CONVERSIÓN DE BINARIO A HEXADECIMAL:
Primeramente hay que agrupar los bits de a cuatro comenzando por la derecha y
siguiendo hacia la izquierda. Si bien en palabras cuya longitud sea múltiplo de
cuatro esto no tiene obligatoriedad, en aquellas cuyo tamaño no sea múltiplo de
cuatro si selecciona de izquierda a derecha los grupos de bits quedarán mal
conformados. Esto anterior para la parte entera. Para la parte fraccionaria el orden
es inverso, o sea que se agrupa de izquierda a derecha. Nótese que siempre es
del punto hacia afuera. Una vez formados los grupos basta con fijarse en la tabla
de arriba y reemplazar cada grupo por el símbolo Hexa correspondiente.
Universidad Tecnológica de Puebla
Lic. Jorge Cerezo Sánchez
Pagina
8
Electricidad y Electrónica Industrial
Informática II
Nada mejor que unos ejemplos:
Ejemplo 1: Convertir 1010110100102
1010
A
1101
D
0010
2
Resultado: 1010110100102 = AD216
Ejemplo 2: Convertir 101110101102
101
5
1101
D
0110
6
Resultado: 101110101102 = 5D616
CONVERSIÓN DE HEXADECIMAL A DECIMAL:
Los números hexa son convertidos a su equivalente decimal multiplicando el peso
de cada posición por el equivalente decimal del dígito de cada posición y sumando
los productos.
Entonces:
12116 =
1 x 162 + 2 x 161 + 1 x 160
1 x 256 + 2 x 16 + 1 x 1
256 + 32 + 1
28910
A1C16
A x 162 + 1 x 161 + C x 160
10 x 256 + 1 x 16 + 12 x 1
2560 + 16 + 12
258810
OBS: Los valores que sustituyen a las letras se obtienen de la tabla dada arriba.
CONVERSIÓN DE DECIMAL A HEXADECIMAL:
Universidad Tecnológica de Puebla
Lic. Jorge Cerezo Sánchez
Pagina
9
Electricidad y Electrónica Industrial
Informática II
Se puede realizar empleando dos procesos: Divisiones sucesivas por 16, cuando
el número es entero, o multiplicaciones sucesivas por 16, cuando el número es
fraccionario. Siguiendo los mismos lineamientos empleados con los otros sistemas
numéricos.
Ejemplo 1: 65010
650 / 16 = 40 y resta 10 = A (dígito mas próximo al punto hexadecimal)
40 / 16 = 2 y resta 8 (dígito a la izquierda del anterior)
No se puede continuar dividiendo, por lo que el 2 queda como símbolo mas
significativo a la izquierda del anterior.
Resultado 65010 = 28A16
Ejemplo 2: 258810
2588 / 16 = 161 y resta 12 = C (dígito mas próximo al punto hexadecimal)
161 / 16 = 10 y resta 1 (Dígito siguiente a la izquierda del obtenido arriba)
No se puede seguir dividiendo, por lo que el diez (la A) queda como símbolo mas
significativo a la izquierda del obtenido arriba
Resultado 258810 = A1C16
Operaciones entre bases:
La regla principal es: Cualquier operación aritmética se debe realizar entre
números que se encuentren en la misma base, de lo contrario, la operación
aritmética a realizar no tendrá ningún sentido.
En binario, la cifra más alta es el 1, por lo tanto, cuando en la suma encontramos
dos unos resulta 1 + 1 = 10, entonces se deja el 0 y se arrastra el 1 para ser
sumado a la izquierda. Debido al 1 de arrastre pueden juntarse tres unos, con lo
que obtenemos 1 + 1 + 1 = 11 luego dejaremos un 1 y arrastramos otro 1 a la
izquierda.
Universidad Tecnológica de Puebla
Lic. Jorge Cerezo Sánchez
Pagina
10
Electricidad y Electrónica Industrial
Informática II
Ejemplo de resta binaria: Se ha puesto un ejemplo de resta en decimal como
punto de referencia para restar en binario. Vea que empezando por la derecha, en
cuarto lugar encontramos que de 7 a 13 van 6 y arrastramos 1 a la izquierda que
se suma al 4 (quedando 5 y faltando 3 para llegar a 8). En sexto lugar
encontramos que de 9 a 15 van 6 y arrastramos 1 a la izquierda que se suma al 9.
Esto hace que 9 + 1 = 10, con lo que queda 0 (de 0 a 4 van 4) y se arrastra el 1
para sumarse al 1 del extremo izquierdo, con lo que de 2 a 5 van 3. En el ejemplo
binario, en cuarto lugar comenzando por la derecha, encontraremos que de 1 a 10
(será 2 pasado a decimal) va 1 y se arrastra 1 a la izquierda para sumar al 0. En
sexto lugar volvemos a encontrar que de 1 a 10 va 1 y se arrastra 1 a la izquierda
para sumar al 1 (esto desencadena otro arrastre hasta la última posición
izquierda).
Ejemplo de producto binario: La multiplicación es tan sencilla que no se
necesita explicación. Si sabemos multiplicar en sistema decimal no encontraremos
ningún problema para hacerlo en binario. Si el número de cifras es grande, es
posible que se junten muchos unos en las sumas finales, por ejemplo 5 unos cuya
suma binaria es 101, en cuyo caso queda 1, se arrastra un 0 a la izquierda (que no
afecta) y se arrastra un 1 dos lugares a la izquierda.
Ejemplo de división binaria: En este ejemplo, hay que comenzar cogiendo 4
cifras del dividendo para sobrepasar al divisor. Así resulta que 1011 entre 111 toca
Universidad Tecnológica de Puebla
Lic. Jorge Cerezo Sánchez
Pagina
11
Electricidad y Electrónica Industrial
Informática II
a 1 (solo puede ser 1 o 0). 1 por 111 es 111 y falta 100 hasta llegar a 1011.
Bajando la siguiente cifra (un 0) resulta que 1000 entre 111 toca a 1. Así
sucesivamente.
El complemento a 1 de un valor binario se obtiene invirtiendo el estado de todas
sus cifras, incluyendo los ceros a la izquierda hasta completar la capacidad del
registro. Por ejemplo, el valor 10011 en un registro de 8 bits (cifras) será 00010011
y su complemento a 1 será 11101100.
El complemento a 2 de un valor binario se obtiene sumando 1 al complemento
a 1. Por ejemplo, el complemento a 2 de 10011 (el mismo anterior) será 11101100
+ 1 = 11101101.
SUMA OCTAL
Antes de empezar a desarrollar los ejemplos correspondientes se presenta en la
figura 38 una tabla de suma octal básica para hacer las primeras sumas.
0
1
2
3
4
5
6
7
0
0
1
2
3
4
5
6
7
1
1
2
3
4
5
6
7
10
2
2
3
4
5
6
7
10
11
3
3
4
5
6
7
10
11
12
4
4
5
6
7
10
11
12
13
5
5
6
7
10
11
12
13
14
6
6
7
10
11
12
13
14
15
7
7
10
11
12
13
14
15
16
1. Ejemplos:
Universidad Tecnológica de Puebla
Lic. Jorge Cerezo Sánchez
Pagina
12
Electricidad y Electrónica Industrial
Informática II
1. Resolver: (25731)8 + (32147)8
25731
+
32147
60100
(25731)8+(32147)8 = (60100)8
2. Resolver (4327)8 + (6714) 8
4327
+6714
13243
Universidad Tecnológica de Puebla
Lic. Jorge Cerezo Sánchez
Pagina
13
Electricidad y Electrónica Industrial
Informática II
II
Algoritmos
¿QUÉ ES ALGORITMO?
La palabra algoritmo se deriva de la traducción al latín de la palabra árabe
alkhowarizmi, nombre de un matemático y astrónomo árabe que escribió un
tratado sobre manipulación de números y ecuaciones en el siglo IX.
Un algoritmo es una serie de pasos organizados que describe el proceso que se
debe seguir, para dar solución a un problema específico.
¿TIPOS DE ALGORITMOS…?
Existen dos tipos y son llamados así por su naturaleza:
•
Cualitativos: Son aquellos en los que se describen los pasos utilizando
palabras.
Cuantitativos: Son aquellos en los que se utilizan cálculos numéricos para
definir los pasos del proceso.
•
Lenguajes Algorítmicos
Un Lenguaje algorítmico es una serie de símbolos y reglas que se utilizan para
describir de manera explícita un proceso.
Tipos de Lenguajes Algorítmicos
•
Gráficos: Es la representación gráfica de las operaciones que realiza un
algoritmo (diagrama de flujo).
Universidad Tecnológica de Puebla
Lic. Jorge Cerezo Sánchez
Pagina
14
Electricidad y Electrónica Industrial
•
Informática II
No Gráficos: Representa en forma descriptiva las operaciones que debe
realizar un algoritmo (pseudocodigo).
INICIO
Edad: Entero
ESCRIBA “cual es tu edad?”
Lea Edad
SI Edad >=18 entonces
ESCRIBA “Eres mayor de Edad”
FINSI
ESCRIBA “fin del algoritmo”
FIN
Metodología para la solución de un problema mediante un ordenador.
Creación de un algoritmo.
El computador es una máquina que por sí sola no puede hacer nada, necesita ser
programada, es decir, introducirle instrucciones u ordenes que le digan lo que
tiene que hacer. Un programa es la solución a un problema inicial, así que todo
comienza allí: en el Problema. El proceso de programación es el siguiente: Dado
un determinado problema el programador debe idear una solución y expresarla
usando un algoritmo (aquí es donde entra a jugar); luego de esto, debe codificarlo
en un determinado lenguaje de programación y por último ejecutar el programa en
el computador el cual refleja una solución al problema inicial. Esto es a grandes
rasgos lo que hace el programador de computadores.
La parte que corresponde a este manual es la de: “Dado un determinado problema
debemos idear una solución y expresarla usando un ALGORITMO!”.
Metodología para la solución de problemas por medio de computadora
•
DEFINICIÓN DEL PROBLEMA
Esta fase está dada por el enunciado del problema, el cual requiere una
definición clara y precisa. Es importante que se conozca lo que se desea
que realice la computadora; mientras esto no se conozca del todo no tiene
mucho caso continuar con la siguiente etapa.
•
ANÁLISIS DEL PROBLEMA
Una vez que se ha comprendido lo que se desea de la computadora, es
necesario definir:
o Los datos de entrada.
Universidad Tecnológica de Puebla
Lic. Jorge Cerezo Sánchez
Pagina
15
Electricidad y Electrónica Industrial
o
o
Informática II
Cual es la información que se desea producir (salida)
Los métodos y fórmulas que se necesitan para procesar los datos.
Una recomendación muy práctica es el de colocarse en el lugar de la
computadora y analizar qué es lo que se necesita que se ordene y en qué
secuencia para producir los resultados esperados.
•
DISEÑO DEL ALGORITMO
Las características de un buen algoritmo son:
o Debe tener un punto particular de inicio.
o Debe ser definido, no debe permitir dobles interpretaciones.
o Debe ser general, es decir, soportar la mayoría de las variantes que
se puedan presentar en la definición del problema.
o Debe ser finito en tamaño y tiempo de ejecución.
o Diseño del Algoritmo
o Prueba de escritorio o Depuración
Se denomina prueba de escritorio a la comprobación que se hace de un algoritmo
para saber si está bien hecho. Esta prueba consiste en tomar datos específicos
como entrada y seguir la secuencia indicada en el algoritmo hasta obtener un
resultado, el análisis de estos resultados indicará si el algoritmo está correcto o si
por el contrario hay necesidad de corregirlo o hacerle ajustes.
Universidad Tecnológica de Puebla
Lic. Jorge Cerezo Sánchez
Pagina
16
Electricidad y Electrónica Industrial
Informática II
III
Metodología de la programación.
Para el proceso de Algoritmos es necesario aprender a desarrollar un
conjunto de elementos.
Todos estos elementos con los cuales se construyen dichos algoritmos se basan
en una disciplina llamada: Programación Estructurada.
Empecemos por conocer las reglas para cambiar fórmulas matemáticas a
expresiones válidas para la computadora, además de diferenciar constantes e
identificadores y tipos de datos simples.
Tipos De Datos
Todos los datos tienen un tipo asociado con ellos. Un dato puede ser un simple
carácter, tal como ‘b’, un valor entero tal como 35. El tipo de dato determina la
naturaleza del conjunto de valores que puede tomar una variable.
Tipos de Datos Simples
Datos Numéricos:
Permiten representar valores escalares de forma numérica, esto incluye a los
números enteros y los reales. Este tipo de datos permiten realizar operaciones
aritméticas comunes.
Universidad Tecnológica de Puebla
Lic. Jorge Cerezo Sánchez
Pagina
17
Electricidad y Electrónica Industrial
Informática II
Datos lógicos:
Son aquellos que solo pueden tener dos valores (cierto o falso) ya que
representan el resultado de una comparación entre otros datos (numéricos o
alfanuméricos).
Datos alfanuméricos (string):
Es una secuencia de caracteres alfanuméricos que permiten representar valores
identificables de forma descriptiva, esto incluye nombres de personas, direcciones,
etc. Es posible representar números como alfanuméricos, pero estos pierden su
propiedad matemática, es decir no es posible hacer operaciones con ellos. Este
tipo de datos se representan encerrados entre comillas.
identificadores
Los identificadores representan los datos de un programa (constantes, variables,
tipos de datos). Un identificador es una secuencia de caracteres que sirve para
identificar una posición en la memoria de la computadora, que permite acceder a
su contenido.
Ejemplo:
» Nombre
» Num_hrs
» Calif2
Reglas para formar un identificador
•
Debe comenzar con una letra (A a Z, mayúsculas o minúsculas) y no deben
contener espacios en blanco.
• Letras, dígitos y caracteres como la subraya ( _ ) están permitidos después
del primer carácter.
• La longitud de identificadores puede ser de varios caracteres. Pero es
recomendable una longitud promedio de 8 caracteres.
• El nombre del identificador debe dar una idea del valor que contiene.
Universidad Tecnológica de Puebla
Lic. Jorge Cerezo Sánchez
Pagina
18
Electricidad y Electrónica Industrial
Informática II
Qué son las constantes, las variables y las expresiones en la programación
así como su clasificación.
Constantes
Una constante es un dato numérico o alfanumérico que no cambia durante la
ejecución del programa.
Ejemplo:
pi = 3.1416
Variable
Es un espacio en la memoria de la computadora que permite almacenar
temporalmente un dato durante la ejecución de un proceso, su contenido puede
cambiar durante la ejecución del programa.
Para poder reconocer una variable en la memoria de la computadora, es necesario
darle un nombre con el cual podamos identificarla dentro de un algoritmo.
Ejemplo:
area = pi * radio ^ 2
Las variables son : el radio, el area y la constate es pi
Clasificación de las Variables
Por su contenido
•
Variables Numéricas: Son aquellas en las cuales se almacenan valores
numéricos, positivos o negativos, es decir almacenan números del 0 al 9,
signos (+ y -) y el punto decimal.
Ejemplo:
iva = 0.15 pi = 3.1416 costo = 2500
Universidad Tecnológica de Puebla
Lic. Jorge Cerezo Sánchez
Pagina
19
Electricidad y Electrónica Industrial
Informática II
•
Variables Lógicas: Son aquellas que solo pueden tener dos valores (cierto o
falso) estos representan el resultado de una comparación entre otros datos.
•
Variables Alfanuméricas: Esta formada por caracteres alfanuméricos (letras,
números y caracteres especiales).
Ejemplo:
letra = ’a’ apellido = ’lopez’ direccion = ’Av. Libertad #190’
Por su uso
•
•
•
Variables de Trabajo: Variables que reciben el resultado de una operación
matemática completa y que se usan normalmente dentro de un programa.
Ejemplo:
Suma = a + b /c
Contadores: Se utilizan para llevar el control del numero de ocasiones en
que se realiza una operación o se cumple una condición. Con los
incrementos generalmente de uno en uno.
Acumuladores: Forma que toma una variable y que sirve para llevar la
suma acumulativa de una serie de valores que se van leyendo o calculando
progresivamente.
Expresiones
Las expresiones son combinaciones de constantes, variables, símbolos de
operación, paréntesis y nombres de funciones especiales.
Por ejemplo:
a + (b + 3) / c
Cada expresión toma un valor que se determina tomando los valores de las
variables y constantes implicadas y la ejecución de las operaciones indicadas.
Una expresión consta de operadores y operandos. Según sea el tipo de datos que
manipulan, se clasifican las expresiones en:
•
•
•
Aritméticas
Relaciónales
Lógicas
Universidad Tecnológica de Puebla
Lic. Jorge Cerezo Sánchez
Pagina
20
Electricidad y Electrónica Industrial
Informática II
Qué son los operadores y los operando, sus tipos y las prioridades de
ejecución de los mismos.
Operadores
Son elementos que relacionan de forma diferente, los valores de una o mas
variables y/o constantes. Es decir, los operadores nos permiten manipular valores.
Operadores Aritméticos
Los operadores aritméticos permiten la realización de operaciones matemáticas
con los valores (variables y constantes).
Los operadores aritméticos pueden ser utilizados con tipos de datos enteros o
reales. Si ambos son enteros, el resultado es entero; si alguno de ellos es real, el
resultado es real.
Operadores Aritméticos
+ Suma
- Resta
* Multiplicación
/ División
mod Modulo (residuo de la división entera)
Ejemplos:
Expresión Resultado
7/2
3.5
12 mod 7
5
Universidad Tecnológica de Puebla
Lic. Jorge Cerezo Sánchez
Pagina
21
Electricidad y Electrónica Industrial
Informática II
Prioridad de los Operadores Aritméticos
Todas las expresiones entre paréntesis se evalúan primero. Las expresiones con
paréntesis anidados se evalúan de dentro a fuera, el paréntesis más interno se
evalúa primero.
Dentro de una misma expresión los operadores se evalúan en el siguiente orden:
1. ^ Exponenciación
2. *, /, mod Multiplicación, división, modulo.
3. +, - Suma y resta.
Los operadores en una misma expresión con igual nivel de prioridad se evalúan de
izquierda a derecha.
Ejemplos:
4 + 2 * 5 = 14
3 + 5 * (10 - (2 + 4)) = 23
23 * 2 / 5 = 9.2
2.1 * (1.5 + 12.3) = 2.1 * 13.8 = 28.98
Operadores Relaciónales
Se utilizan para establecer una relación entre dos valores. Luego compara estos
valores entre si y esta comparación produce un resultado de certeza o falsedad
(verdadero o falso).
Los operadores relacionales comparan valores del mismo tipo (numéricos o
cadenas). Estos tienen el mismo nivel de prioridad en su evaluación.
Los operadores relaciónales tiene menor prioridad que los aritméticos.
Tipos de operadores Relaciónales
•
•
•
•
•
•
> Mayor que
< Menor que
> = Mayor o igual que
< = Menor o igual que
< > Diferente
= Igual
Universidad Tecnológica de Puebla
Lic. Jorge Cerezo Sánchez
Pagina
22
Electricidad y Electrónica Industrial
Informática II
Ejemplos:
Si a = 10, b = 20, c = 30
a+b>c
Falso
a-b<c
Verdadero
a-b=c
Falso
a * b < > c Verdadero
Ejemplos no lógicos:
a<b<c
10 < 20 < 30
T > 5 < 30
(no es lógico porque tiene diferentes operandos)
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
Ejemplo:
Para los siguientes ejemplos T significa verdadero y F falso.
Operador Not Operador Not
Operando Resultado
T
F
F
T
Operador And Operador And
Universidad Tecnológica de Puebla
Lic. Jorge Cerezo Sánchez
Pagina
23
Electricidad y Electrónica Industrial
Informática II
Operando1
T
T
F
F
Operador
AND
Operando2
T
F
T
F
Resultado
T
F
F
F
Operador Or Operador Or
Operando1 Operador Operando2 Resultado
T
Or
T
T
T
F
T
F
T
T
F
F
F
Prioridad de los Operadores Lógicos
1. Not
2. And
3. Or
Prioridad de los Operadores en General
1. ( )
2. ^
3. *, /, Mod, Not
4. +, -, And
5. >, <, > =, < =, < >, =, Or
Ejemplos:
Sea: a = 10 b = 12 c = 13 d =10
Universidad Tecnológica de Puebla
Lic. Jorge Cerezo Sánchez
Pagina
24
Electricidad y Electrónica Industrial
Informática II
Existen dos principales técnicas de diseño de algoritmos de programación,
el Top Down y el Bottom Up.
Top Down
También conocida como de arriba-abajo y consiste en establecer una serie de
niveles de mayor a menor complejidad (arriba-abajo) que den solución al
problema. Consiste en efectuar una relación entre las etapas de la estructuración
de forma que una etapa jerárquica y su inmediato inferior se relacionen mediante
entradas y salidas de información. Este diseño consiste en una serie de
descomposiciones sucesivas del problema inicial, que recibe el refinamiento
progresivo del repertorio de instrucciones que van a formar parte del programa.
La utilización de la técnica de diseño Top-Down tiene los siguientes objetivos
básicos:
•
•
•
Simplificación del problema y de los subprogramas de cada
descomposición.
Las diferentes partes del problema pueden ser programadas de modo
independiente e incluso por diferentes personas.
El programa final queda estructurado en forma de bloque o módulos lo que
hace mas sencilla su lectura y mantenimiento.
Bottom Up
El diseño ascendente se refiere a la identificación de aquellos procesos que
Universidad Tecnológica de Puebla
Lic. Jorge Cerezo Sánchez
Pagina
25
Electricidad y Electrónica Industrial
Informática II
necesitan computarizarse con forme vayan apareciendo, su análisis como sistema
y su codificación, o bien, la adquisición de paquetes de software para satisfacer el
problema inmediato.
Cuando la programación se realiza internamente y haciendo un enfoque
ascendente, es difícil llegar a integrar los subsistemas al grado tal de que el
desempeño global, sea fluido. Los problemas de integración entre los subsistemas
son sumamente costosos y muchos de ellos no se solucionan hasta que la
programación alcanza la fecha limite para la integración total del sistema. En esta
fecha, ya se cuenta con muy poco tiempo, presupuesto o paciencia de los
usuarios, como para corregir aquellas delicadas interfaces, que en un principio, se
ignoran. Aunque cada subsistema parece ofrecer lo que se requiere, cuando se
contempla al sistema como una entidad global, adolece de ciertas limitaciones por
haber tomado un enfoque ascendente.
Uno de ellos es la duplicación de esfuerzos para acceder el software y mas aún al
introducir los datos.
Otro es, que se introducen al sistema muchos datos carentes de valor.
Un tercero y tal vez el mas serio inconveniente del enfoque ascendente, es que los
objetivos globales de la organización no fueron considerados y en consecuencia
no se satisfacen.
Entonces…
La diferencia entre estas dos técnicas de programación se fundamenta en el
resultado que presentan frente a un problema dado.
Imagine una empresa, la cual se compone de varios departamentos (contabilidad,
mercadeo, …), en cada uno de ellos se fueron presentando problemas a los
cuales se le dieron una solución basados en un enfoque ascendente (Bottom Up):
creando programas que satisfacían sólo el problema que se presentaba.
Cuando la empresa decidió integrar un sistema global para suplir todas las
necesidades de todos los departamentos se dio cuenta que cada una de las
soluciones presentadas no era compatible la una con la otra, no representaba una
globalidad, característica principal de los sistemas.
Como no hubo un previo análisis, diseño de una solución a nivel global en todos
sus departamentos, centralización de información, que son características propias
de un diseño Descendente (Top Down) y características fundamentales de los
sistemas; la empresa no pudo satisfacer su necesidad a nivel global.
La creación de algoritmos es basado sobre la técnica descendente, la cual brinda
el diseño ideal para la solución de un problema.
Universidad Tecnológica de Puebla
Lic. Jorge Cerezo Sánchez
Pagina
26
Electricidad y Electrónica Industrial
Informática II
IV
Lenguajes de programación.
IV. Lenguajes de programación.
Al hablar de C, no hablamos de una tecnología nueva, sino de un lenguaje que
lleva mucho tiempo funcionando. Quizás en posteriores artículos, veamos su
historia, sus orígenes... por el momento vamos a seguir comentando aspectos
básicos para tener una vista general de él.
También, deberemos tener en cuenta que se trata de un lenguaje Case Sensitive,
es decir, que diferencia las mayúsculas y las minúsculas, no siendo igual PEPE,
pepe y Pepe. A la hora de programar hay que tenerlo en cuenta, pues de lo
contrario, será una gran fuente de problemas. Además, todas las instrucciones
han de terminar en ";", aspecto que por olvido también suele causar demasiados
errores tontos.
El lenguaje C inicialmente fue creado para la programación de
-Sistemas operativos
-Intérpretes
-Editores
-Ensambladores
-Compiladores
-Administradores de bases de datos.
Actualmente, debido a sus caraterísticas, puede ser utilizado paratodo tipo de
programas
Universidad Tecnológica de Puebla
Lic. Jorge Cerezo Sánchez
Pagina
27
Electricidad y Electrónica Industrial
Informática II
ELEMENTOS GENERALES DE UN PROGRAMA EN C
Aunque cada uno de los programas son distintos, todos tienen características
comunes. Los elementos de un programa en C son los siguientes:
Comentarios
Inclusión de archivos
main()
{
variables locales
flujo de sentencias
}
A continuación veremos algunos ejemplos de programas sencillos en lenguaje 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( )
{
}
Un programa algo más complicado es el siguiente:
#include <stdio.h>
main( )
{
printf("Hola amigos!\n");
}
Con él visualizamos el mensaje Hola amigos! 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
Universidad Tecnológica de Puebla
Lic. Jorge Cerezo Sánchez
Pagina
28
Electricidad y Electrónica Industrial
Informática II
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:
Código Descripción
\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
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
Tipos básicos y variables
Expresiones y operadores
Los distintos operadores permiten formar expresiones tanto aritméticas como
lógicas. Los operadores aritméticos y lógicos son:
Operadores
+, ++, -*, /, %
>>, <<
&
|
Universidad Tecnológica de Puebla
Descripción
Suma, resta
Incremento, decremento
Multiplicación, división, módulo
Rotación de bits a la derecha, izquierda.
AND booleano
OR booleano
Lic. Jorge Cerezo Sánchez
Pagina
29
Electricidad y Electrónica Industrial
^
~
!
==, !=
&&, ||
<, <=
>, >=
Informática II
XOR booleano
Complemento a 1
Complemento a 2, NOT lógico
Igualdad, desigualdad
AND, OR lógico
Menor, menor o igual
Mayor, mayor o igual
En estos operadores deben tenerse en cuenta la precedencia de operadores y las
reglas de asociatividad, que son las normales en la mayoría de lenguajes. Se debe
consultar el manual de referencia para obtener una explicación detallada. Además
hay toda una serie de operadores aritméticos con asignación, como pueden ser +=
y ^=.
En la evaluación de expresiones lógicas, los compiladores normalmente utilizan
técnicas de evaluación rápida. Para decidir si una expresión lógica es cierta o falsa
muchas veces no es necesario evaluarla completamente. Por ejemplo una
expresión formada <exp1> || <exp2>, el compilador evalúa primero <exp1> y si es
cierta, no evalúa <exp2>. Por ello se deben evitar construcciones en las que se
modifiquen valores de datos en la propia expresión, pues su comportamiento
puede depender de la implementación del compilador o de la optimización
utilizada en una compilación o en otra. Estos son errores que se pueden cometer
fácilmente en C ya que una asignación es también una expresión.
Debemos evitar: if (( x++ > 3 ) || ( x < y ))
y escribir en su lugar: x++; if (( x > 3 ) || ( x < y ))
Hay un tipo especial de expresión en C que se denomina expresión condicional y
está representada por los operadores ? : . Su utilización es como sigue: <e> ? <x>
: <y>. Se evalúa si e entonces x; si no, y.
int mayor ( int a, int b ) {
return ( a > b ) ? TRUE : FALSE;
}
waste_time () {
float a, b = 0.0;
( b > 0.0 ) ? sin(M_PI / 8) : cos(M_PI / 4);
}
Universidad Tecnológica de Puebla
Lic. Jorge Cerezo Sánchez
Pagina
30
Electricidad y Electrónica Industrial
Informática II
Las variables son definidas utilizando un identificador de tipo seguido del nombre
de la variable. Veamos el siguiente programa:
#include <stdio.h>
main()
{
float cels, farh;
farh = 35.0;
cels = 5.0 * ( farh - 32.0 ) / 9.0;
printf("-> %f F son %f C\n", farh, cels );
}
En el programa anterior se definen dos variables float, se asigna un valor a la
primera y se calcula la segunda mediante una expresión aritmética. Las
asignaciones en C también son una expresión, por lo que se pueden utilizar como
parte de otra expresión, pero según que prácticas de este tipo no son muy
recomendables ya que reducen la legibilidad del programa. En la instrucción printf,
el símbolo %f indica que se imprime un número en coma flotante.
Hay un tipo muy importante que se representa por void que puede significar dos
cosas distintas, según su utilización. Puede significar nada, o sea que si una
función devuelve un valor de tipo void no devuelve ningún resultado, o puede
significar cualquier cosa, como puede ser un puntero a void es un puntero
genérico a cualquier tipo de dato. Más adelante veremos su utilización.
Algunos ejemplos básicos de la programación en C serian los siguientes:
a)/*Programa que despliega un mensaje de bienvenida en la pantalla*/
#include<stdio.h>
#include<conio.h>
void main()
{
clrscr();
gotoxy(20,10);
Universidad Tecnológica de Puebla
Lic. Jorge Cerezo Sánchez
Pagina
31
Electricidad y Electrónica Industrial
Informática II
printf("BIENVENIDO AL CURSO DE C ESTANDAR");
delay(2500);
}
b) /*Programa que calcula el número de dias vividos*/
#include<stdio.h>
#include<conio.h>
void main()
{
char nombre[50];
int edad;
clrscr();
printf("¿Cómo te llamas?\n ");
scanf("%s",nombre);
printf("¿Cuántos años tienes?\n");
scanf("%i",&edad);
edad=edad*365;
gotoxy(5,10);
printf("%s, has vivido %i dias",nombre,edad);
gotoxy(40,22);
printf("Pulsa cualquier tecla para terminar...");
getch();
Universidad Tecnológica de Puebla
Lic. Jorge Cerezo Sánchez
Pagina
32
Electricidad y Electrónica Industrial
Informática II
}
c) /*Programa que saca el promedio de 3 números*/
#include<stdio.h>
#include<conio.h>
void main()
{
float numero;
float promedio=0;
clrscr();
printf("Dame el primer número: ");
scanf("%f",&numero);
promedio+=numero;
printf("Dame el segundo número: ");
scanf("%f",&numero);
promedio+=numero;
printf("Dame el tercer número: ");
scanf("%f",&numero);
promedio+=numero;
promedio=promedio/3;
printf("El promedio es %f",promedio);
gotoxy(40,22);
printf("Presione cualquier tecla para terminar...");
getch();
Universidad Tecnológica de Puebla
Lic. Jorge Cerezo Sánchez
Pagina
33
Electricidad y Electrónica Industrial
Informática II
}
d) /*Programa que convierte un número decimal entero a octal*/
#include<stdio.h>
#include<conio.h>
void main()
{
int numero;
clrscr();
printf("Numero entero en decimal: ");
scanf("%i", &numero);
printf("\n\nSu representacion en octal es %o");
gotoxy(40,22);
printf("Presione cualquier tecla para terminar...");
getch();
}
e) /*Programa que manda un mensaje de advertencia */
#include <dos.h>
#include<conio.h>
int main(void)
{
clrscr();
gotoxy(28,11);
Universidad Tecnológica de Puebla
Lic. Jorge Cerezo Sánchez
Pagina
34
Electricidad y Electrónica Industrial
Informática II
printf("¡ P E L I G R O ! ");
sound(250);
delay(600);
sound(80);
delay(600);
delay(600);
nosound();
return 0;
}
Funciones
Un programa C está formado por un conjunto de funciones que al menos contiene
la función main. Una función se declara con el nombre de la función precedido del
tipo de valor que retorna y una lista de argumentos encerrados entre paréntesis. El
cuerpo de la función está formado por un conjunto de declaraciones y de
sentencias comprendidas entre llaves. Veamos un ejemplo de utilización de
funciones:
#include <stdio.h>
#define VALOR 5
#define FACT 120
int fact_i ( int v )
{
int r = 1, i = 0;
while ( i <= v )
{
r = r * i;
i = i + 1;
}
return r;
}
Universidad Tecnológica de Puebla
Lic. Jorge Cerezo Sánchez
Pagina
35
Electricidad y Electrónica Industrial
Informática II
int fact_r ( int v )
{
if ( v == 0 ) return 1;
else return v * fact_r(v-1);
}
main() {
int r, valor = VALOR;
if ( (r = fact_i(valor)) != fact_r(valor) ) printf("Codificación errónea!!.\n");
else if ( r == FACT ) printf("Codificación correcta.\n");
else printf("Algo falla!!.\n");
}
Se definen dos funciones, fact_i y fact_r, además de la función main. Ambas
toman como parámetro un valor entero y devuelven otro entero. La primera calcula
el factorial de un número de forma iterativa, mientras que la segunda hace lo
mismo de forma recursiva.
Ciclos y sentencias:
Sentencia if
La sentencia de control básica es if (<e>) then <s> else <t>. En ella se evalúa una
expresión condicional y si se cumple, se ejecuta la sentencia s; si no, se ejecuta la
sentencia t. La segunda parte de la condición, else <t>, es opcional.
int cero ( double a )
{
if ( a == 0.0 )
return (TRUE);
else
return (FALSE);
}
En el caso que <e> no sea una expresión condicional y sea aritmética, se
considera falso si vale 0; y si no, verdadero. Hay casos en los que se deben
evaluar múltiples condiciones y únicamente se debe evaluar una de ellas.
Sentencia switch
Universidad Tecnológica de Puebla
Lic. Jorge Cerezo Sánchez
Pagina
36
Electricidad y Electrónica Industrial
Informática II
Se puede programar con un grupo de sentencias if then else anidadas, aunque
ello puede ser farragoso y de complicada lectura. Para evitarlo nos puede ayudar
la sentencia switch.
Su utilización es:
switch (valor) {
case valor1: <sentencias>
case valor2: <sentencias>
...
default: <sentencias>
}
Cuando se encuentra una sentencia case que concuerda con el valor del switch se
ejecutan las sentencias que le siguen y todas las demás a partir de ahí, a no ser
que se introduzca una sentencia break para salir de la sentencia switch. Por
ejemplo:
ver_opcion ( char c )
{
switch(c){
case 'a': printf("Op A\n");
break;
case 'b': printf("Op B\n");
break;
case 'c':
case 'd': printf("Op C o D\n");
break;
default: printf("Op ?\n");
}
}
Sentencia while
Otras sentencias de control de flujo son las que nos permiten realizar iteraciones
sobre un conjunto de sentencias. En C tenemos tres formas principales de realizar
iteraciones. La sentencia while (<e>) <s> es seguramente la más utilizada. La
sentencia, o grupo de sentencias <s> se ejecuta mientras la evaluación de la
expresión <e> sea verdadera.
long raiz ( long valor )
{
long r = 1;
while ( r * r <= valor )
r++;
Universidad Tecnológica de Puebla
Lic. Jorge Cerezo Sánchez
Pagina
37
Electricidad y Electrónica Industrial
Informática II
return r;
}
Una variación de la sentencia while es: do <s> while ( <e> ); En ella la sentencia
se ejecuta al menos una vez, antes de que se evalúe la expresión condicional.
Sentencia for
Otra sentencia iterativa, que permite inicializar los controles del bucle es la
sentencia for ( <i>; <e>; <p> ) <s>. La sentencia for se puede escribir también
como:
<i>;
while ( <e> ) {
<s>;
<p>;
}
El ejemplo anterior se podría escribir como:
long raiz ( long valor )
{
long r;
for ( r = 1; r * r <= valor; r++ );
return r;
}
break y continue
Otras sentencias interesantes, aunque menos utilizadas son break y continue.
break provoca que se termine la ejecución de una iteración o para salir de la
sentencia switch, como ya hemos visto. En cambio, continue provoca que se
comience una nueva iteración, evaluándose la expresión de control. Veamos dos
ejemplos:
void final_countdown (void)
{
int count = 10;
while ( count--> 1 )
Universidad Tecnológica de Puebla
Lic. Jorge Cerezo Sánchez
Pagina
38
Electricidad y Electrónica Industrial
Informática II
{
if ( count == 4 )
start_engines();
if ( status() == WARNING )
break;
printf("%d ", count );
}
if ( count == 0 ){
launch();
printf("Shuttle launched\n");
}
else
{
printf("WARNING condition received.\n");
printf("Count held at T - %d\n", count );
}
}
d2 ()
{
int f;
for ( f = 1; f <= 50; f++ ) {
if ( f % 2 == 0 )
continue;
printf("%d",f );
}
}
Universidad Tecnológica de Puebla
Lic. Jorge Cerezo Sánchez
Pagina
39
Electricidad y Electrónica Industrial
Informática II
V
Canales de comunicación.
Usando el puerto paralelo de una PC
Proyecto: Interfaz para el Puerto Paralelo
Introducción:
El puerto paralelo de una PC es ideal para ser usado como herramienta de control
de motores, relés, LED's, etc. El mismo posee un bus de datos de 8 bits (Pin 2 a 9)
y muchas señales de control, algunas de salida y otras de entrada que también
pueden ser usadas fácilmente.
Las PC's generalmente poseen solo uno de estos puertos (LPT1) pero con muy
poco dinero se le puede adicionar una tarjeta con un segundo puerto paralelo
(LPT2).
En reglas generales la dirección hexadecimal del puerto LPT1 es igual a 0x378
(888 en decimal) y 0x278 (632 en decimal) para el LPT2. Esto se puede verificar
fácilmente en el setup de la PC o bien en el cartel que generalmente la PC
muestra en el momento del booteo. Puede darse el caso que el LPT1 asuma la
dirección 0x3BC (956 en decimal) y el LPT2 0x378, en ese caso habrá que tratar
de corregir el setup y/o los jumper de las tarjetas en caso que sea posible. De lo
contrario se puede modificar el software que veremos mas adelante para aceptar
esas direcciones.
Universidad Tecnológica de Puebla
Lic. Jorge Cerezo Sánchez
Pagina
40
Electricidad y Electrónica Industrial
Informática II
Breve descripción del puerto paralelo:
El puerto paralelo de un PC posee un conector de salida del tipo DB25 hembra
cuyo diagrama y señales utilizadas podemos ver en la siguiente figura:
Si deseamos escribir un dato en el bus de salida de datos (pin 2 a 9) solo
debemos escribir el byte correspondiente en la dirección hexadecimal 0X378 (888
en decimal) cuando trabajamos con el LPT1 y 0x278 (632 en decimal) cuando
trabajamos con el LPT2. Los distintos pins (bits) de salida correspondientes al bus
de datos no pueden ser escritos en forma independiente, por lo que siempre que
se desee modificar uno se deberán escribir los ocho bits nuevamente.
Controlando un Motor Paso a Paso mediante la interfaz IPP01
Proyecto: Manejo de un stepper motor con la Interfaz para Puerto Paralelo
Introducción:
El propósito de este proyecto es familiarizarse con el manejo y comportamiento de
los motores paso a paso.
Para ello utilizaremos la Interfaz para el puerto paralelo
Universidad Tecnológica de Puebla
Lic. Jorge Cerezo Sánchez
Pagina
41
Electricidad y Electrónica Industrial
Informática II
Diagrama de conexionado:
En la siguiente figura se puede ver el diagrama interno y las salidas
correspondientes a un clásico motor P-P Unipolar:
Los cinco cables de salida deben conectarse al puerto de salida High Power de la
interfaz para puerto paralelo (HP0 a HP6) de la siguiente manera:
•
•
•
•
•
Universidad Tecnológica de Puebla
Común --------- Vdd
A ----------------- HP0
B ----------------- HP1
C ----------------- HP2
D ----------------- HP3
Lic. Jorge Cerezo Sánchez
Pagina
42
Electricidad y Electrónica Industrial
Informática II
Apéndices
Software de control
Para empezar, aqui sencillo un programa en C++ para un motor unipolar de 4
fases y 5 cables, el circuito controlador es el circuito para excitación de una bobina
en forma secuencial, y esta formado principalmente por un ULN2003, un diodo
zener de 15 voltios y cuatro lineas de datos tomadas de los pines de datos del
puerto paralelo DB-25
El programa mediante el teclado hará girar el motor ya sea en sentido horario o
anti horario.
//DECLARACION DE LIBRERIAS y VARIABLES//
#include<STDIO.H > // requerido para las funciones printf, getch
#include<CONIO.H >// requerido para las funciones outp, inp
#define Data 0x378 // o 0x278 o 0x3BC
//DECLARACION DE FUNCIONES Y/O PROCEDIMIENTOS//
void Delay(void) //rutina que genera un tiempo de espera entre cada paso//
{
int i;
for (i = 1; i <= 100000; i++); //el tiempo varia segun el tipo de computador y la
velocidad del microprocesador//
}
void KeyWait(void) //rutina que hace que el programa este parado mientras no se
presione una tecla//
{
printf(" ");
while (!getch()); //no hace nada hasta que se presione una tecla//
printf("\n");
}
Universidad Tecnológica de Puebla
Lic. Jorge Cerezo Sánchez
Pagina
43
Electricidad y Electrónica Industrial
Informática II
//PROGRAMA PRINCIPAL//
void main(void)
{
int i;
printf("\n");
printf("Software de control de motor de pasos mediante el puerto paralelo\n");
printf("======================================\n");
printf("\n");
outp(Data, 0x00); //asumiendo lógica positiva, desenergizamos inicialmente todas
las bobinas//
printf("Inicio con todas las bobinas desactivadas");
KeyWait(); //procedimiento que espera hasta que no se haya presionado una
tecla//
printf("Sentido horario"); //una vez presionada la tecla, se ejecutaran 25 pasos en
sentido horario//
for (i=1; i<=25; i++)
{
outp(Data,0x08);
Delay();
outp(Data,0x04);
Delay();
outp(Data,0x02);
Delay();
outp(Data,0x01);
Delay();
printf(".");
}
KeyWait(); //espera hasta que no se presione otra tecla//
printf("Sentido antihorario"); //luego de presionada la tecla, se ejecutan 25 pasos,
pero esta vez en sentido antihorario//
for (i=1; i<=25; i++)
{
outp(Data, 0x01);
Delay();
outp(Data, 0x02);
Delay();
outp(Data, 0x04);
Delay();
outp(Data, 0x08);
Delay();
printf(".");
}
Universidad Tecnológica de Puebla
Lic. Jorge Cerezo Sánchez
Pagina
44
Electricidad y Electrónica Industrial
Informática II
KeyWait(); //espera que se presione una tecla para apagar el sistema y
desenergizar las bobinas//
outp(Data, 0x00); //desenergiza las bobinas//
printf("Todo desactivado");
KeyWait(); //para salir del programa//
}
Universidad Tecnológica de Puebla
Lic. Jorge Cerezo Sánchez
Pagina
45
Descargar