Sunteți pe pagina 1din 54

UNIDAD 7

7.1 CONCEPTOS BSICOS DE GRAFICAS


Resolucin

Las imgenes grficas mostradas en un monitor de computadora se componen de pequeos
puntos llamados pxeles, los cuales estn distribuidos en la pantalla en filas; existe una
cantidad especfica de filas y cada fila tiene una cantidad especfica de pxeles. La cantidad
de pxeles usada en la pantalla se conoce como resolucin. Cada modo grfico tiene una
resolucin particular.

Inicializar el monitor en modo grfico para habilitar el monitor en modo grfico y utilizar
sus pxeles y funciones de grficos, es necesario incluir el encabezado
#include
<graphics.h>
que contiene las declaraciones y funciones relacionadas con graficacin e
inicializar el monitor en modo grfico y utilizar sus pxeles con la funcin
initgraph()Dicha funcin requiere las siguientes declaraciones:

int monitor=DETECT;
// Variable para detectar el tipo
// de monitor
int modo;
// Modo de operacin del monitor

tambin se puede declarar e inicializar con un
tipo de monitor especfico como:

int monitor=VGA;
// Variable para usar el monitor
// tipo VGA
int modo=VGAHI;
// Usar el monitor VGA a su
//maxima resolucin

Para terminar de usar el monitor en modo grfico y devolverlo a su modo de texto normal
se usa la funcin closegraph( ).

Uso de coordenadas

Una vez que se inicializa el monitor en modo grfico, las coordenadastienen al pxel como
unidad de medida. La funcin getmaxx()calcula la cantidad de pxeles por rengln y la
funcin getmaxy()calcula la cantidad de renglones de la pantalla. Las funciones de grficos
tienen como estndar el orden de manejo de coordenadas como columna, rengln; es decir,
primero se anota la columna y despus el rengln para posicionarse en dicha coordenada.
Cabe destacar que el conteo de columnas y renglones inicia partiendo de la esquina superior
izquierda del monitor.

Lneas, figuras geomtricas, colores y rellenos

La funcin line() esta funcin se utiliza para dibujar una lnea entre 2 puntos. Para ello, la
funcin requiere 4 parmetros que representan las coordenadas (en pixeles) de los dos
puntos que se desea unir mediante una lnea recta. L

line(50,100,300,200);

La funcin setlinestyle()

Esta funcin se utiliza para determinar el tipo de lnea o trazo que se desea. Se pueden
utilizar trazos con lnea continua, lnea punteada, lnea interrumpida, o un patrn de lnea
definido por el usuario. Esta funcin requiere 3 argumentos:
1)Tipo de lnea: Puede ser SOLID_LINE, DOTTED_LINE, CENTER_LINE,
DASHED_LINE o USERBIT_LINE.
2)Patrn: Este argumento regularmente es ignorado (excepto cuando se trata de un tipo de
lnea definido por el usuario).
3)Ancho de lnea: Define la amplitud del trazo.

La funcin circle()
Esta funcin dibuja un crculo y requiere 3 argumentos:
1)Coordenada de la columna del centro (en pixeles).
2)Coordenada del rengln del centro (en pixeles).
3)Radio del crculo (en pixeles).

circle(300,150,27);






La funcin rectangle()

Esta funcin dibuja un rectngulo indicando las coordenadas de las esquinas superior
izquierda e inferior derecha respectivamente.

rectangle(50,100,400,250);

La funcin setcolor()

Se utiliza esta funcin para definir el color de los trazos siguientes; es decir, antes de
dibujar un trazo de un color especfico, ste debe definirse. Esta funcin slo tiene un
argumento que representa el cdigo del color deseado.

cmo mostrar mensajes en modo grfico
Aunque el monitor se encuentre habilitado en modo grfico, se puede combinar la
colocacin de texto y grficas en la pantalla; sin embargo, en esta seccin se hace nfasis
en la colocacin de mensajes en formato grfico, definiendo el tipo de letra, direccin y
tamao del mensajedeseado.

La funcin settextstyle()

Antes de mostrar un mensaje, debe seleccionarse el tipo de letra, direccin y tamao del
mensaje mediante la funcin setfillstyle()
la cual requiere 3 argumentos:
1)El tipo de letra.
2)La direccin del mensaje (horizontal o vertical).
3)Tamao.

La funcin outtextxy()

Una vez definido el tipo de letra, direccin y tamao correspondiente, se usa la funcin
outtextxy() para desplegar un mensaje grfico en la pantalla. Esta funcin requiere 3
argumentos:
1)Coordenada de la columna donde se desea mostrar el mensaje.
2)Coordenada del rengln.
3)Mensaje a mostrar.

outtextxy(100,200,Tec Laredo);








http://www.itnuevolaredo.edu.mx/takeyas/Articulos/ProgramacionC/Articulo-
Conceptos%20basicos%20de%20Graficacion%20en%20C_2004-I.pdf
7.2 Introduccin bsica al manejo de graficas

Resumen: En numerosas ocasiones los estudiantes requieren representar
grficamente el comportamiento de modelos matemticos, estadsticos, de
investigacin de operaciones, etc. mediante programas computacionales
diseados
a la medida sin necesidad de apoyarse en paquetes de cmputo comerciales.
Por esto, se presentan las siguientes consideraciones bsicas de graficacin en
lenguaje C++, Palabras claves: Graficacin, resolucin, pxel, lenguaje C++,
monitor.


1 INTRODUCCIN
Tal como un artista selecciona diversos medios para representar sus pinturas, los
programadores, escogen un modo y formato especial para habilitar el monitor para
graficar. Cada modo proporciona ciertas caractersticas como la resolucin,
nmero posible de colores, modo texto o modo grfico y otros elementos donde
cada modo requiere de cierto equipo (hardware).

1.1 Resolucin
Las imgenes grficas mostradas en un monitor de computadora se componen de
pequeos puntos llamados pxeles, los cuales estn distribuidos en la pantalla en
filas; existe una cantidad especfica de filas y cada fila tiene una cantidad
especfica
de pxeles. La cantidad de pxeles usada en la pantalla se conoce como
resolucin. Cada modo grfico tiene una resolucin particular.

1.2 Inicializar el monitor en modo grfico Para habilitar el monitor en modo grfico
y
utilizar sus pxeles y funciones de grficos, es necesario incluir el encabezado
#include <graphics.h> que contiene las declaraciones y funciones relacionadas
con graficacin e inicializar el monitor en modo grfico y utilizar sus pxeles con la
funcin initgraph(). Dicha funcin requiere las siguientes declaraciones:

int monitor=DETECT;
// Variable para detectar el tipo
// de monitor
int modo;
// Modo de operacin del monitor

tambin se puede declarar e inicializar con un tipo de monitor especfico como:

int monitor=VGA;
// Variable para usar el monitor
// tipo VGA
int modo=VGAHI;
// Usar el monitor VGA a su


1.3 Uso de coordenadas
Una vez que se inicializa el monitor en modo grfico, las coordenadas tienen al
pxel como unidad de medida. La funcin getmaxx() calcula la cantidad de pxeles
por rengln y la funcin getmaxy() calcula la cantidad de renglones de la pantalla.

Las funciones de grficos tienen como estndar el orden de manejo de
coordenadas como columna, rengln; es decir, primero se anota la columna y
despus el rengln para posicionarse en dicha coordenada. Cabe destacar que el
conteo de columnas y renglones inicia partiendo de la esquina superior izquierda
del monitor.


http://www.itnuevolaredo.edu.mx/takeyas/Articulos/ProgramacionC/Articulo-
Conceptos%20basicos%20de%20Graficacion%20en%20C_2004-I.pdf














7.3 uso de libreras para la realizacin de grficos
En muchas ocasiones es inevitable utilizar grficas para mostrar estadsticas o
informes de datos en nuestros proyectos. Una imgen vale mas que mil palabras,
de aqu la importancia que reviste el correcto uso de las grficas, para visualizar
de forma amena dichos datos.
A continuacin os muestro una recopilacin que realic de varias bibliotecas para
la implementacin de grficos y diagramas sobre web, de cada uno se explican
sus caractersticas ms importantes as como algunas ventajas o desventajas a mi
consideracin:
1. Open Flash Chart

Open Flash Chart
En mi opinin una de las mejores libreras para la realizacin de grficos que
existen en la actualidad en Internet, dentro de sus caractersticas
fundamentales se destaca el dinamismo y la animacin de sus grficos, as
como su diversidad en la implementacin.
Open Flash Chart, esta basado principalmente en PHP para la lectura de los
datos y en Flash para mostrar los mismos en forma de grafico. Tambin
encontraremos implementaciones en otros lenguajes, pero menos fiables
segn el autor.
A su favor: Gratis, Licencia GPL, diversidad de grficos, diseo agradable.
En su contra: conocimientos medios o avanzados en PHP para su completa
implementacin.
Requerimientos: Flash player 9
Ejemplos | Descarga
2. FusionCharts

FusionCharts
FucionCharts es una librera libre y de cdigo abierto para la creacin de
grficos y diagramas en flash, dentro de sus mejores caractersticas estn la
interactividad y los excelentes efectos de animacin en la muestra de los
datos en forma de grfico, adems de que no slo puede ser usado en webs,
sino tambien en aplicaciones de escritorio y presentaciones.
A su favor: excelente diseo con buenos efectos de animacin al mostrar los
grficos, se puede usar tambin en aplicacions de escritorio, puede usarse
con PHP, ASP.NET, ColdFusion , Pyton.
En su contra: requerimientos medios o avanzados de programacin
Requerimientos: Flash player 9.
Ejemplos | Descarga
3. XML/SWF Charts

XML/SWF Charts
Excelente librera para crear atractivos diagramas y grficos que tiene al igual
que el anterior un excelente diseo de presentacin y diversidad de tipos. Esta
librera se basa en XML para obtener los datos y en pelculas SWF para
mostrar sus resultados en forma de grficas.
A su favor: de licencia GPL, diversidad de grficos, diseo agradable.
En su contra: si los datos son tomados de una BD es obligatorio la creacin
de un fichero XML intermedio entre la BD y la pelcula de flash que muestra el
grfico.
Requerimientos: Flash player 9
Ejemplos | Descarga
4. Maxs Charts

Maxs Charts
Sencilla y simple librera para la creacin de grficos de tipo horizontal y
vertical en PHP, se caracteriza por su facilidad en la implementacin, aunque
una de sus principales desventajas es que slo puede usarse en grficos
verticales y horizontales, es decir, una buena recomendacin para
principiantes o para la creacin de Webs con informes y grficas sencillas. Los
resultados se muestran utilizando CSS con un diseo relativamente
agradable.
A su favor: de libre distribucin, buen diseo, uso de CSS.
En su contra: poca diversidad en tipos de grficos.
Requerimientos: cualquier navegador
Ejemplos | Descarga
5. pChart

pChart
pChart es una clase orientada al trabajo con framework, para la creacin de
grficos y diagramas en PHP, los datos pueden ser tomados desde
extructuras SQL, ficheros CVS o introducidos manualmente, esta librera est
actualmente bajo desarrollo y pueden surgir nuevas versiones en un futuro.
Los datos se muestran creando imgenes utilizando la librera GD de PHP.
A su favor: de libre distribucin, puede tomar datos tanto de BD como de
ficheros CVS
En su contra: no tiene un diseo tan refinado como las anteriores, y debe
tener instalado la librera GD en su servidor de PHP.
Requerimientos: cualquier navegador.
Ejemplos | Descarga
6. QGoogleVisualizationAPI

QGoogleVisualizationAPI
til y excelente clase para generar grficas con Google Visualization API. La
misma provee una clase que puede generar cdigo HTML el cual puede incluir
grficos generados por Google Visualization API en sus webs. Tambin
provee diferentes tipos de grficos como son barras, pastel, lineales, etc.
A su favor: buena presentacin de las grficas, excelente para diagramas de
pamas, diversos tipos de diagramas y graficos.
En su contra: conocimientos medios y avanzados de programacin para la
implementacin.
Requerimientos: cualquier navegador.
http://www.bitacoradewebmaster.com/2010/01/04/6-librerias-para-graficas-y-
diagramas-con-php/

7.4 Graficacin de puntos y lneas rectas
Sera muy difcil considerar todas las opciones posibles de todas las funciones de
graficacin; sin embargo, en esta antologa se tratan los temas fundamentales para
implementar este tipo de funciones. Bsicamente mostraremos que antes de utilizar
un
color, un tipo de lnea, de relleno, etc. es necesario definirlo.

2.1 Pxeles, lneas, figuras geomtricas, colores y rellenos
En esta seccin se presentan las funciones bsicas de graficacin, utilizadas para
colocar pixeles, lneas, figuras geomtricas, etc. en la pantalla.

2.1.1 La funcin putpixel()
Tal como se mencion en la seccin anterior, al habilitar el monitor en modo
grfico, la pantalla se divide en pequeos puntos llamados pixeles. La funcin
putpixel() coloca un punto o pxel de un color especfico en determinada
coordenada de la pantalla. Esta funcin requiere 3 argumentos (Fig. 5):
1) Columna del punto (coordenada x).
2) Rengln del punto (coordenada y).
3) Color del pxel.
putpixel(int x, int y, int color);
Fig.5.La funcin putpixel()
El cdigo fuente del programa de la Fig. 6 muestra un ejemplo que inicializa el
monitor en modo grfico y coloca , en forma aleatoria, mltiples pixeles de colores en
la
pantalla hasta que se oprima cualquier tecla

2.1.2 La funcin line()
Esta funcin se utiliza para dibujar una lnea entre 2 puntos. Para ello, la funcin
requiere 4 parmetros que representan las coordenadas (en pixeles) de los dos
puntos
que se desea unir mediante una lnea recta. La Fig. 7 muestra un ejemplo que une los
puntos 50,100 y 300,200 (columna, rengln respectivamente).
/*
Programa para inicializar el monitor en modo grafico
MiniTaller: Tecnicas avanzadas de programacion en Lenguaje C++
Instructor: M.C. Bruno Lopez Takeyas
*/
#include <graphics.h> // Encabezado con declaraciones de
graficos
#include <conio.h> // Para el uso de kbhit()
#include <stdlib.h> // Para el uso de random()
#include <dos.h> // Para el uso de delay
void main(void)
{
int monitor=VGA, modo=VGAHI; // Declaracion de tipo de monitor
y modo
initgraph(&monitor,&modo,"\\tc\\bgi");
// Inicializa el modo grafico indicando el monitor y modo
utilizado
// El subdirectorio \\tc\\bgi indica la ruta de localizacion de
los
// archivos *.BGI (monitores) y *.CHR (tipos de letras)
while(!kbhit()) // Mientras no se oprima cualquier tecla
{
putpixel(random(getmaxx()),random(getmaxy()),random(getmaxcolor
()));
// Coloca un pixel en la pantalla, seleccionando al azar la
columna
// (1..getmaxx), el renglon (1..getmaxy) y el color
(1..getmaxcolor)
delay(5);
}
closegraph(); // Termina el modo grafico (vuelve a su modo
normal)
}

2.1.3 La funcin setlinestyle()
Esta funcin se utiliza para determinar el tipo de lnea o trazo que se desea. Se
pueden utilizar trazos con lnea continua, lnea punteada, lnea interrumpida, o un
patrn de lnea definido por el usuario. Esta funcin requiere 3 argumentos:
1) Tipo de lnea: Puede ser SOLID_LINE, DOTTED_LINE, CENTER_LINE,
DASHED_LINE o USERBIT_LINE.
2) Patrn: Este argumento regularmente es ignorado (excepto cuando se trata de un
tipo de lnea definido por el usuario).
3) Ancho de lnea: Define la amplitud del trazo.
setlinestyle(DOTTED_LINE,0, NORM_WIDTH);
line(50,100,300,200);

2.1.4 La funcin circle()
Esta funcin dibuja un crculo y requiere 3 argumentos:
1) Coordenada de la columna del centro (en pixeles).
2) Coordenada del rengln del centro (en pixeles).
3) Radio del crculo (en pixeles).
La Fig. 9 dibuja un crculo cuyo centro se encuentra en el punto 300,150 y su radio es
de 27 pixeles.
circle(300,150,27);

Se pueden combinar funciones de graficacin para obtener trazos especficos o
determinados colores, slo es cuestin de definir previamente el color o tipo de trazo
deseado para despus invocar la funcin de graficacin deseada.
M
uestra el cdigo necesario para dibujar un crculo con un trazo interrumpido. En
este caso primeramente se define el tipo de lnea (trazo) deseado y posteriormente se
invoca la funcin circle() con los parmetros adecuados.
setlinestyle(DASHED_LINE,0, NORM_WIDTH);
circle(300,150,27);
2.1.5 La funcin rectangle()
Esta funcin dibuja un rectngulo indicando las coordenadas de las esquinas
superior izquierda e inferior derecha respectivamente. La Fig. 11 muestra un ejemplo
de
una funcin que dibuja un rectngulo desde el punto 50,100 hasta el punto 400,250.
rectangle(50,100,400,250);
.
2.1.6 La funcin ellipse()
Se usa esta funcin para dibujar un arco elptico o una elipse completa. Esta
funcin requiere 6 argumentos:
1) Columna del centro de la elipse (coordenada x).
2) Rengln del centro de la elipse (coordenada y).
3) ngulo inicial del arco.
4) ngulo donde termina el arco.
5) Radio horizontal de la elipse.
6) Radio vertical de la elipse.
Se puede dibujar una elipse completa indicando el ngulo inicial como 0 (cero) y
el ngulo final como 359 . La Fig. 12 dibuja una elipse completa con centro en
100,150,
con radio horizontal de 25 y radio vertical de 40 pixeles.
ellipse(100,150,0,359,25,40);

2.1.7 La funcin arc()
Se usa esta funcin para dibujar un arco circular. Esta funcin requiere 5
argumentos:
1) Columna del centro del arco (coordenada x).
2) Rengln del centro del arco (coordenada y).
3) ngulo inicial del arco.
4) ngulo donde termina el arco.
5) Radio.
Los puntos de inicio y final del arco se especifican por medio de sus ngulos
medidos en el sentido de las manecillas del reloj; es decir, con 0 en las 3:00, 90 en
las
12:00 y as sucesivamente. La Fig. 13 dibuja un arco de 30 con centro en 100,150 y
radio 40 pixeles.
arc(100,150,0,29,40);
.
2.1.8 La funcin setcolor()
Se utiliza esta funcin para definir el color de los trazos siguientes; es decir,
antes de dibujar un trazo de un color especfico, ste debe definirse. Esta funcin slo
tiene un argumento que representa el cdigo del color deseado. P. ejem. BLACK,
RED,
BLUE, GREEN, YELLOW, etc. o bien su nmero entero correspondiente. La Fig. 14
muestra la tabla de colores y sus respectivos valores.
Constante Valor



BLACK 0
BLUE 1
GREEN 2
CYAN 3
RED 4
MAGENTA 5
BROWN 6
LIGHTGRAY 7
DARKGRAY 8
LIGHTBLUE 9
LIGHTGREEN 10
LIGHTCYAN 11
LIGHTRED 12
LIGHTMAGENTA 13
YELLOW 14
WHITE 15
.
La Fig. 15 muestra un ejemplo del uso de la funcin setcolor() donde se
dibuja un circulo de color rojo y despus un rectangulo de color azul.
setcolor(RED);
circle(300,150,27);
setcolor(BLUE);
rectangle(50,100,400,250);
.
2.1.9 Definiendo el tipo de relleno de una figura con la funcin setfillstyle()
Si se desea rellenar una figura, es necesario definir previamente el patrn y color
del relleno. La Fig. 16 muestra los patrones de relleno disponibles.
PATRN VALOR DESCRIPCIN
EMPTY_FILL 0 Color del fondo
SOLID_FILL 1 Relleno slido con el color determinado
LINE_FILL 2 Relleno con lnea (---)
LTSLASH_FILL 3 Relleno con /// lneas de ancho normal
SLASH_FILL 4 Relleno con /// lneas
BKSLASH_FILL 5 Relleno con \\\ lneas
LTBKSLASH_FILL 6 Relleno con \\\ lneas de ancho normal
HATCH_FILL 7 Relleno de lneas cruzadas ligeras
XHATCH_FILL 8 Relleno de lneas cruzadas gruesas
INTERLEAVE_FILL 9 Relleno de lneas
WIDE_DOT_FILL 10 Relleno de puntos espaciados
CLOSE_DOT_FILL 11 Relleno de puntos cercanos
USER_FILL 12 Relleno definido por el usuario
Fig. 16. Patrones de relleno de la funcin setfillstyle()
Por ejemplo, si se desea definir el patrn de relleno de puntos cercanos de color
rojo, se usa la funcin setfillstyle() como lo muestra la Fig. 17.
setfillstyle(CLOSE_DOT_FILL, RED);

2.1.10 La funcin floodfill()
Una vez seleccionado el patrn de relleno mediante la funcin
setfillstyle(), se procede a rellenar una figura usando la funcin floodfill().
Es muy importante resaltar que la figura que se desea rellenar est completamente
cerrada, ya que esta funcin contiene un algoritmo que busca el contorno de la figura
y,
en caso de encontrar una apertura, la funcin extralimitar la figura y tambin
rellenar
la parte externa de la misma. La funcin floodfill() requiere identificar un punto
que se encuentre dentro del contorno de la figura y necesita 3 argumentos:
1) Coordenada de la columna del punto interno de la figura.
2) Coordenada del rengln del punto interno de la figura.
3) Color del borde de la figura.
El ejemplo mostrado en la Fig. 18 dibuja un circulo de color ROJO y lo rellena de
color AZUL slido.
setcolor(RED);
circle(300,150,27);
setfillstyle(SOLID_FILL,BLUE);
floodfill(300,150,RED);

Ntese que la funcin floodfill() requiere como argumento el color del
contorno de la figura que se desea rellenar.
























http://www.itnuevolaredo.edu.mx/takeyas/Apuntes/ProgramacionC/Apuntes/Antologia
%20de%20Graficacion%20en%20Lenguaje%20C/Antologia%20de%20Graficacion%2
0en%20Lenguaje%20C%20(2004-I).pdf
7.5 Graficacin de Funciones Matemticas en el plano cartesiano.
En estas breves notas, desarrolladas por Juan-Antonio Infante y Jos Mara Rey,
profesores del Departamento de Matemtica Aplicada de la Universidad
Complutense de Madrid, se pretende dar un primer paso en el aprendizaje del uso
de MATLAB. En lo que sigue, se supone que el usuario teclea lo que aparece en
color rojo (de hecho, lo ptimo sera que el aprendiz de MATLAB reprodujera stos
y parecidos ejemplos por s mismo) y precedido del smbolo >>, que hace el papel
del prompt de la mquina. En color negro aparecer la respuesta de MATLAB a la
instruccin tecleada. Los comentarios aparecern en color verde.
Antes de comenzar, hagamos algunas consideraciones generales:
MATLAB distingue entre maysculas y minsculas.
La comilla ' es la que, en un teclado estndar, se encuentra en la tecla de la
interrogacin.
Los comentarios deben ir precedidos por % o, lo que es lo mismo, MATLAB
ignora todo lo que vaya precedido por el smbolo %.
La ayuda de MATLAB es bastante til; para acceder a la misma basta
teclear help. Es recomendable usarlo para obtener una informacin ms
precisa sobre la sintaxis y diversas posiblidades de uso de los comandos.
A grandes rasgos, los temas aqu introducidos son:
Generalidades.
Vectores y matrices.
Operaciones con vectores y matrices.
Variables lgicas.
Polinomios.
Derivadas y primitivas.
Grficas de funciones.
Programacin con MATLAB.
Los clculos que no se asignan a una variable en concreto se asignan a la variable
de respuesta por defecto que es ans (del ingls, answer):
>>2+3
ans =
5
Sin embargo, si el clculo se asigna a una variable, el resultado queda guardado
en ella:
>>x=2+3
x =
5
Para conocer el valor de una variable, basta teclear su nombre:
>>x
x =
5
Si se aade un punto y coma (;) al final de la instruccin, la mquina no muestra
la respuesta...
>>y=5*4;
... pero no por ello deja de realizarse el clculo.
>>y
y =
20
Las operaciones se evalan por orden de prioridad: primero las potencias,
despus las multiplicaciones y divisiones y, finalmente, las sumas y restas. Las
operaciones de igual prioridad se evalan de izquierda a derecha:
>>2/4*3
ans =
1.5000
>>2/(4*3)
ans =
0.1667
Se pueden utilizar las funciones matemticas habituales. As, por ejemplo, la
funcin coseno,
>>cos(pi) % pi es una variable con valor predeterminado 3.14159...
ans =
-1
o la funcin exponencial
>>exp(1) % Funcin exponencial evaluada en 1, es decir, el nmero e
ans =
2.7183
Adems de la variable pi , MATLAB tiene otras variables con valor
predeterminado; ste se pierde si se les asigna otro valor distinto. Por ejemplo:
>>eps % psilon de la mquina. Obsrvese que MATLAB trabaja en doble
precisin
ans =
2.2204e-016
pero...
>>eps=7
eps =
7
Otro ejemplo de funcin matemtica: la raz cuadrada; como puede verse, trabajar
con complejos no da ningn tipo de problema. La unidad imaginaria se representa
en MATLAB como i o j, variables con dicho valor como predeterminado:
>>sqrt(-4)
ans =
0+ 2.0000i
El usuario puede controlar el nmero de decimales con que aparece en pantalla el
valor de las variables, sin olvidar que ello no est relacionado con la precisin con
la que se hacen los clculos, sino con el aspecto con que stos se muestran:
>>1/3
ans =
0.3333
>>format long
>>1/3
ans =
0.33333333333333
>>format % Vuelve al formato estndar que es el de 4 cifras decimales

Para conocer las variables que se han usado hasta el momento:
>>who
Your variables are:
ans eps x y
o, si se quiere ms informacin (obsrvese que todas las variables son arrays):
>>whos
Name Size Bytes Class
ans 1x1 8 double array
eps 1x1 8 double array
x 1x1 8 double array
y 1x1 8 double array
Grand total is 4 elements using 32 bytes
Para deshacerse de una variable
>>clear y
>>who
Your variables are:
ans eps x
Volver al ndice general








Para definir un vector fila, basta introducir sus coordenadas entre corchetes:
>>v=[1 2 3] % Vector de 3 coordenadas
v=
1 2 3
>>w=[4 5 6];
El operador ' es el de trasposicin (en realidad trasposicin y conjugacin):
>>w'
ans =
4
5
6
Si queremos declarar un vector de coordenadas equiespaciadas entre dos dadas,
por ejemplo, que la primera valga 0, la ltima 20 y la distancia entre coordenadas
sea 2, basta poner:
>>vect1=0:2:20
vect1 =
0 2 4 6 8 10 12 14 16 18 20
Equivalentemente, si lo que conocemos del vector es que la primera coordenada
vale 0, la ltima 20 y que tiene 11 en total, escribiremos:
>>vect2=linspace(0,20,11)
vect2 =
0 2 4 6 8 10 12 14 16 18 20
A las coordenadas de un vector se accede sin ms que escribir el nombre del
vector y, entre parntesis, su ndice:
>>vect2(3)
ans =
4
y se pueden extraer subvectores, por ejemplo:
>>vect2(2:5)
ans=
2 4 6 8
o,
>>vect1(:)
ans=
0
2
4
6
8
10
12
14
16
18
20
Las matrices se escriben como los vectores, pero separando las filas mediante un
punto y coma; as una matriz 3x3:
>>M=[1 2 3;4 5 6;7 8 9]
M =
1 2 3
4 5 6
7 8 9
>>M' % Su traspuesta (su adjunta)
ans =
1 4 7
2 5 8
3 6 9
>>mat=[v;w;0 0 1] % Tambin es una matriz 3x3
mat =
1 2 3
4 5 6
0 0 1
A los elementos de una matriz se accede sin ms que escribir el nombre de la matriz
y, entre parntesis, los respectivos ndices:
>>mat(1,3) % Elemento en la primera fila y tercera columna de la matriz mat
ans =
3
Tambin se puede acceder a un fila o columna completas,
>>mat(:,2) % Segunda columna de mat
ans =
2
5
0
>>mat(2,:) % Su segunda fila
ans =
4 5 6
acceder a la matriz como si fuera una columna,
>>M(2:7) % Los elementos segundo a sptimo de la matriz como columna
ans =
4
7
2
5
8
3
o acceder a cualquiera de sus submatrices
>>mat(2:3,[1 3]) % Submatriz formada por los elementos que estn en
% "todas" las filas que hay entre la segunda y la tercera y
% en las columnas primera y tercera
ans =
4 6
0 1
Existen algunas matrices definidas previamente; por ejemplo, la matriz identidad,
>>eye(5) % eye se pronuncia en ingls como I
ans =
1 0 0 0 0
0 1 0 0 0
0 0 1 0 0
0 0 0 1 0
0 0 0 0 1
la matriz nula,
>>zeros(3)
ans =
0 0 0
0 0 0
0 0 0
o la matriz cuyos elementos valen todos 1:
>>ones(4)
ans =
1 1 1 1
1 1 1 1
1 1 1 1
1 1 1 1
Se puede conocer el tamao de una matriz y la longitud de un vector:
>>size(mat) % Dimensiones de la matriz mat (nmero de filas y de columnas)
ans =
3 3
>>size(v)
ans =
1 3
>>length(v) % Longitud del vector (nmero de coordenadas)
ans =
3
Existen comandos que permiten crear de forma sencilla matrices. Por ejemplo:
>>diag(v) % Matriz diagonal cuya diagonal es el vector v
ans =
1 0 0
0 2 0
0 0 3
>>diag(diag(M)) % Matriz diagonal con la diagonal de M. La sentencia diag(M) da
% el vector formado por la diagonal de la matriz M
ans =
1 0 0
0 5 0
0 0 9
>>diag(ones(1,4),1)+diag(ones(1,4),-1) % Matriz tridiagonal 5x5 con 0 en la diagonal
% principal y 1 en la sub y superdiagonal
ans =
0 1 0 0 0
1 0 1 0 0
0 1 0 1 0
0 0 1 0 1
0 0 0 1 0
>>tril(M) % Matriz formada por la parte triangular inferior de M.
ans =
1 0 0
4 5 0
7 8 9
>>triu(M) % Matriz formada por la parte triangular superior de M.
ans =
1 2 3
0 5 6
0 0 9











7.6 Introduccin a la potencia grfica
TIRO PARABLICO
El movimiento parablico completo se puede considerar como la composicin de
un avance horizontal rectilneo uniforme y un lanzamiento vertical hacia arriba, que
es un movimiento rectilneo uniformemente acelerado hacia abajo (MRUA) por la
accin de la gravedad.
En condiciones ideales de resistencia al avance nulo y campo gravitatorio
uniforme, lo anterior implica que:
Un cuerpo que se deja caer libremente y otro que es lanzado horizontalmente
desde la misma altura tardan lo mismo en llegar al suelo.
La independencia de la masa en la cada libre y el lanzamiento vertical es igual
de vlida en los movimientos parablicos.
Un cuerpo lanzado verticalmente hacia arriba y otro parablicamente completo
que alcance la misma altura tarda lo mismo en caer.
Se denomina movimiento parablico al realizado por un objeto cuya trayectoria
describe una parbola.

MTODO DE BISECCIN
Este es uno de los mtodos ms sencillos y de fcil intuicin para resolver
ecuaciones en una variable. Se basa en el teorema del valor intermedio (TVI), el
cual establece que toda funcin continua f en un intervalo cerrado [a,b] toma todos
los valores que se hallan entre f(a) y f(b). Esto es que todo valor entre f(a) y f(b) es
la imagen de al menos un valor en el intervalo [a,b]. En caso de que f(a) y f(b)
tengan signos opuestos, el valor cero sera un valor intermedio entre f(a) y f(b), por
lo que con certeza existe un p en [a,b] que cumple f(p)=0. De esta forma, se
asegura la existencia de al menos una solucin de la ecuacin f(a)=0.
El mtodo consiste en lo siguiente:
Debe existir seguridad sobre la continuidad de la funcin f(x) en el intervalo [a,b]
A continuacin se verifica que
Se calcula el punto medio m del intervalo [a,b] y se evala f(m) si ese valor es
igual a cero, ya hemos encontrado la raz buscada
En caso de que no lo sea, verificamos si f(m) tiene signo opuesto con f(a) o con
f(b)
Se redefine el intervalo [a, b] como [a, m] [m, b] segn se haya determinado en
cul de estos intervalos ocurre un cambio de signo
Con este nuevo intervalo se contina sucesivamente encerrando la solucin en un
intervalo cada vez ms pequeo, hasta alcanzar la precisin deseada
En la siguiente figura se ilustra el procedimiento descrito.
El mtodo de biseccin es menos eficiente que el mtodo de Newton, pero es
mucho ms seguro para garantizar la convergencia. Si f es una funcin continua
en el intervalo [a, b] y f(a)f(b) < 0, entonces este mtodo converge a la raz de f.
Programa en C++ del tiro parablico
Interfaz Grafica



Parmetros para el clculo de las incgnitas


Parmetros para el clculo de la altura mxima con el mtodo de biseccin.


Simulacin



Tabla de valores en cada iteracin y grafica


CONCUSION
El aplicar mtodos numricos es muy sencillo cuando se trata de ecuaciones encillas
que calculan o solucionan algn problema de la vida cotidiana como lo es el calcular
el alcance mximo o la altura mxima.
Para el mtodo de biseccin la ecuacin que use que muy bien y arroja un buen
resultado ya que el intervalo se da de manera que encierra a la raz pero se llega a la
solucin despus de un numero grande de iteraciones.
La razn por la que escogimos esta ecuacin es porque nos daba un acercamiento
similar a otros mtodos aunque usaba ms iteraciones no las iteraciones que usaba..




















Unidad 8
8.1 Introduccin a la potencia grfica.

En el modo grfico existe una enorme cantidad de funciones que realizan desde
la tarea mas sencilla como es pintar un pxel, hasta la tarea mas compleja como
pudiera ser dibujar un carcter por medio de trazos.

Para trabajar el modo grfico es necesario incluir la librera graphics.h como
hacer uso de la BGI (Borlan Graphics Interphase)

Para usar cualquier funcin es necesario colocar el adaptador de video en modo
grafico y esto se logra a travs de la funcin initgraph(); y al terminares necesario
regresar al modo original a travs de la funcin closegraph();

Para iniciar un programa en ambiente grfico es recomendable correr una
subrutina de inicializacin de grficos y deteccin de errores.

Algunos ejemplos de las funciones que se pueden encontrar en la librera de
grphics.h son:
Line(); circle(); arc(); elipse();rectangle(); ottextxy(); putpixel();
Para saber mas de las funciones de la librera de grficos lo pueden buscar en el
ndice de turbo c

NOTA: Para dar de alta en tu computadora el modo de grficos tienes que hacer
los siguientes pasos: OPTIONS ->LINKER->LIBRARIE->seleccionar
GRAPHICS LIBRARY
EJEMPLO:
#include<graphics.h>
#include<conio.h>
#include<math.h>
int main(void)
{
clrscr();

double fx;
int graphdriver=DETECT,graphmode;
initgraph(&graphdriver,&graphmode,"..\\bgi");
outtextxy(30,30,GRAFICACION DE SENO );
setbkcolor(RED);
for (int x=0;x<=90;x++)
{
fx=(1+sin(x))*40+200;
putpixel(x*15,fx,YELLOW);
}
setcolor(BLUE);
line(310,100,310,400);
line(100,240,500,240);
getch();
closegraph();
return 0;
}



ESTRUCTURA DEL PROGRAMA

#include <graphics.h>
#include <stdlib.h>
#include <stdio.h>
#include <conio.h>

int main(void)
{
VARIABLES PARA INICIALIZAR MODO GRAFICO
int gdriver = DETECT, gmode, errorcode;

INICIALIZAR MODO GRAFICO
initgraph(&gdriver, &gmode, "");

DETECTA SI HAY ALGUN ERROR PARA USAR MODO GRAFICO
errorcode = graphresult();

if (errorcode != grOk)
{
printf("Graphics error: %s\n", grapherrormsg(errorcode));
printf("Press any key to halt:");
getch();
exit(1);
}

line(0, 0, 50,50 ); DIBUJ A UNA LINEA

getch();
closegraph(); CERRAR MODO GRAFICO
return 0;
}

FUNCIONES PARA DIBUJ AR

cleardevice(void); LIMPIA LA PANTALLA

setcolor(int color); COLOR DE LINEA

setbkcolor(int color); COLOR DE FONDO (PANTALLA)


480





TAMAO O RESOLUCION DE LA PANTALLA 640X480 PIXELS





line(int x1, int y1, int x2, int y2); DIBUJ A UNA LINEA

rectangle(int left, int top, int right, int bottom); DIBUJ A UN
RECTANGULO
rectangle(izqierda,arriba,derecha,abajo);

putpixel(int x, int y, int color); PINTA UN PIXEL

outtextxy(int x, int y, char far *textstring); DIBUJ A TEXTO
outtextxy(100,100,Programa 1);

settextstyle(int font, int direction, int charsize); TIPO DE LETRA A
USAR
settextstyle(tipo letra, direccion, tamao letra);

TIPOS DE LETRA (FONT)

0 DEFAULT_FONT
1 TRIPLEX_FONT
2 SMALL_FONT
3 SANS_SERIF_FONT
4 GOTHIC_FONT

DIRECTION

0 HORIZ_DIR
1 VERT_DIR

settextjustify(int horiz, int vert); J USTIFICAR TEXTO

HORIZ



640

0 LEFT_TEXT IZQUIERDA
1 CENTER_TEXT CENTRADO
2 RIGHT_TEXT DERECHA

VERT

0 BOTTOM_TEXT ABAJ O
1 CENTER_TEXT CENTRADO
2 TOP_TEXT ARRIBA

RELLENADO DE FIGURAS

floodfill(int x, int y, int border); RELLENAR FIGURA

setfillstyle(int pattern, int color); TIPO DE RELLENO Y COLOR A
USAR

TIPOS DE RELLENADO(FILL PATTERNS)

0 EMPTY_FILL
1 SOLID_FILL
2 LINE_FILL
3 LTSLASH_FILL
4 SLASH_FILL
5 BKSLASH_FILL
6 LTBKSLASH_FILL
7 HATCH_FILL
8 XHATCH_FILL
9 INTERLEAVE_FILL
10 WIDE_DOT_FILL
11 CLOSE_DOT_FILL
12 USER_FILL

COLORES

0 BLACK
1 BLUE
2 GREEN
3 CYAN
4 RED
5 MAGENTA
6 BROWN
7 LIGHTGRAY
8 DARKGRAY
9 LIGHTBLUE
10 LIGHTGREEN
11 LIGHTCYAN
12 LIGHTRED
13 LIGHTMAGENTA
14 YELLOW
15 WHITE
128 BLINK

EJ EMPLO DE ANIMACION

#include <graphics.h>
#include <stdlib.h>
#include <stdio.h>
#include <conio.h>
#include <dos.h>

// EJEMPLO DE ANIMACION

int main(void)
{
int gdriver = DETECT, gmode, errorcode;//variables para detectar
modo grafico
int x1,x2,y1,y2,x,y; //variables para tamao de la figura y para
moverla
clrscr();
initgraph(&gdriver, &gmode, ""); //inicializar modo grafico
errorcode = graphresult();
if (errorcode != grOk) //detecta si hay algun error
{
printf("Graphics error: %s\n", grapherrormsg(errorcode));
printf("Press any key to halt:");
getch();
exit(1);
}

x1=1;x2=100;y1=1;y2=100;x=3;y=3; //valores para las variables

//dibuja un cuadro relleno
setcolor(2); //color de linea
setfillstyle(1,2); //tipo de rellenado y color
rectangle(x1,y1,x2,y2); //dibujar cuadrado
floodfill(x,y,2); //rellena la figura. Los valores de "x" y "y" deben
//estar dentro de la figura a rellenar
getch();
//animacion
for(int i=0;i<=640;i++)
{
cleardevice(); //limpia la pantalla
setcolor(2);
setfillstyle(1,2);
rectangle(x1+i,y1,x2+i,y2);//sumamos "i" a los valores de x1 y x2
para mover la figura
floodfill(x+i,y,2);
delay(5); //tiempo que tarda en repetir el ciclo
}

getch();
closegraph();//cerrar modo grafico
return 0;
}



Cuando utilizamos grficos usamos coordenadas x y y y se mide en pxeles
en c standard y dependiendo de la computadora ,x tiene un mximo de 639,
y tiene un mximo de 479.

El modo para inicializar grficos es :

Int gdriver=DETECT,gmode;
Initgraph(&gdriver,&gmode,direccin de la carpeta bgi de tc);

Existen varias funciones estndar con las que podemos trabajar en grficos:

Cleardevice(); //limpia pantalla
Setbkcolor( int Color); // pone el color de fondo de la pantalla
Setcolor( int color); //elige el color de los trazos que se agan

BLACK 0
BLUE 1
GREEN 2
CYAN 3
RED 4
MAGENTA 5
BROWN 6
LIGHTGRAY 7
DARKGRAY 8
LIGHTBLUE 9
LIGHTGREEN 10
LIGHTCYAN 11
LIGHTRED 12
LIGHTMAGENTA 13
YELLOW 14
WHITE 15

Line(int x1, int y1, int x2, int y2); //hace una linea
Circle(int x, int y, int radio); //hace un circulo;
Ellipce(int x, int y, int angulo inicial, int angulo final); //hace una elipse
Rectangle(int x izq,int y izq superior, int x der, int y der inferior); //hace un
rectngulo
Putpixel(int x, int y ,int color); //pone un pixel

Settextstyle(int tipo de letra, int orientacin, int tamao);

Orientacin o horizontal, 1 vertical
Tipo de letra: 0 DEFAULT_FONT
1 TRIPLEX_FONT
2 SMALL_FONT
3 SAN_SERIF_FONT
4 GOTHIC_FONT


Outtextxy(int x, int y, texto);

Setfillstylke(int tipo de relleno, in t color); //selecciona el color y tipo de relleno

Floodfill(int x, int y, int color dentro del que se va a rellenar);//rellena dando las
coordenadas dentro de la figura a rellenar;
EMPTY_FILL 0
SOLID_FILL 1
LINE_FILL 2
LTSLASH_FILL 3
SLASH_FILL 4
BKSLASH_FILL 5
LTBKSLASH_FILL 6
HATCH_FILL 7
XHATCH_FILL 8
INTERLEAVE_FILL 9
WIDE_DOT_FILL 10
CLOSE_DOT_FILL 11
USER_FILL 12



Y 0
X 0
Para poder graficar una funcin debemos tener en cuanta que el eje y esta
invertido a como lo necesitamos:







Primero trazamos los ejes donde vamos a graficar, supongamos que las
coordenadas de interseccin entre las lneas es (449,159) esto significa que este
es nuestro origen 0

Usando la funcin double evaluafuncion(char [], double);
Evaluamos nuestra funcin utilizando un ciclo, en donde se incremente el valor
double que le enviamos a nuestra funcin.


double result;
a=0.0;
Ciclo
{
a=a+.01; por ejemplo.
evaluarfuncion(funcin ,a)
result=result*-1; //por que este es el valor del eje y que esta invertido
putpixel((a*escala)+449,(result*escala)+159,int color);
}
y este es el principio bsico para poder graficar una funcin.

Existe diferentes formas para poder hacer una animacin.

Una de las mas sencillas es hacer un algoritmo de incremento de coordenadas
combinado con limpieza de pantalla , dentro de un ciclo.

for(int k=0;k<50;k++)
{
cleardevice();//borra pantalla
setcolor(LIGHTBLUE);//elije el color para las lneas
line(26*k*.1,36*k*.1,76*k*.1,36*k*.1);
line(26*k*.1,36*k*.1,16*k*.1,46*k*.1);
line(76*k*.1,36*k*.1,76*k*.1,46*k*.1);
line(76*k*.1,46*k*.1,56*k*.1,46*k*.1);
line(56*k*.1,46*k*.1,56*k*.1,76*k*.1);
line(56*k*.1,76*k*.1,40*k*.1,76*k*.1);
line(40*k*.1,76*k*.1,40*k*.1,46*k*.1);
line(40*k*.1,46*k*.1,16*k*.1,46*k*.1);
setfillstyle(1,1);//tipo de relleno
floodfill(40*k*.1,40*k*.1,9);//rellenado
settextstyle(2,0,1*k*2*.2);//tipo de texto
outtextxy(65*k*.1,66*k*.1,"Soft.");//texto

delay(100);//retardo del ciclo

}


otra forma es usar las siguientes herramientas

unsigned int imagesize(int xizq,int y superior,x der,y inferior); //tamao de
imagen
getimage(int xizq,int y superior,int xderm, int y inferior,void mapa de bits);
putimage(int xizq,int y superior,void mapa de bits,int operador);
COPY_PUT 0
XOR_PUT 1
OR_PUT 2
AND_PUT 3
NOT_PUT 4

Moveto(intx,int y);


Ejemplo:
maxx = getmaxx();
x = 0;
y = getmaxy() / 2;

/* draw the image to be grabbed */
draw_arrow(x, y);

/* calculate the size of the image */
size = imagesize(x, y-ARROW_SIZE, x+(4*ARROW_SIZE),
y+ARROW_SIZE);

/* allocate memory to hold the image */
arrow = malloc(size);

/* grab the image */
getimage(x, y-ARROW_SIZE, x+(4*ARROW_SIZE), y+ARROW_SIZE,
arrow);

/* repeat until a key is pressed */
while (!kbhit())
{
/* erase old image */
putimage(x, y-ARROW_SIZE, arrow, XOR_PUT);

x += ARROW_SIZE;
if (x >= maxx)
x = 0;

/* plot new image */
putimage(x, y-ARROW_SIZE, arrow, XOR_PUT);
}

/* clean up */
free(arrow);
closegraph();
getch();
return 0;

}

void draw_arrow(int x, int y)
{
/* draw an arrow on the screen */
moveto(x, y);
linerel(4*ARROW_SIZE, 0);
linerel(-2*ARROW_SIZE, -1*ARROW_SIZE);
linerel(0, 2*ARROW_SIZE);
linerel(2*ARROW_SIZE, -1*ARROW_SIZE);
}








8.2 Configuracion del puerto paralelo de la PC.
PRECAUCIONES: Conectar dispositivos al puerto paralelo implica el riesgo de daos permanentes a
la tarjeta madre de la PC, ah que tener siempre presente que an los profesionales cometen
errores, por lo tanto no est de ms recomendar extremo cuidado al trabajar en el puerto paralelo.
Los puertos de comunicacin de la PC son de particular inters para el estudioso de la electrnica
ya que le permiten utilizar una computadora personal para controlar todo tipo circuitos
electrnicos utilizados, principalmente, en actividades de automatizacin de procesos, adquicisin
de datos, tareas repetitivas y otras actividades que demandan precisin. ste artculo es el
primero de una serie que analizar diversos usos para el puerto paralelo de la PC.
Conceptos bsicos
Existen dos mtodos bsicos para transmisin de datos en las computadoras modernas. En un
esquema de transmisin de datos en serie un dispositivo enva datos a otro a razn de un bit a la
vez a travs de un cable. Por otro lado, en un esquema de transmisin de datos en paralelo un
dispositivo enva datos a otro a una tasa de n nmero de bits a travs de n nmero de cables a un
tiempo. Sera fcil pensar que un sistema en paralelo es n veces ms rpido que un sistema
en serie, sin embargo sto no se cumple, bsicamente el impedimiento principal es el tipo de cable
que se utiliza para interconectar los equipos. Si bin un sistema de comunicacin en paralelo
puede utilizar cualquier nmero de cables para transmitir datos, la mayora de los sistemas
paralelos utilizan ocho lneas de datos para transmitir un byte a la vez, como en todo, existen
excepciones, por ejemplo el estndar SCSI permite transferencia de datos en esquemas que van
desde los ocho bits y hasta los treinta y dos bits en paralelo. En ste artculo nos concentraremos
en transferencias de ocho bits ya que sta es la configuracin del puerto paralelo de una PC.
Un tpico sistema de comunicacin en paralelo puede ser de una direccin (unidireccional) o de
dos direcciones (bidireccional). El ms simple mecanismo utilizado en un puerto paralelo de una
PC es de tipo unidireccional y es el que analizaremos en primer lugar. Distinguimos dos elementos:
la parte transmisora y la parte receptora. La parte transmisora coloca la informacin en las lneas
de datos e informa a la parte receptora que la informacin (los datos) estn disponibles; entonces
la parte receptora lee la informacin en las lneas de datos e informa a la parte transmisora que ha
tomado la informacin (los datos).
El handshaking
Para implementar el handshaking se requieren dos lneas adicionales. La lnea
de estroboscopio (en ingls strobe) es la que utiliza la parte transmisora para indicarle a la parte
receptora la disponibilidad de informacin. La lnea de admisin (acknowledge) es la que utiliza la
parte receptora para indicarle a la parte transmisora que ha tomado la informacin (los datos) y
que est lista para recibir ms datos. El puerto paralelo provee de una tercera lnea de
handshaking llamada en ingls busy (ocupado), sta la puede utilizar la parte receptora para
indicarle a la parte transmisora que est ocupada y por lo tanto la parte transmisora no debe
intentar colocar nueva informacin en las lneas de datos.
Parte transmisora:
La parte transmisora checa la lnea busy para ver si la parte receptora est ocupada. Si la
lnea busy est activa, la parte transmisora espera en un bucle hasta que la lnea busyest inactiva.
La parte transmisora coloca la informacin en las lneas de datos.
La parte transmisora activa la lnea de strobe.
La parte transmisora espera en un bucle hasta que la lnea acknowledge est activa.
La parte transmisora inactiva la lnea de strobe.
La parte transmisora espera en un bucle hasta que la lnea acknowledge est inactiva.
La parte transmisora repite los pasos anteriores por cada byte a ser transmitido.
Parte receptora:
La parte receptora inactiva la lnea busy (asumiendo que est lista para recibir informacin).
La parte receptora espera en un bucle hasta que la lnea strobe est activa.
La parte receptora lee la informacin de las lneas de datos (y si es necesario, procesa los datos).
La parte receptora activa la lnea acknowledge.
La parte receptora espera en un bucle hasta que est inactiva la lnea de strobe.
La parte receptora inactiva la lnea acknowledge.
La parte receptora repite los pasos anteriores por cada byte que debe recibir.
Se debe ser muy cuidadoso al seguir stos pasos, tanto la parte transmisora como la receptora
coordinan sus acciones de tal manera que la parte transmisora no intentar colocar varios bytes
en las lneas de datos, en tanto que la parte receptora no debe leer ms datos que los que le enve
la parte transmisora, un byte a la vez.
El hardware del puerto paralelo
El puerto paralelo de una tpica PC utiliza un conector hembra de tipo D de 25 patitas (DB-25 S),
ste es el caso ms comn, sin embargo es conveniente mencionar los tres tipos de conectores
definidos por el estndar IEEE 1284, el primero, llamado 1284 tipo A es un conector hembra de 25
patitas de tipo D, es decir, el que mencionamos al principio. El orden de las patitas del conector es
ste:



El segundo conector se llama 1284 tipo B que es un conector de 36 patitas de tipo centronics y lo
encontramos en la mayora de las impresoras; el tercero se denomina 1284 tipo C, se trata de un
conector similar al 1284 tipo B pero ms pequeo, adems se dice que tiene mejores propiedades
elctricas y mecnicas, ste conector es el recomendado para nuevos diseos. La siguiente tabla
describe la funcin de cada patita del conector 1284 tipo A:
Patita E/S Polaridad activa Descripcin
1 Salida 0 Strobe
2 ~ 9 Salida -
Lneas de datos
(bit 0/patita 2, bit 7/patita 9)
10 Entrada 0
Lnea acknowledge
(activa cuando el sistema remoto toma datos)
11 Entrada 0
Lnea busy
(si est activa, el sistema remoto no acepta datos)
12 Entrada 1
Lnea Falta de papel
(si est activa, falta papel en la impresora)
13 Entrada 1
Lnea Select
(si est activa, la impresora se ha seleccionado)
14 Salida 0
Lnea Autofeed
(si est activa, la impresora inserta una nueva
lnea por cada retorno de carro)
15 Entrada 0
Lnea Error
(si est activa, hay un error en la impresora)
16 Salida 0
Lnea Init
(Si se mantiene activa por al menos 50
micro-segundos, sta seal
autoinicializa la impresora)
17 Salida 0
Lnea Select input
(Cuando est inactiva, obliga a la
impresora a salir de lnea)
18 ~ 25 - - Tierra elctrica

Tabla 1: Configuracin del puerto paralelo estndar
Puedo observar que el puerto paralelo tiene 12 lneas de salida (8 lneas de datos, strobe,
autofeed, init, y select input) y 5 de entrada (acknowledge, busy, falta de papel, select y error). El
estndar IEEE 1284 define cinco modos de operacin:

1. Modo compatible
2. Modo nibble
3. Modo byte
4. Modo EPP, puerto paralelo ampliado
5. Modo ECP, puerto de capacidad extendida
El objetivo del estndar es disear nuevos dispositivos que sean totalmente compatibles con el
puerto paralelo estndar (SPP) definido originalmente por la IBM (en ste artculo tratar
solamente el modo compatible). Hay tres direcciones de E/S asociadas con un puerto paralelo de
la PC, stas direcciones pertenecen al registro de datos, el registro de estado y el registro de
control. El registro de datos es un puerto de lectura-escritura de ocho bits. Leer el registro de
datos (en la modalidad unidireccional) retorna el ltimo valor escrito en el registro de datos. Los
registros de control y estado proveen la interface a las otras lneas de E/S. La distribucin de las
diferentes seales para cada uno de los tres registros de un puerto paralelo esta dada en las
siguientes tablas:
Direccin Nombre Lectura/Escritura Bit # Propiedades
Base + 0 Puerto de datos Escritura Bit 7 Dato 7
Bit 6 Dato 6
Bit 5 Dato 5
Bit 4 Dato 4
Bit 3 Dato 3
Bit 2 Dato 2
Bit 1 Dato 1
Bit 0 Dato 0
Tabla 2: Registro de datos
Direccin Nombre Lectura/Escritura Bit # Propiedades
Base + 1 Puerto de estado Slo Lectura Bit 7 Busy
Bit 6 Acknowledge
Bit 5 Falta de papel
Bit 4 Select In
Bit 3 Error
Bit 2 IRQ (Not)
Bit 1 Reservado
Bit 0 Reservado
Tabla 3: Registro de estado
Direccin Nombre Lectura/Escritura Bit # Propiedades
Base + 2 Puerto de control Lectura/Escritura Bit 7 No usado
Bit 6 No usado
Bit 5
Permite puerto
bidireccional
Bit 4
Permite IRQ a
travs de la
lnea
acknowledge
Bit 3
Selecciona
impresora
Bit 2
Inicializa
impresora
Bit 1
Nueva lnea
automtica
Bit 0 Strobe

Tabla 4: Registro de control
Una PC soporta hasta tres puertos paralelo separados, por tanto puede haber hasta tres juegos de
registros en un sistema en un momento dado. Existen tres direcciones basepara el puerto paralelo
asociadas con tres posibles puertos paralelo: 0x3BCh, 0x378h y 0x278h, nos referimos a stas
como las direcciones base para el puerto LPT1, LPT2 yLPT3, respectivamente. El registro de datos
se localiza siempre en la direccin base de un puerto paralelo, el registro de estado aparece en la
direccin base + 1, y el registro de control aparece en la direccin base + 2. Por ejemplo, para un
puerto LPT2 localizado en 0x378h, sta es la direccin del registro de datos, al registro de estado le
corresponde la direccin 0x379h y su respectivo registro de control est en la direccin 0x37Ah.
Cuando la PC se enciende el BIOS ejecuta una rutina para determinar el nmero de puertos
presentes en el sistema asignando la etiqueta LPT1 al primer puerto localizado, si existen ms
puertos entonces se asignarn consecutivamente las etiquetas LPT2 y LPT3 de acuerdo a la
siguiente tabla:
Direccin inicial Funcin
0000:0408 Direccin base para LPT1
0000:040A Direccin base para LPT2
0000:040C Direccin base para LPT3
0000:040E Direccin base para LPT4
Tabla 5: Direcciones base en el BIOS
Para trabajar con el puerto paralelo necesitamos en primer lugar conocer la direccin base
asignada por el BIOS (estamos hablando de una PC compatible con IBM), podemos utilizar un
programa llamado Debug.exe que nos indique la(s) direccin(es) asignada(s): en la plataforma
Windows vamos al men inicio, seleccionamos programas y luegoMS-DOS para abrir una ventana
de Smbolo de MS-DOS y aqu podemos introducir los comandos indicados ms abajo. Si se trabaja
en ambiente DOS basta con teclear en la lnea de comandos la palabra debug, el programa
responde colocando un signo de menos - en donde tecleamos sin dejar espacios en
blanco d040:08L8 y presionamos la tecla entrar, entonces el programa debug.exe nos indica en
una serie de nmeros la(s) direccin(es) para el (los) puerto(s) paralelo(s) disponibles en nuestro
sistema, la siguiente imagen muestra el resultado obtenido en mi mquina:


Por supuesto, tambin podemos conocer la direccin asignada al puerto paralelo utilizando un
programa, donde el cdigo es el siguiente:

/* Determina la direccion del puerto paralelo */


#include <stdio.h>
#include <dos.h>

int main()
{
unsigned int __far *puntero_a_direccion;
int i;

puntero_a_direccion=(unsigned int __far *)0x00000408;

for (i=0; i<3; i++)
{
if (*puntero_a_direccion == 0)
printf("No se encontro puerto asignado a LPT%d \n", i+1);
else
printf("La direccion asignada a LPT%d es 0x%Xh\n",
i+1, *puntero_a_direccion);
puntero_a_direccion++;
}

return 0;
}
El programa es muy sencillo, necesitamos un puntero que seale a la ubicacin de memoria que
almacena la informacin para las diferentes direcciones asignadas al puerto paralelo, lo
llamamos puntero_a_direccion, ste puntero debe ser de al menos dos bytes, por sta razn se
declara como de tipo unsigned int __far



Interfaz para el puerto paralelo
Actualmente, la mayora de los puertos instalados en las computadoras son de tipo multimodal
configurables a travs del BIOS de la mquina, en ste artculo me refiero expresamente al
modo Normal (SPP), adems de ste estn las opciones Bidireccional,
Por cada lnea de entrada que tomamos directamente del puerto paralelo existe una etapa
amplificadora-separadora dentro del circuito integrado 74LS244 que nos permite trabajar con una
tasa de entrega de corriente suficiente para desplegar en los diodos emisores de luz la informacin
escrita en las lneas de datos del puerto. Adems es posible habilitar deshabilitar el despliegue
del nibble de orden inferior superior del byte escrito en el puerto. Colocando en un nivel lgico
alto la patita 1 del CI 74LS244 inhabilitamos el despliegue del nibble de orden bajo, un nivel lgico
alto en la patita 19 evita el despliegue del nibble de orden alto. Para comodidad, conecto las
patitas 1 y 19 permanentemente a tierra de tal manera que sea posible visualizar la actividad en
los diodos emisores de luz (LED). En el diagrama se especifican con nmeros las correspondientes
patitas del conector DB-25. Obviamente se requiere de una fuente regulada de 5 Voltios para
operar ste circuito, adems los siguientes materiales:
1. Circuito Integrado TTL 74LS244.
8. Diodos Emisores de Luz.
8. Resistencias de 220 Ohms, 1/2 Watt.
1. Cable y conector para el puerto paralelo.
En primer lugar apague la computadora y el circuito. Conecte el cable al puerto paralelo
asegurndose que el conector est firme en su sitio. Encienda el circuito y por ltimo
encienda la computadora, por regla general, el circuito de restablecimiento de la
computadora coloca inicialmente en las lneas de datos del puerto paralelo un valor igual a
0x0h, por lo tanto todos los diodos deben estar apagados una vez que la computadora ha
terminado su proceso de arranque, sin embargo, si algn diodo permanece encendido
sto no indica una condicin de falla, es responsabilidad del software que Usted escriba
para controlar el puerto inicializarlo con un valor adecuado antes de realizar cualquier otra
operacin.
8.3 instrucciones para el manejo de puertos
paralelos.
Comunicaciones seriales en Lenguaje C.
En lenguaje C, existe una instruccin especial para manejar las comunicaciones seriales.
Esta instruccin posee la siguiente sintaxis:

int bioscom (int cmd, char abyte, int port);

En realidad, esta instruccin acude a la interrupcin 14H para permitir la comunicacin
serial sobre un puerto. Para este caso, cada uno de los parmetros tiene el siguiente
significado:

cmd Especifica la operacin a realizar
abyte
es un caracter que se enviar por
el puerto serial
port
es la identificacin del puerto
serial (desde 0 para COM1 hasta
3 para COM4)

El parmetro cmd puede tener los siguientes valores y significados:
0 Inicializa el puerto port con los valores dados por abyte
1 Enva el caracter abyte por el puerto port
2 Lee el caracter recibido por el puerto port
3 Retorna el estado del puerto port
Para la inicializacin del puerto, el caracter abyte tiene las interpretaciones que se
muestran en la siguiente Tabla.

0x02
0x03
7 bits de datos
8 bits de datos
0x00
0x04
1 bits de parada
2 bits de parada
0x00
0x08
0x18
Sin paridad
Paridad impar
Paridad par
0x00
0x20
0x40
0x60
0x80
0xA0
0xC0
0xE0
110 baudios
150 baudios
300 baudios
600 baudios
1200 baudios
2400 baudios
4800 baudios
9600 baudios

Para configurar el puerto con algunos parmetros, bastar con realizar una operacin OR
con los deseados, por ejemplo, para 1200 baudios, sin bit de paridad, sin bit de parada y 8
bits, bastar con selecconar la palabra dada por:

abyte = 0x80 | 0x00 | 0x00 | 0x03

o lo que es equivalente,

abyte = 0x83

Para la lectura de un caracter que se haya recibido o del estado del puerto, se deben
utilizar variables en las cuales se almacenarn los valores de retorno; en ambos caso se
obtienen valores de 16 bits. Para la lectura de un dato recibido, los 8 bits menos
significativos corresponden al dato y los 8 ms significativos al estado del puerto; si alguno
de estos ltimos est en "1 ", un error ocurri; si todos estn en "0", el dato fue recibido
sin error.
Cuando el comando es 2 3 (leer el caracter o el estado del puerto), el argumento abyte
no se tiene en cuenta. Para configurar el puerto COM1 con los parmetros del ejemplo
dado anteriormente, bastar con la instruccin:

bioscom (0,0x83,0); /*(inicializar, parmetros, COM1)*/

La utilizacin de los comandos y las instrucciones para la configuracin de los puertos aqu
expuestos slo tendrn sentido en la medida en que utilicemos el puerto serial para
establecer una comunicacin bien con otros computadores o bien con dispositivos
electrnicos como microcontroladores.
Comunicacin con el puerto paralelo en Lenguaje C.
El lenguaje C permite tanto la lectura como la escritura de los puertos paralelo. Para leer el
puerto existen las instrucciones inport e inportb, mientras que para escribir estn las
instrucciones outport y outportb. La sintaxis de estas instrucciones es la siguiente:
unsigned inport (unsigned portid);
unsigned char inportb (unsigned portid);
void outport (unsigned portid, unsigned value);
void outportb (unsigned portid, unsigned char value);
Ejemplo:
Palabra = inport(puerto);
outport (puerto,Palabra);
Byte = inportb (puerto);
outportb (puerto,Byte);
Las instrucciones que terminan en b ese refieren a la lectura o escritura de un byte,
mientras que las que no terminan en esta letra se refieren a una palabra(dos byte). La
variable puerto debe contener la direccin de memoria del puerto paralelo, este valor
puede ser 378h, 3BCh 278h. Por ultimo no hay que olvidar colocar la siguiente directiva
del preprocesador que le indica al C que se usarn las funciones inport, outport, inportb u
outportb, declaradas en el archivo dos.h.
#include <dos.h>
El siguiente programa consulta la direccin del primer puerto paralelo disponible:

#include <conio.h>
#include <dos.h>
void main(void)
{
int puerto;
clrscr();
puerto=peekb(0x40,0x8);
printf("Direccin: %Xh",puerto);
getch();
}
Como vern la utilizacin del puerto paralelo es mucho ms sencillo que la serial.
Referencias utilizadas:
1.- Naranjo C. , Jhon Jairo. Electronica & Computadores."Interface serial RS-232". Ao I
N10. Pag. 71-76
2.- Naranjo C. , Jhon Jairo. Electronica & Computadores."Kinder de programacin en
C". Ao I N9. Pag. 71-76

S-ar putea să vă placă și