You are on page 1of 18

Programas = Datos + Algoritmos

Por Mario Macas Observe el siguiente programa en C. No se preocupe si no puede comprenderlo todo, al acabar de leer este captulo seguro que s podr:
1. 2. 3. 4. 5. 6. #. $. *. 1,. 11. 12. 13. 14. 15. 16. 1#. 1$. 1*. 2,. 21. 22. 23. 24. 25. 26. 2#. 2$. 8 8 % int&('- 9 / 3 +d', c ); etu n ,; 65 7alculo de la %otencia 56 c3a; &o (i3, ; i<b ; i22) { c3c5a; % int&('(nt oduce tu nomb e) '); scan&('+s',nomb e); % int&('(nt oduce el valo scan&('+d',.a); % int&('(nt oduce el valo scan&('+d',.b); % int&('0ola +s, los esultados son1n',nomb e); % int&('- 2 / 3 +d1n', a2b ); % int&('- 4 / 3 +d1n', a4b ); % int&('- 5 / 3 +d1n', a5b ); % int&('- 6 / 3 +d1n', a6b ); de /) '); de -) '); int main(void) { int a,b,c,i; cha nomb e!15"; #include <stdio.h>

Este programa dara una salida en pantalla como la siguiente: > In t roduce tu nombre: Pedro > In t roduce el valor de A: 34 > In t roduce el valor de B: 2 > Hola Pedro, las operac iones entre A y B son: >A +B =3 > A ! B = 32 >A " B = # > A $ B = %&

> A ' B = %%( Observar que en la lnea 20 ha un te!to que no indica nada al programa. Este es un te!to que pone el programador en cualquier parte del programa para hacer un comentario. "ara crear un comentario ha que escribir un te!to cualquiera entre los smbolos #$ $#, el compilador ignorar ese te!to. Es bueno poner muchos comentarios en los programas, para %acilitar la lectura saber con s&lo leer el comentario qu' reali(a la parte comentada. "odemos observar que este programa, como cualquier otro, consta de dos partes di%erenciadas: Estructuras de datos: )on aquellos elementos que utili(amos para guardar datos en memoria. En el programa de e*emplo son las variables a,b,c e i, que las utili(amos para guardar n+meros enteros, la variable nombre, que la guardamos como una cadena de te!to, para guardar nombres, %rases, etc... Algoritmos: )on aquellos elementos utili(ados para describir el %lu*o del programa, es decir, los comandos que describen c&mo debe e*ecutarse el programa paso a paso. En el programa de e*emplo es todo el te!to que va desde el primer smbolo -.- hasta el +ltimo -/-.

0os algoritmos utili(an estructuras de datos para describir programas. 1 continuaci&n pasamos a describir los di%erentes tipos de datos las estructuras de control de %lu*o bsicas para de%inir algoritmos.

Tipos de datos
2a dos subgrupos dentro de los tipos de datos: los datos simples los datos compuestos, %ormados como agrupaciones de datos simples. 1l principio puede parecer un poco complicado elegir el tipo de dato ms adecuado para nuestro programa, pero a medida que va a cogiendo e!periencia como programador se dar cuenta que no es una tarea complicada, e incluso agradecer a menudo poder de%inir sus propios tipos de datos. 0os tipos de datos de%inen el %ormato el tama3o que tienen las variables a que acompa3an. 4na variable es un espacio de memoria en el que guardaremos los datos. "ara comprenderlo me*or, una variable es como una ca*a en la que guardar una sola cosa que va amos a utili(ar. 2a ca*as de todos los tama3os %ormatos, dependiendo de lo que se va a guardar en ellas. "or e*emplo, un televisor s&lo se podr guardar en ca*as grandes, a que en ca*as peque3as no cabe. En cambio, un anillo se puede guardar en una ca*a mu grande, pero sera un desperdicio de espacio, a que en una ca*a peque3a cabe per%ectamente. 5e la misma manera, si se quiere guardar un n+mero que sabemos que ser entre 0 600, sera me*or coger el tipo de variable ms peque3a que tiene el lengua*e C: un char, que guarda n+meros de 7628 a 629. Eso no quiere decir que no pudi'ramos guardarlo en un tipo de dato grande, por e*emplo un double, que permite cientos de miles de valores distintos, pero estaramos desperdiciando espacio, a que un double ocupa 8 veces ms que un char. )e podra comparar la memoria del ordenador con el espacio de un armario: cuantas ms ca*as metamos menos espacio libre iremos teniendo, por lo que ha que meter las cosas en ca*as lo ms peque3as posibles para no desperdiciar el espacio.

Tipos de datos simples


"ara utili(ar tipos de datos simples debe escribir uno de los tipos de datos descritos a continuaci&n a continuaci&n el nombre de la variable a que acompa3an. :ambi'n se puede escribir el tipo de dato varias variables, separadas entre comillas. char: Este dato ocupa un byte de memoria, es decir, puede albergar 2;< valores distintos: los n+meros que van de 7628 a 629 o un carcter. "or e*emplo, decir que un carcter vale -1- es lo mismo que decir que vale <;, a que -1- tiene valor <; en el c&digo 1)C== >ver ap'ndice?. unsigned char. =gual que char, pero 'ste guarda 2;< n+meros sin signo, es decir, de 0 a 2;;. int: puede contener un numero entero. 5ependiendo del lengua*e el compilador que se utilice el tama3o el n+mero de valores posible variar. )uele ocupar @ b tes >el mismo tama3o que @ char?. El rango de n+meros ir de 72.6@9.@8A.<@8 hasta 2.6@9.@8A.<@9. unsigned int: =gual que int, pero los n+meros sern sin signo. "or lo que el rango ser de 0 hasta @.2B@.B<9.2B;. short int: es un entero corto que s&lo ocupa 2 b tes, por lo que el rango va de 7A2.9<8 a A2.9<9. )i le a3adimos al principio unsigned el rango ir de 0 a <;.;A;. long: para la ma ora de los compiladores es sin&nimo de int. "uede llevar delante el unsigned. float: n+mero en coma %lotante que ocupan @ b tes. "ermite representar n+meros con decimales, obteniendo rangos mucho ma ores que int. El rango va apro!imadamente de 7A.@ ! 60A8 hasta A.@ ! 60A8. double: n+mero en coma %lotante de 8 b tes. Como float pero el rango va de 76.9 ! 60A08 hasta 6.9 ! 60A08. long double: n+mero en coma %lotante de 60 b tes. El rango va de 7A.@ ! 60@BA2 hasta A.@ ! 60@BA2.

Tipos de datos complejos


Vector: un vector es una agrupaci&n de un numero determinado de datos de un mismo tipo. )u de%inici&n es la siguiente: <tipo de variable> <nombre de variable>[<nmero de elementos>] E*emplos: int a!15"; de%ine un vector de 6; enteros llamado a. char mat i:!3"!4"; de%ine una matri( de char, de tama3o @!A >62 elementos?, llamada matrix. 2emos e!plicado c&mo de%inir un vector. 1hora nos hace %alta saber c&mo acceder modi%icar los elementos de 'ste: a3adiremos al nombre del vector la posici&n entre los smbolos -C- -DE*emplos: a3mt:!1"!2" asigna a la variable 'a- el valor de la posici&n >6,2? de la matri( -mtx-.

vct!34"3, asigna a la posici&n A@ del vector -vct- el valor 0. Claro est que si queremos acceder a la posici&n A@ del vector, este vector tiene que tener al menos A; elementos >del 0 al A@?, a que si no estaramos accediendo a una (ona de memoria que no hemos de%inido. )i de%inimos el vector: int a!15"; "odremos acceder a las posiciones del vector aC0D hasta aC6@D, Otro utili(aci&n esencial de los vectores es utili(ar vectores de caracteres para guardar cadenas de te!to. "or e*emplo, en la de%inici&n de la cadena cha nomb e!"3';ose'; estamos indicando que la cadena es un vector de tantos char como letras ha entre las comillas >en este caso @?. 5onde los valores del vector son nombreC0DE-F-, nombreC6DE-o-, nombreC2DE-s-, nombreCADE-e-. Gientras los caracteres se de%inen como un n+mero entero de 6 b te o como un carcter entre comillas simples. 4na cadena de te!to se de%ine como un con*unto de caracteres entre comillas dobles. "or tanto no hay que confundir cha let a!"3'-'; con cha let a3<-<;

a que el primero es un vector de un s&lo elemento el segundo es un carcter que contiene la letra 1 ma +scula. En cambio, s es lo mismo escribir cha let a3<-<; que cha let a365; Estructura: es una agrupaci&n de datos de distintos tipos de%inidas por el programador, con el %in de crear sus propios tipos de datos. "or e*emplo, imagnese que va a hacer un programa para una tienda en el que guarde in%ormaci&n de di%erentes productos, tales como el nombre, el c&digo de re%erencia, el precio, etc... "odra usted crear un entero para cada precio, una cadena para cada nombre de producto... o puede crear una estructura en la que englobe todos los datos necesarios para cada producto, como por e*emplo: st uct % oducto { cha nomb e!25"; int % ecio; cha e&e encia!1,"; 8 4na ve( de%inida la estructura hemos de%inido el tipo de dato, no el dato en s. "ara utili(ar ahora un dato de el tipo producto, lo de%inimos como cualquier otro dato simple, pero indicando primero que se trata de una estructura, luego el nombre de la estructura de%inida luego el nombre de la variable. "or e*emplo st uct % oducto % od1; de%inir la variable prod6 del tipo producto.

Cuando queramos acceder a un elemento de la estructura lo haremos de la siguiente manera: Hnombre variableI.Hnombre miembroI % od1.% ecio3234; asigna al precio de la variable prod6 el valor 2A@,

Otros tipos de datos


Enumerados: no siempre ser necesario traba*ar con datos que representen n+meros o cadenas de caracteres. "ongamos que quiere representar datos que simbolicen el da de la semana, se podr representar como datos num'ricos >das 6,2,A,@,;,<, 9?, aunque es mucho ms c&modo representar directamente los das >lunes, martes...?. "ara esta %unci&n %ueron creados el tipo de datos enumerados. )u sinta!is es la siguiente: enum Htipo de datoI . Hlista de valores separados por comaI /, E*emplos: enum mes { ene o, &eb e o, ma =o, ab il, ma>o, ?unio, ?ulio, a@osto, se%tiemb e, octub e, noviemb e, diciemb e 8; enum %aloAba a?a { bastos, co%as, o os, es%adas 8; 0as venta*as de de%inir datos enumerados, aparte de la comodidad de no tener que representar con n+meros ob*etos que no lo son, es que evitamos que se asignen valores que no estn dentro del grupo de%inido >por e*emplo, no podremos asignar a una variable del tipo mes el valor -:reciembre-, mientras que si traba*semos con n+meros s podramos asignar el valor 6A a un mes, cosa que en la realidad es err&nea?. "odemos combinar tambi'n los tipos de datos comple*os, de manera que podremos incluir vectores enumerados dentro de nuestras estructuras, o crear vectores de estructuras enumerados. Gire el siguiente e*emplo:
enum @ene o { homb e,mu?e st uct %e sona { cha cha nomb e!25"; tele&ono!1,"; edad; 65 la edad se B ent e , > 255 aCos 56 8;

unsi@ned cha

enum @ene o se:o; 65 st uct % oducto >a lo de&inimos antes 56 st uct % oducto com% as!1,"; 8

)upongamos que queremos crear una peque3o programa que guarde in%ormaci&n de los clientes de una tienda. 4na buena opci&n es crear primero una estructura con la in%ormaci&n deseada de los clientes. "ara de%inir el se!o se podra haber hecho con un n+mero de manera que >0EI hombre, 6EI mu*er? con lo que es menos visible a la hora de programar, adems podramos caer en el error de asignar otro n+mero el se!o quedara indeterminado. "or eso es bueno de%inir -genero- como un tipo de datos

enumerado. )i quisi'ramos guardar tambi'n la in%ormaci&n de los +ltimos 60 productos comprados, a3adimos como campo de la estructura un vector de 60 productos.

Algoritmos
4na ve( conocemos los tipos de datos bsicos que van a contener nuestros programas, necesitamos conocer las &rdenes que daremos al computador para utili(arlos >a partir de ahora -instrucciones-?. 5e esto se encarga la algortmica. El orden en que se e*ecutan las lneas escritas en el programa >de ahora en adelante le llamaremos -%lu*o del programa-? va desde la primera lnea a la +ltima , en caso de colocar dos instrucciones en una misma lnea, de i(quierda a derecha. 1unque este es el orden bsico, mu a menudo necesitaremos volver a e*ecutar instrucciones que a se e*ecutaron, o repetir muchas veces una misma instrucci&n. :ambi'n a veces querremos que una orden se e*ecute algunas veces saltrnosla otras veces. "ara ello estn las -estructuras de control de %lu*o-. Otras veces querremos e*ecutar unas mismas lneas de c&digo desde di%erentes puntos del programa, que el c&digo e*ecutado tenga di%erentes e%ectos seg+n el valor que tengan algunas determinadas variables, para ello estn las -%unciones- los -procedimientos-.

Estructuras de control
if >Hcondici&nI? . Hinstrucciones a e*ecutar si se cumple la condici&nI C / else . Hinstrucciones a e*ecutar si no se cumple la condici&nID / )i se cumple la condici&n, se e*ecutan ciertas instrucciones. Opcionalmente, se pueden escribir instrucciones alternativas, que se e*ecutarn en caso que la condici&n no se cumpla. E*emplo: if (a<,) { % int&('Dl nume o es ne@ativo'); 8 else { % int&('Dl nume o es %ositivo'); 8 Ji*'monos que si un numero es menor que 0 >negativo?, s&lo se e*ecutar la instrucci&n entre el if el else. )i el n+mero no es negativo >positivo? entonces s&lo se e*ecutar la instrucci&n entre el else el +ltimo signo - !. if (a<,) { a34a

} Este c&digo sirve para obtener siempre el valor positivo de a >valor absoluto?. )i a es negativa, ha que cambiarle el signo. En cambio, si es positiva, se saltar el cambio de signo no se e*ecutar ninguna otra operaci&n alternativa. for"HvariableIEHvalor inicialI,condici&n de permanenciaI,HincrementoI? . Hinstrucciones a e*ecutarI / Kealmente esta estructura permite muchas ms %ormas de usarse, pero como son %ormas no necesarias algo complicadas de leer, trataremos el for de la manera simple clsica: se repite el con*unto de instrucciones que contiene incrementando el valor de una variable desde su valor inicial hasta el valor %inal indicado. 0os intervalos desde el valor inicial hasta el %inal pueden ser saltos de uno en uno, o de varios n+meros en varios n+meros. E*emplos: for(a3,;a<32;a3a21) { vecto !a"3,; 8 Esta secuencia iniciali(a a 0 los elementos de un vector que van del 0 al A6 >observar que la condici&n de permanencia es aHA2, a menor que A2?. for(a3,;a<332;a3a21) { vecto !a"3,; 8 Esta secuencia iniciali(a a 0 los elementos de un vector que van del 0 al A2 >observar que la condici&n de permanencia es aHEA2, a menor o igual que A2?. for(a)3,;a<32;a3a23) { vecto !a")3,; 8 Esta secuencia iniciali(a a 0 los A2 primeros elementos m+ltiplos de A de un vector, es decir, los elementos .0, A, <, B, 62, 6;, 68, 26, 2@, 29, A0/. Esto es as por que el incremento no es de 6 en 6 sino de A en A.

#hile"Hcondici&nI? .

Hinstrucciones a e*ecutarI / E*ecuta las instrucciones indicadas mientras se cumpla la condici&n indicada. E*emplo: i3, while(vecto !i"33,) { i3i21; } Esta secuencia de instrucciones recorre un vector de A2 posiciones, hasta que se encuentra un valor di%erente de 0 como uno de sus valores. do $ Hinstrucciones a e*ecutarI #hile "Hcondici&nI% Es similar a la estructura anterior, pero en ve( de comprobar si se cumple la condici&n al inicio de todo, lo hace al %inal. 0a di%erencia bsica es que si en la estructura anterior, al llegar al -Lhile- la condici&n no se cumple, las instrucciones de la estructura de control no se e*ecutarn nunca. En este Lhile, al menos se e*ecutarn una ve(. E*emplo: aEA, do . aEaM6, / Lhile >aEE9?, #$ Gientras a sea igual a 9 $# Como vemos, aEaM6 se e*ecutar una sola ve(, a que al no cumplirse la comprobaci&n Na es igual a 9N, se continuar e*ecutando el programa por la siguiente instrucci&n. s#itch >HvariableI? . case Hopci&n 6I: Hinstrucciones si se cumple la opci&n 6I brea&, case Hopci&n 2I: Hinstrucciones si se cumple la opci&n 2I brea&'

((( ((( case Hopci&n nI: Hinstrucciones si se cumple la opci&n nI brea&' default: Hinstrucciones si no se cumple ninguna opci&n anteriorI )eg+n el valor de la variable indicada, e*ecutar la secuencia de instrucciones que corresponda al valor. )i no coincide ninguna, se e*ecutar la secuencia indicada en default. E*emplo: switch(dia) { case lunes) % int&(EDsta break; case ma tes) % int&(EDsta break; case vie nes) % int&(EDsta break; default) % int&(EDsta }

ta de clases de dan=aF);

ta de clases de %intu aF);

ta de clases de sol&eoF);

ta de no ha> clasesF);

Esta secuencia selecciona el da de la semana que se introduce mira si para esa tarde ha programada alguna actividad. "ara los das en los que no ha nada programado se escribe el mensa*e por de%ecto.

Funciones
1 menudo es necesario e*ecutar desde di%erentes partes del programa unas mismas lneas de c&digo, pero en las que los datos pueden tomar valores di%erentes. "ara no tener que escribir varias veces el mismo c&digo estn las %unciones. "or e*emplo, imagine que necesita calcular varias veces qu' numero de entre tres es el ma or. "uede repetir varias veces el mismo c&digo en todos los puntos del programa, o puede llamar a una %unci&n a la cual s&lo ha que pasarle los A n+meros esta se encargar de devolvernos el ma or:
#include <stdio.h>

65 a continuaciGn viene la &unciGn Hue { int ma:; i&(a<b) { ma:3b; 8 else { ma:3a; 8 i&(ma:<c) { ma:3c; 8 8 int main(void) { int n13456#; int n236221; int n3345434; % int&('Dl nume o ma>o de +d, +d > +d es +d.1n', n1,n2,n3,ma:(n1,n2,n3)); etu n ,; 8 65va iable de visibilidad local56 eto na el mB:imo de 3 nIme os 56 int ma:(int a, int b, int c)

1qu se llama desde el programa principal a una %unci&n llamada max, a la cual se le indican los tres n+meros a evaluar como par)metros, retorna el valor del n+mero m!imo. 0a de%inici&n de una %unci&n es la siguiente: Htipo de retornoI HnombreI>Hlista de parmetrosI & HvoidI? . Hcuerpo de la %uncionI return Hvalor de retornoI / Observar que la %unci&n ha de retornar un valor, el cual se especi%ica en la cabecera. )i no queremos que retorne ning+n valor, s&lo nos interesa que realice determinadas instrucciones, debemos especi%icar como tipo de retorno void. 5e la

misma manera, si queremos especi%icar parmetros, ha que enumerarlos entre par'ntesis despu's del nombre de la %unci&n, con el %ormato Htipo de parmetroI Hnombre del parmetroI, cada uno de los cuales va separado del resto por una coma. )i no se quieren especi%icar parmetros habr que indicarlo entre los par'ntesis con void. Cuando se llama a una %unci&n con parmetros, estos pueden ser tanto variables como constantes. Es decir, podemos indicar un valor directamente, o podemos indicar la variable que contiene dicho valor. 1 continuaci&n vienen unos e*emplos del uso de %unciones: Junci&n que saca por pantalla un mensa*e de error. No hace %alta pasarle ning+n parmetro ni que retorne ning+n valor.
void e { % int&('0a ocu 8 ido un e o J1n'); o (void)

Junci&n que saca por pantalla un error especi%icado por el programador. No ser necesario que retorne nada, pero s ha que pasarle un n+mero de error por parmetro.
void e { % int&('0a sucedido el e 8 o nume o +d.1n',e no); o (int e no)

Junci&n que eleva al cuadrado un n+mero entero. )e necesita el n+mero a elevar como parmetro debe retornar el resultado.
int eleva(int num) { etu n num5num; 8 65multi%lica num %o sK mismo56

1hora veremos el uso de %unciones en el conte!to del programa mediante un e*emplo. =magine que quiere crear una aplicaci&n que calcule alguna %ormula %sica. 1dems el programa tiene que tener una presentaci&n inicial que diga si se quieren hacer los clculos o si se quiere salir del programa. "ara calcular la %&rmula %sica sera interesante crear una %unci&n, la pantalla de presentaci&n la podemos colocar en la parte principal del programa, la pantalla que muestre los clculos hacerla mediante otra %unci&n.
#include <stdio.h> 65 a continuaciGn viene la &unciGn Hue eto na la velocidad conse@uida de la acela aciGn > el tiem%o 56 a %a ti { etu n acele acion5tiem%o;

&loat velocidad(&loat acele acion, &loat tiem%o)

8 65 a continuaciGn viene la &unciGn Hue eto na la distancia eco ida a %a ti { 65 >a Hue distancia3velocidad5tiem%o llamamos a la &unciGn velocidad %a a calcula esta 56 de la acele aciGn > el tiem%o 56

&loat distancia(&loat acele acion,&loat tiem%o)

etu n velocidad(acele acion,tiem%o)5tiem%o; 8 void calculos(void) { &loat accel,tiem%o; % int&('(nt oduci scan&('+&',.accel); % int&('(nt oduci tiem%o) '); scan&('+&',.tiem%o); % int&('La distancia 8 int main(void) { cha do { % int&('1.4 Meali=a cBlculos.1n'); % int&('2.4 Nali .1n'); % int&('Dli?a o%ciGn) '); scan&('+d',.o%cion); i&(o%cion331) { calculos(); 8 8 Ohile(o%cionJ32); 65 mient as o%cion es di&e ente de 2 56 etu n ,; 8 o%cion; eco ida es +&.1n',distancia(accel,tiem%o)); acele aciGn) ');

% int&('La velocidad adHui ida es +&.1n',velocidad(accel,tiem%o));

0a salida por pantalla de este programa sera la siguiente:

>% ) *eali+ar c,lculos >2 ) -alir >.li/a opci0n: 3 >1pci0n incorrecta > >% ) *eali+ar c,lculos >2 ) -alir >.li/a opci0n: % >Introducir aceleraci0n y tiempo: 22% >322 >3a distancia recorrida es 2%2(44 >3a velocidad ad5uirida es 2&2 > >% ) *eali+ar c,lculos >2 ) -alir >.li/a opci0n: 2 >6Adi0s7 No se preocupe si todava no comprende del todo cuando es necesario incluir procedimientos %unciones en sus programas. 1 medida que va a viendo ms e*emplos va a creando sus propios programas ir viendo las grandes venta*as de estos elementos.

*tros elementos de los programas


1 continuaci&n, para acabar de comprender la estructura los elementos que componen un programa de ordenador, ha que introducir algunos conceptos bsicos ms, tales como la visibilidad de los datos >global o local?, los operadores las constantes.

Visibilidad de los datos: variables globales y variables locales


Observe el siguiente programa en C: #include <stdio.h> void % oc(int a) { a33; 8 int main(void) { int a36;

% oc(); 65 -ho a se e?ecuta el % ocedimiento % oc() 56 % int&(EDl valo de la va iable - es +d.1n',a) 8 Oemos que el programa se inicia asignando el valor < a la variable a, que se llama al procedimiento proc, donde se asigna el valor A a la variable a, se saca el resultado por pantalla. Entonces... PQu' cree usted que sacar por pantallaR 1 lo me*or pensar que la respuesta correcta es S>.l valor de la var iab le A T, pero es 3 sin embargo es S>.l valor de la var iab le A T. es SY cmo es posible si antes de sacar el resultado por pantalla se ha llamado a proc!" donde se le asi#na el valor $%T )e preguntar usted. "ues esto es debido a que la variable a es una variable local. Es decir, est de%inida en el procedimiento principal en el procedimiento proc!", en cada uno de ellos se trata de una variable distinta, aunque tengan el mismo nombre. U adems desde el procedimiento principal no se puede ver ni modi%icar la variable a declarada en el procedimiento proc!", ni desde proc!" se puede ver ni modi%icar la variable a declarada en el procedimiento principal. Observe ahora el siguiente programa en C: #include <stdio.h> int a; void % oc() { a33; 8 int main(void) { a36; % oc(); 65 -ho a se e?ecuta el % ocedimiento % oc() 56 % int&(EDl valo de la va iable - es +d.1n',a) 8 :al como habr podido intuir, el resultado de este programa es la salida por pantalla de S>.l valor de la var iab le A T. Esto es 3 es debido a que a es ahora una variable global. Esta ve( no est de%inida dentro del cuerpo de la %unci&n principal ni como parmetro de la %unci&n proc. Est de%inida al principio del programa, %uera de toda %unci&n. Esto signi%icar que a se puede leer modi%icar desde cualquier parte del programa. 0a a que se utili(a en el procedimiento proc!" la que se utili(a en el procedimiento principal son la misma variable. "ara acabar de entender los conceptos de global local, se podra hacer una comparaci&n entre los tipos de variables los ob*etos de la vida real: imagnese que

cada %unci&n es una casa, las personas son instrucciones >salvando las distanciasV?. 4na variable global sera el equivalente a un ob*eto que todo el mundo podra ver tocar, como podra ser un bu(&n, un cartel propagandstico, o un banco del parque. 4na variable local, en cambio, seran los ob*etos personales que estn dentro de una casa, s&lo los que habitan en 'sta pueden ver tocar.

Operadores numricos
0as variables en s son espacios reservados en la memoria para ser usados por los programas. "ero para utili(ar estas variables son necesarios los operadores, que son un con*unto de smbolos que indican la operaci&n que ha que reali(ar con una o varias variables, como puede ser una suma, una asignaci&n, etc... *perador de asignaci+n: )u %unci&n es asignar el valor de una variable o de una constante a otra variable. E*emplos: aEA, #$ asigna a la variable a el valor de la constante A $# bEa, #$ asigna a la variable b el valor a. Es decir, ahora b vale A $# aEaM6, #$ asigna a a el valor de a&'. Es decir, ahora a vale @ $# #$ 1l %inali(ar esta secuencia, b vale A a vale @. $# *peradores aritm,ticos: Wsicamente son: suma >M?, resta >7?, multiplicaci&n >$? divisi&n >#?. E*emplos: aE2 bEA aEb$A #$ a ahora vale B $# bEa7A #$ b ahora vale < $# aEaMA #$ a ahora vale 62 $# bEa#@ #$ b ahora vale @ $# *peradores de comparaci+n: se utili(an para comparar valores entre variables, estos son igual >EE?, menor que >H?, ma or que >I? di%erente >VE?. E*emplos: i& (a<5) { 65 aHuK va el cGdi@o Hue se e?ecuta Ka si a &ue a meno Hue 5 56 8 i& (aJ35) {

65 aHuK va el cGdi@o Hue se e?ecuta Ka si a &ue a di&e ente de 5 56 8 *peradores l+gicos: estos son y (&&) no (!) o ( ). )e utili(an para evaluar varias condiciones dentro de una misma. E*emplos: i&((a333) .. (b334)) { 65 aHuK va el cGdi@o Hue se e?ecuta Ka si > sGlo si a valiese 3 > b valiese 4 56 8 Ohile ( J(a33,) ) { 65 aHuK va el cGdi@o Hue se e?ecuta Ka sGlo mient as a no &ue a i@ual a , tambiPn se %od Ka es%eci&ica como aJ3, (a di&e ente de ,) 56 8 i&((a33,) || (a333)) { 65 aHuK va el cGdi@o Hue se e?ecuta Ka 56 65 si a valiese 3 G , 56 8 *peradores l+gicos a nivel de bit: )irven para operar con las variables, pero bit a bit. Estos operadores no los comentaremos, a que su utili(aci&n se sale de los ob*etivos de este libro. :an s&lo decir que son >X?, o >Y?, o e!clusivo >Z? los despla(amientos hacia i(quierda derecha >HH II?.

!onstantes
0as constantes son variables a las cuales no se les puede cambiar el valor. Es decir, se declaran en el programa con un valor inicial 'ste a no se puede cambiar. )u %inalidad es mu sencilla: imagnese que quiere crear un programa que opera con un vector de 2; elementos como el siguiente: void main(void) {

int a!25"; int i; &o (i3,;i<25;i22) { a!i"3, 8 8 1hora imagine que ha cambiado de opini&n quiere que el vector no sea de 2; elementos, sino de @;. No le costar mucho cambiar los 2; que ha escrito por un par de @;. "ero si se tratara de un programa mu largo, donde el n+mero 2; est escrito cientos de veces, podra ser bastante engorroso cambiarlos todos, probablemente alguno se nos olvidara. Este problema lo hubi'ramos evitado si desde el principio se hubiera utili(ado una constante para de%inir el n+mero de elementos del vector: #de&ine QRSADLDSN 25 void main(void) { int a!QRSADLDSN"; int i; &o (i3,;i<QRSADLDSN;i22) { a!i"3, 8 8 4na constante es un n+mero cu o valor no se puede cambiar, a que no es una variable. "oniendo al principio la directiva (define seguida del nombre de la constante del valor, podremos escribir en el cuerpo del programa el nombre de la constante en ve( del n+mero al que representa. 1s bastar con cambiar la constante para cambiar el valor en todo el programa. Otro e*emplo del uso de constantes es el usar constantes %sicas matemticas, por e*emplo: [de%ine pi A.6@6;B2<;A;8B En este e*emplo, sabemos que nunca vamos a cambiar el valor de la constante >pi es siempre el mismo valor?, pero nos resulta ms c&modo en el programa escribir pi en ve( de A.6@6;... cada ve( que queramos hacer re%erencia a 'ste.

No escatime en utili(ar constantes, a que puede %acilitarle mucho traba*o, tambi'n a uda a hacer el programa ms legible por el programador, no ocupan memoria ni se pierde velocidad.

Estructura de un programa
1hora que conoce los elementos bsicos de un programa, pasamos a describir su estructura. :odo programa que escriba tendr la siguiente estructura: [Hinclusi&n de librerasI [Hde%inici&n de constantesI Hde%inici&n de variables globalesI Hdeclaraci&n de %uncionesI H%unci&n principal del programa >main?I

You might also like