ࡱ >          9     (  bjbj  % $    l  <  1                 $ '  G 6         j     j j j  4    j   j F j     } N    0 1  } N  }  j 

Temas:

*Introduccin

*Elementos generales de un programa en C

 

INTRODUCCIN

EL lenguaje C es el resultado de un proceso de desarrollo que inici con un lenguaje denominado BCPL. Este influenci a otro llamado B (inventado por Ken Thompson). En los aos 70; ste lenguaje llev a la aparicin del C.

Con la popularidad de las microcomputadoras muchas compaias comenzarona implementar su propio C por lo cual surgieron discrepancias entre s.

Por esta razn ANSI (American National Standars Institute, por sus siglas en ingls), estableci un comit en 1983 para crear una definicin no ambiga del lenguaje C e independiente de la mquina que pudiera utilizarse en todos los tipos de C.

Algunos de las C existentes son:

-Quick C

-C++

-Turbo C

-Turbo C ++

-Borland C

-Borland C++

-Microsoft C

-etc.

Este manual se basa en el C estandar el cual puede utilizarse en todos los tipos de C.

C es un lenguaje de programacin de nivel medio ya que combina los elementos del lenguaje de alto nivel con la funcionalidad del ensamblador.

Su caracterstica principal es ser portable,es decir,es posible adaptar los programas escritos para un tipo de computadora en otra.

Otra de sus caractersticas principales es el ser esctructurado, es decir, el programa se divide en mdulos (funciones) independientes entre s.

El lenguaje C inicialmente fu creado para la programacin de

-Sistemas operativos

-Intrpretes

-Editores

-Ensambladores

-Compiladores

-Administradores de bases de datos.

Actualmente, debido a sus caratersticas, puede ser utilizado paratodo tipo de programas.

 

 

 

ELEMENTOS GENERALES DE UN PROGRAMA EN C

Aunque cada uno de los programas son distintos, todos tienen caractersticas comunes. Los elementos de un programa en C son los siguientes:

Comentarios

Inclusin de archivos

main()

{

variables locales

flujo de sentencias

}

Definicin de funciones creadas por el programador utilizadas en main()

Veamos en que consiste cada uno:

Comentarios:Se identifican porque van entre diagonales y asterisco.Nos sirve para escribir informacin que nos referencie al programa pero que no forme parte de l. Por ejemplo especificar que hace elprograma, quien lo elabor, en que fecha, que versin es, etc.

Inclusin de archivos: Consiste en mandar llamar a la o las bibliotecas donde se encuentran definidas las funciones de C (instrucciones) que estamos utilizando en el programa.

En realidad, la inclusin de archivos no forma parte de la estructura propia de un programa sino que pertenece al desarrollo integrado de C. Se incluye aqu para que el alumno no olvide que debe mandar llamar a los archivos donde se encuentran definidas las funciones estandar que va a utilizar.

main(): En C, todo est constituido a base de funciones. El programa principal no es la excepcin. main() indica el comienzo de la funcin principal del programa la cual se delimita con llaves.

Variables locales: Antes de realizar alguna operacin en el programa, se deben declarar la(s) variable(s) que se utilizarn en el programa.

Flujo de sentencias: Es la declaracin de todas las instrucciones que conforman el programa.

Definicin de funciones creadas por el programador utilizadas enmain(): Finalmente,se procede a definir el contenido de las funciones utilizadas dentro de main(). Estas contienen los mismos elementos que la funcin principal.

Para ejecutarlo, realice los siguientes pasos:

* Oprima la tecla F10 y seleccione la opcin File.Posicionese en Open y pulse enter.

* Escriba el nombre del archivo donde va a guardar su programa,que no exceda de ocho letras. Automticamente se le agregar la terminacin .c .Digite<ENTER>.

*Transcriba el programa.

Importante:

Despus de cada asignacin o funcin es imprecindible colocar un punto y coma (;) ya que ste es un terminador de proposiciones. En caso de que no se escriba, se marcar un error a la hora de compilar el programa.

En C, los comandos deben ser escritos con letras minsculas, tal como se ha hecho en este programa ejemplo. En el caso de las variables o la funciones definidas por el usuario la situacin es similar:

no es lo mismo

Apellido que

apellido que

APELLIDO

Aunque para nosotros es lo mismo, el compilador de C, los toma como tres nombres distintos. Por tanto, asegrese de mandar llamar las variables o funciones exactamente de la misma forma en que las declar.

Despus de que el programa se encuentra en la ventana activa de edicin, procedamos a compilarlo:

*Presione la tecla F10, escoja el submenCompile. Escoja la opcin Compile.

Si su programa presenta errores, puede presionar la tecla F1

para saber las posibles causas del error. Corrjalos y vuelvalo acompilar hasta que hasta que la compilacin sea exitosa.

Los warnings (advertencias) indican posibles errores en la estructura del programa. Si usted est seguro de que su programa est correcto, ignrelos. No le causarn problemas a la hora de correrlo aunque lo ideal sera que no las hubiera.

Si no se encontraron errores, proceda a ejecutarlo:

- Escoja el submen Run.

-Presione <ENTER> en la opcin RUN

AUTOEVALUACIN

1. Qu es C?

2. Cmo creamos un archivo?

3. En un programa en C, qu significa main()?

4. Qu funcin desempea <conio.h>en el programa?

5. Para qu sirven la llave abierta y la llave cerrada{}

6. Cmo se compila el programa?

7. Cmo ejecutamos un programa?

8. Captura y ejecuta los programas que se muestran a continuacin:

a)/*Programa que despliega un mensaje de bienvenida en la pantalla*/

#include<stdio.h>

#include<conio.h>

void main()

{

clrscr();

gotoxy(20,10);

printf("BIENVENIDO AL CURSO DE C ESTANDAR");

delay(2500);

}

b) /*Programa que calcula el nmero de dias vividos*/

#include<stdio.h>

#include<conio.h>

void main()

{

char nombre[50];

int edad;

clrscr();

printf("Cmo te llamas?\n ");

scanf("%s",nombre);

printf("Cuntos aos 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();

}

c) /*Programa que saca el promedio de 3 nmeros*/

#include<stdio.h>

#include<conio.h>

void main()

{

float numero;

float promedio=0;

clrscr();

printf("Dame el primer nmero: ");

scanf("%f",&numero);

promedio+=numero;

printf("Dame el segundo nmero: ");

scanf("%f",&numero);

promedio+=numero;

printf("Dame el tercer nmero: ");

scanf("%f",&numero);

promedio+=numero;

promedio=promedio/3;

printf("El promedio es %f",promedio);

gotoxy(40,22);

printf("Presione cualquier tecla para terminar...");

getch();

}

d) /*Programa que convierte un nmero 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);

printf(" P E L I G R O ! ");

sound(250);

delay(600);

sound(80);

delay(600);

delay(600);

nosound();

return 0;

}

 

 

 

<ALIGN=CENTER

Temas:

*Tipos de datos

*Declaracin de variables

*Estructuras

*Inicializacin de variables

*Operadores

*Forma de elaboracin de un programa

 

El programa que hicimos en el mdulo anterior slo nos sirve para deplegar un mensaje en pantalla. Lo verdaderamente satisfactorio es hacer programas que procesen informacin. Para ello, tenemos que utilizar variables. Veamos como se manejan.

TIPOS DE DATOS

Los tipos de datos son identificadores que usa cada lenguaje para saber laclase de informacin que va a tomar una variable. Por ejemplo: si quiero utilizar la variable "cantidad" para almacenar un nmero entero, declarar "cantidad" como una variable de tipo int lo que significa slo aceptar valores de tipo entero.

Los tipos de datos bsicos que maneja C son:

char identifica el contenido de la variable que se declare como caracter. Su longitud es de 1 byte.

int se refiere a valores de tipo entero. Ocupa 2 bytes.

float indica que la variable recibe datos de tipo real con aproximadamente 6 digitos de precisin. Su longitud en bytes es de 4.

double define variables que aceptan datos de tipo real con 12dgitos de precisin. Cada variable ocupa 8 bytes de memoria.

void Este tipo de dato sirve para declarar funciones que no devuelven valores. Su cantidad de bytes es cero.

Adems de los anteriores, podemos crear otros tipos de datos alcombinarlos con modificadores de tipo como signed, unsigned,long y short.

Tambin existen los modificadores de acceso que sirven para controlar las formas en que se acceden o se modifican las variables. Estos modificadores son const y volatile

Una variable de tipo const trabaja como una constante ya que recibe sus valores por una inicializacin explcita o bien por algn medio dependiente del hardware. Por ejemplo:

const int x;

crea la variable entera x que no puede ser modificada por el programa pero si inicializada.

El modificador volatile se usa para indicar al compilador que el valor de una variable se puede cambiar por medios externos (no especificados) al programa. Por ejemplo la direccin de una variable global puede ser pasada a la rutina del reloj del sistema operativo y usada para mantener el tiempo real del sistema. En este caso, el contenido de la variable es cambiado sin que haya una sentencia que as lo indique.

Es importante que respetemos estos tipos de modificadores ya que ayudan a la optimizacin de las funciones del compilador.

Se pueden usar ambos modificadores juntos.

 

 

DECLARACION DE VARIABLES

Despus de conocer los tipos de datos existentes en C, veamos comose declaran las variables:

Forma general:

Tipo_de_dato Variable;

Donde tipo_de_dato puede ser cualquiera que est permitido en C y Variable una palabra que designemos para recibir datos.

No hay cantidad mxima de carateres (letras o palabras) que podamos utilizar para crear variables pero si hay dos que tengan los primeros 6 caracteres significativos iguales, C las tomar como si fuesen la misma.

Tampoco podemos utilizar como variables aquellos trminos que ya han sido definidos previamente por el propio C o por el usuario como variables de otro tipo.

Las variables de tipo cadena se declaran como un conjunto de cracteres. Por ejemplo:

char nombre[30];

Donde 30 es el nmero de caracteres mximo que puede tener la cadena.

De acuerdo al lugar donde se declaran, las variables pueden ser globales, formales o locales.

Variables locales:

Son aquellas que se declaran dentro de un conjunto de cdigo relacionado lgicamente entre si (sentencias de control o funciones) Por ejemplo:

 

 

 

funcion_A()

{

int x;

.

.

.

}

funcion_b()

{

int x;

.

.

.

}

En las funciones anteriores, declaramos dos variables llamadas"x" con el mismo tipo. Si tratas de utilizar alguna de las variables fuera de las funciones a las que pertenecen, se marcar un error porque el tipo slo ha sido definido para utilizarse dentro de las llaves donde fu declarada.

El que ambas variables se llamen "x" no quiere decir que sean la misma o que ocupen el mismo lugar en la memoria dado que las variables locales se crean y se destruyen cada vez que se sale del bloque en el que son declaradas por tanto, tambin su contenido se pierde al salir del l.

Parmetros formales:

Muchas de las funciones necesitan argumentos. Los argumentos son datos que recibe la funcin desde el exterior. A las variables en que sirven para transmitir estos datos se les llama parmetros formales dela funcin. Su comportamiento es el mismo al de cualquier otra variable local. Veamos el siguiente ejemplo:

/*Devuelve la suma de dos nmerosdados*/

suma(int a,int b)

{

a+=b; /*A a toma el valor de a+b*/

return(a);

}

Esta funcin realiza la suma de dos nmeros. Utiliza dos parmetros formales: a y b los cuales deben ser declarados en la llamada a suma() para luego poder utilizarlas dentro de la funcin como variables locales. Tambin se destruyen al salir de la funcin.

Se debe tener mucho cuidado de que los parmetros formales que se declaran sean del mismo tipo que los valores que se introducen cuando se manda llamar la funcin porque podra obtener resultados inesperados.

Variables globales:

Este tipo de variables se conocen atravs de todo el programa por lo cual se pueden usar en cualquier parte de la ejecucin de ste. Se declararan antes de utilizar la variable por primera vez. Se recomienda que sea al principio del programa para mantener un orden.

Consideremos el ejemplo que se presenta a continuacin, donde utilizamos los diferentes tipos de variables:

/* Programa que eleva al cuadrado un nmero real */

#include<math.h>

main()

{

float x;

printf("Dame el nmero que quieres elevar al cuadrado: ");

scanf("%f",&x);

x=cuadrado(x);

printf("El cuadrado es%f",x);

}

cuadrado(float n)

{

n=n*n;

return(n);

}

Si analizamos las sentencias, vemos que x es una variable global mientrasque n es un parmetro formal que nos sirve como variable localpara efectuar la funcin.

 

 

ESTRUCTURAS

Las estructura es un tipo de datos compuesto que permite el C. Se define como un conjunto de variables relacionadas lgicamente entre s que se referencian bajo un mismo nombre.

Su forma general de definicin es

struct nombre_de_la_estructura{

tipo nombre_variable;

tipo nombre_variable;

tipo nombre_variable;

.

.

.

}variables_tipo_nombre_de_la_estructura;

donde nombre_de_la_estructura o bien variables_tipo_nombre_de_la_variables_estructura pueden omitirse pero no ambos.

Veamos un ejemplo:

struct agenda{

char nombre[30];

char direccion[20];

char ciudad[15];

int edad;

} actor;

agenda es el nombre de la estructura; nombre, direccin,ciudad y edad son los campos o elementos de la estructura y actor es la variable declarada de ese tipo.

Los elementos individuales de la estructura se referencian utilizando el operador punto. Por ejemplo:

actor.nombre="Harrison Ford";

Aqu se est asignando la cadena "Harrison Ford" al campo nombre de la variable actor.

El nombre de la variable tipo estructura seguido del punto y del nombre delcampo, referencia ese campo individual de la estructura. a todos los elementos de la estructura se accede del mismo modo. La forma general es:

variable_estructura.nombre_elemento

As, para imprimir en pantalla el campo edad de la variable actor, escribimos:

printf("%d",actor.edad);

De la misma forma podemos utilizar gets (funcin que le una cadena desde el teclado) para obtener un valor para actor, domicilio como se muestra aqu.

gets(actor.domicilio);

Las variables tipo estructura son utiles para crear unidades de informacinde diferentes tipos lgicamente relacionada entre s. Tal esel ejemplo de los datos de una agenda( en una variable guardas su nombre,direccin, nmero telefnico, etc) o de los datos de un elemento de la tabla peridica (en cada variable guardas su nombre,simbolo, nmero atmico, etc).

Sentencias de asignacin

La forma general de asignar valores a una variable es:

nombre_variable=expresin

Expresin puede ser desde una constante hasta una combinacin de variables, operadores y constantes.

Si se mezclaran variables de un tipo con las de otro, se aplica la regla de conversin de tipos que consiste en que el valor del lado derecho de la asignacin se convierte al tipo de dato de la variable del lado izquierdo (que es la que recibir el dato) siempre y cuando sta ltima tenga mayor longitud en bytes. Por ejemplo, una variable int podemos asignarla a otra variable de tipo float pero no viceversa.

 

 

INICIALIZACIN DE VARIABLES

Inicializar una variable es el darle un valor despus que se ha declarado pero antes de que se ejecuten las sentencias en las que se emplea.

En C, se les puede dar un valor a la vez que se declaran. Unicamente se coloca el signo igual y una constante despus del nombre de la variable.La forma general de inicializacin es:

tipo nombre_variable = constante;

int uno=1;

float pi=3.1416;

char respuesta='s';

Regularmente, las variables locales se inicializan cada vez que se entra en el bloque en el que estn definidas mientras que las globales son inicializadas al principio del programa.

Constantes

Constantes son los valores que no pueden ser modificados. En C, pueden serde cualquier tipo de datos.

Adems de los ejemplificados anteriormente, Podemos crear constantesde caracteres con barra invertida. Estos corresponden a los carateres queson imposibles introducir desde el teclado.

Se usan de la misma forma que los caracteres normales por ejemplo:

printf('Esta es una prueba\n");

ch='\0';

 

 

O P E R A D O R E S

Un operador es un smbolo que indica al compilador que realice manipulaciones lgicas o matemticas especficas.

Operadores Aritmticos

Cuando se aplica el smbolo / a un entero o a un caracter, cualquier residuo se trunca. Por ejemplo 5/3 ser 1 en divisin entera.

El menos monario hace el efecto de multiplicar su nico operando por-1 es decir, cualquier nmero precedido por un signo menos cambia de signo.

Incremento y decremento

Dos operadores caractersticos de C son el incremento y el decremento.++ aumenta en uno a su operando y -- le resta 1. Es decir,

x=x+1 es esquivalente a ++x;

x=x-1 equivale a --x

Los operandos de incremento y decremento pueden ir antes o despus del operador sin embargo existe una diferencia. Veamos el siguiente ejemplo:

x=10;

y=x++; Aqu y tomar elvalor de 10.

y=++x; En este caso, y tomarel valor de 11.

Los operadores del mismo nivel de precedencia son evaluados por el compilador de izquierda a derecha. Por supuesto, se puede utilizar parntesis para ordenar la evaluacin.

Los parntesis en C son tratados igualmente que en otro tipo de lenguajes de computadora; se forza a que una operacin o un conjunto de operaciones tengan un nivel de precedencia mayor.

El lenguaje C admite abreviaturas que simplifican la escritura de ciertos tipos de sentencias de asignacin. Por ejemplo:

x=x+10; es igual a x+=10;

Tambin, conviene utilizar parntesis para hacer ms claro el orden en que se producen las evaluaciones, tanto para la persona que lo elabora o para los que despus tengan que seguir el programa.

Operadores relacionales y lgicos

Los operadores relacionales son los que determinan la forma de vinculacin entre dos valores. A su vez, los lgicos evaluan la forma de realcionars edos valores.

 

 

Ciclo de vida de un programa

Al igual que en la resolucin de problemas, existen ciertos pasos que debemos seguir para la creacin de programas. Estos son:

1. Anlisis del programa:
Consiste en estudiar minuciosamente el programa que queremos elaborar, que caractersticas debe de tener, con que elementos contamos para realizarlo, etc.

2. Elaborar el pseudocdigo:
El pseudocdigo es cualquier lenguaje que nosotros entendamos y quenos sirva para elaborar algoritmos.

Un algoritmo es el conjunto de manipulaciones matemticas y de estructuras funcionales que nos permitan realizar un programa que ejecute una o varias actividades especficas. Para elaborarlo, debe pensarse detallada y ordenadamente todos los pasos que realizar el programa.

En caso de que el programa sea muy extenso, podemos determinar un pseudocdigo donde se determinen las funciones principales del programa y acto seguido elaborar el pseudocdigo de esas funciones.

3.Codificar el pseudocdigo:
Despus de tener el pseudocdigo del programa, el siguiente paso es codificarlo en el lenguaje que escojamos.En este caso, C.

La ventaja de tener el pseudocdigo del programa es que podemos codificarlo en l o los lenguajes que deseemos.

4.Depuracin:
Despus de codificar el programa, generalmente quedan pequeos detalles a corregir por tanto, el siguiente paso es la depuracin del programa.

Depurar es pulir el programa para que todo funcione como nosotros deseamos. Para esto, es necesario probar el programa cuantas veces sea necesario para asegurarnos de que funcione correctamente.

5.Manteniniemto del programa:
Este es el ltimo paso del ciclo de vida de un programa. Se realiza despus de que el programa ya ha tenido vida til y, debido a las nuevas necesidades de los usuarios, es necesario hacer modificacionesal programa.

Cuando estos cambios se hacen muy grandes, se debe elaborar un nuevo programa.

Apartir de estos pasos, elaboremos un programa que encuentre las racesde un polinomio de segundo grado.

1. Este programa encontrar las races de un polinomio de segundo grado. Necesitamos:

-El polinomio al cual se le v a encontrar la raz.Como todos los polinomios tendrn la misma forma, slo se pedirn los coeficientes los cuales sern de tipo real. Por lo cual, necesitaremos dos variables de este tipo.

-El resultado se almacenar en dos variables de tipo real y se desplegar en pantalla.

-Especificar en pantalla lo que hace el programa.

2.

comienza

variables: a,b,c:real;

escribe('Este programa encuentra las races reales de un polinomio de segundo grado de la forma

ax+bx+c

donde a,by c pueden ser cualquier valor real.

Acontinuacin, escribe los coeficientes de la ecuacin: ');

escribe('a= ');

lee(a);

escribe('b= ');

lee(b);

escribe('c= ');

lee(c);

x1=(-b-(b-4ac))/2a;

x2=(-b+(b-4ac))/2a;

escribe(' Las races de la ecuacion : ');

primera=x1

segunda=x2 ');

3.Ahora veamos como se codifica en C:

/*Programa que encuentra las races de una ecuacin cuadrada,deacuerdo a las frmulas: (-b(b-4ac))/2a */

#include<math.h>

main()

{

float a,b,c,x1,x2;

printf("Este programa encuentra las races reales\n");

printf("de la ecuacin de la forma\n");

printf(" ax+bx+c=0 \n");

printf("A continuacin, escriba los coeficientes\n");

printf("de la ecuacin:\n");

printf("a= ");

scanf("%f",&a);

printf("b= ");

scanf("%f",&b);

printf("c= ");

scanf("%f",&c);

x1=pow(b,2);

x1=x1-(4*a*c);

x1=-b+sqrt(fabs(x1));

x1=x1/(2*a);

x2=pow(b,2);

x2=x2-(4*a*c);

x2=-b-sqrt(fabs(x2));

x2=x2/(2*a);

printf("x1= %f\n");

printf("x2= %f\n);

getch();

}

En el programa anterior, utilizamos \n para indicar que el cursorse posicione en el siguiente rengln de la pantalla.

scanf() nos permite leer informacin desde el teclado.

La frmula la ejecutamos por pasos, para que pueda ser mslegible.

Si observas, aunque la frmula es la misma, alteramos su orden.Qu pasara si lo hubieramos seguido?

 

 

AUTOEVALUACION

1. Qu son los tipos de datos?

2. Cules son los tipo de datos bsicos que soporta C ?

3. Cmo se declaran las variables?

4. Cul es la diferencia entre las variables locales y las variables globales?

5. Enumera los operadores lgicos.

6. Enumera cinco palabras reservadas.

7. Elabora el pseudocdigo de un programa que determine si un nmero es par o impar.

8. Implementa el pseudocdigo de un programa que resuelva una regla de tres y codifquelo.

9. Elabora un programa que realice la divisin de dos nmerosque tengan decimales.

10. Elabora un programa que devuelva el residuo de una divisin.

 

 

 

 

 

 

 

Temas:

* Sentencias decontrol

- Sentenciascondicionales

*if

* ifsanidados

*switch

- Bucles

*for

*while

* do-while

- Break

- Continue

 

SENTENCIAS DE CONTROL

En este mdulo veremos lo relacionado a las sentencias de controlque maneja C. Es importante que se comprendan bien porque son herramientasbsicas en la implementacin de programas.

De acuerdo a la sintaxis utilizada en C, una sentencia puede ser unaproposicin o ninguna proposicin (si hablamos de una sentenciavaca) o un conjunto de proposiciones (cuando se encuentran agrupadasentre llaves). Dentro de este captulo utilizaremos la palabra sentenciacon las tres acepciones.

 

 

SENTENCIAS CONDICIONALES

Las sentencias IF

La sentencia de control if nos sirve para verificar que se cumplauna condicin en el programa. Su forma general es

if(expresin) sentencia;

else sentencia;

donde sentencia puede ser una sola proposicin o un conjunto deproposiciones delimitadas por llaves. Ejemplo:

Queremos dividir dos nmeros cualesquiera donde el divisor sea diferentedecero.

Necesitamos dos variables de tipo real (para que tambin acepte valoresenteros) para recibir los datos y una para alamacenarlo.

Creamos el pseudocdigo:

si divisor<>0 entonces

divisin=dividendo/divisor;

de otro modo

manda mensaje de error;

Y al codificar en C

if (divisor!=0)

divisior=dividendo/divisor;

else

printf("Error en el divisor");

Si se cumple la condicin (que divisor sea diferente de cero) entoncesse realizar la divisin; si no, se mandar un mensajede error.

 

 

Ifs anidados

La expresin "ifs anidados" se refiere a que podemos utilizar unasentenciaif dentro de otra sentencia if. Esto se emplea cuandose tienenque cumplir varias condiciones para poder ejecutar una accin.

Ejemplo:

Hagamos un algoritmo que seleccione una asignatura.

menu()

inicio

variable opcion:caracter;

escribe('A)Espaol');

escribe('B)Matemticas');

escribe('C)Historia');

escribe('D)Biologia');

escribe('Opcion: ');

lee(opcion);

escribe('Escogi ');

si opcion='A'entonces

escribe('Espaol')

de otro modosiopcion='B'

entoncesescribe('Matemticas')

de otro modosiopcion='C'

entonces escribe('Historia')

de otromodosi opcion='D' entonces escribe('Biologia')

de otro modo escribe('una asignatura inexistente')

fin;

Codificndolo en C:

#include<stdio.h>

menu()

{

char opcion;

printf("A)Espaol\n");

printf("B)Matemticas\n");

printf("C)Historia\n");

printf("D)Biologia\n");

printf("Opcin: ");

scan("%c",&opcion);

printf("Escogi ");

if (opcion=='A')

printf("espaol");

else if (opcion=='B')

printf("matamticas");x

else if (opcion=='C')

printf("historia");

else if (opcion=='D')

printf("biologia");

else printf("una asignaturainexistente.");

}

En el programa anterior, despus de haber mandado a pantalla las opciones, leemos la respuesta. Para determinar la opcin que se escogi, se recurre a las sentencias if. Cuando la evaluacin sea verdadera es decir, cuando encontremos el valor que lemos enopcion, ejecutaremos en este caso la funcin correspondiente.

Las condiciones se codifican en orden de importancia es decir, la condicin ms importante se evala primero, enseguida la que le sigue en importancia y as sucesivamente hasta llegar a la menosimportante.En este caso,todas las condiciones eran igualmente importantespor lo que no importa elorden en que se evaluen.

 

 

Switch

Cuando se anidan muchos ifs, el cdigo puede volverse difcilde entender an para el autor. Para darle mayor transparencia, enC utilizamos la sentencia de decisin mltiple switch.

Switch es utilizada cuando una variable es sucesivamente comparadacinuna lista de enteros o de caracteres. Cuando se encuentra la correspondencia,se ejecuta una sentencia o el bloque de sentencias.

La forma general de una sentencia switch es

switch(expresin)
{
case constante1:
secuencia desentencias;
break;
case constante2:
secuencia desentencias;
break;
case constente3:
secuencia desentencias;
break;
.
.
.
default:
secuencia desentencias;
}

switch es el indicador del tipo de sentencia de control.

{ } delimitan lo que abarca la sentencia switch.

case especifica donde comienza la evaluacin de la variablecon la constante que sucede al case

En caso de que encontremos el valor de la variable en un case se ejecutarnla secuencia de sentencias relacionadas con este hasta encontrarunbreak.

Las sentencias asociadas a Default seran ejecutadas si no se encuentraninguna correspondencia con el valor de la variable que estamos evaluandoen alguno de los case.El final de estas sentencias las determinala} del switch. Esta sentencia es opcional (se puede o noincluir).Si no est presente, no se ejecutar ninguna sentenciaen casode que ningn case corresponda al valor que estamosbuscando.

La diferencia entre switch e if es que la primera slo puedecomprobarla igualdad, mientras que if puede evaluar expresiones relacionalesolgicas.

No puede haber dos constantes case que tengan los mismos valoresslo en el caso de que la sentencia switch este anidada (quehaya una dentro de otra).

Ejemplifiquemos el switch optimizando el ejemplo anterior.Ahora,codifiquemos el algoritmo de men, pero utilizando unswitch en vez de ifs.

menu()
{
char opcion;
printf("A)Espaol\n");
printf("B)Matemticas\n");
printf("C)Historia\n");
printf("D)Biologa\n");
printf("Opcin: ");
scan("%c",&opcion);
printf("Escogi ");
switch(opcion)
{
case'A':printf("espaol");
break;
case 'B':printf("matemticas");
break;
case 'C': printf("historia");
break;
case 'D': printf("biologia");
break;
default: printf("escogiste unaasignaturainexistente");
}
}

 

 

Bucles

Se denomina bucles a las proposiciones de control que nos permiten ejecutaruna sentencia hasta que se cumpla cierta condicin.

Entre sus ventajas se encuentra, el compactar el codigo es decir, si tenemosque realizar una tarea varias veces, basta con escribirla una sola vez dentrode un bucle, para que pueda efectuarse las veces que deseamos. Tambien ayudaa que el cdigo sea ms entendible.

Los bucles soportados por C son el for, el while y eldo-while.

 

For

El formato general para implementar el bucle for es

for(inicializacin;condicin;incremento) sentencia;

Inicializacin es una sentencia de asignacin que nossirve como variable de control del bucle. Condicin es unaexpresin que nos indica la condicin que debe cumplirse paraquecontinue el bucle e incremento define como va cambiando el valor dela variable de control cada vez que se repite el bucle.

Sentencia es el conjunto de proposiciones que se van a realizar encadauno de los bucles.

Por ejemplo hagamos algoritmo para crear una lnea en la pantallaun sencillo marco con cdigo ASCII.

inicio
desde (x=1;x<80;incrementa x)
inicio
posicionate(x,1);
escribe ("");
posicionate(x,24);
escribe("");
fin
escribe("");
escribe("");
escribe("");
escribe("");
desde(x=1;x<80;incrementa x)
inicio
posicionate(1,x);
escribe("")
posicionate(80,x);
escribe("");
fin
fin

Codificndolo

main()
{
for(x=1;x<80;x++)
{
gotoxy(x,1);
printf("");
gotoxy(x,24);
printf("");
}
gotoxy(1,1);
printf("");
gotoxy(80,1);
Printf("");
gotoxy(1,24);
printf("");
gotoxy(80,24);
printf("");
for(x=0;x<24;x++)
{
gotoxy(1,x);
printf("");
gotoxy(80,x);
printf("");
}
}

EL programa anterior, dibuja un marco en la pantalla con cdigo ASCII.

x=1 nos indica que vamos a empezar a contar desde el 1. Despusse verifica que x sea menor que 80 o 24(en el segundo for). Si es as,se ejecutan las sentencias que se encuentran dentro del bucle para finalmente,incrementar el valor de x y volver a evaluar. El ciclo se termina cuandox es igual o mayor a 80 o que 24 (en el segundo for).

Una de las principales caractersticas del for es que lacondicin (para determinar si se ejecutan o no las sentencias quecontiene) se evala al principio del ciclo. Por esto, el cdigodentro del bucle no ser ejecutado si la condicin esfalse al comienzo.

Debido a la flexibilidad del lenguaje C, se puede utilizar el operador comapara permitir dos o ms variables de control Por ejemplo:

for (i=0,j=4;i*j<4;i++,j--)
{
.
.
.
}

En este caso, estamos inicializando a i y a j dentro del bucle.Al mismo tiempo, en la seccin de incremento, aumentamos a iy disminuimos el valor de j. Esto es completamente vlido.

Bucle Infinito

Es aquel que no tiene fin. En este tipo de ciclos, no necesitamos especificarninguna de las tres proposiciones que lo constituyen

for (;;) printf("Bucle infinito");

o basta dejar la de la condicin vaca como se muestraacontinuacin:

for(x=0;;x++) printf("Bucle infinito");

La forma de romper un bucle infinito es mediante la sentenciabreak.Cuando se encuentra esta proposicin dentro de un ciclo,trunca el bucle y se procede a ejecutar el cdigo que se encuentrainmediatamente despus de l.

main()
}
for(;;)
{
printf("Nmero: ");
scanf("%d",&x);
if(x==9) break;
}
printf("Digitaste %d nmeros antes de romperelciclo",x);
}

El bucle anterior se repite hasta que se teclea el nmero 9 y depusse imprime en pantalla la cantidad de veces que puls un nmeroantes de romper el ciclo.

Bucle sin cuerpo

Segn la sintaxis de C, existen las sentencias vacas por tanto,podemos tener un bucle for o cualquier otro, que no tenga cuerpo.Este tipo de ciclos se usan regularmente para retardar la ejecucindel programa. Veamos como crear uno:

main()
{
int num;
printf("Piensa un nmero del 1 al 10.");
lapso();
printf("Que nmero pensaste: ");
scanf("%d",&num);
.
.
.
}

lapso()
{
int tiempo
int valor=100;
for (tiempo=0;tiempo<valor;tiempo++);
}
En el programa anterior, se d cierto tiempo para que pienses unnmero y luego lo escribas.

 

 

While

 

 

 

 

Este es otro de los bucles disponibles en C. Su forma general es

while(condicin)sentencia;

donde sentencia es una sentencia vaca, una nica o un bloquede sentencias. El bucle itera mientras se cumpla la condicin (puedeser cualquier expresin). Cuando ya no se cumple, el control del programapasa a la lnea siguiente al cdigo del bucle.

Ejemplo:

Hagamos un programa que nos devuelva el valor absoluto de un nmeroy que se repita todas las veces que deseemos. Necesitaremos una variabletipo float (para que tenga mayor rango)que reciba el nmero.

Tambin ocuparemos una variable que nos sirva para determinar si continuao no en el programa. Si la variable es igual a 'S' continuar y sies igual a 'N', terminar. Slo aceptar esos dos valores.

Elabora el algoritmo y compralo con el programa que se encuentraacontinuacin:

#include <ctype.h>
#include<conio.h>
#include<stdio.h>
#include <math.h>

main()
{
char respuesta;
clrscr();
respuesta='\0';
while (respuesta!='N')
{
float x;
printf("Dame un nmero: ");
scanf("%f",&x);
x=fabs(x);
printf("Su valor absoluto es: %f\n",x);
printf("Presione 'N' para salir...\n");
respuesta=toupper(getch());
}
}

Inicializamos la variable respuesta con caracter nulo ('\0')

para asegurarnos de que al menos se entre una vez al ciclo.

Al final del bucle, preguntamos si quiere continuar o no. Congetch()leemos el caracter. toupper() nos sirve para convertirel caracter recibido por getch() a maysculas; de esta maneravalidamosque se acepte 'S' o 'N' minsculas.

En caso de que la respuesta sea afirmativa, se repite el ciclo.

Como en el caso del for, podemos utilizar bucles while sincuerpo. Por ejemplo:

while((letra=getch())!='M');

En letra se guardar el valor que se lea con getch() y estoserepetir hasta que letra sea igual a 'M'.

 

 

 

DO-WHILE

La caracterstica principal del Do-while es que analizalacondicin del bucle al final del ciclo, lo que garantiza que elbloque de sentencias se ejecute al menos una vez. Su forma general es

do{
sentencia
}while(condicin);

Las llaves no son necesarias cuando sentencia corresponde a unasolaproposicin, pero se recomienda que utilizarlas para mejorarlalegibilidad del programa.

Como ejemplo, modifiquemos el programa anterior utilizando do-while:


#include <ctype.h>
#include<conio.h>
#include<stdio.h>
#include <math.h>

main()
{
char respuesta;
clrscr();
do{
float x;
printf("Dame un nmero: ");
scanf("%f",&x);
x=fabs(x);
printf("Su valor absoluto es: %f\n",x);
printf("Continuar...\n");
respuesta=toupper(getch());
}while(respuesta!='N');
}

En esta ocasin, no necesitamos inicializar respuesta ya que por las caractersticas de do-while de todos modos se ejecutarala primera vez. La nica diferencia es que ahora la condicinse comprueba al final del bucle y no al principio como lo hace for ywhile.

 

 

Break

La sentencia break tiene dos usos:

1)Para determinar el final de un case en una sentenciaswitch analizado en este mismo captulo, y

2)Terminar la ejecucin de un bucle y saltar a laevaluacin condicional del ciclo.

Veamos en que consiste el segundo uso:

Cuando utilizamos una sentencia break dentro de un bucle, stese termina inmediatamente y el control del programa pasa a la lneaque est inmediatamente despus del ciclo. Por ejemplo:

#include<stdio.h>
main()
{
int x;
for(x=0;;)
{
if(x==250) break;
x++;
}
printf("%d",x);
}

El programa anterior hay un ciclo infinito que es truncado cuando xesigual a 250.

Exit()

Esta sentencia d lugar a la terminacin del programa.

Los programadores la utilizan cuando no se satisface una condicinobligatoria en la ejecucin de un programa ya que detiene suejecucin y fuerza la vuelta al sistema operativo.

La funcin exit() requiere de un argumento entero ya que sesupone que un proceso de alto nivel sera capaz de acceder al valorcontenido en el argumento . Normalmente se utiliza un argumento 0 (exit(0))paraindicar que se trata de una terminacin normal y otros argumentosparaindicar algn tipo de error.

Por ejemplo, imagine un programa al que se tenga que dar una clave de accesopara iniciar. La funcin main() de este programa seracomo esta:

main()
{
char clave[]="clave";
char password[5];
printf("Proporcione clave de acceso: ");
scanf("%s",password);
if(password!=clave)exit(1);
.
.
.
}

Al iniciar el programa, se pide la clave de acceso. En caso de que no seala especificada, el programa termina sin esperar nada ms.

 

 

Continue

Continue es una sentencia de significado opuesto al break.En vez de forzar la terminacin del bucle, continue obliga unanueva iteracin del ciclo y salta cualquier cdigo que existaentre este. Por ejemplo:

do{
int years,tope=12;
gotoxy(5,5);
clreol();
printf("Aos: ");
scanf("%d",&years);
if (years<=0) continue;
if (years<=tope)
printf("Lo siento, este programa no es paranios");
}while(tope!=18);

En el ciclo anterior, utilizamos el continue para verificar que laedad se mayor que cero. En caso de que sta sea cero o menos vuelvea comenzarlo sin llegar a ejecutar las instrucciones del bucle restantes.Al no comparar la condicin que puede terminar el ciclo, stese repite.

No se preocupe, si por ahora no sabe cuando utilizar un for, while odo-while.La experiencia le ir indicando cuando es ms convenienteutilizaruno u otro. Lo ms importante es entender el funcionamientode cadauno.

 

 

AUTOEVALUACION

1. Cul es la forma generaldela sentencia if?

2. Cuando se utiliza switch?

3. Qu es un bucle?

4. Forma general de la sentenciafor.

5. Diferencia entre whileydo-while.

6. Elabora un programa que resuelvaoperacionesaritmticas bsicas mientras el usuario deseejecutarel programa.

7. Disee un programa que le pidealusuario encuentre un nmero que la maquina proporcione.

8. Elabora un programa que presente latablade multiplicar que el usuario dese.

SEGUNDO EXAMEN PARCIAL

1. Qu es una funcin?

2. Especifique la forma general deunafuncin.

3. Para qu se utiliza lasentenciareturn?

4. En qu consisten lasllamadaspor valor?

5. Cmo funcionan las llamadasafunciones por referencia?

6. Defina que es un array.

7. Especifique la forma generaldedeclaracin de un array.

8. Cul es el principal usodelos arrays?

9. Defina lo que es un puntero.

10. Especifique la forma general dedeclaracinde un puntero.

11. Cul es la diferencia entreeloperador & y el operador * cuando se utiliza junto alasvariables de tipo puntero?

12. Mencione los cuatro operadoresaritmticosque pueden utilizarse con los punteros.

13. Qu es un puntero a puntero?

 

 

 

 

Temas:

*Funciones

-Definicin
- Declaracin de funciones
- Return
- Reglas de las funciones
- Argumentos de las funciones
- Llamadas por valor
- Llamadas por referencia
- Creacin de bibliotecas propias

 

F U N C I O N E S

Definicin

En C, una funcin es un bloque de instrucciones que realizan una tarea especfica la cual se maneja como una unidad lgica. Esta unidad, regresa un valor de acuerdo al resultado del proceso que realice.

C es un programa de funciones, todo se hace a partir de ellas. La principales main() la cual, utiliza a otras que se encuentran definidas en las bibliotecas (todas las instrucciones que maneja C).

Adems de stas, nosotros podemos definir nuestras propias funciones.De esta manera dividimos tareas grandes de computacin en varias ms pequeas lo que nos d como resultado que el programa sea ms fcil de entender y se pueda manejar ms eficientemente.

Adems, al subdividir los programas en funciones, stas pueden ser re-utilizadas en otros programas.

En esta unidad estudiaremos como crear nuestras propias funciones.

 

 

La forma general para definir una funcin es:

especificador_tipo nombre_de_la_funcin (declaracin deparmetros)
{
cuerpo de la funcin
}

El especificador_de_tipo de la funcin define la clase de valor que regresa la funcin. El valor puede ser cualquier que maneje el C. En caso de que no se especfique ninguno, la funcin devuelve por omisin un entero.

Nombre_de_la_funcin es la palabra con la que vamos a identificara la funcin.

La declaracin de parmetros es un conjunto de variables separados por comas y con un tipo de dato especfico que reciben los valores de los argumentos cuando se llama a la funcin.

Una funcin puede carecer de parmetros en cuyo caso los parntesis estarn vacos tanto al declarar como almandar llamar a la funcin.

Por ejemplo:

float multiplicacin (float multiplicando,float multiplicador)
{
multiplicando=multiplicando*multiplicador;
return(multiplicando);
}

La funcin est declarada de tipo float porque es la clase de valor que va a regresar.

Multiplicando y multiplicador es el nombre que le vamos a darlos valores que recibir la funcin para trabajar con ellos los cuales, son declarados dentro de los parntesis.

Por ltimo se define el cuerpo de la funcin (delimitndose con llaves) .

En este caso, asignamos el resultado de la multiplicacin a multiplicando para ahorrar memoria (se declara una varible menos) y regresamos el valor obtenido por medio de la sentencia return.

 

 

Return

Esta sentencia se utiliza para devolver valores generados en una funcinal programa principal. Tambin sirven para salir de la funcindon de se encuentra y continuar con la instruccin posterior a la funcin que lo llam.

En la funcin anterior return(multiplicando); devuelve el contenido de multiplicando al programa principal. En caso de que slo se quiera salir de la funcin, no es necesario indicarle parmetros,basta con return();.

Todas la funciones, excepto las de tipo void( Es el tipo de datos que no tiene valor) generan valores que se transmiten al programa principal. Estos valores son de de tipo int (entero) por omisin, pero puede regresarlos de todo tipo si as se declara; por ejemplo, en la funcin de multiplicacin, la funcin regresa un valor de tipo float (flotante).

Cuando queremos utilizar el valor que devuelve la funcin en el programa principal, es necesario asignar la funcin a una variable del tipo de dato que va a regresar la funcin.

 

 

Reglas de las funciones

- No podemos declarar funciones dentro de funciones ya que todas estn al mismo nivel,.

- Tampoco podemos ingresar al cdigo de una funcin si estamos fuera de la misma.

- Las variables que se declaran en las funciones, son locales y no pueden ser utilizadas fuera de esa funcin.

Adems, si utilizamos una funcin dos o ms veces, lasegunda vez las variables locales no contendrn el valor que obtuvieron al ejecutar la primera vez la funcin y as sucesivamente ya que se crean al entrar a la funcin y se destruyen al salir.

 

 

Argumentos de las funciones:...

Es muy comn que las funciones utilizen argumentos es decir, que necesiten de algn valor o valores externos dentro de su propio cdigo. Estos valores se pasan mediante variables llamadas parmetros formales de la funcin las cuales se declaran dentro de los parntesis que suceden a el nombre de la funcin o bien, despus de estos y antes de la llave de comienzo.

Asegrese de que de que los argumentos utilizados al declarar la funcin sean del mismo tipo que los usados para llamar la funcin. Si hay algn error en los tipos, el compilador no mandar mensajede error pero se obtendrn resultados inesperados.

Puedes utilizar a las variables que son parmetros formales como cualquier otra variable local es decir, se les puede hacer asignaciones o usarlos en cualquier expresin permitida por C.

Existen dos formas de pasar argumentos a una funcin:
La primera es por medio de las llamadas por valor:

 

 

Llamadas por valor

consiste en slo pasar el contenido de la variable utilizada como argumento a la subrutina. De esta manera, los cambios efectuados en los parmetros de la funcin no afectan a las variables (globales) que se utilizaron para hacer la llamada a la funcin.

 

 

Llamadas por referencia

La segunda forma es mediante las llamadas por referencia en la cual, lo que se pasa a la subrutina es la direccin de la variable que se est mandando como parmetro. De esta manera, los cambios que sufra el parmetro dentro de la subrutina, se efectuarn tambin en la variable que se introdujo como parmetro.

La forma de pasar una llamada por referencia es pasando un puntero al argumento,de esta manera, lo que pasar es la direccin de la variable en vez de su contenido. Para esto, los parmetros se declaran de tipo puntero.

/*Ejemplo de funciones por valor y por referencia*/
/*Calcula dos veces el procentaje de gastos, la primera vez
utilizando una funcin por valor y la segunda por referencia*/

#include<stdio.h>

porcentaje_xvalor(float ingreso, float egreso)
{
egreso=((egreso/ingreso)*100)
printf("Usted gasta el %.2f por ciento de lo quegana",egreso);
}

porcentaje_xref(float *ingreso,float *egreso)
{
*egreso=(((*egreso)/(*ingreso))*100);
printf("Usted gasta el %.2f por ciento de lo quegana",egreso);
}

main()
{
float entrada,salida;
clrscr();
printf("Entradas: ");
scanf("%f",&entrada);
printf("Salidad: ");
scanf("%f",&salida);
porcentaje_xvalor(entrada,salida); /*Llamada a la funcinporcentaje utilizando paso de parmetros por valor*/
printf("\n\n");
porcentaje_xref(&entrada,&salida); /*Utilizacinde la funcin porcentaje con paso de parmetrospor referencia*/
getch();
}

En el programa anterior, realizamos la misma tarea dos veces pero de diferente manera.

En porcentaje_xvalor(entrada,salida) mandamos el contenido de entraday salida a la funcin donde son recibidos por ingreso y egreso respectivamente. De esta manera, el clculo del porcentaje se hace internamente es decir, utilizando las variables definidas en la funcin. Tanto entrada como salida, no se modifican.

La funcin porcentaje_xref(&entrada,&salida) tambien obtiene el mismo resultado, pero en este caso, en vez de pasar los valores existentes en las variables, pasamos su direccin; por lo que trabajamos directamente con ellas dentro de la funcin an cuando las llamemos de diferente manera( ingresos y egresos). En esta ocasin, las variables globales si se modifican.

Para comprobar esto, despus de compilar el programa (que no muestre errores), en vez de ejecutarlo con Ctrl-F9, dale F8, esto te permitir correr el programa paso a paso.

Para ver los valores que van tomando las variables, teclea Ctrl-F7 y escribe el nombre de la variable que desees observar tal cual aparezca en el programa luego pulsa <ENTER>. Aparecer una ventana en la parte inferior de tu programa en la cual se indicar el estado o valor de la o las variables que hayas especificado.

Observars que despus de haber ejecutado, la funcin porcentaje_xvalor, el contenido de las variables no cambiar mientras que despus de haber ejecutado porcentaje_xref, salida se ver modificada porque le asignamos un valor dentro de la funcin.

En realidad, tanto las funciones que utilizan paso de parmetros por valor como las que utilizan el paso por referencia, pueden hacer las mismas cosas. Lo nico que cambia es la manera en que trabajan en la memoria de la computadora.

Lo que tenemos que tener en cuenta para saber cul utilizar, es si queremos que las variables que utilizaremos en el parmetro de la funcin se modifiquen o no.

No olvides que las variables que pases por lo parmetros sean del mismo tipo de las que estan declaradas dentro de los parntesis dela funcin.

 

 

Creacin de Bibliotecas propias.

Si quieres utilizar funciones definidas por ti mismo en varios programas, puedes hacerlo, creando tu propia biblioteca. Esto se logra de la siguiente manera:

-Define tus funciones en un nuevo archivo. Manda llamarlas librerias estndar de C, que necesites.

-No utilizes la funcin main().

-Compilalo

-Cuando la compilacin sea exitosa, se generarun archivo con el mismo nombre que el tuyo pero con la terminacin Obj. Este archivo deber ser incluido preferentemente en el mismo directorio que se encuentre la biblioteca . En caso contrario, se debe dar la ruta en la seccin Directories del menOptions.

-En el programa donde quieras utilizar esta unidad slo tendras que mandarla llamar al principio del programa de la siguiente manera:

#include "nombre_archivo"

Despus de esto, puedes llamar a las funciones que tengas definidas en esta libreria normalmente sin tener que declararlas al principio del programa.

Adems de funciones, en la biblioteca tambien puedes definir constantes, macros, etc.

Intenta pasar a una biblioteca las funciones que hemos visto en este mdulo para que puedas utilizarlas posteriormente.

Programa ejemplo:

En el programa que se muestra a continuacin, se convierte un nmero en hexadecimal a su representacin decimal. Es una demostracin muy sencilla de lo que es una funcin ya que en este manual existen otros programas que contienen funciones en los cuales podras reafirmar este conocimiento.

Cmpilalo y ejectalo para que puedas comprenderlo mejor.

/*Programa que convierte un nmero en hexadecimal a decimal*/
#include<math.h>
#include<string.h>
#include<conio.h>

void main()
{
char hexa[10];
float numero;

clrscr();
printf("Numero hexadecimal (maysculas): ");
gets(hexa);
numero=hex_dec(hexa);
printf("\nEn decimal es : %.0f",numero);
}

float hex_dec(char cadena[])
{
int i,j;
char letra;
float decimal=0;
float temp=0;

i=strlen(cadena);
for (j=0;i>0;j++,i--)
{
letra=cadena[i-1];
switch(letra){
case 1:temp=(1*pow(16,j));
break;
case 2:temp=(2*pow(16,j));
break;
case 3:temp=(3*pow(16,j));
break;
case 4:temp=(4*pow(16,j));
break;
case 5:temp=(5*pow(16,j));
break;
case 6:temp=(6*pow(16,j));
break;
case 7:temp=(7*pow(16,j));
break;
case 8:temp=(8*pow(16,j));
break;
case 9:temp=(9*pow(16,j));
break;
case 0:temp=(0*pow(16,j));
break;
case 'A':temp=(10*pow(16,j));
break;
case 'B':temp=(11*pow(16,j));
break;
case 'C':temp=(12*pow(16,j));
break;
case 'D':temp=(13*pow(16,j));
break;
case 'E':temp=(14*pow(16,j));
break;
case 'F':temp=(15*pow(16,j));
break;
}
decimal+=temp;
}
return(decimal);
}

 

AUTOEVALUACION

1.Qu es una funcin?

2.Escriba la forma general de declarar una funcin.

3.En que consisten las llamadas por referencia?

4.Elabora una programa que realice la conversin de decimal a binario utilizando funciones

5.Elabora una biblioteca con las funciones del programa anterior.

6. Haz un programa que,utilizando funciones, dibuje 5 ventanas consecutivas, una dentro de la otra.

7. Implemente una funcin que encuentre un elemento determinado en una array.

 

 

 

 

 

 

Temas:

*arreglos
- Definicin
- Arreglos unidimensionales
- Forma de acceso a un elemento especfico del arreglo
- Paso de arregloss a funciones
- Utilizacin de arrays unidimensionales como cadenas
- Arreglos bidimensionales
- Arreglos multidimensionales
- Inicializacin de arreglos contamao
- Inicializacin de arregloss sintamao

 

Arreglos

Definicin

Un arreglo es un conjunto de elementos del mismo tipo agrupados en una sola variable. Tambin se les conoce con el nombre de arreglos.

Para ingresar a un elemento en particular, utilizamos un ndice. Existen arreglos unidimensionales, bidimensionales y tridimensionales.

Su uso ms comn es en la implementacin de cadenas de caracteres. Recuerda que en C no existen variables de tipo cadena por lo cual se utiliza un arreglo de caracteres.

Fsicamente, un arreglo es un conjunto de localidades de memoria contiguas donde la direccin ms baja corresponde al primer elemento y la direccin ms alta al ltimo.

En un arreglo de n elementos, stos ocuparan desde la casilla 0 hasta la n-1.

Por si mismo, el nombre del arreglo apunta a la direccin del primer elemento del arreglo.

 

 

 

arreglos Unidimensionales

La forma general para definir un arreglo de slo una dimensin es la siguiente:

tipo_de_dato nombre_variable[tamao]

tipo_de_dato se refiere al tipo de dato de cada elemento del arreglo y tamao es la cantidad de elementos agrupados en la misma variable.

 

 

Forma de acceso a un elemento especfico del arreglo

Para accesar a uno de los elementos del arreglo en particular, basta con invocar el nombre del arreglo y especificar entre corchetes el nmero de casilla que ocupa el elemento en el arreglo.

Por ejemplo, si queremos accesar al cuarto elemento de un arreglo de 10, se invocara de la siguiente manera:

nombre_variable[3]

Recuerde que el arreglo almacena desde la casilla 0. Por tanto, en un arreglo de 10 casillas, stas estan numeradas del 0 al 9.

 

 

Paso de arreglos a funciones

La forma de pasar un arreglo a una funcin consiste en llamar a la funcin y en el argumento, especificar el nombre del arreglo sin ninguna indexacin. Esto hace que se pase a la funcin la direccin del primer elemento del arreglo ya que en C no es posible pasar el arreglo completo como argumento. Por ejemplo:

main()
int conjunto[20];
clrscr();
.
.
.
funcion(conjunto);
.

.

.

}

Aqu, al pasar el arreglo conjunto a funcin, estamos pasando la direccin en memoria del primer elemento de conjunto. En caso de que dentro de la funcin tuvisemos que accesar a algn elemento del arreglo, se pasa de la misma manera slo que dentro de la funcin utilizaremos los corchetes para accesar al elemento deseado.

Hay tres formas de declarar un arreglo como parmetro formal: como un arreglo delimitado, como un arreglo no delimitado y como un puntero. Por ejemplo:

#include<stdio.h>
funcion1(int conjunto[20]) /*Delimitando el array*/
{
.
.
.
}

o como

funcion1(int conjunto[]) /*arreglo no delimitado*/
{
.
.
.
}

o se puede declara como

funcion1(int *conjunto) /*como un puntero*/
{
.
.
.
}

El resultado de los tres mtodos de declaracin es idntico.

 

 

Utilizacin de arreglos unidimensionales como cadenas

El uso ms comn de los arreglos unidimensionales es laimplementacin de una cadena (conjunto) de caracteres porque recuerde que en C no existe este tipo de datos. Por tanto, definimos una cadena en C como un arreglo de caracteres que al final tiene un caracter nulo ('\0'). Por esta razn es necesario que al declarar los arreglos estos sean de un caracter ms que la cadena ms larga que pueda contener.

Por ejemplo si deseamos crear un cadena que contenga 5 caracteres la declaracin debe hacerse como sigue:

char cadena[6];

Esto es con el fin de dejar el ltimo espacio para el caracter nulo.

No es necesario aadir explcitamente el caracter nulo de las constantes de cadena porque el compilador de C lo hace automticamente.

Algunas de las principales funciones que soporta C para el manejo de cadenas de caracteres son las siguientes:

Nombre Definicin

strcpy(s1,s2) Copia s2 en s1

strcat(s1,s2) Concatena s2 al final de s1

strlen(s1) Devuelve la longitud de s1

strcmp(s1,s2) Compara la cantidad de elementos de s1 y s2
Sison iguales, devuelve 0; menor que cero si s1 es
menorque s2 y mayor que 0 si s1>s2.

Para una referencia ms amplia sobre estas y otras rdenes, busca estas funciones en el apndice B.

 

 

arreglos bidimensionales

Un arreglo bidimensional es un arreglo de arreglos unidimensionales. Constituyen la forma ms simple de los arreglos multidimensionales.

Su forma general de declaracin es

tipo_dato variable[primer ndice][segundo ndice];

El primer ndice corresponde a la filas y el segundo a las columnas.

Cuando se utiliza un arreglo bidimensional como argumento de una funcin, realmente se pasa slo la direccin del primer elemento (el[0][0]). Sin embargo, la funcin que recibe un arreglo bidimensional como parmetro tiene que definir al menos la longitud de la segunda dimensin. Esto es necesario debido a que el compilador de C necesita "conocer" la longitud de cada fila para ordenar el arreglo correctamente. Por ejemplo, una funcin que recibe un arreglo bidimensional de 5,9 se declara as:

funcion(int matriz[][9])
{
.
.
.
}

No es necesario especificar la primera dimensin pero la segunda s ya que el compilador de C la necesita para saber donde empieza la segunda fila.

Tambin podemos utilizar arreglos bidimensionales para crear arreglos de cadenas. El primer ndice indicara el nmero de cadenas y el segundo la longitud mxima de las cadenas.

char mensajes[5][20];

En la declaracin anterior se especifica que tenemos un arreglo llamado mensajes el cual contiene 5 cadenas de 20 caracteres cada una.

Para acceder a una cadena en especial, slo especificamos el nmero de cadena (de 0 al nmero de cadenas menos 1). Ejemplo:

printf("%s",mensajes[3]);

Aqu mandamos imprimir la cadena nmero 3 de la variable mensajes. Esto sera equivalente a

printf("%s",mensajes[3][0]);

aunque es ms comn utilizar la primera forma.

 

 

arreglos multidimensionales

En C, podemos crear arreglos de dos o ms dimensiones el lmite de dimensiones, viene dado por el compilador. Su forma general de declaracin es

tipo_dato variable [long ind 1][longindice 2]...[long indice N]

donde tipo_dato es el tipo de dato de los elementos del arreglo y longind 1, long ind 2...long ind N es la longitud de cada dimensin del arreglo. Este tipo de arreglos no se utiliza muy frecuentemente debido a el gran espacio en memoria que ocupan. Otra desventaja es que el acceso a un arreglo multidimensional dura ms tiempo que el requerido por uno del tipo unidimensional.

Cuando se pasan arreglos multidimensionales a funciones, se tiene que declarar todo excepto la primera dimensin. Por ejemplo:

#include<stdio.h>

funcion1(int multiarreglo[][3][[4][5])
{
.
.
.
}

main()
{
int m[2][3][4][5];

funcion(m[][3][4][5]);
.
.
.
}

Claro que si se desea, se puede especificar tambin la longitud dela primera dimensin.

 

 

Inicializacin de arreglos con tamao

En C, podemos inicializar (dar un valor determinado a la variable antes de usarla) arreglos globales y arreglos estticos locales en el momento de declararlos. No es posible inicializar arreglos globales no estticos.

Su forma general de inicializacin es

tipo_dato variable [tamao 1][tamao2]...[tamao] = {lista de valores};

Lista de valores es un conjunto de constantes, separadas comas, cuyo tipo es compatible con tipo_dato. La primera constante se coloca en la primera posicin del arreglo, la segunda constante en la segunda posicin, y as sucesivamente. Fjese que un punto y coma sigue a }.

A continuacin tenemos la inicializacin de un arreglo unidimensional:

int digitos[5]={'0','1','2','3','4','5','6','7','8','9'};

En el caso de los arreglos unidimensionales de caracteres podemos inicializarlos abreviadamente con la forma:

char variable [tamao]="cadena";

Por ejemplo:

char nombre[6]="clase";

Lo anterior es lo mismo que si inicializaramos nombre caracter a caracter como en el ejemplo de dgitos.

char nombre[6]={'c','l','a','s','e'.'\0'};

Importante: Se debe estar seguro de que el arreglo que se declara es suficientemente largo para incluirlo. Esto es por lo que nombre tiene16 caracteres de longitud en vez de 15 que es la cantidad de letras ya quecuando se utiliza una cadena constante, el compilador proporciona laterminacin nula automticamente.

 

 

Inicializacin de arreglos sin tamao

En los arreglos con tamao, tenemos que calcular que la longitud del arreglo fuera lo suficientemente grande para que fueran almacenados todos los elementos que deseabamos.Si tuvieramos que inicializar varios arreglos de cadena seria fastidioso contar cuantos caracteres ocupa cada arreglo.

Es posible que C calcule automticamente la longitud del arreglo utilizando la inicializacin de arreglos indeterminados la cual permite que el compilador de C cree automticamente un arreglosuficientemente grande para mantener todos los inicializadores presentes si el tamao del arreglo no est especificado.

El uso de la inicializacin de los arreglos indeterminados permite al programador cambiar el contenido de cualquiera de las cadenas sin tener quere considerar el tamao del arreglo. Tambin puede utilizarse tambin en arreglos multidimensionales (2 o ms). En este caso, se debe especificar todo, sin considerar la dimensin que se encuentra ms a la izquierda para permitir al compilador de C indexar el arreglo adecuadamente. El mtodo es similar a la especificacin de parmetros de un arreglo. De este modo se pueden construir tablas de longitudes variables, y el compilador asignar automticamente el espacio suficientepara ellas.

La ventaja de este tipo de declaracin sobre la versin del tamao determinado es que la tabla puede alargarse o acortarse sin cambiar las dimensiones del arreglo.

Programa ejemplo

El siguiente programa, contiene una funcin que valida que nicamente se lean nmeros enteros y otra que slo reciba letras. El fin es que se comprendan bien los conocimientos bsicos sobre arreglos y adems puede utilizar estos procedimientos en sus programas posteriores.

#include <stdio.h>
#include<string.h>

void main()
{
int cifra;
char word[20];
clrscr();

switch(menu())
{
case 1: cifra=numeros();
printf("\n%d",cifra);
break;
case 2: captura(word);
printf("\n%s",word);
break;
default: exit(0);
}

getch();
}

captura(char palabra[])
{
char *letra;
char alfabeto[]="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
int i;

palabra[0]='\0';
clrscr();

do
{
*letra=getch();
for (i=0;i<=53;i++)
{
if (alfabeto[i]==*letra)
{
printf("%c",*letra);
strcat(palabra,letra);
break;
}
}
}while((*letra!=13) && (strlen(palabra)<20));
}

numeros()
{
char cadena[10];
char car='\0';
int i=0;
int cantidad;

do
{
car=getch();
switch(car)
{
case'0': cadena[i]=car;
printf("%c",car);
break;
case'1': cadena[i]=car;
printf("%c",car);
break;
case'2': cadena[i]=car;
printf("%c",car);
break;
case'3': cadena[i]=car;
printf("%c",car);
break;
case'4': cadena[i]=car;
printf("%c",car);
break;
case'5': cadena[i]=car;
printf("%c",car);
break;
case'6': cadena[i]=car;
printf("%c",car);
break;
case'7': cadena[i]=car;
printf("%c",car);
break;
case'8': cadena[i]=car;
printf("%c",car);
break;
case'9': cadena[i]=car;
printf("%c",car);
break;
default: i--;
break;
}
i++;
}while((car!=13) && (i<5));
cantidad=atoi(cadena);
return(cantidad);
}
menu()

{
int numero;
printf("Escoge una opcin:\n");
printf("1.Escribir slo nmeros\n");
printf("2.Escribir nicamenteletras\n");
printf("Opcin: ");
scanf(" %d",&numero);
return(numero);
}



 

AUTOEVALUACION

1.Qu es un arreglo?

2.Cul es la forma de declararacin de un arreglo?

3.Elabore una funcin que muestre el nombre del usuario al revs.

4. D un ejemplo de inicializacin de arreglos sintamao.

5. Elabora un programa que guarde los datos de una agenda con capacidad para 15 direcciones diferentes.

6. Implementa un programa que sume dos matrices.

 

 

 

 

 

 

 

 

Temas: *Punteros

- Definicin de punteros
- Declaracin de punteros
- Operadores de los punteros
- Aritmtica de punteros
- Punteros y arrays
- Arrays de punteros
- Punteros a punteros
- Inicializacin de punteros
- Problemas con punteros

 

P U N T E R O S

Definicin de punteros
Un puntero es una zona de la memoria que contiene la direccin de otra zona de memoria.

En C, es muy importante el manejo de los punteros para una fructfera programacin. Sus principales ventajas son:

-Los punteros proporcionan los medios por los cuales las funciones pueden modificar sus argumentos de llamada.
-Los punteros se utilizan para soportar las rutinas de asignacin dinmica de C.
-El uso de punteros puede mejorar la eficiencia de ciertas rutinas.

Aunque tambin cuenta con desventajas como

-Son un recurso peligroso ya que los no inicializados o punteros descontrolados pueden provocar el fallo del sistema.
-Es fcil utilizar punteros de forma incorrecta y sto causa fallas muy difciles de encontrar.

Este captulo se reserva para el uso de punteros debido a su importancia dentro de la programacin.

 

 

Declaracion de variables punteros

Los punteros pueden ser de cualquier tipo de datos. Esto quiere decir que puede haber punteros que contengan la direccin de variables de cualquier tipo.

La forma general de declarar una variable de este tipo es:

tipo_dato *nombre_variable;

tipo_dato es cualquier tipo de dato que soporte el C y nombre_variable es el nombre de la variable puntero. El * es el indicador de que nos estamos refiriendo a un puntero.

 

 

Los operadores de los punteros

Existen dos operadores monarios (slo necesitan un operando) utilizados para la manipulacin de punteros. Ellos son el "&" y el asterisco "*".

Cuando una variable puntero va precedida del &, nos referimos a su direccin en memoria.

Por ejemplo: Supongamos que la variable dato ocupa la celda de memoria nmero 1000 y contiene una 'A'.

s=&dato;

Despus de la asignacin anterior, s contiene ladireccin de dato que es 1000.

La direccin no tiene nada que ver con el valor de dato. Recuerda que el operador "&" devuelve la direccin de la variable que le sigue.

El otro operador es el "*". Cuando ste precede a una variable puntero indica el valor de la variable puntero. Por ejemplo:

s=*dato;

Aqu ponemos en s el contenido de dato. Por tantos tendr 'A' porque es el valor que se encuentra almacenado en dato.

An cuando "&" representa tambin al AND a nivel de bits y "*" representa el signo de multiplicacin, cuando se utilizan como operadores de puntero tienen mayor prioridad que todos los operadores aritmticos.

Debes asegurarte de que las variables puntero apunten siempre al tipo de dato correcto es decir, que una variable puntero tipo int sea asignada a otra variable puntero del mismo tipo y as respectivamente. De lo contrario, aunque no se produzcan errores al compilarlo (slo advertencias) los resultados no sern los deseados.

 

 

Aritmtica de punteros

Existen cuatro operadores que pueden utilizarse con punteros: + ,- , ++ y -- .

Estas operaciones no se realizan a nivel de celdas sino al nivel de tipode elementos.

Veamos el siguiente ejemplo:

#include<stdio.h>
main()
{
char *letra;
int *entero;

letra++;
entero++;
.
.
.
letra--;
entero=entero+3;
.
.
.
}

En el ejemplo anterior tenemos dos variables puntero: una de tipo caracter y otra de tipo entero. Supongamos que letra se encuentra en la direccin 600 y entero en la 900.

Al incrementar letra (letra++) en un elemento, su direccin ser la 601 mientras que al incrementar entero (entero++), la nueva direccin de entero ser 902.

Lo anterior es porque las operaciones (+, - , ++ --) se realizan a nivel de elementos y no de celdas de memoria. Por lo tanto, al incrementar letra en un elemento letra en la direccin 601 porque el tipo de datos caracter tiene una longitud de un byte sin embargo, como la longitud del tipo de dato int es de 2 bytes, al incrementar entero en un elemento, su nueva direccin es 902.

Algo similar pasa al final del programa cuando decrementamos en uno a letra y a entero le sumamos 9. Sus direcciones quedan en 600(601-1) y 908 (902+(2*3)) respectivamente.

 

 

Punteros y arrays

Existe una estrecha relacin entre los punteros y los arrays ya que un array por si mismo es un puntero a la direccin de su primer elemento(Un nombre de array sin ndice devuelve la direccin de comienzo del array que es el primer elemento). Por tanto, podemos intercambiar informacin entre punteros y arrays del mismo tipo de dato. Veamos un ejemplo:

char cad[30],punt;
char *punt;

punt=cad;

Arriba, tenemos un array de 30 caracteres y un puntero a caracter asi que al asignar cad a punt, almacenamos en punt la direccin del primer elemento de cad.

Para acceder al quinto elemento de cad lo podemos hacer de dos formas:

cad[4]

*(punt+4)

Ambas formas nos dan el mismo resultado.

Recuerda que utilizamos el 4 para acceder al quinto elemento porque los arrays comienzan en el elemento nmero 0.

En el caso del acceso por medio del puntero, lo que hacemos es utilizar la aritmtica de punteros para posicionarnos en la direccin de memoria del elemento deseado: como punt contiene la direccin del elemento 0, al sumarle cuatro quedara en la direccin del elemento 4 (0+4=4).

En conclusin, C proporciona dos mtodos para acceder a los elementos de un array: la aritmtica de punteros y la ordenacin de arrays. La eleccin de cual utilizar es importante ya que la aritmtica de punteros puede ser ms rpida que la indexacin de arrays. En la prctica es frecuente el uso de punteros para acceder a elementos de un array en programas en C debido aque la velocidad es un factor importante en la programacin.

Como ejemplo, veamos dos formas de implementar la funcin puts la cual despliega una cadena en pantalla.

puts(char *s) /*Con punteros */
{
while(*s) putchar(*s++);
}
puts(char *s) /*Con arrays*/
{
int t;
for(t=0;s[t];++t)
putchar(s[t]);
}

Para muchos programadores profesionales de C la primera versin sera ms sencilla de leer y entender. De hecho, as se implementan en C este tipo de rutinas.

Si v a acceder al array en un orden ascendente o descendente estricto, sera ms rpido hacerlo mediante punteros. Pero si el acceso va a ser aleatorio, es mejor utilizar la indexacin porque como el acceso es directo, es ms rpida y ms fcil de entender.

 

 

Arrays de punteros

Tambin podemos agrupar punteros en arrays. Su formato de declaracin sera el siguiente:

tipo_dato *nombre_variable[tamao];

Por ejemplo:

int *[20];

declara un array de 20 elementos de tipo puntero a entero.

Este tipo de arrays poseen las mismas propiedades que los arrays comunes(en cuanto a la forma de acceder a sus elementos) y se manejan de la misma forma que las variables puntero simples( en cuanto a direccin y contenido). Por ejemplo, para asignar la direccin de una variable entera llamada elem al octavo elemento del array de punteros (quees una direccin), se indica

x[7]=&elem;

Recuerde que &elem significa "la direccin de elem".
Para encontrar el valor de elem desde el array se escribe

*x[7]

Para pasar un array de punteros a una funcin podemos llamarla conel nombre del array sin ndices. Por ejemplo, la siguiente funcin utiliza un array de este tipo como parmetro:

despliega_elem(int *a[])
{
int i;

for(i=0;i10;i++)
printf("%d",*a[i]);
}

despliega_elem imprime en pantalla el contenido de los elementos dea

Este tipo de arreglos se utiliza principalmentre para mantener punteros amensajes de error. Por ejemplo, podemos crear una funcin que muestre un mensaje de error determinado y su nmero correspondiente.

error(int numero)
{
static char*err[]={
"Errorde punto flotante\n",
"Errorde sintaxis\n",
"Nmero demasiado pequeo\n",
"Nmerodemasiado grande\n"
};

printf("Error %d: %s" nmero,err[numero]);
}

La funcin anterior recibe un entero como parmetro. Este indica el nmero de elemento del array que contiene el apuntador al primer elemento de la cadena de caracteres que corresponde. Tanto el nmero de error (nmero de elemento) como su mensaje de error correspondiente se presentan en pantalla.

 

 

Punteros a punteros

Un puntero a puntero es una forma de indireccin mltiple, o un encadenamiento de punteros.Consiste en lo siguiente

Sabemos que un puntero es una variable que contiene la direccin de un valor determinado.

Un puntero a puntero es una variable que contiene la direccin del lugar que contiene la direccin de una variable.

Una variable que es un puntero a puntero tiene que declararse como tal. Esto se hace colocando un * adicional del lado izquierdo del nombre dela variable. Por ejemplo:

double ** tolerancia;

Esta declaracin le indica al compilador que la variable tolerancia es un puntero a un puntero que contiene la direccin de una variable de tipo double.

Veamos un ejemplo:

main()
{
int n,*p,**q;

n=5;
p=&n;
q=&p;

printf("%d",**q) /*imprimireel valor de x*/
}

Aqu, n est declarado como un entero, p comoun puntero a entero y q como un puntero a puntero a entero. Las asignaciones de la funcin nos dn una idea de como se relacionan las tres variables entre si: El contenido de la variable n es 5; asu vez, asignamos al puntero p la direccin de la variable que contiene ese nmero. Finalmente, como q es un puntero a un puntero, slo puede contener direcciones por tanto, guarda la direccin de la variable donde se encuentra el valor de la direccin donde se encuentra el 5.

Mediante la llamada a printf() comprobamos lo dicho, ya que despliegael contenido de nmero a pesar de que es llamado desde una variable puntero a puntero.

 

 

Inicializacin de punteros

Despus de declarar una variable pero antes de asignarle un valor, contiene un valor desconocido. Si se intenta utilizar el puntero antes dedarle un valor, probablemente fallar no solo el programa, sino tambin el sistema operativo de la computadora.

Es por esto que las variables puntero tambin deben ser inicializadas.

Inicializar una variable es darle un valor especfico; sto se realiza indirectamente, al asignar la direccin de una variablea un puntero, o directamente, al declarar un puntero nulo es decir, que no apunte a direccin alguna. Veamos el siguiente ejemplo:

main()
{
char car;
char*punt1,*punt2;

punt1=&car;
punt2=NULL;
.
.
.
}

Tenemos una variable llamada car que es de tipo caracter, adems punt1 y punt2 que son punteros a caracter.

Al asignar la direccin de car a punt1 (punt1=&car) estamos inicializando indirectamente a punt1 porque su nuevo contenido depende de la direccin que car ocupe en memoria mientras que punt2 esta inicializado directamente ya que NULL es un valor constante que le dimos. En este caso, NULL indica que ese puntero no apunta a ninguna direccin (es como inicializar una variable entera en 0).

Se puede utilizar el puntero nulo para hacer muchas de las rutinas de punteros ms fciles de codificar y ms eficientes. Por ejemplo,en la siguiente funcin, se leen los elementos de un array hasta que se encuentre un puntero nulo.

lee( char *lista)
{
int n;

n=0;
while (lista!=NULL)
printf("%s",*lista[n]);
}


En este caso, NULL nos sirve para determinar el fin de una lista de elementos.

 

 

Problemas con punteros

Utilizar punteros dentro de la programacin es necesario en la implementacin de algunos programas. Por ahora, no te preocupes sino encuentras el uso prctico de esta herramienta. Conforme vayas dominando tanto la programacin como el lenguaje C, te dars cuenta de las formas en que puedas aplicarlo. Sin embargo, es muy fcil cometer errores al utilizarlos ya que nada d ms problemas que un puntero descontrolado.

Un puntero errneo es difcil de encontrar porque el problema es que cada vez que se realiza una operacin utilizando ese puntero,se est leyendo o escribiendo en algn lugar desconocido dela memoria. Si se le de l, lo peor que puede ocurrir es quese obtenga basura. Sin embargo, si se escribe en l, se est escribiendo en otras partes de cdigo o datos. El hecho de estar perdiendo datos, puede hacerse evidente hasta la ejecucin del programa, y los datos perdidos pueden llegar a ver el fallo en un lugar errneo. Puedehaber poca o ninguna evidencia de que el puntero sea el problema. Este tipo de errores hace que los programadores pierdan el sueo y el tiempo una y otra vez.

Lo mejor para evitar este tipo de errores, es prevenirlos. En esta seccin te mostramos los errores ms frecuentes que se cometen en la utilizacin de punteros:

Puntero no inicializado

Se incurre en este error, cuando se utiliza un puntero antes de haberlo inicializado. Veamos un ejemplo:

main() /*Este programa estincorrecto*/
{
char l, *p;

l='m';
*p=l;
}

El problema en este programa es que se est asignando 'm' a alguna posicin de memoria desconocida ya que el puntero p nunca fu inicializado. Como consecuencia, el programa se para . La solucin para evitar este tipo de contratiempos es asegurar siempre que el puntero est apuntando a alguna direccin vlida antes de usarlo.

Error en la utilizacin de punteros

Este tipo de error se sucita cuando no se utilizan correctamente los operadores* o &.

main() /*Este programa es errneo*/
{
int n, *p;
n=10;
p=n;
printf("%d",*p);
}

La llamada a printf() no imprime el valor de n en la pantalla sino un valor desconocido ya que la asignacin p=x; es incorrecta. Esta sentencia asigna el valor 10 al puntero p, aqu es donde se comete el error ya que un puntero slo puede recibir direcciones. Para corregir el programa se escribir p=&x.>

El utilizar punteros, no quiere decir que vayas a tener problemas con ellos en tu programa. De hecho, cualquier tipo de datos o estructura puede producir errores si no est bien estructurada tanto sintactica como lgicamente. Por tanto, slo hay que tener cuidado, y asegurarse de saber a donde apunta cada puntero antes de usarlo.

Programa ejemplo:

/*Programa que demuestra el procedimiento copia el cual, copia una cadena en otra*/
#include<string.h>
#include<stdio.h>

main()
{
char palabra1[10];
char palabra2[10];
char palabra3[20];

printf("palabra1= ");
scanf("%s",palabra1);
printf("palabra2= ");
scanf("%s",palabra2);
copia(palabra1,palabra2);
printf("palabra1+palabra2= %s",palabra2);
getch();
}
char *copia(char *cad1, char *cad2)
{
char *inicio;
int i;
inicio=cad2;
while(*cad2!='\0')
cad2++;
while(*cad1!='\0')
{
*cad2=*cad1;
cad2++;
cad1++;
}
*cad2='\0';
cad2=inicio;
}

 

AUTOEVALUACION

1.Qu es un puntero?

2.Cul es la forma de declarar una variable de tipo puntero?

3.Que relacin existe entre un array y un puntero?

4.Describa grficamente la definicin de punteros apunteros.

5.Escriba un ejemplo de inicializacin de punteros.

6.Elabore un programa, utilizando la aritmtica de punteros,despliegue en pantalla el contenido de un arreglo bidimensional de nmeros.

7. Elabore un programa que, utilizando la aritmtica de punteros, encuentre un elemento en un arreglo. Establezca las diferencias existentes entre este algoritmo y el que realiz en el mdulo anterior.

SEGUNDO EXAMEN PARCIAL

1. Qu es una funcin?

2. Especifique la forma general de una funcin.

3. Para qu se utiliza la sentencia return?

4. En qu consisten las llamadas por valor?

5. Cmo funcionan las llamadas a funciones por referencia?

6. Defina que es un array.

7. Especifique la forma general de declaracin de un array.

8. Cul es el principal uso de los arrays?

9. Defina lo que es un puntero.

10. Especifique la forma general de declaracin de un puntero.

11. Cul es la diferencia entre el operador& y el operador * cuando se utiliza junto a las variablesde tipo puntero?

12. Mencione los cuatro operadores aritmticos que puedenutilizarse con los punteros.

13. Qu es un puntero a puntero?

 

 

 

 

 

 

 

Comandos de las unidades estandar de C

 

*FUNCIONES CON CADENAS. <apena1.html>

*FUNCIONES MATEMATICAS. <apena2.html>

*FUNCIONES DE HORA Y FECHA Y OTRAS RELACIONADAS CON EL SISTEMA. <apena3.html>

*FUNCIONES DE PANTALLA <apena4.html>

*FUNCIONES DE ENTRADA Y DE SALIDA <apena5.html>

*OTRAS FUNCIONES <apena6.html>

 

 

 

 

 

 

</B

ORDENES DEL ENTORNO DE C

Submen FILE Alt-F

Open...
Abre un archivo de texto.

New
Abre una nueva ventana de edicin.

Save F2
Graba la ventana de edicin activa en el archivo correspondiente alnombre de la ventana.

Save as...
Graba la ventana de edicin activa con un nuevo nombre.

Save all
Graba todas las ventanas de edicin que se encuentran en el entornode C.

Change dir
Cambia el directorio raiz por defecto.

Print
Imprime el archivo que se encuentra en la ventana activa.

Get info...
Presenta una ventana con el estatus de la informacin con que esttrabajando (directorio, archivo, lineas compiladas, etc).

Dos shell
Permite la salida temporal al sistema operativo.

Quit Alt-X
Salida del entorno de C.

Submen EDIT Alt-E

Restore line
Cancela la modificacin hecha a la ltima lnea.

Cut Shift-Del
Elimina el texto seleccionado y lo pasa al clipboard.
Para seleccionar el texto, presiona la tecla shift y selecciona eltexto con las flechas de direccin.

Copy Ctrl-Ins
Copia el texto seleccionado a la ventana clipboard.Para seleccionar el texto,presiona la tecla shift y selecciona el texto con las flechas dedireccin.


Paste
Transfiere el contenido del clipboard a la ventana de edicin activaen el lugar donde se encuentre el cursor.

Copy example
Copia un programa ejemplo seleccionado (de los que se encuentran definidosen la ayuda de C) al clipboard.

Para seleccionar el texto, presiona la tecla shift y selecciona eltexto con las flechas de direccin.

Show Clipboard
Presenta en pantalla una ventana con el contenido del clipboard.

Clear Ctr-del
Borra el texto seleccionado sin ponerlo en el clipboard.

Para seleccionar el texto, presiona la tecla shift y selecciona eltexto con las flechas de direccin.

Submen SEARCH Alt-S

Find...
Encuentra el lugar donde se encuentra una palabra o frase determinada dentrode la ventana activa.

Replace...
Remplaza determinada palabra por otra dentro de la ventana activa.

Search again
Busca una nueva existencia de la ltima palabra especificada enFind.

Go to line number...
Posiciona el cursor en el nmero de linea determinado.

Previous error Alt-F7
Posiciona el cursor en el lugar donde se cometi el error anterior.

Next error Alt-F8
Posiciona el cursor en el siguiente error cometido.

Locate function
Busca la declaracin de alguna funcin despus cuandose est corriendo el programa paso a paso.

Submen RUN Alt-R

Run Ctrl-F9
Ejecuta el programa que se encuentra en la ventana activa (previamentecompilado).

Program reset Ctrl-F2
Interrumpe la ejecucin paso a paso de un programa.

Go to cursor F4
Ejecuta el programa desde el lugar donde se encuentra la barra espaciadora(el cdigo que se est ejecutando paso a paso) hasta lainstruccin donde se encuentra el cursor.

Trace into F7
Ejecuta un programa instruccin por instruccin.

Step over F8
Ejecuta un programa paso a paso.

Arguments...
Define los argumentos que se pasaran al programa desde la lnea decomandos. Esta orden se utiliza para pasar parmetros al programaprincipal desde fuera de l.

Submen COMPILE Alt-C

Compile to OBJ
Compila el programa que se encuentra en la ventana activa y crea elcorrespondiente programa objeto.

Make EXE file
Crea un programa ejecutable del que se encuentra en la ventana activa deleditor. Lo deposita en un nuevo archivo con el mismo nombre, pero con laterminacin .EXE.

Link EXE file
Liga los archivos objeto con las bibliotecas sin hacer el ejecutable delprograma que se encuentra en la ventana activa.

Build all
Recompila todos los archivos relacionados con el programa principal.

Remove messages
Elimina el contenido de la ventana de mensajes.

Submen DEBUG Alt-D

Inspect... Alt-F4
Abre una ventana de inspeccin para examinar valores de los elementosde datos.

Evaluate/modify Ctrl-F4
Evala y/o modifica el contenido de una variable durante laejecucin paso a paso del programa y muestra su contenido.

Call stack... Ctrl-F3
Muestra las funciones que el programa llam para llegar a este punto.

Watches
Agrega, modifica y elimina elementos de la ventana de watches. Esta ordensirve para observar el o los valores que toma cierta variable durante laejecucin paso a paso del programa.

Toggle breakpoint Ctrl-F8
Especifica una instruccin especfica donde interrumpir laejecucin del programa.

Breakpoints
Ventana que contiene la cantidad de puntos de reuptura en el programa dela ventana activa.

Submen PROJECT Alt-P

Open project...
Carga un archivo proyecto y lo presenta en pantalla.

Close project...
Cierra el archivo proyecto de la ventana activa y carga el archivo proyectodefinido por defecto.

Add item
Adiciona un programa utilizado en el programa project.(Recuerda que un programapuede utilizar funciones de otros programas)

Delete item
Elimina un programa utilizado en el programa proyecto

Include files...
Permite ver los archivos que se mandan llamar en el programa project.

Submen OPTIONS Alt-P

Full menus
Configura para usar o no los comandos completos del men.

Compiler
Configura el compilador.

Transfer...
Crea o cambia los programas de transferencia.

Make...
Configura las opciones del comando Make EXE.

Linker...
Configura el ligador.

Debugger...
Configura el depurador.

Directiories
Especifica los directorios donde busca o vacia archivos.

Environment
Configura el ambiente integrado de C.

Save...
Graba todos los cambios hechos en el submen de opciones.

Submen WINDOW Alt-W

Size/move Ctrl-F5
Cambia el tamao o la posicin de la ventana activa.

Zoom F5
Maximiza el tamao de la ventana activa o la devuelve a su tamaoanterior.

Tile
Acomoda en forma de mosaico todas las ventanas existentes en la pantalla.

Cascade
Acomoda todas las ventanas activas de C en forma de cascada.

Next F6
Posiciona el cursor en la siguiente ventana activa.

Close Alt-F3
Cierra la ventana de edicin activa del entorno de C.

Message
Abre la ventana de mensajes.

Output
Abre la ventana de salida.

Watch
Abre una ventana para mirar el comportamiento de las variables (watch).

User screen Alt-F5
Presenta la pantalla donde el usuario presenta la ejecucin de suprograma.

Register
Abre la ventana de registros.

Project
Abre la ventana manejadora de proyectos.

Project notes
Abre la ventana manejadora del cuaderno de notas del proyecto.

List... Alt-0

Ventana que presenta la lista de ventanas abiertas en el entorno de C.

Submen HELP Alt-H

Contents
Muestra la tabla de contenidos de la ayuda.

Index Shift-F1
Ventana que presenta un ndice para acceder a las definiciones y ejemplosde funciones estandar de C.

Topic search Ctrl-F1
Presenta una ventana con ayuda acerca de la palabra donde se encuentra elcursor.

Previous topic Alt-F1
Vuelve a mostrar la ltima ventana de ayuda presentada.

Help on help
Ventana de ayuda acerca de la ayuda.

 

 

 

 

 

 

 

 

 

Men de programas.

        Elaborador de marcos de diferentes tamaos en modo texto

        Programa mini-editor de texto

        Programa de mensaje de Bienvenida

        Programa que calcula el nmero de dias vividos

        Programa que saca el promedio de 3 nmeros

        Programa covertidor de un nmero decimal entero a octal

        Programa que manda un mensaje de advertencia

        Programa que eleva al cuadrado un nmero real

        Programa que encuentra las races de una ecuacin cuadrada,deacuerdo a las frmulas: (-b(b-4ac))/2a

        Seleccion de materias con Ifs anidados

        Seleccion de materias con un Switch

        Programa que utiliza la sentencia For

        Programa que calcula el valor absoluto de un numero utilizando la sentencia WHILE

        Programa que calcula el valor absoluto de un numero utilizando la sentencia DO-WHILE

        Ejemplo de funciones por valor y por referencia

        Programa que convierte un nmero en hexadecimal a decimal

        Programa ejemplo

        Programa que demuestra el procedimiento copia el cual, copia una cadena en otra

 

En esta seccin te presentamos 2 programas para que puedas disfrutarde lo que has aprendido durante este curso y puedas utilizarlos en tus propiosprogramas.

Busca la definicin de las funciones que desconozcas en el Apndice A. <apena.html>

El cdigo que se muestra a continuacin es un conjunto de funciones para elaborar un marco de diferentes tamaos en modo texto (figura(b-1)).En el main() slo se incluye un ejemplo de como utilizarlos.Por eso fu puesto al final.

#include<string.h>
#include<conio.h>

int pos(char cad[],char c)
{ int i;
for (i=0;i<strlen(cad);i++) if (cad[i]==c) break;
if (i==strlen(cad)) return(-1); else return(i);
}
void ins(char cad[],char c,int pos)
{ int i;
char aux[80];
for(i=pos;i<strlen(cad);i++)aux[i-pos]=cad[i];
cad[pos]=c;aux[i-pos]=0;
cad[pos+1]=0;
strcat(cad,aux);
}
void del(char cad[],int pos)
{ int i;
char aux[80];
for(i=pos+1;i<strlen(cad);i++) aux[i-pos]=cad[i];
aux[i-pos]=0;
cad[pos]=0;
strcat(cad,aux);
}

void lee_cadena(char cad[],int num,char dat[])
{ int i,j,x,y;
char car;
i=0;
car=' ';
x=wherex();
y=wherey();
cprintf("%s",cad);
gotoxy(x,y);
car=getch();
if (car!=13)
{ for (i=0;i<strlen(cad);i++) cprintf(" ");
cad[0]=0;
gotoxy(x,y);
}
while (car!=13)
{ if ((pos(dat,car)!=-1) && (i<num))ins(cad,car,i);
if ((car==8) && (i>0))
{
gotoxy(x,y);
for(j=0;j<strlen(cad);j++) cprintf(" ");
cad[strlen(cad)-1]=0;
}
if (car==27)
{
for (j=0;j<strlen(cad); j++)cad[j]=' ';
gotoxy(x,y);
cprintf("%s",cad);
cad[0]=0;
}
i=strlen(cad);
gotoxy(x,y);
cprintf("%s",cad);
car=getch();
}
gotoxy(x,y+1);
}

void copia_pagina(int p1,int p2)
{
movedata(0xB800,(unsigned)p1*4000,0xB800,(unsigned)p2*4000,80*25*2);
}
int inkey(char *car)
{ int a;
a=0;
*car=getch();
if (kbhit())
{ *car=getch();
a=1;};
return(a);
}
char caracter(int x,int y)
{ unsigned segm,despl;
char car;
segm=0xB800;
despl=((y-1)*160)+((x-1)*2);
car=peekb(segm,despl);
return(car);
}

char atributo(int x,int y)
{ unsigned segm,despl;
char car;
segm=0xB800;
despl=((y-1)*160)+((x-1)*2)+1;
car=peekb(segm,despl);
return(car);
}

void pcaracter(int x,int y,char car)
{ unsigned segm,despl;
segm=0xB800;
despl=((y-1)*160)+((x-1)*2);
pokeb(segm,despl,car);
}

void patributo(int x,int y,char car)
{ unsigned segm,despl;
segm=0xB800;
despl=((y-1)*160)+((x-1)*2)+1;
pokeb(segm,despl,car);
}

void str(char c,int n,char cad[])
{ int i;
for (i=0;i<n;i++)
cad[i]=c;
cad[i]=0;
}

void centra(int fila,const char cad[])
{ int i,x;
x=(80-strlen(cad))/2;
for (i=0;i<strlen(cad);i++) pcaracter(i+x,fila,cad[i]);
}
void cent(int fila,int x1,int x2,const char cad[])
{ int i,x,c;
c=x2-x1+1;
x=x1+(c-strlen(cad))/2;
for (i=0;i<strlen(cad);i++) pcaracter(i+x,fila,cad[i]);
}

void color(int plano,int fondo)
{ textcolor(plano); /*color del texto*/
textbackground(fondo); /*color de fondo*/
}

void caja(int x1,int y1,int x2,int y2,char c)
{ char cad[90];
int i;
str(c,x2-x1+1,cad);
for (i=y1;i<=y2;i++)
{
gotoxy(x1,i);
cprintf("%s",cad);
}
}

void marco( int x1,int y1,int x2,int y2,char tipo)
{ char tipe[6];
int i,j;
switch (tipo)
{
case 1:
{ tipe[0]='';
tipe[1]='';
tipe[2]='';
tipe[3]='';
tipe[4]='';
tipe[5]='';
break;}
case 2:
{ tipe[0]='';
tipe[1]='';
tipe[2]='';
tipe[3]='';
tipe[4]='';
tipe[5]='';
break;}
default:
for (i=0;i<6;i++) tipe[i]=tipo;
}
gotoxy(x1,y1);
cprintf("%c",tipe[0]);
for (i=x1+1;i<x2;i++) cprintf("%c",tipe[1]);
cprintf("%c",tipe[2]);
for (j=y1+1;j<y2;j++)
{
gotoxy(x2,j);
cprintf("%c",tipe[3]);
}
gotoxy(x2,y2);
cprintf("%c",tipe[4]);
gotoxy(x1,y2);
cprintf("%c",tipe[5]);
for (i=x1+1;i<x2;i++) cprintf("%c",tipe[1]);
for (j=y1+1;j<y2;j++)
{
gotoxy(x1,j);
cprintf("%c",tipe[3]);
}
}

int filer(int fila,int x1,int x2)
{ int i,j,k,l,n1,n2,sec,opc,x,y;
char a,cpp,cfn,otr,b,dx;
x=wherex();
y=wherey();
i=x1;
opc=0;
dx=1;
do
{
j=i;
while ((32==caracter(i,fila)) && (i<x2))i+=dx;
if (i>=x2)
{
opc=0;
i=x1;
dx=1;
while ((32==caracter(i,fila)) &&(i<x2)) i+=dx;
};
if (i<=x1)
{
opc=0;
i=x1;
dx=1;
while ((32==caracter(i,fila)) &&(i<x2)) i+=dx;
};
n1=i;
a=atributo(i,fila);
cpp=a % 16;
cfn=a / 16;
otr=cpp*16+cfn;
while ((caracter(i,fila)!=32) &&(i<x2))
{ patributo(i,fila,otr);
i+=dx;};
n2=i-dx;
if (n1>n2) {k=n1;n1=n2;n2=k;};
sec=inkey(&b);
for (k=n1;k<=n2;k++) patributo(k,fila,a);
if (sec)
{
switch (b)
{ case 77: {opc++;dx=1;i=n2+1;break;};
case 75: {opc--;dx=-1;i=n1-1;break;};
default : i=j;
}
} else i=j;

}while ((b!=13) && (b!=27));
if (b==27) return(0); else return (opc+1);
}


int scrul (int x1,int x2,int y1,int y2,int paso)
{ char b,c1,c2;
int sec,cont,cuantos,x,y;
cont=0;
cuantos=((int)(y2-y1)/paso)+1;
y=y1;
do
{
for (x=x1;x<=x2;x++)
{ c1=atributo(x,y);
c2=c1 % 16;
c2=(c2*16)+(c1 / 16);
patributo(x,y,c2);
}
sec=inkey(&b);
for (x=x1;x<=x2;x++)
{ c1=atributo(x,y);
c2=c1 % 16;
c2=(c2*16)+(c1 / 16);
patributo(x,y,c2);
}
if (sec)
{
switch (b)
{
case 72: { if((--cont)<0) cont=0;y=y1+cont*paso;break;};
case 80: { cont=((++cont)% cuantos);y=y1+cont*paso;break;}
case 75: {return(-1);}
case 77: {return(-2);}
};
};
} while ((b!=27) && (b!=13));
if (b==13) return(cont+1); else return(0);
}
void ventana(int x1,int y1,int x2,int y2,const char titulo[],int marc,intsmb,int cp,int cf)
{
int a;
char cad[80];
color(0,0);
if (smb) caja(x1+1,y1+1,x2+1,y2+1,'');
color(cp,cf);
str(' ',x2-x1+1,cad);
gotoxy(x1,y1);
cprintf("%s",cad);
a=x1+((x2-x1+1)-strlen(titulo))/2;
gotoxy(a,y1);
cprintf("%s",titulo);
color(0,7);
for (a=y1+1;a<=y2;a++)
{
gotoxy(x1,a);
cprintf("%s",cad);
}
str('',x2-x1+1,cad);
gotoxy(x1,y1+1);
cprintf("%s",cad);
if (marc) marco(x1,y1+2,x2,y2,2);
}

main()
{
clrscr();
ventana ( 1,1,80,24,"Universidad de Guadalajara",0,0,3,1);
ventana(30,5,50,19,"UCT Ingeniera",0,0,3,1);
getch();
delay(600);
}

 



El siguiente programa tiene la finalidad de que emplees los conocimientosadquiridos a lo largo del curso.
El siguiente programa es un mini-editor de texto (figura(b-2)). Hazlo compilary te recomiendo que lo ejecutes paso a paso para que entiendas mejor lalgica del programa. Luego puedes modificarlo a
tu antojo, agregarle o suprimirle funciones a tu criterio.


/* Programa para Modo Texto */
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <string.h>
#include <dos.h>
unsigned modo;
char bksp=8;

void main(void)
{
Inicia();
clrscr();
color(0,3);
caja(1,1,80,24,'');
ventana(1,1,80,3,"Programa Procesador de Texto",0,0,14,4);
color(1,3);
caja(1,21,80,24,' ');
marco(1,21,80,24,1);
Procesa_Pagina();
}
void copia_pagina(int p1,int p2)
{
movedata(0xB800,(unsigned)p1*4000,0xB800,(unsigned)p2*4000,80*25*2);
}
int inkey(char *car)
{ int a;
a=0;
*car=getch();
if (kbhit())
{ *car=getch();
a=1;};
return(a);
}
char caracter(int x,int y)
{ unsigned segm,despl;
char car;
segm=0xB800;
despl=((y-1)*160)+((x-1)*2);
car=peekb(segm,despl);
return(car);
}

char atributo(int x,int y)
{ unsigned segm,despl;
char car;
segm=0xB800;
despl=((y-1)*160)+((x-1)*2)+1;
car=peekb(segm,despl);
return(car);
}

void pcaracter(int x,int y,char car)
{ unsigned segm,despl;
segm=0xB800;
despl=((y-1)*160)+((x-1)*2);
pokeb(segm,despl,car);
}

void patributo(int x,int y,char car)
{ unsigned segm,despl;
segm=0xB800;
despl=((y-1)*160)+((x-1)*2)+1;
pokeb(segm,despl,car);
}
void escribe(int x,int y,const char cad[])
{ int cont;
for (cont=0;cont<strlen(cad); cont++)pcaracter(x+cont,y,cad[cont]);
}
void str(char c,int n,char cad[])
{ int i;
for (i=0;i<n;i++)
cad[i]=c;
cad[i]=0;
}

void centra(int fila,const char cad[])
{ int i,x;
x=(80-strlen(cad))/2;
for (i=0;i<strlen(cad);i++) pcaracter(i+x,fila,cad[i]);
}

void color(int plano,int fondo)
{ textcolor(plano);
textbackground(fondo);
}

void caja(int x1,int y1,int x2,int y2,char c)
{ char cad[90];
int i;
str(c,x2-x1+1,cad);
for (i=y1;i<=y2;i++)
{
gotoxy(x1,i);
cprintf("%s",cad);
}
}

void marco( int x1,int y1,int x2,int y2,char tipo)
{ char tipe[6];
int i,j;
switch (tipo)
{
case 1:
{ tipe[0]='';
tipe[1]='';
tipe[2]='';
tipe[3]='';
tipe[4]='';
tipe[5]='';
break;}
case 2:
{ tipe[0]='';
tipe[1]='';
tipe[2]='';
tipe[3]='';
tipe[4]='';
tipe[5]='';
break;}
default:
for (i=0;i<6;i++) tipe[i]=tipo;
}
gotoxy(x1,y1);
cprintf("%c",tipe[0]);
for (i=x1+1;i<x2;i++) cprintf("%c",tipe[1]);
cprintf("%c",tipe[2]);
for (j=y1+1;j<y2;j++)
{
gotoxy(x2,j);
cprintf("%c",tipe[3]);
}
gotoxy(x2,y2);
cprintf("%c",tipe[4]);
gotoxy(x1,y2);
cprintf("%c",tipe[5]);
for (i=x1+1;i<x2;i++) cprintf("%c",tipe[1]);
for (j=y1+1;j<y2;j++)
{
cprintf("%c",tipe[3]);
}
}

void ventana(int x1,int y1,int x2,int y2,const char titulo[],int marc,intsmb,int cp,int cf)
{
int a;
char cad[90];
color(0,0);
if (smb) caja(x1+1,y1+1,x2+1,y2+1,'');
color(cp,cf);
str(' ',x2-x1+1,cad);
gotoxy(x1,y1);
cprintf("%s",cad);
a=x1+((x2-x1+1)-strlen(titulo))/2;
gotoxy(a,y1);
cprintf("%s",titulo);
color(0,7);
for (a=y1+1;a<=y2;a++)
{
gotoxy(x1,a);
cprintf("%s",cad);
}
str('',x2-x1+1,cad);
gotoxy(x1,y1+1);
cprintf("%s",cad);
if (marc) marco(x1,y1+2,x2,y2,2);
}

void Cadena(int x1,int x2,int fila,char cad[])
{ int xx1,xx2,i;
char car;
xx1=x1;
car=caracter(xx1,fila);
while ((xx1>(x1-1)) && (car<33) )
{ xx1++;
car=caracter(xx1,fila);}
xx2=x2;
car=caracter(xx2,fila);
while ((xx2<(x2+1)) && (car<33) )
{ xx2--;
car=caracter(xx2,fila);}
for (i=0;i<(xx2-xx1+1);i++) cad[i]=caracter(xx1+i,fila);
cad[i]=0;
}


void Inicia(void)
{
modo=LASTMODE;
textmode (modo);
gotoxy(1,1);
color(WHITE,BLACK);
}

void Procesa_Pagina(void)
{ unsigned char Ch,car,Colum[4],Reng[4],Mensaje[15],Aux[70];
int sec,si,otr1,otr2;
color(7,0);
window (4,5,77,19);
clrscr();
si=1;
escribe(11,22,"Columna:1");
escribe(11,23,"Rengln:1");
escribe(30,22,"Alt C - Centrar Alt Del o Ctrl Y- Borrar Linea");
escribe(30,23,"Alt Ins - Insertar Linea Home - Inicio deLinea") ;
do{
sec=inkey(&Ch);
if (sec)
{
switch (Ch)
{
case 45: si=0;break;
case 72:gotoxy(wherex(),wherey()-1); break;
case 75:gotoxy(wherex()-1,wherey()); break;
case 77: gotoxy(wherex()+1,wherey());break;
case 80: gotoxy(wherex(),wherey()+1);break;
case 71: gotoxy(1,wherey());break;
case79:{otr2=77;car=caracter(otr2,wherey()+4);
while ((car>3) && (car < 33))
{ otr2--;
car=caracter(otr2,wherey()+4);
}
gotoxy(otr2+1-3,wherey());break;
}
case 46:{Cadena(4,77,wherey()+4,Aux);
gotoxy(1,wherey());
clreol();
centra(wherey()+4,Aux);
break;}
case 162: insline();break;
case 163: delline();break;
}
}
else
switch(Ch)
{
case 3: si=0; break;
case 13: cprintf("\n\r");break;
case 8: cprintf("%c%c",bksp,bksp);break;
case 27: si=0;break;
case 25: delline();break;
default: cprintf("%c",Ch);
}

Colum[0]=(wherex() / 10) +48;
if (Colum[0]=='0') { Colum[0]=(wherex() %10)+48;Colum[1]=' ';}
else { Colum[1]=(wherex() % 10)+48;}
Colum[2]=0;

Reng[0]=(wherey() / 10) +48;
if (Reng[0]=='0') { Reng[0]=(wherey() %10)+48;Reng[1]=' ';}
else { Reng[1]=(wherey() % 10)+48;}
Reng[2]=0;

strcpy(Mensaje,"Columna:");
strcat(Mensaje,Colum);
escribe(11,22,Mensaje);
strcpy(Mensaje,"Rengln:");
strcat(Mensaje,Reng);
escribe(11,23,Mensaje);

}while (si);

}

 

 

/*Programa que despliega un mensaje de bienvenida en la pantalla*/

#include<stdio.h>

#include<conio.h>

void main()

{

clrscr();

gotoxy(20,10);

printf("BIENVENIDO AL CURSO DE C ESTANDAR");

delay(2500);

}

 

 

/*Programa que calcula el nmero de dias vividos*/

#include<stdio.h>

#include<conio.h>

void main()

{

char nombre[50];

int edad;

clrscr();

printf("Cmo te llamas?\n ");

scanf("%s",nombre);

printf("Cuntos aos 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();

}

 

 

/*Programa que saca el promedio de 3 nmeros*/

#include<stdio.h>

#include<conio.h>

void main()

{

float numero;

float promedio=0;

clrscr();

printf("Dame el primer nmero: ");

scanf("%f",&numero);

promedio+=numero;

printf("Dame el segundo nmero: ");

scanf("%f",&numero);

promedio+=numero;

printf("Dame el tercer nmero: ");

scanf("%f",&numero);

promedio+=numero;

promedio=promedio/3;

printf("El promedio es %f",promedio);

gotoxy(40,22);

printf("Presione cualquier tecla para terminar...");

getch();

}

 

 

/*Programa que convierte un nmero 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();

}

 

 

 

/*Programa que manda un mensaje de advertencia*/

#include <dos.h>

#include<conio.h>

int main(void)

{

clrscr();

gotoxy(28,11);

printf(" P E L I G R O ! ");

sound(250);

delay(600);

sound(80);

delay(600);

delay(600);

nosound();

return 0;

}

 

 

/* Programa que eleva al cuadrado un nmero real */

#include<math.h>

main()

{

float x;

printf("Dame el nmero que quieres elevar al cuadrado: ");

scanf("%f",&x);

x=cuadrado(x);

printf("El cuadrado es%f",x);

}

cuadrado(float n)

{

n=n*n;

return(n);

}

 

 

/*Programa que encuentra las races de una ecuacin cuadrada,deacuerdo a las frmulas: (-b(b-4ac))/2a */

#include<math.h>

main()

{

float a,b,c,x1,x2;

printf("Este programa encuentra las races reales\n");

printf("de la ecuacin de la forma\n");

printf(" ax+bx+c=0 \n");

printf("A continuacin, escriba los coeficientes\n");

printf("de la ecuacin:\n");

printf("a= ");

scanf("%f",&a);

printf("b= ");

scanf("%f",&b);

printf("c= ");

scanf("%f",&c);

x1=pow(b,2);

x1=x1-(4*a*c);

x1=-b+sqrt(fabs(x1));

x1=x1/(2*a);

x2=pow(b,2);

x2=x2-(4*a*c);

x2=-b-sqrt(fabs(x2));

x2=x2/(2*a);

printf("x1= %f\n");

printf("x2= %f\n);

getch();

}

 

 

#include<stdio.h>

menu()

{

char opcion;

printf("A)Espaol\n");

printf("B)Matemticas\n");

printf("C)Historia\n");

printf("D)Biologia\n");

printf("Opcin: ");

scan("%c",&opcion);

printf("Escogi ");

if (opcion=='A')

printf("espaol");

else if (opcion=='B')

printf("matamticas");x

else if (opcion=='C')

printf("historia");

else if (opcion=='D')

printf("biologia");

else printf("una asignaturainexistente.");

}

 

 

 

 

menu()
{
char opcion;
printf("A)Espaol\n");
printf("B)Matemticas\n");
printf("C)Historia\n");
printf("D)Biologa\n");
printf("Opcin: ");
scan("%c",&opcion);
printf("Escogi ");
switch(opcion)
{
case'A':printf("espaol");
break;
case 'B':printf("matemticas");
break;
case 'C': printf("historia");
break;
case 'D': printf("biologia");
break;
default: printf("escogiste una asignatura inexistente");
}
}

 

 

 

main()
{
for(x=1;x<80;x++)
{
gotoxy(x,1);
printf("");
gotoxy(x,24);
printf("");
}
gotoxy(1,1);
printf("");
gotoxy(80,1);
Printf("");
gotoxy(1,24);
printf("");
gotoxy(80,24);
printf("");
for(x=0;x<24;x++)
{
gotoxy(1,x);
printf("");
gotoxy(80,x);
printf("");
}
}

 

 

 

 

 

 

 

#include <ctype.h>
#include<conio.h>
#include<stdio.h>
#include <math.h>

main()
{
char respuesta;
clrscr();
respuesta='\0';
while (respuesta!='N')
{
float x;
printf("Dame un nmero: ");
scanf("%f",&x);
x=fabs(x);
printf("Su valor absoluto es: %f\n",x);
printf("Presione 'N' para salir...\n");
respuesta=toupper(getch());
}
}

 

 

 

 

 

 

 


#include <ctype.h>
#include<conio.h>
#include<stdio.h>
#include <math.h>

main()
{
char respuesta;
clrscr();
do{
float x;
printf("Dame un nmero: ");
scanf("%f",&x);
x=fabs(x);
printf("Su valor absoluto es: %f\n",x);
printf("Continuar...\n");
respuesta=toupper(getch());
}while(respuesta!='N');
}

 

 

 

 

 

/*Ejemplo de funciones por valor y por referencia*/
/*Calcula dos veces el procentaje de gastos, la primera vez
utilizando una funcin por valor y la segunda por referencia*/

#include<stdio.h>

porcentaje_xvalor(float ingreso, float egreso)
{
egreso=((egreso/ingreso)*100)
printf("Usted gasta el %.2f por ciento de lo quegana",egreso);
}

porcentaje_xref(float *ingreso,float *egreso)
{
*egreso=(((*egreso)/(*ingreso))*100);
printf("Usted gasta el %.2f por ciento de lo quegana",egreso);
}

main()
{
float entrada,salida;
clrscr();
printf("Entradas: ");
scanf("%f",&entrada);
printf("Salidad: ");
scanf("%f",&salida);
porcentaje_xvalor(entrada,salida); /*Llamada a la funcinporcentaje utilizando paso de parmetros por valor*/
printf("\n\n");
porcentaje_xref(&entrada,&salida); /*Utilizacinde la funcin porcentaje con paso de parmetrospor referencia*/
getch();
}

 

 

 

 

 

 

/*Programa que convierte un nmero en hexadecimal a decimal*/
#include<math.h>
#include<string.h>
#include<conio.h>

void main()
{
char hexa[10];
float numero;

clrscr();
printf("Numero hexadecimal (maysculas): ");
gets(hexa);
numero=hex_dec(hexa);
printf("\nEn decimal es : %.0f",numero);
}

float hex_dec(char cadena[])
{
int i,j;
char letra;
float decimal=0;
float temp=0;

i=strlen(cadena);
for (j=0;i>0;j++,i--)
{
letra=cadena[i-1];
switch(letra){
case 1:temp=(1*pow(16,j));
break;
case 2:temp=(2*pow(16,j));
break;
case 3:temp=(3*pow(16,j));
break;
case 4:temp=(4*pow(16,j));
break;
case 5:temp=(5*pow(16,j));
break;
case 6:temp=(6*pow(16,j));
break;
case 7:temp=(7*pow(16,j));
break;
case 8:temp=(8*pow(16,j));
break;
case 9:temp=(9*pow(16,j));
break;
case 0:temp=(0*pow(16,j));
break;
case 'A':temp=(10*pow(16,j));
break;
case 'B':temp=(11*pow(16,j));
break;
case 'C':temp=(12*pow(16,j));
break;
case 'D':temp=(13*pow(16,j));
break;
case 'E':temp=(14*pow(16,j));
break;
case 'F':temp=(15*pow(16,j));
break;
}
decimal+=temp;
}
return(decimal);
}

 

 

 

#include <stdio.h>
#include<string.h>

void main()
{
int cifra;
char word[20];
clrscr();

switch(menu())
{
case 1: cifra=numeros();
printf("\n%d",cifra);
break;
case 2: captura(word);
printf("\n%s",word);
break;
default: exit(0);
}

getch();
}

captura(char palabra[])
{
char *letra;
char alfabeto[]="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
int i;

palabra[0]='\0';
clrscr();

do
{
*letra=getch();
for (i=0;i<=53;i++)
{
if (alfabeto[i]==*letra)
{
printf("%c",*letra);
strcat(palabra,letra);
break;
}
}
}while((*letra!=13) && (strlen(palabra)<20));
}

numeros()
{
char cadena[10];
char car='\0';
int i=0;
int cantidad;

do
{
car=getch();
switch(car)
{
case'0': cadena[i]=car;
printf("%c",car);
break;
case'1': cadena[i]=car;
printf("%c",car);
break;
case'2': cadena[i]=car;
printf("%c",car);
break;
case'3': cadena[i]=car;
printf("%c",car);
break;
case'4': cadena[i]=car;
printf("%c",car);
break;
case'5': cadena[i]=car;
printf("%c",car);
break;
case'6': cadena[i]=car;
printf("%c",car);
break;
case'7': cadena[i]=car;
printf("%c",car);
break;
case'8': cadena[i]=car;
printf("%c",car);
break;
case'9': cadena[i]=car;
printf("%c",car);
break;
default: i--;
break;
}
i++;
}while((car!=13) && (i<5));
cantidad=atoi(cadena);
return(cantidad);
}
menu()

{
int numero;
printf("Escoge una opcin:\n");
printf("1.Escribir slo nmeros\n");
printf("2.Escribir nicamenteletras\n");
printf("Opcin: ");
scanf(" %d",&numero);
return(numero);
}

 

 

/*Programa que demuestra el procedimiento copia el cual, copia una cadena en otra*/
#include<string.h>
#include<stdio.h>

main()
{
char palabra1[10];
char palabra2[10];
char palabra3[20];

printf("palabra1= ");
scanf("%s",palabra1);
printf("palabra2= ");
scanf("%s",palabra2);
copia(palabra1,palabra2);
printf("palabra1+palabra2= %s",palabra2);
getch();
}
char *copia(char *cad1, char *cad2)
{
char *inicio;
int i;
inicio=cad2;
while(*cad2!='\0')
cad2++;
while(*cad1!='\0')
{
*cad2=*cad1;

cad2++;
cad1++;
}
*cad2='\0';
cad2=inicio;
}

 

 

 

 

Hosted by www.Geocities.ws

  - 6 _ h                $ = > ? J S \ u v w              ! ' l m n ( ) 0 1 9 : F G N O B C K L S U ` b i ~                B*CJ OJ QJ ^J aJ ph B*CJ OJ QJ ^J aJ ph B* CJ OJ QJ ^J aJ ph S  . `      ? w    " n }       ) : 8 b h8p @ xHP X !(#$%`'(0*+ - 7$ 8$ H$   ( : S k      M e      6 V o & 8 b h8p @ xHP X !(#$%`'(0*+ - 7$ 8$ H$ & @  . H _ } ! 4 G O T m 8 b h8p @ xHP X !(#$%`'(0*+ - 7$ 8$ H$   # O l  - E j         8 b h8p @ xHP X !(#$%`'(0*+ - 7$ 8$ H$   ; K c v       , C ] ~        & 8 b h8p @ xHP X !(#$%`'(0*+ - 7$ 8$ H$ & ) ? C L T U      2       0 K s   8 b h8p @ xHP X !(#$%`'(0*+ - 7$ 8$ H$          7 A O l q x          ' k l s           0 5 <             B X ] d         1 L R r t }           2 3 @ B*CJ OJ QJ ^J aJ ph B* CJ OJ QJ ^J aJ ph B*CJ OJ QJ ^J aJ ph S    @ _ n   + L    8    ! s    + 8 b h8p @ xHP X !(#$%`'(0*+ - 7$ 8$ H$ + {    =     s t   [ \   I     _ 8 b h8p @ xHP X !(#$%`'(0*+ - 7$ 8$ H$ @ Z \ e n z             2 3         I J ? U W ` i u z        # * o p y ! ! ! ! ! '! 0! . . . . . . . . . . . 4/ O/ U/ u/ w/ / B*CJ OJ QJ ^J aJ ph B* CJ OJ QJ ^J aJ ph Y+ + + , ^, _, , - - [- - - - 8. . . / v/ w/ / (0 )0 y0 0 8 b h8p @ xHP X !(#$%`'(0*+ - 7$ 8$ H$ / / / / / / 0 0 '0 )0 20 ;0 G0 L0 S0 0 0 0 0 0 0 0 0 0 1 H1 I1 1 1 1 1 1 2 %2 12 62 =2 2 2 2 2 2 2 3 3 3 3 3 $3 -3 73 S3 _3 d3 k3 3 3 3 3 3 3 94 :4 ;4 Q4 S4 \4 e4 o4 4 4 4 4 4 4 4 5 5 5 b5 c5 d5 z5 |5 5 5 5 5 5 5 B* CJ OJ QJ ^J aJ ph B*CJ OJ QJ ^J aJ ph Y0 0 )1 y1 1 1 1 72 2 2 3 3 e3 3 4 R4 S4 4 4 C5 {5 |5 5 6 8 b h8p @ xHP X !(#$%`'(0*+ - 7$ 8$ H$ 5 5 6 6 6 56 :6 A6 6 6 6 6 6 6 6 6 6 6 6 6 A7 B7 S7 i7 n7 u7 7 7 7 7 7 7 7 7 8 8 8 $8 u8 v8 8 8 8 8 8 8 8 9 9 9 9 &9 B9 N9 S9 Z9 9 9 9 9 9 9 : : : ,: .: 7: @: J: f: r: w: ~: : : ; -; 2; 9; ~; ; ; ; ; ; ; ; ; ; B*CJ OJ QJ ^J aJ ph B* CJ OJ QJ ^J aJ ph Y6 g6 6 6 6 ;7 7 7 7 8 o8 8 9 9 T9 9 9 -: .: x: : (; x; ; 8 b h8p @ xHP X !(#$%`'(0*+ - 7$ 8$ H$ ; ; ; @< A< < < D= = = *> ]> ^> > > S? ? ? #@ $@ t@ @ A ^A 8 b h8p @ xHP X !(#$%`'(0*+ - 7$ 8$ H$ ; < < )< ?< A< J< S< ]< z< < < < < < < < < = J= K= F> \> ^> g> p> z> > > > > > > ? !? &? -? r? s? @ "@ $@ -@ 6@ B@ G@ N@ @ @ A A A A A A B B B %B iB jB rB B B B B B C C C C C C C C C C AD BD TD jD oD vD D D 6E LE NE WE `E B* CJ OJ QJ ^J aJ ph B*CJ OJ QJ ^J aJ ph Y^A A A A B rB B C ]C C C C LD D D 6E ME NE E E AF F F F 8 b h8p @ xHP X !(#$%`'(0*+ - 7$ 8$ H$ `E jE E E E E E E E F F F `F aF F F F F F F F G G G VG WG G G G G H H H H H H H H H H (I )I XI nI pI yI I I I I I I J J J J "J )J nJ oJ J J J J J J J J J J J J K K +K ,K 1K 5K DK ZK \K eK nK xK K K K K K K B*CJ OJ QJ ^J aJ ph B* CJ OJ QJ ^J aJ ph YF G bG G G EH H H H I oI pI I J hJ J K [K \K K L TL L L 8 b h8p @ xHP X !(#$%`'(0*+ - 7$ 8$ H$ K K L L L ZL [L L L M M #M 'M )M ?M AM JM SM ]M zM M M M M M M M M M ?N @N XN nN pN yN N N N N N N O O O ,O .O 7O @O LO QO XO O O tP P P P P P P P P P Q Q Q Q Q Q R R LR MR \R rR tR }R R R R R R R S S S (S -S 4S yS B* CJ OJ QJ ^J aJ ph B*CJ OJ QJ ^J aJ ph YL @M AM M M 9N oN pN N O -O .O ~O O P ^P P P P &Q vQ Q Q -R 8 b h8p @ xHP X !(#$%`'(0*+ - 7$ 8$ H$ -R sR tR R S aS S S S DT T T T U fU U U U &V vV V W +W ,W 8 b h8p @ xHP X !(#$%`'(0*+ - 7$ 8$ H$ yS zS ~S S S S S S S S S S *T +T 3T IT NT UT T T T T T T T T T T U U LU MU UU kU pU wU U U U U U U U U U V EV FV W *W ,W 5W >W JW OW VW W W W X X X (X 2X OX [X `X gX X X X X X X Y Y 'Y 0Y MY NY QY UY hY qY Y Y Y Y Y Y B*CJ OJ QJ ^J aJ ph B* CJ OJ QJ ^J aJ ph Y,W |W W X X aX X Y ^Y Y Y Y IZ Z Z Z 9[ [ [ [ [ ;\ \ \ 8 b h8p @ xHP X !(#$%`'(0*+ - 7$ 8$ H$ Y Y Y Y Y Y Y Y Z Z Z Z #Z hZ iZ Z Z Z Z Z Z Z Z Z Z Z [ [ [ X[ Y[ [ [ [ [ [ \ \ \ Z\ [\ J] `] b] k] t] ] ] ] ] ] ^ ^ ^ '^ 0^ <^ A^ H^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ _ _ _ Z_ [_ e_ n_ _ _ _ _ _ _ _ _ _ _ _ B* CJ OJ QJ ^J aJ ph B*CJ OJ QJ ^J aJ ph Y\ '] a] b] ] ] ^ ^ n^ ^ ^ ^ ;_ _ _ _ L` ` ` >a ?a a a 9b 8 b h8p @ xHP X !(#$%`'(0*+ - 7$ 8$ H$ _ _ _ _ ` ` ` ` +` 5` S` _` d` k` ` ` ` ` ` ` %a &a 'a =a ?a Ha Qa [a xa a a a a a a a a a ?b @b Kb ab cb lb ub b b b b b b b b c c c bc cc ~c c c c c c c c c c +d ,d /d Ed Jd Qd d d d d d d d d e e %e ,e pe qe se e B*CJ OJ QJ ^J aJ ph B* CJ OJ QJ ^J aJ ph Y9b bb cb b c \c c c c @d d d d &e e e )f *f uf f #g yg zg g 8 b h8p @ xHP X !(#$%`'(0*+ - 7$ 8$ H$ e e e e e f (f *f 3f T V _ h t y Ń ƃ Ѓ   W X DŽ 0 F H Q Z f k r ʅ  Q R †   + A C L U a f m Ň ۇ ݇ B*CJ OJ QJ ^J aJ ph B* CJ OJ QJ ^J aJ ph Y G H 2 B C ܇ ݇ - < = ։ ׉ 8 b h8p @ xHP X !(#$%`'(0*+ - 7$ 8$ H$   L M z   % ; = F O [ ` g Չ ׉  F G \ r t }  * , 5 > J O V Ë ̋ Ջ 2 3 r    $ - 9 > E B* CJ OJ QJ ^J aJ ph B*CJ OJ QJ ^J aJ ph Y׉ ' s t Ċ  + , | ‹ Ë  ^ ڌ   k N 8 b h8p @ xHP X !(#$%`'(0*+ - 7$ 8$ H$  ލ : ; = S X _    $ i j ď " 8 : C L X ] d ̐ ΐ א = > @ V X a j v { Ǒ ȑ ԑ   [ \ f | ~  4 6 ? B*CJ OJ QJ ^J aJ ph B* CJ OJ QJ ^J aJ ph Y J 9 : ͐ ΐ  W X < } ~ Β  5 8 b h8p @ xHP X !(#$%`'(0*+ - 7$ 8$ H$ 5 6 2 : ; ֕   R   h Ɨ 8 b h8p @ xHP X !(#$%`'(0*+ - 7$ 8$ H$ ? H T Y ` ʓ  Q R ” ǔ Δ   # 9 ; D M Y ^ e   % , q r {      & / 9 V b g n ˗ З ח   O e g p y ֘ ט     B* CJ OJ QJ ^J aJ ph B*CJ OJ QJ ^J aJ ph YƗ  f g   V < = ƚ ǚ  X Y @ 8 b h8p @ xHP X !(#$%`'(0*+ - 7$ 8$ H$  $ ) 0 u v ę ə Й   % ; = F O [ ` g Ś ǚ К ٚ 6 7 A W Y b k w | ț ɛ ؛     _ ` Ü ʜ    2 4 = F R W ^ Ɲ ȝ ѝ ڝ 7 8 C Y [ d B*CJ OJ QJ ^J aJ ph B* CJ OJ QJ ^J aJ ph Y 3 4 ǝ ȝ  Z [ ? ӟ   f 8 b h8p @ xHP X !(#$%`'(0*+ - 7$ 8$ H$ d m y ~ ʞ ˞ מ    ^ _ k    ( 4 9 @ Ơ ˠ Ҡ    0 2 ; D K Q X k w | ǡ    ( - 4 M h n Ӣ    ( 4 9 @ B* CJ OJ QJ ^J aJ ph B*CJ OJ QJ ^J aJ ph Y 1 2 }   f L g h  ]   8 b h8p @ xHP X !(#$%`'(0*+ - 7$ 8$ H$  ˣ D E L f h q z  + 0 7   ) 3 P _ d k ڦ ߦ 6 7 O e j q Χ Ч ٧   $ t u v    b c d z | B*CJ OJ QJ ^J aJ ph B* CJ OJ QJ ^J aJ ph Y e ` ϧ Ч  n Ũ \ { | ʩ  q Ȫ  7 8 ֫ 8 b h8p @ xHP X !(#$%`'(0*+ - 7$ 8$ H$  ĩ ɩ Щ ! " ? D K ͪ Ҫ ٪   6 8 A J T q ܫ ݫ ޫ  W X b x } ɬ ʬ ˬ  + 0 7   & < A H Ů ʮ Ѯ  1 7 W Y b k w | ȯ ɯ B* CJ OJ QJ ^J aJ ph B*CJ OJ QJ ^J aJ ph Y֫ - s ì 1 ح 7 X Y > Ӱ ԰ . z 8 b h8p @ xHP X !(#$%`'(0*+ - 7$ 8$ H$  Ұ ԰ ݰ  5 A F M ñ    ! * 3 ? D K γ ϳ ҳ ֳ  $ & / 8 D I P ô ٴ ۴  % , p q u ܵ ݵ = S U ^ g q   V W B*CJ OJ QJ ^J aJ ph B* CJ OJ QJ ^J aJ ph Yz ! q ] % & v ڴ ۴ & ֵ & T U P 8 b h8p @ xHP X !(#$%`'(0*+ - 7$ 8$ H$ P ? ܸ 9 : 7 ʺ ˺  v ƻ  M N B 8 b h8p @ xHP X !(#$%`'(0*+ - 7$ 8$ H$  ܷ 8 9 ? U Z a " 8 : C L V s  Ϲ й ֹ = > ɺ ˺ Ժ ݺ     ` a e { ̻ ͻ 6 L N W ` l q x  3 4 I M S \ y z ½ ƽ Ƚ ޽  O P d m B* CJ OJ QJ ^J aJ ph B*CJ OJ QJ ^J aJ ph YB ߽ 0 Ծ  h : C   k 8 b h8p @ xHP X !(#$%`'(0*+ - 7$ 8$ H$    ; < B F H Q o p x | }    # A B G K   1 = B I      $ - 9 > E    " ) n o ~ ; Q S \ e q v } > T V _ B*CJ OJ QJ ^J aJ ph B* CJ OJ QJ ^J aJ ph Y O 7  R S U V  Y l 8 b h8p @ xHP X !(#$%`'(0*+ - 7$ 8$ H$ _ h t y    ' , 3 x * E K k m v  + , D Z _ f 3 4   ( > @ I R \ y    S T U k m B* CJ OJ QJ ^J aJ ph B*CJ OJ QJ ^J aJ ph Yl m  `  Z ? @ 4 l m  j 8 b h8p @ xHP X !(#$%`'(0*+ - 7$ 8$ H$ m v    J S q r z ~ 5 6 ! # , 5 A F M 1 G I R [ g l s  $ & / 8 B _ k p w 3 4 5 K M V _ k p w    $ - 9 > E B*CJ OJ QJ ^J aJ ph B* CJ OJ QJ ^J aJ ph Y  d  " # s H I % & q  L M  8 b h8p @ xHP X !(#$%`'(0*+ - 7$ 8$ H$   k V W G   g q r L M 8 b h8p @ xHP X !(#$%`'(0*+ - 7$ 8$ H$    1 2 9 = ? U W ` i s   ! f g h ~  + F L p r {  ! ' K M V _ i  & ( 1 : D ` l q x B* CJ OJ QJ ^J aJ ph B*CJ OJ QJ ^J aJ ph Y ' ( r ) H I @ _ ` J { | # s 8 b h8p @ xHP X !(#$%`'(0*+ - 7$ 8$ H$  / 0 1 G I R [ e  F G H ^ ` i r |    b c d z |    ( - 4 y z { ' ( ) ? D K    2 4 = B*CJ OJ QJ ^J aJ ph B* CJ OJ QJ ^J aJ ph Y : 3 4 ~ + J K L k l  c 8 b h8p @ xHP X !(#$%`'(0*+ - 7$ 8$ H$ = F P l x } 1 2 3 I K T ] g   R S T j l u ~     $ i j k    4 9 @ 3 4 5 K P W B* CJ OJ QJ ^J aJ ph B*CJ OJ QJ ^J aJ ph Y  m F ]  t . 8 b h8p @ xHP X !(#$%`'(0*+ - 7$ 8$ H$   J K L b g n     a b c y ~  ( - 4 x y z    % j k  F \ ^ g p z   # * o p B*CJ OJ QJ ^J aJ ph B* CJ OJ QJ ^J aJ ph Y K 3 O 8 ] ^ P ' o 8 b h8p @ xHP X !(#$%`'(0*+ - 7$ 8$ H$ p q ] s u ~ 2 H M T  G H Y o t {   # * n o p  ) 5 : A    B* CJ OJ QJ ^J aJ ph B*CJ OJ QJ ^J aJ ph Yo J t u  g Q $ ; 8 b h8p @ xHP X !(#$%`'(0*+ - 7$ 8$ H$  ' ) 2 ; E a m r y / 0 1 G I R [ e  F G H ^ ` i r ~  ' D E F J M V s t u y S i k t }  % 1 6 = B*CJ OJ QJ ^J aJ ph B* CJ OJ QJ ^J aJ ph Y ( ) s ) H I @ _ ` M ; j k  Q 8 b h8p @ xHP X !(#$%`'(0*+ - 7$ 8$ H$ Q  j   f  K B  f 5 8 b h8p @ xHP X !(#$%`'(0*+ - 7$ 8$ H$     ( 4 9 @     # ~ . : ? F  ) < = ? F W g z { }      #  ~            B* CJ OJ QJ ^J aJ ph B*CJ OJ QJ ^J aJ ph Y5 # a   f    4 Y Z  $ r    V   - 8 b h8p @ xHP X !(#$%`'(0*+ - 7$ 8$ H$     % 8 9 ; X Z c l s     < I \ ] h x             O [ ` g         1 2 : A B R e f h          i v        U& & & ' ( ( CJ OJ QJ ^J aJ mH sH  CJ OJ QJ ^J aJ B*CJ OJ QJ ^J aJ ph B* CJ OJ QJ ^J aJ ph N-    Q   9 :   I    O P    k     f  8 b h8p @ xHP X !(#$%`'(0*+ - 7$ 8$ H$ f    =       r    @     k   H I   l m 8 b h8p @ xHP X !(#$%`'(0*+ - 7$ 8$ H$ m  7 |   $ %   4 r   C       J   8 b h8p @ xHP X !(#$%`'(0*+ - 7$ 8$ H$       \    + {    _    r s   Y 8 b h8p @ xHP X !(#$%`'(0*+ - 7$ 8$ H$ Y    Z    G    >    "  r   ! ! N! ! ! 8 b h8p @ xHP X !(#$%`'(0*+ - 7$ 8$ H$ ! ." /" z" " "# Z# [# # $ S$ r$ s$ $ % k% % % % 3& & & & & 8 b h8p @ xHP X !(#$%`'(0*+ - 7$ 8$ H$ & r' ' ' ' 2( ( ( 4) 5) ) ) ) * l* * * * >+ + + , , d, 8 b h8p @ xHP X !(#$%`'(0*+ - 7$ 8$ H$ d, , - B- C- - - 0. h. i. . / O/ / / / 0 m0 0 0 0 C1 1 1 8 b h8p @ xHP X !(#$%`'(0*+ - 7$ 8$ H$ 1 A2 2 2 2 /3 ~3 3 3 4 4 4 5 5 [5 5 5 5 D6 6 6 ,7 U7 V7 8 b h8p @ xHP X !(#$%`'(0*+ - 7$ 8$ H$ V7 7 8 p8 8 8 8 09 f9 g9 9 0: : : : : 8; ; ; ; < }< < < 8 b h8p @ xHP X !(#$%`'(0*+ - 7$ 8$ H$ < < == = = &> t> > > > 9? ? ? 5@ 6@ @ @ @ @ @A A B $B %B 8 b h8p @ xHP X !(#$%`'(0*+ - 7$ 8$ H$ %B uB B C C bC C D OD D D 9E E E E F hF iF F G G uG G H 8 b h8p @ xHP X !(#$%`'(0*+ - 7$ 8$ H$ H VH uH vH H I dI I I I +J uJ J J K eK K L L LL L L !M "M 8 b h8p @ xHP X !(#$%`'(0*+ - 7$ 8$ H$ "M lM M N GN HN N N 8O pO qO O P QP P P Q VQ Q Q Q IR R R 8 b h8p @ xHP X !(#$%`'(0*+ - 7$ 8$ H$ R R 7S S S 'T (T xT T T T =U U U ,V -V wV V +W JW KW W W W 8 b h8p @ xHP X !(#$%`'(0*+ - 7$ 8$ H$ W MX X X Y UY Y Z Z QZ Z Z Z E[ [ [ &\ '\ w\ \ ] 1] 2] ] 8 b h8p @ xHP X !(#$%`'(0*+ - 7$ 8$ H$ ] ] !^ I^ J^ ^ ^ ?_ w_ x_ _ ` b` ` ` ` a ga a a a Nb b b 8 b h8p @ xHP X !(#$%`'(0*+ - 7$ 8$ H$ b b -c }c c c c ?d d d e e Ze e e Hf If f f &g g g g (h 8 b h8p @ xHP X !(#$%`'(0*+ - 7$ 8$ H$ (h wh h h i _i i j j Qj j j k k Mk k k 1l 2l l l m }m ~m 8 b h8p @ xHP X !(#$%`'(0*+ - 7$ 8$ H$ ~m m n jn n n o No o o o 0p p p p Cq Dq q q 0r r r r r 8 b h8p @ xHP X !(#$%`'(0*+ - 7$ 8$ H$ r  ?   J i j 8 b h8p @ xHP X !(#$%`'(0*+ - 7$ 8$ H$ j  % u   ߙ 4  Ӛ Ԛ   ԛ   >     c   8 b h8p @ xHP X !(#$%`'(0*+ - 7$ 8$ H$  S T   @  ԟ ՟      K     g Ģ  3 4 8 b h8p @ xHP X !(#$%`'(0*+ - 7$ 8$ H$ 4 ~ ϣ # [ \   M    V    B   0 1 { ը ! 8 b h8p @ xHP X !(#$%`'(0*+ - 7$ 8$ H$ !   ϩ * u    f    9   ! " l ǭ  O P  8 b h8p @ xHP X !(#$%`'(0*+ - 7$ 8$ H$   c   ͯ ( x    t ı   .     P   ) 8 b h8p @ xHP X !(#$%`'(0*+ - 7$ 8$ H$ ) * t  5 T U   W v w  ) y    M     x 8 b h8p @ xHP X !(#$%`'(0*+ - 7$ 8$ H$ x ȹ   2     T   < =   1 i j   h   8 b h8p @ xHP X !(#$%`'(0*+ - 7$ 8$ H$  Ҿ /     6 ~    f    e    0 |   8 b h8p @ xHP X !(#$%`'(0*+ - 7$ 8$ H$      1 2    ~   ' w    ]    O  8 b h8p @ xHP X !(#$%`'(0*+ - 7$ 8$ H$   = >   6     L    (     d   _ 8 b h8p @ xHP X !(#$%`'(0*+ - 7$ 8$ H$ _    , |    @   ; ] ^   W   : ;   8 b h8p @ xHP X !(#$%`'(0*+ - 7$ 8$ H$  F G   R S  * + {   (     E   M N  8 b h8p @ xHP X !(#$%`'(0*+ - 7$ 8$ H$   F    P   4 5   -    + t    _  8 b h8p @ xHP X !(#$%`'(0*+ - 7$ 8$ H$   Y Z   N    6   + } ~  & v    n  8 b h8p @ xHP X !(#$%`'(0*+ - 7$ 8$ H$    V   R S    P   0 1    n o   \ 8 b h8p @ xHP X !(#$%`'(0*+ - 7$ 8$ H$ \   J K    M    P    ) x    V   8 b h8p @ xHP X !(#$%`'(0*+ - 7$ 8$ H$  , - x  # [ \   I    ! w x   O P   2 8 b h8p @ xHP X !(#$%`'(0*+ - 7$ 8$ H$ 2 W X    C   * + u  < [ \   E } ~   _ 8 b h8p @ xHP X !(#$%`'(0*+ - 7$ 8$ H$ _    F G   4    =     O    < =   8 b h8p @ xHP X !(#$%`'(0*+ - 7$ 8$ H$  8     C        C D    ) r   h 8 b h8p @ xHP X !(#$%`'(0*+ - 7$ 8$ H$ h      i    %  c  d     `        v     8 b h8p @ xHP X !(#$%`'(0*+ - 7$ 8$ H$   j     $      S   4 5   A ` a   Y  8 b h8p @ xHP X !(#$%`'(0*+ - 7$ 8$ H$    =     S    ! o    L   ) * t  8 b h8p @ xHP X !(#$%`'(0*+ - 7$ 8$ H$   W X   l    $ n    X    6   5 6 8 b h8p @ xHP X !(#$%`'(0*+ - 7$ 8$ H$ 6    | }  ' w    2 3 ~  A  `  a   ! ^! }! ~! 8 b h8p @ xHP X !(#$%`'(0*+ - 7$ 8$ H$ ~! ! &" v" " " " 1# # # # $ $ $ $ $ ;% % & *& +& v& & C' 8 b h8p @ xHP X !(#$%`'(0*+ - 7$ 8$ H$ C' b' c' ' +( {( ( ( ( F) ) ) ) * * * + + R+ + , :, ;, , 8 b h8p @ xHP X !(#$%`'(0*+ - 7$ 8$ H$ , , )- a- b- - %. u. . . . 0/ / / / 0 0 0 0 0 D1 1 1 $2 8 b h8p @ xHP X !(#$%`'(0*+ - 7$ 8$ H$ $2 %2 p2 2 93 X3 Y3 3 3 L4 4 4 4 I5 5 5 5 6 T6 6 7 7 N7 7 8 b h8p @ xHP X !(#$%`'(0*+ - 7$ 8$ H$ 7 7 8 8 k8 8 9 X9 9 9 6: 7: : : ; d; ; ; ; F< < < '= = 8 b h8p @ xHP X !(#$%`'(0*+ - 7$ 8$ H$ = = = > > h> > ? X? ? ? ? I@ @ @ $A A A A B fB gB B C 8 b h8p @ xHP X !(#$%`'(0*+ - 7$ 8$ H$ C oC |C C C 6D mD D D ,E mE E E F $F +F dF F F F ;G G G >H 8 b h8p @ xHP X !(#$%`'(0*+ - 7$ 8$ H$ >H ?H H H 9I I I I I ]J J J QK RK K K 9L L L L DM M M &N 8 b h8p @ xHP X !(#$%`'(0*+ - 7$ 8$ H$ &N eN N O NO O O O P lP P Q +Q ,Q |Q Q R ]R R R R CS S S 8 b h8p @ xHP X !(#$%`'(0*+ - 7$ 8$ H$ S 4T 5T T T 2U ?U qU U U OV TV V V FW W W %X WX X X X Y      m    8 b h8p @ xHP X !(#$%`'(0*+ - 7$ 8$ H$  R   [ r s   l    ]    O   4 5   8 b h8p @ xHP X !(#$%`'(0*+ - 7$ 8$ H$  .    . ~    n    F   M N   H   8 b h8p @ xHP X !(#$%`'(0*+ - 7$ 8$ H$  2 3 ~  - |    H    Z [   f g   k l 8 b h8p @ xHP X !(#$%`'(0*+ - 7$ 8$ H$ l   i    1      M R    ^   E F   8 b h8p @ xHP X !(#$%`'(0*+ - 7$ 8$ H$   R   G H   I h i   U    Z   3  4   8 b h8p @ xHP X !(#$%`'(0*+ - 7$ 8$ H$      d     T     J  t  u   &  '  w    )    8 b h8p @ xHP X !(#$%`'(0*+ - 7$ 8$ H$  8    J |    g    Z    T   I l m 8 b h8p @ xHP X !(#$%`'(0*+ - 7$ 8$ H$ m   \ | }    ]   G T    ( l m   P v 8 b h8p @ xHP X !(#$%`'(0*+ - 7$ 8$ H$ v w   j   e f   7 8    b    [ \   8 b h8p @ xHP X !(#$%`'(0*+ - 7$ 8$ H$    Y   *  +  {   ! c! ! ! ! 8" w" " # s# t# # $ ^$ $ 8 b h8p @ xHP X !(#$%`'(0*+ - 7$ 8$ H$ $ $ G% % % & & Y& & & B' C' ' ' ' E( ( ( ( D) ) ) ) %* 8 b h8p @ xHP X !(#$%`'(0*+ - 7$ 8$ H$ %* o* * * + Q+ + + + &, , , , "- h- - . . U. . . / h/ i/ 8 b h8p @ xHP X !(#$%`'(0*+ - 7$ 8$ H$ i/ / 0 R0 0 0 0 A1 1 1 -2 2 2 2 +3 u3 3 4 4 d4 4 4 V5 W5 8 b h8p @ xHP X !(#$%`'(0*+ - 7$ 8$ H$ W5 5 5 6 P6 v6 w6 6 (7 )7 y7 7 7 %8 y8 8 9 9 S9 9 9 1: : : 8 b h8p @ xHP X !(#$%`'(0*+ - 7$ 8$ H$ : : ;; <; ; ; ; 8< < < = = k= = = M> > > ? ? V? ? ? D@ 8 b h8p @ xHP X !(#$%`'(0*+ - 7$ 8$ H$ D@ i@ j@ @ A OA A A B YB zB B B B C +C ]C C C $D VD [D D D 8 b h8p @ xHP X !(#$%`'(0*+ - 7$ 8$ H$ D D     E    , 8 b h8p @ xHP X !(#$%`'(0*+ - 7$ 8$ H$ , t   [    #  m    p  q    ]    @    -  u  8 b h8p @ xHP X !(#$%`'(0*+ - 7$ 8$ H$ u  v    e    A     i   b c   Y    8 b h8p @ xHP X !(#$%`'(0*+ - 7$ 8$ H$  & v    W     F    ]   % i j   i 8 b h8p @ xHP X !(#$%`'(0*+ - 7$ 8$ H$ i v    ' d     $ e    [    * q   8 b h8p @ xHP X !(#$%`'(0*+ - 7$ 8$ H$   l    M     ' Y     P  U     3! e! ! 8 b h8p @ xHP X !(#$%`'(0*+ - 7$ 8$ H$ ! ! 0" x" " " C# # # $ Z$ $ $ %% \% % % '& o& & & :' ' ' 8 b h8p @ xHP X !(#$%`'(0*+ - 7$ 8$ H$ ' ( Q( ( ( ) S) ) ) ) .* * * * + @+ w+ |+ + + ), D, , , 8 b h8p @ xHP X !(#$%`'(0*+ - 7$ 8$ H$ , , - R- - - *. +. {. . / 8/ 9/ / / / E0 0 0 71 81 1 1 02 8 b h8p @ xHP X !(#$%`'(0*+ - 7$ 8$ H$ 02 c2 d2 2 3 \3 3 3 3 V4 4 5 5 Q5 5 5 U6 V6 6 6 N7 7 7 7 8 b h8p @ xHP X !(#$%`'(0*+ - 7$ 8$ H$ 7 8 |8 8 9 9 9 9 &: ': : : 2; 3; ; ; >< ?< < < = k= = = 8 b h8p @ xHP X !(#$%`'(0*+ - 7$ 8$ H$ = > w> > ? ? l? ? ? @ _@ @ @ %A gA A B B WB B B C _C C 8 b h8p @ xHP X !(#$%`'(0*+ - 7$ 8$ H$ C D D RD D D !E qE E E F UF F F G TG G G G KH LH H H H 8 b h8p @ xHP X !(#$%`'(0*+ - 7$ 8$ H$ H OI I I    8 b h8p @ xHP X !(#$%`'(0*+ - 7$ 8$ H$   Q R   J   Ӽ " o    W  վ ־ & q   ^ 8 b h8p @ xHP X !(#$%`'(0*+ - 7$ 8$ H$ ^ _   \ i   ) * u  0 = y    S T   3  8 b h8p @ xHP X !(#$%`'(0*+ - 7$ 8$ H$     u   [   F     [   B { |   k 8 b h8p @ xHP X !(#$%`'(0*+ - 7$ 8$ H$ k     X    Y    @ e    } ~  / 0 { 8 b h8p @ xHP X !(#$%`'(0*+ - 7$ 8$ H$ {  $ \ ]   L   7    " q   V   <   8 b h8p @ xHP X !(#$%`'(0*+ - 7$ 8$ H$    Y    /     b    N   . `    8 b h8p @ xHP X !(#$%`'(0*+ - 7$ 8$ H$  \    3 4    w   Y Z   H    .   8 b h8p @ xHP X !(#$%`'(0*+ - 7$ 8$ H$    i   % `    Z [   D   * p    F 8 b h8p @ xHP X !(#$%`'(0*+ - 7$ 8$ H$ F   6     i    B    ^ _   \ i   8 b h8p @ xHP X !(#$%`'(0*+ - 7$ 8$ H$  ! v w  $ t   :    8 q   ) g    V  8 b h8p @ xHP X !(#$%`'(0*+ - 7$ 8$ H$    @ x   # g h    t   f g   _    8 b h8p @ xHP X !(#$%`'(0*+ - 7$ 8$ H$  ;    2   0 1 |  )    , |    v   8 b h8p @ xHP X !(#$%`'(0*+ - 7$ 8$ H$  k l   d   K  L    =    I     w   8 b h8p @ xHP X !(#$%`'(0*+ - 7$ 8$ H$   `   k    + {    n    c    H  I   8 b h8p @ xHP X !(#$%`'(0*+ - 7$ 8$ H$    A     C     (        ^    g h   b  8 b h8p @ xHP X !(#$%`'(0*+ - 7$ 8$ H$   N O   I     d    x y        8 b h8p @ xHP X !(#$%`'(0*+ - 7$ 8$ H$     q    v   b    3 4     _   8 b h8p @ xHP X !(#$%`'(0*+ - 7$ 8$ H$   :    =     a    I           8 b h8p @ xHP X !(#$%`'(0*+ - 7$ 8$ H$     ! ! ! ! ! J" " " " +# x# y# # $ x$ $ $ $ E% % % 8 b h8p @ xHP X !(#$%`'(0*+ - 7$ 8$ H$ % % % & r& & & & L' T' ' ' ' ( d( o( ( ( ) ^) g) ) ) * 8 b h8p @ xHP X !(#$%`'(0*+ - 7$ 8$ H$ * i* r* * * + Q+ V+ + + + F, S, , , , 6- - - - - (. x. . 8 b h8p @ xHP X !(#$%`'(0*+ - 7$ 8$ H$ . . . / ]/ / / b0 c0 0 1 1 W1 X1 1 1 2 <2 2 2 2 3 Y3 g3 8 b h8p @ xHP X !(#$%`'(0*+ - 7$ 8$ H$ g3 3 3 4 4 f4 4 4 5 J5 K5 5 5 5 C6 x6 y6 6 7 _7 7 7 7 ,8 8 b h8p @ xHP X !(#$%`'(0*+ - 7$ 8$ H$ ,8 ;8 8 8 8 49 A9 9 9 9 1: |: : : ; S; ; ; /< 0< {< < < "= 8 b h8p @ xHP X !(#$%`'(0*+ - 7$ 8$ H$ "= P= Q= = = = U> V> > > > ^? _? ? ? @ a@ b@ @ A A rA sA A 8 b h8p @ xHP X !(#$%`'(0*+ - 7$ 8$ H$ A B B oB pB B C C eC C C C   ˼ 8 b h8p @ xHP X !(#$%`'(0*+ - 7$ 8$ H$ ˼  f k   3 e   ) r  ˿  H z     W   8 b h8p @ xHP X !(#$%`'(0*+ - 7$ 8$ H$   =    A     R    S    ( n    8 b h8p @ xHP X !(#$%`'(0*+ - 7$ 8$ H$  ^ j   . `   ) f     _   7 |   ( e 8 b h8p @ xHP X !(#$%`'(0*+ - 7$ 8$ H$ e    I    R   # U Z   & c   6 h m  8 b h8p @ xHP X !(#$%`'(0*+ - 7$ 8$ H$    F     a f   9     B    - 2  8 b h8p @ xHP X !(#$%`'(0*+ - 7$ 8$ H$     P t    F    3 e j    [ l    8 b h8p @ xHP X !(#$%`'(0*+ - 7$ 8$ H$   A x   6 t   % * v    D v   * g   8 b h8p @ xHP X !(#$%`'(0*+ - 7$ 8$ H$   U    F    5 n   2    >    H z 8 b h8p @ xHP X !(#$%`'(0*+ - 7$ 8$ H$ z   I    M    @ r w   c    H ~   8 b h8p @ xHP X !(#$%`'(0*+ - 7$ 8$ H$   h    ) _    2 p    E     \   8 b h8p @ xHP X !(#$%`'(0*+ - 7$ 8$ H$   Y w   2    # \     q v   # ( x } 8 b h8p @ xHP X !(#$%`'(0*+ - 7$ 8$ H$ }      _ u   7    ! i   / r   / s 8 b h8p @ xHP X !(#$%`'(0*+ - 7$ 8$ H$ s   8 j    B     `    ^ c    = | 8 b h8p @ xHP X !(#$%`'(0*+ - 7$ 8$ H$ |   # _    ;  z    X   . `    c   C 8 b h8p @ xHP X !(#$%`'(0*+ - 7$ 8$ H$ C u z    m    1 m    c d     M   8 b h8p @ xHP X !(#$%`'(0*+ - 7$ 8$ H$    W  \  a      a    1  n  s      Y    !  N    8 b h8p @ xHP X !(#$%`'(0*+ - 7$ 8$ H$    W       0 e    W    V    a  8 b h8p @ xHP X !(#$%`'(0*+ - 7$ 8$ H$     g   - t    8 =    U     ( e 8 b h8p @ xHP X !(#$%`'(0*+ - 7$ 8$ H$ e   - x    ; m   = w    : ? z   * \ 8 b h8p @ xHP X !(#$%`'(0*+ - 7$ 8$ H$ \ a   < n s    H     D      F! ]! ! ! " 8 b h8p @ xHP X !(#$%`'(0*+ - 7$ 8$ H$ " F" ~" " " 7# t# # # &$ ^$ $ $ % T% % % & ?& & & ' S' ' 8 b h8p @ xHP X !(#$%`'(0*+ - 7$ 8$ H$ ' ' ( W( ( ( ) J) ) ) * j* * * + O+ + + , , V, , , , 8 b h8p @ xHP X !(#$%`'(0*+ - 7$ 8$ H$ , <- x- - - . T. . . 3/ q/ / / G0 y0 0 1 61 |1 1 2 \2 2 2 8 b h8p @ xHP X !(#$%`'(0*+ - 7$ 8$ H$ 2 2 2 33 m3 3 3 64 M4 4 4 5 O5 5 5 5 16 w6 6 6 7 7 7 T7 8 b h8p @ xHP X !(#$%`'(0*+ - 7$ 8$ H$ T7 7 7 8 C8 8 8 8 9 ?9 t9 9 9 :: t: : : ; Q; V; ; ; < M< 8 b h8p @ xHP X !(#$%`'(0*+ - 7$ 8$ H$ M< < < < 0= l= = = /> ?> > > > > '? S? ? @ @ S@ a@ @ @ A 8 b h8p @ xHP X !(#$%`'(0*+ - 7$ 8$ H$ A mA A A A 9B sB B B =C C C C D [D D D E +E ZE E E F pF 8 b h8p @ xHP X !(#$%`'(0*+ - 7$ 8$ H$ pF F F F DG dG G G G G GH H H I BI GI I I I ,J }J J J K 8 b h8p @ xHP X !(#$%`'(0*+ - 7$ 8$ H$ K K RK WK K K /L L L L M gM M M N jN kN N FO GO O P `P P 8 b h8p @ xHP X !(#$%`'(0*+ - 7$ 8$ H$ P P P KQ Q Q &R 'R R R 7S wS S S )T T T U DU EU U V UV V 8 b h8p @ xHP X !(#$%`'(0*+ - 7$ 8$ H$ V V W ^W W W X X X X 'Y Y Y Z ZZ Z Z [ [ [ [ #\ q\ \ 8 b h8p @ xHP X !(#$%`'(0*+ - 7$ 8$ H$ \ \ ] e] ] ] J^ K^ ^ _ [_ _ _ _ D` ` ` Ia Ja a b Zb b b 8 b h8p @ xHP X !(#$%`'(0*+ - 7$ 8$ H$ b b Oc c c c ;d d d e e Te e e f f f g \g g g :h ;h h 8 b h8p @ xHP X !(#$%`'(0*+ - 7$ 8$ H$ h i Ki i i i Tj j j k k k k )l il l l m rm m m m jn n 8 b h8p @ xHP X !(#$%`'(0*+ - 7$ 8$ H$ n o Wo yo zo o Dp p p p fq q r Sr |r }r r Gs s s s t st t 8 b h8p @ xHP X !(#$%`'(0*+ - 7$ 8$ H$ t u `u u u u Mv v v $w %w w w 5x }x x x /y y y z az bz z 8 b h8p @ xHP X !(#$%`'(0*+ - 7$ 8$ H$ z ,{ r{ { { { o| | } Z} } } } N~ ~ ~   ~   _   8 b h8p @ xHP X !(#$%`'(0*+ - 7$ 8$ H$  /  ́  C D   T    l Ä  X z {  E  Ɇ ʆ 8 b h8p @ xHP X !(#$%`'(0*+ - 7$ 8$ H$ ʆ =  ڇ B C   S    \    T   . /   > 8 b h8p @ xHP X !(#$%`'(0*+ - 7$ 8$ H$ > M  ҍ ( x    L M  ( )   B    p    8 b h8p @ xHP X !(#$%`'(0*+ - 7$ 8$ H$  h   E    N  ԕ    ݖ # a b ՗ , r   $ 8 b h8p @ xHP X !(#$%`'(0*+ - 7$ 8$ H$ $ {   3 4   D    w   3 4   D    2 8 b h8p @ xHP X !(#$%`'(0*+ - 7$ 8$ H$ 2  ϟ    ؠ  n    [   6 7   G  Ҥ Ӥ F 8 b h8p @ xHP X !(#$%`'(0*+ - 7$ 8$ H$ F    ] ^ Ѧ ( n    x Ϩ  b    k   + , 8 b h8p @ xHP X !(#$%`'(0*+ - 7$ 8$ H$ ,   <  Ѭ Ҭ E   / m n  8 ~    l ð  H  8 b h8p @ xHP X !(#$%`'(0*+ - 7$ 8$ H$    Q  ز / 0   @    +  ȵ  o p  :  Ϸ 8 b h8p @ xHP X !(#$%`'(0*+ - 7$ 8$ H$ Ϸ   e   j k ޹ 5 {   -  ʻ   | Ӽ  V W  8 b h8p @ xHP X !(#$%`'(0*+ - 7$ 8$ H$   f u   P  ¿ ÿ  t u  P Q   a    v  8 b h8p @ xHP X !(#$%`'(0*+ - 7$ 8$ H$   Q R   b    T   1 o p  :    2   8 b h8p @ xHP X !(#$%`'(0*+ - 7$ 8$ H$   A B   R   .    ? @   P    Y   8 b h8p @ xHP X !(#$%`'(0*+ - 7$ 8$ H$      " n   .    W X  " h    ~   8 b h8p @ xHP X !(#$%`'(0*+ - 7$ 8$ H$  i    ]   J K   [    @   E F   V 8 b h8p @ xHP X !(#$%`'(0*+ - 7$ 8$ H$ V    _    W  3 4   C R   - }    Q 8 b h8p @ xHP X !(#$%`'(0*+ - 7$ 8$ H$ Q R  - .   G    w    o   K    T  8 b h8p @ xHP X !(#$%`'(0*+ - 7$ 8$ H$       ) g h  2 x    a   f g  1 w  8 b h8p @ xHP X !(#$%`'(0*+ - 7$ 8$ H$    ]   H q r  <       # n    b  8 b h8p @ xHP X !(#$%`'(0*+ - 7$ 8$ H$       - w    k   % &   6     u 8 b h8p @ xHP X !(#$%`'(0*+ - 7$ 8$ H$ u   . /   ?    % |  * +   : I   $  t  8 b h8p @ xHP X !(#$%`'(0*+ - 7$ 8$ H$ t     H I  $ %   5 r s  =   ! J K   [ 8 b h8p @ xHP X !(#$%`'(0*+ - 7$ 8$ H$ [    P   ; ] ^  (  n     O    6  _  `   *  8 b h8p @ xHP X !(#$%`'(0*+ - 7$ 8$ H$ *  p    H  I    Y    Y   5 s t  >    B 8 b h8p @ xHP X !(#$%`'(0*+ - 7$ 8$ H$ B C   S    8       $ g    p   # 8 b h8p @ xHP X !(#$%`'(0*+ - 7$ 8$ H$ # $   4     w   8 9   I    G    8 b h8p @ xHP X !(#$%`'(0*+ - 7$ 8$ H$  3     L       T! ! ! 2" ~" " " 0# # # $ 8 b h8p @ xHP X !(#$%`'(0*+ - 7$ 8$ H$  $ J$ K$ $ % [% % % & d& & & ' ' ' ' (( ( ( ) \) ) ) * 8 b h8p @ xHP X !(#$%`'(0*+ - 7$ 8$ H$ * * * * 0+ + + , , w, , - ]- - - $. {. . / O/ P/ / 0 `0 8 b h8p @ xHP X !(#$%`'(0*+ - 7$ 8$ H$ `0 0 0 21 31 1 1 C2 }2 2 2 H3 3 3 *4 h4 i4 4 35 y5 5 6 6 u6 8 b h8p @ xHP X !(#$%`'(0*+ - 7$ 8$ H$ u6 6 7 W7 7 7 8 `8 8 8 .9 /9 9 9 ?: : : : 6; ; ; < [< \< 8 b h8p @ xHP X !(#$%`'(0*+ - 7$ 8$ H$ \< < &= l= = = = W> > > D? m? n? ? 8@ ~@ @ @ @ rA A B VB B 8 b h8p @ xHP X !(#$%`'(0*+ - 7$ 8$ H$ B B !C xC C D 5D 6D D E FE E E E 3F F F G PG QG G H aH H 8 b h8p @ xHP X !(#$%`'(0*+ - 7$ 8$ H$ H H H LI I I 3J qJ rJ J e e e 1f 2f f f Bg g g h th 8 b h8p @ xHP X !(#$%`'(0*+ - 7$ 8$ H$ th h i i i i %j j j j Vk k k k kl l m om pm m :n n n n 8 b h8p @ xHP X !(#$%`'(0*+ - 7$ 8$ H$ n n qo o $p %p p p 4q Cq ~q q r nr r r r Bs Cs s t t t t 8 b h8p @ xHP X !(#$%`'(0*+ - 7$ 8$ H$ t nu ou u 9v v v 2w w w w x hx x y ^y y y Iz z z z { Z{ 8 b h8p @ xHP X !(#$%`'(0*+ - 7$ 8$ H$ Z{ { { | ;| ^| | | } D} } } } 3~ 4~ ~ ~ C R   - }  8 b h8p @ xHP X !(#$%`'(0*+ - 7$ 8$ H$    Q R  - .   } ~  H    5 i   =   8 b h8p @ xHP X !(#$%`'(0*+ - 7$ 8$ H$   F  χ  X   ) ]   1 ~    k ‹ G H   8 b h8p @ xHP X !(#$%`'(0*+ - 7$ 8$ H$  W f   A     e f  A B      \   U 8 b h8p @ xHP X !(#$%`'(0*+ - 7$ 8$ H$ U  1 2      L  ϖ Ж C     2 O T ` g  8 b h8p @ xHP X !(#$%`'(0*+ - 7$ 8$ H$    f  ә  , |    j  ћ   !   p q ѝ ( 8 b h8p @ xHP X !(#$%`'(0*+ - 7$ 8$ H$ (   ʞ  j  ܟ ݟ -   ڠ j k ޡ 5   .    ~ 8 b h8p @ xHP X !(#$%`'(0*+ - 7$ 8$ H$ ~ դ Z [ Υ %    u  ا   / 4 @ G  è  6   8 b h8p @ xHP X !(#$%`'(0*+ - 7$ 8$ H$   $ s    4 ~    f   L    E   5 W 8 b h8p @ xHP X !(#$%`'(0*+ - 7$ 8$ H$ W X    U   Y  5 6      P  Դ մ H   8 b h8p @ xHP X !(#$%`'(0*+ - 7$ 8$ H$  / A    ? m   1 > n   [ `     J   8 b h8p @ xHP X !(#$%`'(0*+ - 7$ 8$ H$   > C s  ֻ  N  ۼ + 0  ս % n   : `   / 8 b h8p @ xHP X !(#$%`'(0*+ - 7$ 8$ H$ / l    4 5      <    ( ~    A   8 b h8p @ xHP X !(#$%`'(0*+ - 7$ 8$ H$   ~   I   B      n o  9    0   8 b h8p @ xHP X !(#$%`'(0*+ - 7$ 8$ H$   Z   , Z    E s    T    2 `    8 b h8p @ xHP X !(#$%`'(0*+ - 7$ 8$ H$  R    C    O   ! _    ^   0 n   8 b h8p @ xHP X !(#$%`'(0*+ - 7$ 8$ H$  E g   9    [   - q   C    V   $ 8 b h8p @ xHP X !(#$%`'(0*+ - 7$ 8$ H$ $ p   G    b   6 w   D w   - .   > 8 b h8p @ xHP X !(#$%`'(0*+ - 7$ 8$ H$ > { |  3     u    8    u v  @   9 8 b h8p @ xHP X !(#$%`'(0*+ - 7$ 8$ H$ 9       & h    c   5 f   ! P    8 b h8p @ xHP X !(#$%`'(0*+ - 7$ 8$ H$  d   = x   6 X Y  # i    C t    `  8 b h8p @ xHP X !(#$%`'(0*+ - 7$ 8$ H$    2     w    d   ; v   ) o   / 8 b h8p @ xHP X !(#$%`'(0*+ - 7$ 8$ H$ / N     ^    > m    [    G    C  8 b h8p @ xHP X !(#$%`'(0*+ - 7$ 8$ H$ C  k    D l   A i   B j   C k   D l   8 b h8p @ xHP X !(#$%`'(0*+ - 7$ 8$ H$   R   3 m   4 z   S     U  e    2  h    8 b h8p @ xHP X !(#$%`'(0*+ - 7$ 8$ H$     P  g    9  X     F    *     e   # 8 b h8p @ xHP X !(#$%`'(0*+ - 7$ 8$ H$ # ^   N p q  " # n   r   L M   ]    8 b h8p @ xHP X !(#$%`'(0*+ - 7$ 8$ H$  H    @    <    I J   Z   G   / 8 b h8p @ xHP X !(#$%`'(0*+ - 7$ 8$ H$ / H    4 s   - f   !  j  k   5! {! ! ! " Z" " 8 b h8p @ xHP X !(#$%`'(0*+ - 7$ 8$ H$ " " # # # # [$ \$ $ % k% z% % % U& & & & ' y' z' ' +( ,( 8 b h8p @ xHP X !(#$%`'(0*+ - 7$ 8$ H$ ,( ( ( ( ( ( ( ( ( (  8 b h8p @ xHP X !(#$%`'(0*+ - 7$ 8$ H$ # 0 P / =!"#$%    i   8 @ 8  N o r m a l   CJ _HaJ mH sH tH F A@ F  F u e n t e d e p r r a f o p r e d e t e r . $      @ " ) / 5 ; `E K yS Y _ e k q v | 8 ?  d _ m = p   ( ' / 2 5 7 9 ; > @ B E G I K M O R T V X Z ] _ a c e g j l n p s u w y { }    : &  &  + _ B" & + 0 6 ; ^A F L -R ,W \ 9b g m r v { g ׉ 5 Ɨ  ֫ z P B l  o Q 5 - f  m  Y ! & d, 1 V7 < %B H "M R W ] b (h ~m r Kx }    \ j  4 !  ) x    _     \  2 _  h    6 ~! C' , $2 7 = C >H &N S   $ 2 F ,  Ϸ      V Q    u t  [ *  B #  $ * `0 u6 \< B H N T ?[ a th n t Z{    U  ( ~  W   /     $ > 9   / C    #  / " ,( ( ( * + , - . 0 1 3 4 6 8 : < = ? A C D F H J L N P Q S U W Y [ \ ^ ` b d f h i k m o q r t v x z | ~                                                                                                                                                          ! " # $ % & ' ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ? @ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \ ] ^ _ ` a b c d e f g h i j k l m n o p q r s t u v w x y z { | } ~   ( )      $ % , . B C L M ^ ` t u ~      = E S T f }          s u w z ~                             $ * / 3 8 ? A B E F I N Q U i n x                    ) @ K P W \ c h o w ~                    4 9 B K T Y m q t x }                    $ ) =      , 2 E L \ c z             $ 2 6 9 = B H M X ] ^ i m x z                      v$ w$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $                                                                                                                                                                                                                                                                         U" # $ $       S I I  C : \ W I N D O W S \ E s c r i t o r i o \ c . d o c @ $ $ d  $ $  $ @  @   U n k n o w n       G : T i m e s N e w R o m a n 5   S y m b o l 3&  : A r i a l ?5  : C o u r i e r N e w "  0   cc  -   p  S    !   0 ?      S I I  S I I Z  Oh +'0 H              (  0  8  @     s   s   SII   II   Normal   SII   2 I   Microsoft Word 9.0 @ @ ¬}@ ¬}   -    Z  ՜. +,0  h  p  |           SII  S  p  ?         Ttulo                             ! " # $ % & ' ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ? @ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \ ] ^ _ ` a b c d e f g h i j k l m n o p q r s t u v w x y z { | } ~                                   ! " # $ % & ' ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ? @ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \ ] ^ _ ` a b c d e f g h i j k l m n o p q r s t u v w x y z { | } ~                                                                                                                                                                   ! " # $ % & ' ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ? @ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \ ] ^ _ ` a b c d e f g h i j k l m n o p q r s t u v w x y z { | } ~                                                                                                                                                                   ! " # $ % & ' ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ? @ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \ ] ^ _ ` a b c d e f g h i j k l m n o p q r s t u v w x y z { | } ~                                                                                                                                                                   ! " # $ % & ' ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ? @ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \ ] ^ _ ` a b c d e f g h i j k l m n o p q r s t u v w x y z { | } ~                                                                                                                                                                   ! " # $ % & ' ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ? @ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \ ] ^ _ ` a b c d e f g h i j k l m n o p q r s t u v w x y z { | } ~                                                                                                                                                                   ! " # $ % & ' ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ? @ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \ ] ^ _ ` a b c d e f g h i j k l m n o p q r s t u v w x y z { | } ~                                                                                                                                                                   ! " # $ % & ' ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ? @ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \ ] ^ _ ` a b c d e f g h i j k l m n o p q r s t u v w x y z { | } ~                                                                                                                                                                   ! " # $ % & ' ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ? @ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \ ] ^ _ ` a b c d e f g h i j k l m n o p q r s t u v w x y z { | } ~                                                                                                                                                            ! " # $ % & ' ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ? @ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \ ] ^ _ ` a b c d e f g h i j k l m n o p q r s t u v w x y z { | } ~   R o o t E n t r y     F } 1 T a b l e   } W o r d D o c u m e n t   %  S u m m a r y I n f o r m a t i o n (     D o c u m e n t S u m m a r y I n f o r m a t i o n 8    C o m p O b j    k O b j e c t P o o l   }}      F Documento Microsoft Word MSWordDoc  Word.Document.8 9q 1