lunes, 25 de octubre de 2010

burbuja

El Ordenamiento de burbuja (Bubble Sort en inglés) es un sencillo algoritmo de ordenamiento. Funciona revisando cada elemento de la lista que va a ser ordenada con el siguiente, intercambiándolos de posición si están en el orden equivocado. Es necesario revisar varias veces toda la lista hasta que no se necesiten más intercambios, lo cual significa que la lista está ordenada. Este algoritmo obtiene su nombre de la forma con la que suben por la lista los elementos durante los intercambios, como si fueran pequeñas "burbujas". También es conocido como el método del intercambio directo. Dado que solo usa comparaciones para operar elementos, se lo considera un algoritmo de comparación, siendo el más sencillo de implementar.

viernes, 15 de octubre de 2010

ejemplo de vectores 2

realizar un ejercicio en la cual su indice sea hasta 9 y con los numeros de 2 en 2 hasta 20

#include (stdio.h)
#include (conio.h)
#include (string.h)

void main()
{
int i,a;
int serie[10]={0,1,2,3,4,5,6,7,8,9};
i=0;
for (a=2;a<=20;a=a+2)
{
printf("\nserie %d vector %d ",serie[i],a);
i++;
}

getch();
clrscr();
}

ejemplo de vectores

realizar un programa donde el indice empiece en 0 y termien en 9 es decir 10 elementos de 1 al 10.

#include (stdio.h)
#include (conio.h)
#include (string.h)

void main()
{
int i,a;
int serie[10]={0,1,2,3,4,5,6,7,8,9};
i=0;
for (a=1;a<=10;a++)
{
printf("\nserie %d vector %d ",serie[i],a);
i++;
}

getch();
clrscr();
}

INDICE DE VECTORES

Todo vector se compone de un determinado número de elementos. Cada elemento es referenciado por la posición que ocupa dentro del vector. Dichas posiciones son llamadas índice y siempre son correlativos. Existen tres formas de indexar los elementos de una matriz:
 Indexación base-cero (0): En este modo el primer elemento del vector será la componente cero ('0') del mismo, es decir, tendrá el indice '0'. En consecuencia, si el vector tiene 'n' componentes la última tendrá como índice el valor 'n-1'. EL lenguaje C es un ejemplo típico que utiliza este modo de indexación.
 Indexación base-uno (1): En esta forma de indexación, el primer elemento de la matriz tiene el índice '1' y el último tiene el índice 'n' (para una matriz de 'n' componentes).
 Indexación base-n (n): Este es un modo versátil de indexación en la que el índice del primer elemento puede ser elegido libremente, en algunos lenguajes de programación se permite que los índices puedan ser negativos e incluso de cualquier tipo escalar (también cadenas de caracteres).

TIPOS DE VECTORES

LOS TIPOS DE VECTORES SON:

Tipos de datos en coma flotante
Se usan para representar números con partes fraccionarias. Hay dos tipos de coma flotante: float y double. El primero reserva almacenamiento para un número de precisión simple de 4 bytes y el segundo lo hace para un numero de precisión doble de 8 bytes.

Literales en coma flotante
Representan números decimales con partes fraccionarias. Pueden representarse con notación estándar (563,84) o científica (5.6384e2).
De forma predeterminada son del tipo double (8 bytes). Existe la opción de usar un tipo más corto (el tipofloat de 4 bytes), especificándolo con una F ó f al final del número.

Tipo de datos boolean
Se usa para almacenar variables que presenten dos estados, que serán representados por los valores true yfalse. Representan valores bi-estado, provenientes del denominado álgebra de Boole.

Tipo de datos carácter
Se usa para almacenar caracteres Unicode simples. Debido a que el conjunto de caracteres Unicode se compone de valores de 16 bits, el tipo de datos char se almacena en un entero sin signo de 16 bits.

INICIALIZACION SE VECTORES

INCIALIZACION DE VECTORES

Los vectores en C deben manipularse elemento a elemento. No se pueden modificar todos los elementos a la vez.
Para asignar valores a los elementos de un vector, por lo tanto, el mecanismo es este:
int serie[5];
serie[0] = 5;
serie[1] = 3;
serie[2] = 7;
...etc...
La inicialización de los valores de un vector también puede hacerse conjuntamente en el momento de declararlo, así:
int serie[5] = {5, 3, 7, 9, 14};
El resultado de esta declaración será un vector de 5 elementos de tipo entero a los que se les asigna estos valores:
0 1 2 3 4
+---+---+---+---+----+
| 5 | 3 | 7 | 9 | 14 |
+---+---+---+---+----+

VECTORES EN C++

En programación, una matriz o vector es una zona de almacenamiento contiguo, que contiene una serie de elementos del mismo tipo, los elementos de la matriz. Desde el punto de vista lógico una matriz se puede ver como un conjunto de elementos ordenados en fila (o filas y columnas si tuviera dos dimensiones). En principio, se puede considerar que todas las matrices son de una dimensión, la dimensión principal, pero los elementos de dicha fila pueden ser a su vez matrices (un proceso que puede ser recursivo), lo que nos permite hablar de la existencia de matrices multidimensionales, aunque las más fáciles de imaginar son los de una, dos y tres dimensiones.
Estas estructuras de datos son adecuadas para situaciones en las que el acceso a los datos se realice de forma aleatoria e impredecible. Por el contrario, si los elementos pueden estar ordenados y se va a utilizar acceso secuencial sería más adecuado utilizar una lista, ya que esta estructura puede cambiar de tamaño fácilmente durante la ejecución de un programa.

miércoles, 8 de septiembre de 2010

TAREAS DE PROGRAMAS EN C++

TAREAS PROGRAMAS EN C++
1.- CONSTRUIR UN PROGRAMA QUE DESPLIEGUE LOS NÚMEROS DEL 20 AL 30.
2.- DESPLEGAR LOS ENTEROS ENTRE 50 Y 30 ACOMPAÑADOS DE SU POTENCIA CUADRADA Y RAÍZ CUBICA RESPECTIVA (revisar el tema de operadores aritmeticos).
3.- DESPLEGAR LOS MÚLTIPLOS DE 5, ENTRE 10 Y 50, ACOMPAÑADOS DE SU FACTORIAL Y LOGARITMO RESPECTIVO (revisar el tema de operadores aritmeticos tambien).
4.- DESPLEGAR LA TABLA DE MULTIPLICAR QUE EL USUARIO INDIQUE.
5.- EVALUAR LA FUNCION Y=5X^2 + 3X + 8 CUANDO X–> -3…10 (RANGO DE -3 HASTA 10)

CICLO FOR

Casos Particulares del ciclo for:
1.- El ciclo comienza en uno y se incrementa de uno en uno este es el caso mas general.
2.- Pero el valor inicial puede se diferente de uno, ejemplo;
for(x=5;x⇐15;x=x+1){ etc.};
3.- Incluso el valor inicial puede ser negativo, ejemplo;
for (x = -3 ;x⇐ 8; x=x+1) { etc.};
4.- Los incrementos también pueden ser diferentes al de uno en uno, ej.;
for (x=1; x⇐ 20; x=x+3){ etc. };
5.- Incluso pueden ser decrementos, solo que en este caso, recordar;
5.1.-el valor inicial de la variable debe ser mayor que el valor final.
5.2.-cambiar el sentido de la condición.

CICLOS EN C++

CICLOS

Un bucle o ciclo, en programación, es una sentencia que se realiza repetidas veces a un trozo aislado de código, hasta que la condición asignada a dicho bucle deje de cumplirse.
Generalmente, un bucle es utilizado para hacer una acción repetida sin tener que escribir varias veces el mismo código, lo que ahorra tiempo, deja el código más claro y facilita su modificación en el futuro.
El bucle y los condicionales representan la base de la programación estructurada. Es una evolución del código ensamblador, donde la única posibilidad de iterar un código era establecer una sentencia jump (que en los lenguajes de programación fue sustituida por el "ir a" o GOTO).
Los tres bucles más utilizados en programación son el bucle while, el bucle for y el bucle repetir.
Ejemplo en código C de sentencias repetidas:
int var=0;


//código que puede ser sustituido por un bucle
var = var + 2; //var igual a 2 (puede ser sustituído por var+=2)
var = var + 2; //var igual a 4
var = var + 2; //var igual a 6
var = var + 2; //var igual a 8
var = var + 2; //var igual a 10
// fin de código que puede ser sustituido por un bucle

printf("el resultado es %i", var );

Ejemplo con un bucle:

int var=0;

//Código para el bucle
int i;

// este es el Bucle for
for(i=0;i<10;i+=2)
{
var += 2;
}


printf("el resultado es %i", var);

EJEMPLOS DE CICLOS REPETITIVOS EN C++

EJEMPLO:

Código prog6.cpp

#include

#include

#include

void main()

{

clrscr();

// declaracion variables

int x;

// instruccion for

for(x=1;x<=10;x=x+1)

{ gotoxy(10, x+4); printf("%d MAMA",x); };

getchar();

}

CICLOS REPETITIVOS C++

Instrucciones Para ciclos resuelven el problema de repetir todo el programa o cierta parte del programa más de una vez.
CICLOS REPETITIVOS:
Este ciclo es uno de los más usados para repetir una secuencia de instrucciones, sobre todo cuando se conoce la cantidad exacta de veces que se quiere que se ejecute una instrucción simple o compuesta.
Su formato general es:
for (inicialización; condición; incremento)
{Instrucción(es); };

En su forma simple la inicialización es una instrucción de asignación que carga la variable de control de ciclo con un valor inicial.
La condición es una expresión relacional que evalúa la variable de control de ciclo contra un valor final o de parada que determina cuando debe acabar el ciclo.
El incremento define la manera en que la variable de control de ciclo debe cambiar cada vez que el computador repite un ciclo.
Se deben separar esos 3 argumentos con punto y coma (;)

miércoles, 25 de agosto de 2010

libreria

Una librería es un conjunto de recursos (algoritmos) prefabricados, que pueden ser utilizados por el programador para realizar determinadas operaciones. Las declaraciones de las funciones (prototipos http://www.zator.com/Cpp/images/Ico_hoja.gif 4.4.1) utilizadas en estas librerías, junto con algunas macros y constantes predefinidas que facilitan su utilización, se agrupan en ficheros de nombres conocidos que suelen encontrarse en sitios predefinidos. Por ejemplo, en los sistemas UNIX, en /usr/include. Estos ficheros se suelen llamar "de cabecera", porque es tradición utilizar las primeras líneas del programa para poner las directivas #include que los incluirá en el fuente durante la fase de preprocesado

§2 Clases de librerías

Los compiladores C++ incluyen un amplio repertorio de clases, funciones y macros que permiten realizar una amplia variedad de tareas, incluyendo entradas/salidas de bajo y alto nivel; manipulación de cadenas alfanuméricas y ficheros; control de procesos (incluyendo multiproceso); manejo de memoria; cálculos matemáticos y un largo etcétera.

Este repertorio de recursos es denominado colectivamente como "Rutinas de librería"; "Librerías de ejecución" RTL ("Runtime Librarys") o simplemente "Librerías". Puede decirse que el lenguaje aislado (tal cual) no tiene prácticamente ninguna utilidad sin la concurrencia de estas utilidades. El Estándar C++ las clasifica según su utilidad:

  • Soporte del lenguaje
  • Diagnóstico
  • Utilidades generales
  • Cadenas alfanuméricas ("Strings")
  • Localización
  • Contenedores
  • Iteradores
  • Algoritmos
  • Cálculo numérico
  • Entrada/Salida

§2.1 Librería Estándar C++

Para poner un poco de orden, el Estándar C++ define la denominada Librería Estándar que debe acompañar a cada implementación del compilador que se adhiera al estándar. Es decir: la norma determina cuales son, como se llaman y como se utiliza este conjunto de algoritmos que deben acompañar (como mínimo) a cada implementación del compilador que quiera llamarse "Estándar". La última versión, ISO/IEC 14882 del año 1998, especifica que se compone de 32 ficheros de cabecera de nombres fijos y conocidos agrupados según la funcionalidad de los algoritmos. Son los siguientes:

Ficheros

Funcionalidad/funciones

<algorithm>

Parte de la STL que describe los algoritmos

<bitset>

Parte de la STL relativa a contenedores tipo bitset . Set de valores booleanos.

<complex>

Parte de la librería numérica de la STL relativa a los complejos

<deque>

Parte de la STL relativa a contenedores tipo deque; un tipo de colas: "Double-ended-queue"

<exception>

Parte de la librería de diagnóstico relativa al manejo de excepciones

<fstream>

Flujos hacia/desde ficheros.

<functional>

Parte de la STL relativa a Objetos-función

<iomanip>

Manipuladores.

<ios>

Supreclases para manejo de flujos de E/S.

<iosfwd>

Contiene declaraciones adelantadas de todas las plantillas de flujos y sus typedefs estándar. Por ejemplo ostream.

<iostream>

Parte del a STL que contiene los algoritmos estándar de E/S.

<istream>

Algoritmos estándar de flujos de entrada.

<iterator>

Parte de la STL relacionada con iteradores, un tipo de puntero que permite utilizar los algoritmos de la Librería con las estructuras de datos representadas por los contenedores.

<limits>

Descripción de propiedades dependientes de la implementación que afectan a los tipos fundamentales.

<list>

Parte de la STL relativa a contenedores tipo list listas doblemente enlazadas

<locale>

Parte de la STL relativa a la internacionalización

<map>

Parte de la STL relativa a contenedores tipo map

<memory>

Utilidades relativas a la gestión de memoria, incluyendo asignadores y punteros inteligentes (auto_ptr).

<new>

Manejo de memoria dinámica

<numeric>

Parte de la librería numérica de la STL relativa a operaciones numéricas

<ostream>

Algoritmos estándar para los flujos de salida.

<queue>

Parte de la STL relativa a contenedores tipo queue ; colas de objetos

<set>

Parte de la STL relativa a contenedores tipo set

<sstream>

Flujos hacia/desde cadenas alfanuméricas.

<stack>

Parte de la STL relativa a contenedores tipo stack ; pilas de objetos.

<stdexcept>

Parte de la STL relativa a las clases de las que derivan los objetos lanzados por las excepciones ocasionadas en los algoritmos de la propia STL y otras expresiones. Estas clases son utilizadas para reportar errores detectados durante runtime. Los usuarios también pueden utilizar excepciones para reportar errores en sus propios programas

<streambuf>

Parte de la STL relativa al Almacenamiento de flujos de E/S ("Stream buffers"). Define los tipos que controlan la capa de transporte.

<string>

Parte de la STL relativa a contenedores tipo string ; una generalización de las cadenas alfanuméricas para albergar cadenas de objetos.

<typeinfo>

Mecanismo de identificación de tipos en tiempo de ejecución.

<utility>

Parte de la STL que contiene elementos auxiliares como operadores y pares (pairs).

<valarray>

Parte de la librería numérica de la STL relativa a manejo de matrices numéricas ()

<vector>

Parte de la STL relativa a los contenedores tipo vector; una generalización de las matrices unidimensionales C/C++


Es digno de mención que aunque generalmente las librerías no aportan ninguna característica al lenguaje (se supone que son utilidades auxiliares que no forman parte del lenguaje propiamente dicho), una pequeña porción de la Librería Estándar C++ sí aporta características que se consideran pertenecientes a este, de forma que deben estar presentes los ficheros de cabecera correspondientes si se desea usarlas. En concreto se refieren a los siguientes elementos:

  • Operadores new, new[], delete y delete[]
  • Clase type_info que corresponde al mecanismo RTTI de identificación de tipos en tiempo de ejecución representado por el operador typeid Rutinas de inicio y terminación Las excepciones estándar lanzadas por los algoritmos anteriores

§2.2 Librería C

Además de otras nuevas, cuyo diseño e importancia cambian drásticamente la filosofía del lenguaje, C++ incluye prácticamente la totalidad de funciones de la primitiva librería estándar C. A esta librería, mantenida por compatibilidad, la denominamos Librería clásica

§3 Componentes

Al referirnos a las librerías C++ utilizamos la terminología siguiente:

  • RTL Conjunto de librerías que acompañan a un compilador ("Runtime Library"), sean o no estándar.
  • Librería Estándar. Conjunto de librerías cuyo contenido está definido por el Estándar C++ (abreviadamente LE)
  • Libería clásica. Parte de la Librería Estándar correspondiente al C clásico.
  • STL ("Standard Templete Library"). Parte de la LE genuina de C++ (que no es heredada de C) y que responde a la forma "++" de hacer las cosas.

La calidad de un compilador C++ viene determinada en gran medida por la calidad y cantidad de su RTL; por su grado de adherencia al Estándar [6] y por el grado de soporte que proporciona para la plataforma concreta a que se destina.


A grandes rasgos la librería Estándar C++ comprende los siguientes módulos:

  • La denominada Librería Estándar de Plantillas abreviadamente STL ("Standard Templete Library").
    • Librería numérica. Parte de la STL que contiene algoritmos especialmente concebidos para computación numérica. Por ejemplo, una clase valarray optimizada para matrices numéricas y una clase complex para manejo y representación estandarizada de números complejos (en realidad una plantilla con especializaciones para los tipos float, double y long double).
    • Utilidades. Parte de la STL dedicada a elementos auxiliares tales como adaptadores y la clase auto_ptr.
  • Unas utilidades de entrada/salida de flujos, denominadas genéricamente iostreams Una utilidad locale para manejo de localismos Una clase string para manejo estandarizado de cadenas de caracteres. En realidad es una instanciación (especialización) de la plantilla basic_string para cadenas de caracteres.
  • Un esquema para describir de modo uniforme el entorno de ejecución mediante la utilización de una clase estándar denominadanumeric_limits y especialización para cada uno de los tipos de datos fundamentales.
  • Utilidades para manejo de memoria Soporte para utilización de juegos de caracteres y signos de diversos idiomas.
  • Utilidades de diagnóstico y manejo de errores. Incluyen manejo de excepciones y la macro assert

§4 Funcionalidad

Si atendemos a su funcionalidad, las utilidades ofrecidas por la Librería Estándar pueden agruparse en:

  • Clasificación: Clasifican caracteres ASCII, como letras, caracteres de control (no imprimibles), Mayúsculas/minúsculas etc. Se definen en la cabecera <ctype.h>.
  • Entradas/Salidas de Consola: Estas son las denominadas entrada/salida estándar. Por defecto se refieren al teclado y a la pantalla (no pueden utilizarse directamente en aplicaciones de interfaz gráfica).
  • Conversión: Convierten caracteres y cadenas de caracteres desde formato alfabético a numérico de diversos tipos (float, int,long). También realizan la conversión inversa: de formatos numéricos a representaciones alfabéticas y de mayúsculas a minúsculas y viceversa.
  • Diagnóstico: Son rutinas destinadas a comprobaciones; a descubrir y corregir posibles errores.
  • Directorio: Rutinas para manejo de directorios y sus direcciones (path names).
  • En linea (Inline): Rutinas para versiones inline de funciones. El compilador genera el código correspondiente para las versiones inline cuando se utiliza #pragma intrinsic o si se solicita optimización al compilador (optimización de tiempo de ejecución).
  • Entrada/Salida. Son rutinas que proporcionan manejo de flujos y operaciones de Entrada/Salida a bajo nivel (de Sistema Operativo).
  • Manipulación. Manejo de cadenas y bloques de memoria: copiar, comparar, convertir y buscar.
  • Matemáticas: Para realizar cálculos matemáticos.
  • De Memoria: Proporcionan asignación de memoria dinámica.
  • Miscelánea. Se agrupan aquí rutinas varias, como las que posibilitan saltos (goto) no locales y las que manejan diferencias de tipo cultural o de lenguaje. Por ejemplo representación de números, de moneda, formatos de fecha y hora, clasificación de tipo alfabético, etc.
  • Control de proceso. Rutinas que permiten invocar y terminar nuevos procesos desde otra rutina.
  • Fecha y hora. Incluyen rutinas para conversión y manipulación de variables de medida del tiempo (fecha y hora).
  • Argumentos variables. Rutinas utilizadas cuando se usan listas variables de argumentos, como en los casos de printf(),vscanf(), etc.

§5 Utilización

La utilización de la Librería Estándar C++ requiere de dos tipos de condiciones que podríamos describir como formales y conceptuales.


§5.1
En cuanto a las primeras (condiciones formales) y habida cuenta que las utilidades aparecen en forma de funciones, resulta evidente que su utilización exige incluirlas en nuestro programa. Para ello se necesitan tres pasos (en realidad las exigencias son las mismas que con cualquier otra función, la diferencia estriba en la forma en que se realizan los pasos b y c):

http://www.zator.com/Cpp/images/dot2.gif a: Incluir en el código fuente las invocaciones a las funciones que estamos utilizando. Ejemplo:

printf("Esto es una llamada a la función \"printf\" de librería\n");

http://www.zator.com/Cpp/images/dot2.gif b: Incluir en el código fuente los prototipos de dichas funciones.

Puesto que los prototipos ya están incluidos en los ficheros estándar de cabecera, hay que indicar al compilador que los incluya [2]. Esto se realiza poniendo en nuestro fuente (normalmente al principio) una directiva de preprocesado #include que señala el fichero de cabecera que se debe añadir. Por ejemplo, si el manual indica que la función printf está definida en el fichero de cabecerastdio.h ponemos en nuestro código:

#include

http://www.zator.com/Cpp/images/dot2.gif c: Incluir en el fuente las definiciones de las funciones utilizadas. Como alternativa se puede indicar al compilador que tales definiciones están en ficheros compilados previamente.

En este último caso se dice que las definiciones de las funciones están en librerías de las que existen dos tipos:estáticas(.LIB, .OBJ y .BPI) y dinámicas (.DLL). Toda la información que necesita el compilador está contenida en los ficheros de cabecera, por lo que las operaciones correspondientes son realizadas de forma automática; con la sola condición de que los ficheros y librerías correspondientes sean accesibles al enlazador.


http://www.zator.com/Cpp/images/Bombilla_.gif No olvidar que la entidades de la Librería Estándar C++ (que no están en ficheros de cabecera .h), se han definido en un espacio de nombres denominado std, por lo que es preciso referirse a él específicamente cuando se quieran utilizar estos recursos
§5.2 Respecto a las que hemos denominado "condiciones conceptuales", damos por sentado que la utilización de algoritmos de la Librería exige conocerlos. Pero debemos advertir que existe una gran diferencia entre las rutinas de la que hemos denominado librería clásica y los recursos de la nueva Librería Estándar de Plantillas STL.

§5.2a En general los algoritmos contenidos en la librería clásica realizan tareas muy sencillas bajo la forma de funciones que, con un cierto número de argumentos, realizan la tarea encomendada. A veces devolviendo un objeto (que puede ser una estructura). Su utilización exige poco más que repasar esta colección de funciones (209 en la última versión del Estándar) hasta encontrar la que mejor se ajusta a nuestras necesidades. Para esto lo mejor es recurrir a la clasificación temática ofrecida en la documentación que acompaña a los compiladores antes que a la lista alfabética de las mismas. A continuación estudiamos atentamente su prototipo y la explicación de funcionamiento que acompaña el manual (eventualmente incluso con un ejemplo) y ya estamos listos para utilizarla. En el peor de los casos suelen bastar un par de pruebas hasta que conseguimos ajustar los argumentos de forma que se consiga el resultado esperado.


Como última recomendación al respecto, sobre todo si pensamos que nuestro programa tendrá una larga vida y/o pensamos portarlo a otras plataformas, aconsejaría echar un vistazo a la sección de "compatibilidad" que acompaña a la descripción de cada función en la documentación de la mayoría de compiladores. Suele ocurrir que el compilador ofrezca muchas más funciones que las estrictamente Estándar C++, y que estas no estén claramente separadas del resto, de forma que es posible que elijamos una función que resuelve nuestro problema pero no es portable, en cuyo caso aconsejaría evitarlas dentro de lo posible.


§5.2b Para todo el que no se haya asomado antes a la programación genérica, la utilización de la nueva Librería de Plantillas (STL) exige la asimilación de un nuevo paradigma; una nueva forma de pensar que, si se tiene experiencia en programación tradicional, exige incluso un "cambio de chip", ya que estas herramientas conforman un mundo enteramente nuevo y singular.

Con independencia de las explicaciones más detalladas que incluimos en el siguiente capítulo adelantemos aquí que la STL ofrece un conjunto de recursos flexible, potente y altamente optimizado para resolver una gran variedad de situaciones de programación. Pero esta versatilidad y potencia tributan un precio: su alto grado de parametrización supone algo más que utilizar herramientas aisladas. Es necesario saber ensamblar entre sí los recursos disponibles, que no trabajan aisladamente y que son básicamente de tres tipos: contenedores, iteradores y algoritmos. El resultado es que el proceso de utilizar la STL es algo más complicado que la simple búsqueda de una función que resuelva nuestras necesidades; que la curva de aprendizaje es ciertamente más ardua que en el caso de la librería clásica, y que los conceptos involucrados son más abstractos y requieren un conocimiento más extenso de sus fundamentos para utilizarlos. Desde luego, la descripción detallada de todos sus elementos exige un libro completo, y de hecho son muchos los que se han publicado con el objeto exclusivo de describir la STL y/o sus técnicas de uso. En compensación, las contrapartidas obtenidas justifican sin duda el esfuerzo. El programador puede concentrarse más en el problema que en los detalles de su implementación en el fuente, se incremente la productividad y se gana en claridad conceptual.

§6 Funciones y macros

Hay que señalar que algunas funciones pueden venir implementadas de dos formas: como macro y como función. Por ejemplo, la función isalnum, contenida en <ctype.h>. Esto significa que además de estar implementada como una función en la correspondiente librería (que se utiliza con los argumentos señalados en el manual), está definida como una macro de preprocesado en <ctype.h>, de forma que salvo indicación contraria al compilador, el preprocesador transforma la llamada del programador en otra serie de sentencias equivalentes que utilizan los mismos argumentos. El resultado es que en el código resultante, que luego pasa al compilador y al enlazador, no existe nada parecido a una llamada a una función isalnum (técnicamente el proceso es una sustitución inline de la función de librería,

Para evitar que esto ocurra y por consiguiente que la llamada a islanum nunca llegue a producirse, basta con indefinir la correspondiente directiva. Esto se hace incluyendo al principio del código, y debajo de la línea #include , una línea de preprocesado adecuada, en este caso: #undef isalnum, con lo que el #define del preprocesador quedará sin efecto, con el resultado de que todas las invocaciones a isalnum de nuestro código serán respetadas por el preprocesador. Más tarde el enlazador cargará el código de isalnum (que extrae de la librería) con el resto de nuestro programa, y colocará en cada punto de nuestro código donde aparezca una invocación a isalnum, un salto a la dirección adecuada.

En estos casos, el resultado es el mismo en ambas modalidades: como macro (por defecto) o como función de librería. La elección de una u otra es cuestión de optimización. Para tomar una decisión es necesario comprobar y valorar dos aspectos:

  • El tamaño del ejecutable que resulta en uno y otro caso. Posiblemente mayor si se utiliza la función muchas veces y se adopta la macro.
La velocidad de ejecución. Posiblemente mayor si se utiliza la función muchas veces (en bucles muy largos) y se utiliza la macro

Estructuras Repetitivas.

La estructura repetitiva se utiliza cuando se quiere que un conjunto de instrucciones seejecuten un cierto número finito de veces. Se le llama bucle o ciclo a todo proceso que se repite uncierto número de veces dentro de un pseudocódigo o un programa.

Existen dos tipos de estructuras repetitivas; la primera es aquella en donde se tieneperfectamente establecido el número de veces que un grupo de acciones se van a ejecutar (20, 5, 2veces), y la segunda en la que el número de repeticiones es desconocido y se hará hasta que secumpla o no cierta condición

diagrama en un ciclo repetitivo

Se conocen con este nombre las técnicas utilizadas para representar esquemáticamente bien sea la secuencia de instrucciones de un algoritmo o los pasos de un proceso. Esta última se refiere a la posibilidad de facilitar la representación de cantidades considerables de información en un formato gráfico sencillo. Un algoritmo esta compuesto por operaciones, decisiones lógicas y ciclos repetitivos que se representan gráficamente por medio de símbolos estandarizados por la ISO [1]: óvalos para iniciar o finalizar el algoritmo; rombos para comparar datos y tomar decisiones; rectángulos para indicar una acción o instrucción general; etc. Son Diagramas de Flujo porque los símbolos utilizados se conectan en una secuencia de instrucciones o pasos indicada por medio de flechas.

Utilizar algoritmos en el aula de clase, para representar soluciones de problemas, implica que los estudiantes: se esfuercen para identificar todos los pasos de una solución de forma clara y lógica (ordenada); se formen una visión amplia y objetiva de esa solución; verifiquen si han tenido en cuenta todas las posibilidades de solución del problema ; comprueben si hay procedimientos duplicados; lleguen a acuerdos con base en la discusión de una solución planteada; piensen en posibles modificaciones o mejoras (cuando se implementa el algoritmo en un lenguaje de programación, resulta más fácil depurar un programa con el diagrama que con el listado del código).


Adicionalmente, los diagramas de flujo facilitan a otras personas la comprensión de la secuencia lógica de la solución planteada y sirven como elemento de documentación en la solución de problemas o en la representación de los pasos de un proceso.