You are on page 1of 12

INTRODUCCIN En muchos casos los programas son lineales.

Las lneas de cdigo se iban ejecutando una a una en orden hasta que el programa acababa. Esto hace que sea imposible programar algunas situaciones. Cmo hacemos por ejemplo que el usuario teclee una letra y haga una cosa u otra dependiendo de la tecla que haya pulsado? Pensemos por ejemplo en un videojuego. Un videojuego tiene un bucle (Un bucle o ciclo, en programacin, es una sentencia que se realiza repetidas veces a un trozo aislado de cdigo, hasta que la condicin asignada a dicho bucle deje de cumplirse) principal que se ejecuta de forma indefinida, se sigue ejecutando hasta que apagas la consola o sales del juego, esto es porque necesita comprobar ciertas cosas continuamente, por ejemplo cada ciclo comprueba si hemos pulsado un botn y si lo hemos hecho hace tal cosa. Esto solo es posible con sentencias, estas son las unidades ejecutable ms pequea de un programa, en otras palabras una lnea de cdigo escrita es una sentencia. Especifican y controlan el flujo y orden de ejecucin del programa. Una sentencia consta de palabras clave o reservadas como (cout, cin, for, while, if ... else, etc.), expresiones, declaraciones, o llamadas a funciones. Si no existen sentencias especficas de seleccin o salto, el programa se ejecuta de forma secuencial en el mismo orden en que se ha escrito el cdigo fuente (es el que podramos considerar orden "natural" de ejecucin).

DEFINICIN Una expresin es una secuencia de operadores; operandos; elementos de puntuacin y palabras clave, que especifican una computacin. Tiene sentido computacional en s misma y equivale a una frase en el lenguaje normal. Entre sus caractersticas distintivas estn las de poder producir un resultado y posibles efectos laterales. Ejemplo: extern x; y = 22; z = i++; // No produce un valor // Produce un valor // Valor + efectos laterales

Cualquier expresin finalizada en un punto y coma ; forma una sentencia: < expresin >; Las sentencias se ejecutan evaluando la expresin. Todos los efectos colaterales de la evaluacin son tenidos en cuenta antes de ejecutar la prxima sentencia. La mayora de sentencias son asignaciones o llamadas a funciones. Un caso especial es la sentencia nula; consiste en un punto y coma (;) aislado. Una sentencia nula no hace nada, pero puede ser necesaria en situaciones en que la sintaxis del lenguaje espere una sentencia pero nuestro programa no necesita hacer nada. CLASIFICACIN Dada la definicin anterior, resulta evidente que pueden existir infinitas sentencias distintas, e innumerables criterios para su clasificacin. Una de las posibles, que adems coincide con la clasificacin del Estndar, distingue las siguientes clases de sentencia:

De etiqueta De expresin Compuestas De seleccin De iteracin De salto De declaracin Bloques de intento

Adems de las anteriores, por sus caractersticas especiales podramos considerar las siguientes clases adicionales:

Sentencias de preproceso Sentencias ensamblador

Sentencias de etiqueta Existen tres clases de sentencias etiquetadas: las etiquetas directas, las sentencias case y las default, estas ltimas se utilizan en conjuncin con las sentencias switch. Sentencias de expresin Podramos decir que son las que no pertenecen a ninguno de los otros grupos y que, en la prctica, son las ms abundantes. Generalmente son asignaciones o invocaciones de funciones. Ejemplo: pint = &x; foo(c); Sentencias compuestas Las sentencias compuestas, tambin denominadas bloques se utilizan en aquellas situaciones en que la sintaxis espera una sentencia pero se necesita usar varias. Ejemplo: if (first) ++x; else { --x; z = a; } En caso de cumplirse la condicin hay que incrementar x, lo que puede hacerse en una sola sentencia, pero si la condicin resulta falsa, se precisan dos computaciones. Para que se comporten como una sola frente a else, se recurre a englobarlas en un bloque entre llaves { ... }. Las sentencias dentro del bloque se comportan como una sola y constituyen un mbito lxico. Los identificadores definidos en su interior eclipsan a los exteriores y las variables automticas creadas en l son destruidas al salir del mbito. Sentencias de seleccin Las sentencias de seleccin o de control de flujo, pueden decidir entre varios cursos de accin distintos en funcin de ciertos valores. Existen dos tipos de estas sentencias de seleccin: if...else y switch. Ejemplo: switch ( foo() ) { case 0: case 1: if (first) break; else ++x; case 2: ... default: break; }

Sentencias de iteracin Las sentencias de iteracin permiten repetir un conjunto de sentencias ejecutando un bucle. En C++ existen tres formas de iteraciones: los bucles while, dowhile y for. Ejemplo: while (first) { ... for (int x = 1; x < y; ++x) { ... do { // begin second ... ... } while (second); // end second ... } // end for ... } // end first Sentencias de salto Las sentencias de salto permiten transferir el control del programa de forma incondicional. Existen cuatro de estas sentencias: break, continue, y return. Ejemplo: while (foo) { start: if (some) break; ... if (first) goto start; ... if (second) continue; ... if (! any) return; ... } Sentencias de declaracin Este tipo de sentencias introducen uno o ms identificadores en un bloque. Ejemplo: void foo (int x, y z) { float f = 3.14; char c; int x; ... }

Bloques de intento Estas sentencias deben estar seguidas de una sentencia catch y tienen la forma: try { ... } Sentencias de preproceso Constituyen un tipo muy especial, tanto en su sintaxis como en su comportamiento. No representan una computacin en tiempo de ejecucin (runtime), sino de compilacin, ya que su efecto es realizar modificaciones sobre el cdigo fuente. Su sintaxis tambin es especial; no requieren el punto y coma de terminacin y comienzan siempre con el smbolo #. Sentencias ensamblador C++ dispone de la opcin de poder escribir directamente instrucciones en lenguaje ensamblador junto con el resto del cdigo fuente. Para esto dispone de una palabra clave especfica: asm. La palabra asm indica que la cadena literal que sigue ser incluida en el cdigo objeto en la posicin indicada. La sintaxis empleada depende del compilador. En el caso de C++ Builder, es la siguiente: asm <opcode> <operandos> <; o NL> Ejemplo asm pop dx; asm push ebx; asm call @@std@%basic_ostream$c19std@%char_traits$c%%@put$qc; asm add esp,8; asm push ebx; Se permite que varias instrucciones ensamblador puedan ser agrupadas en un solo bloque precedido por el indicador asm. Ejemplo: asm { mov ax, 0x0e07; xor bx, bx; int 0x10; } La sintaxis empleada por el compilador C++ GNU para Windows utilizado por Dev-C++ no utiliza la sintaxis de Intel, sino la de AT&T. Ejemplo: int AdrIO; // variable global static char ValIO; // variable global void foo() { __asm("mov _AdrIO, %dx") ; // cargar un registro de 16 bits __asm("mov _ValIO, %al") ; // cargar un registro de 8 bits

__asm("mov %ax,%dx") ; }

// mover contenido registro AX a DX

FUNCIONES DEFINICIN DE UNA FUNCIN tipo nombre_funcin(tipo1 arg1, tipo2 arg2, ... ,tipoN argN) { declaracin variables locales; cuerpo funcin } O bien: tipo nombre_funcin(arg1, arg2, ... , argN) tipo1 arg1; tipo2 arg2; ... tipoN argN; { declaracin variables locales; cuerpo funcin } El tipo que aparece delante del nombre_funcin, es el tipo del valor que devuelve esta funcin. Si lo que se quiere implementar es un procedimiento en lugar de una funcin, el tipo devuelto se declara void. Asimismo, cuando no exista ningn parmetro formal, se deben poner simplemente los dos parntesis ( ). Se devuelve un valor desde la funcin hasta el punto del programa desde donde se llam, mediante la sentencia return expresin. Si se omite la expresin, simplemente hace que se devuelva el control al punto de llamada. Ejemplo:

int factorial (int n) { int i, fact = 1; if(n > 1) for (i=2; i <= n; i++) fact = fact*i; return(fact); }

Para hacer una llamada a la funcin anterior, sera por ejemplo: a = factorial(3);

PASO DE PARMETROS El paso de parmetros en C es por valor, pero se puede simular una llamada por referencia utilizando un puntero como argumento. Este argumento formal tendr la forma : tipo_i *arg_i , y a la hora de realizar la llamada, el parmetro real tendr el formato : &param Ejemplo: void { inti; factorial (int n, int *fact)

*fact = 1; if(n > 1) for(i = 2; i <= n; i++) *fact = *fact *i; } Y un ejemplo de llamada a esta funcin: inta; factorial (3, &a);

DECLARACIN DE LA CABECERA DE UNA FUNCIN

Tendr el siguiente formato: tipo nombre_funcin (tipo1 arg1, ... ,tipoN argN); O bien,

tipo nombre_funcin(arg1, arg2, ... , argN) tipo1 arg1; tipo2 arg2; ... tipoN argN;

PASO DE PARMETROS A LA FUNCIN main() main( ) es la funcin principal del programa, y tambin se le pueden pasar parmetros como a cualquier otra funcin, ya que no es ms que la primera funcin a la que se llama dentro de un programa. El paso de parmetros se realizar desde el intrprete de comandos o desde la llamada al sistema que ejecuta un nuevo programa (exec). Para ello se usan dos argumentos especiales predefinidos: argc y argv. El parmetro argc es un entero que contiene el nmero de argumentos de la lnea de comandos. Siempre tiene el valor como mnimo de 1, ya que contabiliza tambin el nombre del programa como un parmetro. Siempre que uti- lizamos el valor de algn parmetro pasado al main, hay que verificar el valor de argc. El parmetro argv es un vector de punteros a carcteres. Los punteros a carcteres apuntan a las cadenas que con- tienen los argumentos que se pasan en la lnea de comandos. El siguiente esquema indica cmo estn definidos los argumentos argc y argv dentro del main : main(argc,argv) intargc;

char*argv[]; { ........... } Una alternativa a este esquema es la siguiente : main(intargc, char*argv[]) { ............. ............. }

El paso de parmetros se realizar desde la lnea de comandos de la siguiente manera: nombre_programa param_1 param_2 ... param_N Ejemplo: A continuacin se expone un programa cuyo ejecutable se llama exponenciacion, que eleva a un expo- nente una cierta base. Base ser el primer argumento desde la lnea de comandos, y exponente el segundo. #include <stdlib.h> main(int argc,char *argv[]) { interror, i, result = 1, base, exp; if(argc!=3)error=1; else { } return(error) } /* atoi es una funcin de conversin de tipos; dado un string, te devuelve el entero asociado */

base = atoi (argv[1]); exp = atoi (argv[2]); if(exp > 0) for(i = 0; i < exp; i++)result = result*base; error = 0; Una posible llamada al programa anterior podra ser: exponenciacion 2

La estandarizacin de los smbolos para la elaboracin de Diagramas de Flujo tard varios aos. Con el fin de evitar la utilizacin de smbolos diferentes para representar procesos iguales, la Organizacin Internacional para la Estandarizacin (ISO, por su sigla en ingls) y el Instituto Nacional Americano de Estandarizacin (ANSI, por su sigla en ingls), estandarizaron los smbolos que mayor aceptacin tenan en 1985. Los siguientes son los principales smbolos para elaborar Diagramas de Flujo: Inicio/Final Se utiliza para indicar el inicio y el final de un diagrama; del Inicio slo puede salir una lnea de flujo y al Final slo debe llegar una lnea. Decisin Indica la comparacin de dos datos y dependiendo del resultado lgico (falso o verdadero) se toma la decisin de seguir un camino del diagrama u otro. Iteracin Indica que una instruccin o grupo de instrucciones deben ejecutarse varias veces.

Entrada General Entrada/Salida de datos en General (en esta gua, solo la usaremos para la Entrada).

Entrada por teclado Instruccin de entrada de datos por teclado. Indica que el computador debe esperar a que el usuario teclee un dato que se guardar en una variable o constante. Llamada a subrutina Indica la llamada a una subrutina o procedimiento determinado.

Salida Impresa Indica la presentacin de uno o varios resultados en forma impresa.

Salida en Pantalla Instruccin de presentacin de mensajes o resultados en pantalla.

Accin/Proceso General Indica una accin o instruccin general que debe realizar el computador (cambios de valores de variables, asignaciones, operaciones aritmticas, etc). Flujo Indica el seguimiento lgico del diagrama. Tambin indica el sentido de ejecucin de las operaciones.

Conector Indica el enlace de dos partes de un diagrama dentro de la misma pgina.

Conector Indica el enlace de dos partes de un diagrama en pginas diferentes.

You might also like