You are on page 1of 40

Exposiciones de Programacin

El presente trabajo es una recopilacin de los diferentes temas tratados en la


catedra de programacin, en lo cual nos imparti el conocimiento bsico para
la estructuracin del cdigo en C++.
Grupo #1. Instrucciones Break y contine

La instruccin Break altera el flujo del control. Cuando las instrucciones break se ejecuta en una
estructura while, for, do/while se provoca la salida inmediata de la estructura o el escape del
ciclo de una manera anticipada al resto de la estructura

La instruccin contine se ejecuta en una estructura while, for, do/while escapa del resto de las
instrucciones en el cuerpo de esa estructura y procede con la siguiente interaccin del ciclo.


Programa#1.1
//Programa que desarrolla las potencias de un
numero ingresado
#include<iostream.h>
#include<math.h>
int main()
{
int c=1;
int n;
int r;
int x;
int y;
cout<<"Ingrese un numero y el programa le
mostrara las potencias menores que
500"<<endl;
cin>>n;
while (c<=100)
{
r=pow(n,c);
cout<<r<<endl;
c=c+1;
if(r>500)
break;
}
cout<<"La siguiente potencia es mayor que
500"<<endl;
cout<<"ingres 2 numeros para realizar una
suma"<<endl;
cin>>x;
cin>>y;
cout<<"La suma es"<<x+y<<endl;
return 0;
}

Programa#1.2
// Programa que desarrolla la tabla de
multiplicar
#include<iostream.h>
int main()
{
int c=1;
int n;
int r;
int salida;
cout<<"ingrese un numero entero y el
programa le desarrollara las tablas de
multiplicar hasta el diez"<<endl;
cout<<"y lo interrumpira cuando aparezca un
resultado mayor que 15"<<endl;
cin>>n;
while(c<=10)
{
r=n*c;
if(r>=15)
break;
cout<<n<<" x "<<c<<" = "<<r<<endl;
c=c+1;
}
cin>>salida;
return 0;
}

Grupo #2. Funciones
Una funcin es un modulo que esta separado del cuerpo principal, est formada por un
conjunto de sentencias que realizan una determinada tarea y que podemos invocar
mediante un nombre, [tipo devuelto] nombre funcin ([tipo parametro1][, tipo
parametro2][, ....]).



Parmetros
Los parmetros formales son los datos que recibe la funcin para operar con ellos. Una
funcin puede recibir cero o ms parmetros. Se debe especificar para cada parmetro su
tipo.
Los parmetros formales deben coincidir en nmero, orden y tipo

Llamado de la funcin
La instruccin RETURN es quien regresa un y solo un dato a la parte del programa que
la este llamando o invocando


Programa # 2.1
//volumen de un rectangulo;
#include<iostream.h>
#include<math.h>
double volumenrect(double a,double b,double h){
double v;
v=a*b*h;
return v;}
int main(){
double num1, num2, num3;
cout<<"Volumen de un rectangulo"<<endl;
cout<<"Ingrese a=largo"<<endl;
cin>>num1;
cout<<"Ingrese el b=ancho"<<endl;
cin>>num2;
cout<<"Ingrese el h=altura"<<endl;
cin>>num3;
cout<<"El volumen del rectangulo es:"<<volumenrect(num1,num2,num3)<<endl;
return 0;}

Programa #2.2
//Maximo de un entero.
#include<iostream.h>
int maximo(int x, int y, int z){
int max=x;
if (y>maxz){
max=y;}
if (z>max){
max=z;}
return max;}
int main(){
int ent1,ent2,ent3;
cout<<"entero 1:"; cin>>ent1;
cout<<"entero 2:"; cin>>ent2;
cout<<"entero 3:"; cin>>ent3;
cout<<"El maximo es:"<<maximo(ent1, ent2, ent3);
return 0;}

Grupo#3. Libreria Math.h
Comparacin de Cuadros
#include<iostream.h>
int main(){
inta,b,r;
cout<<"SUMA DE ENTERO"<<endl;
cout<<"ingrese el primer nmero:";
cin>>a;
cout<<"ingrese el segundo nmero:";
cin>>b;
r= a+b;
cout<<"la suma es:"<<r<<endl;
return 0;
}
#include<iostream.h>
intsumar(){
inta,b,r;
cout<<"SUMA DE ENTERO"<<endl;
cout<<"ingrese el primer nmero:";
cin>>a;
cout<<"ingrese el segundo nmero:";
cin>>b;
r= a+b;
cout<<"la suma es:"<<r<<endl;
}
Int main()
{
sumar ();
return 0;
}

Librera math.h
math.h es un archivo de cabecera de la biblioteca estndar del lenguaje de
programacin C diseado para operaciones matemticas bsicas. Muchas de sus
funciones incluyen el uso de nmeros en coma flotante. C++ tambin implementa
estas funciones por razones de compatibilidad y las declara en la cabecera


Programa # 3.1
//Area de un Circulo
#include<iostream.h>
#include <math.h>
double Areacirculo(double r)
{
double A;
A=pow(r,2)*3.1415;
return A;
}
int main()
{
double radio;
cout<<"AREA DE UN CIRCULO"<<endl;
cout<<"introduzca el radio:"; cin>>radio;
cout<<"El area es:"<<Areacirculo(radio);
return 0;
}

Grupo#4. Archivos de encabezado
Definicin: Los archivos de encabezado contienen los prototipos de funcin para
las funciones relacionadas que forman cada porcin de la biblioteca.
Los archivos de encabezado tambin contienen definiciones de varios tipos de
clases y funciones, as como las constantes que necesitan las funciones.
Un archivo de encabezado instruye al compilador acerca de como
interconectarse con los componentes de la biblioteca y los componentes escritos
por el usuario.

Algunos archivos de encabezado, y que son de uso mas frecuente :

<cfloat> (float.h) : Esta cabecera se describe las caractersticas de los tipos
flotantes para el sistema especfico y Implementacin compilador utilizado

<cmath>(math.h) : Es un archivo de cabecera diseado para operaciones
matemticas bsicas.

<cstdio>(stdio.h): El archivo de cabecera que contiene las definiciones de macros,
las constantes, las declaraciones de funciones y la definicin de tipos usados por varias
operaciones estndar de entrada y salida. (stdio significa Standar Input Output header).
Contiene funciones para poder ingresar datos por teclado y para mostrar por pantalla, adems de
algunas otras.
<cstdlib> (stdlib.h): (std-lib: standard library o biblioteca estndar) Contiene prototipos de
funcin para las conversiones de nmeros a texto, de texto a nmeros, asignacin de memoria,
nmeros aleatorios y varias otras funciones utilitarias.
<string>(string.h) : Contiene la definicin de macros, constantes, funciones y tipos de utilidad
para trabajar concadenas de caracteres y algunas operaciones de manipulacin de memoria
<ctime>(time.h) : Contiene funciones para manipular y formatear la fecha y hora del sistema.
<ctype>(ctype.h): sta librera se encarga de todo lo relacionado a modificar y operar con
caracteres.
<cassert>(assert.h): sta librera es muy til a la hora de depuracin de programas y previsin
de comportamientos inesperados.

Archivos de encabezado
Tipos de archivos para libreras ms comunes.
funcin tipo librera sintaxis informacin
cos(d) double math.h double
cos(double d);
complex
cos(complex d);
Devuelve el coseno de d
sin(d)
double math.h
double
sin(doubl d);
Devuelve el seno de d
tan(d) double math.h
double
tan(double d);
Devuelve la tangente de d
sqrt(d) double math.h
double
sqrt(double d);
Devuelve la raiz cuadrada de d
pow(d1, d2) double math.h
double
pow(double d1,
double d2);
Devuelve d1 elevado a la potencia d2
log10(d) double math.h
double
log10(double d);
Devuelve el logaritmno (en base 10) de d
log(d) double math.h
double
log(double d);
Devuelve el logaritmo natural de d
abs(i) int stdlib.h int abs(int i); Devuelve el valor absoluto de i
tolower int ctype.h o stdlib.h
int tolower(int
c);
Convierte una letra a minuscula
toupper int ctype.h o stdlib.h
int toupper(int
c);
Convierte una letra a mayuscula
getchar( ) int stdio.h
int
getchar(void);
Lee un caracter desde el dispostivo de entrada
estandar
gets(s)
char(puntero
)
stdio.h
char *gets(char
*cad);
Lee una cadena de caracteres desde el dispositivo de
entrada estandar
printf(...) int stdio.h
int printf(const
char
*formato[,argume
nto,...]);
Escribe datos en
dispositivo de
salida estandar.

%c Caracter
%d Entero Decimal
%e
Real (double o float),
notacion cientifica.
%f Coma flotante
%s Cadena de caracteres
%x Hexadecimal sin signo
scanf(...) int stdio.h
int scanf(const char
*formato
{,direccion,...]);
Lee datos en
dispositivo de
entrada estandar
%c Caracter
%d Enetero Decimal
%x Hexadecimal
%i Entero Decimal
%f Numero Real
%o Octal
%p Puntero
%s Cadena
isalnum(c) int ctype.h int isalnum(int c);
Determina si el argumento
es alfanumerico. Devuelve
un valor disitinto de cero si
es cierto; en otro caso
devuelve 0
time(p) long int time.h time_t time(time_t *h);
Devuelve el numero de
segundos transcurridos despues
de un tiempo base designado
struct tm *gmtime(time_t *)
Recibe un puntero a una variable
de tiempo (time_t*) y devuelve
su conversin como fecha/hora
UTC a struct tm a travs de un
puntero.
time_t mktime(struct_tm *)
Inversamente
a gmtime() y localtime(),l recibe un
puntero a struct tm (struct tm*) y
devuelve su conversin al tipo time t.
struct tm
*localtime(time_t *)
Similar funcionalidad a gmtime(),
pero devuelve la conversin
como fecha/hora LOCAL.
time_t time(time_t *)
Devuelve la fecha/hora (time_t) actual
o -1 en caso de no ser posible. Si el
argumento que se le pasa no es
NULL, tambin asigna la fecha/hora
actual a dicho argumento.
int tm_hour hora (0 - 23) int tm_mday da del mes (1 - 31)
int tm_isdst
Horario de
verano enabled/disabled
int tm_min minutos (0 - 59)
int tm_sec segundos (0 - 60) int tm_mon mes (0 - 11, 0 = Enero)
int tm_wday
da de la semana (0 - 6, 0 =
domingo)
int tm_year ao desde 1900
int tm_yday da del ao (0 - 365)
Programa # 4.1
//Resolviendo una cuadratica
#include <stdio.h>
#include <math.h>
#include <conio.h>
#include <time.h>
int main( )
{
float A, B, C, D, S, sol1, sol2;
printf("Bienvenido, resolveremos su ecuacin de segundo
grado.\n\n");
printf("\nPo favor ingrese en coeficiente A: ");
scanf("%f",&A);
printf("\nAhora, escriba el coeficiente B: ");
scanf("%f",&B);
printf("\nPor ultimo, inserte el coeficiente C: ");
scanf("%f",&C);
D=B*B-4*A*C;
if(D<0){
printf("\n\nDisculpe, no tiene solucion real\n\n");
}else if(D==0){
S=-B/2*A;
printf("\n\nEl resultado de la ecuacion es %f\n\n",S);
}else{
sol1=(-B+sqrt(D))/(2*A);
sol2=(-B-sqrt(D))/(2*A);
printf("\n\nLos resultados de la ecuacion son %f y
%f\n\n",sol1,sol2); }
printf("\nGracias por utilizar este programa\n\n");
time_t x;
struct tm *hora;
struct tm *fecha;
time(&x);
hora = localtime(&x);
fecha = localtime(&x);
printf("%d-%d-%d\n", fecha->tm_mday, fecha->tm_mon+1,
fecha->tm_year+1900);
printf("%d:%d:%d", hora->tm_hour, hora->tm_min, hora-
>tm_sec);
getch();
return 0;
}

Programa # 4.2
//Uso de assert.h
#include <iostream.h>
#include <assert.h>
#include <conio.h>
int main() {
double a, b,divi;
cout<<"Ingrese el numerador:\n";
cin>>a;
cout<<"Ingrese el denominador:\n";
cin>>b;
assert(b!=0);
divi=a/b;
cout<<"la divicion es: " <<a<<"\\"<<b<<"= "<<divi;
getch();
return 0;
}

Programa #4.3
//Conteo de vocales
#include <stdio.h>
#include <conio.h>
void main(){
int contador=0,a=0,e=0,i=0,o=0,u=0;
char c;
printf("Introduzca caracteres hasta pulsar el guion:\n\n");
while(contador==0){
c=getche();
if(c=='a'){
a++;
}else if(c=='e'){
e++;
}else if(c=='i'){
i++;
}else if(c=='o'){
o++;
}else if(c=='u'){
u++;
}else if(c=='-'){
contador=1;
}else{
contador=0;
}
}
printf("\n\n\t\t\tRecuento de vocales\n");
printf("\nLa a se ha repetido %d veces \n",a);
printf("\nLa e se ha repetido %d veces \n",e);
printf("\nLa i se ha repetido %d veces \n",i);
printf("\nLa o se ha repetido %d veces \n",o);
printf("\nLa u se ha repetido %d veces \n",u);
printf("\n\nGracias por utilizar este programa.\n\n");
getch();

Grupo #5. Printf () y Scanf ()
Printf : Salida de datos con formato. Escribe una serie de caracteres en la salida estndar
(pantalla).
Formato de Printf: Cadena de caracteres, entre comillas dobles, que especifica como va a
ser la salida.
Argumento de Printf : Indica las variables a escribir.
Scanf: Entrada de datos con formato. Lee datos de la entrada estndar (teclado), los
interpreta y los almacena en los argumentos.
Formato de Scanf: Cadena de caracteres, entre comillas dobles, que especifica como van
a ser introducidos los datos.
Argumento de Scanf : Indica las direcciones de variables que almacenaran los datos (&).
Las funciones printf y scanf, la utilizaremos para mostrar e ingresar informacin
respectivamente. La funcin scanf es el equivalente e inverso de la funcin printf, de
hecho tambin se incluye en la librera estndar de C (stdio.h). Funciona exactamente
igual que printf, pero al inverso. Es decir en vez de "devolver" datos, "recibir".

Ejemplo de Printf :

printf("Hola Mundo");
printf("Funcin printf, para mostrar informacin en pantalla");

Ejemplo de Scanf:

scanf("%d",&numero Entero);
scanf("%f",&numeroFlotante);
scanf("%c",&letra);

Para %d, se debe asignar una variable del tipo int
Para %f, se debe asignar una variable del tipo float
Para %c, se debe asignar una variable del tipo char.

Programa #5.1
//puntos en el plano cartesiano
#include<stdio.h>
#include<math.h>
int main ()
{
int x1, x2, y1, y2;
double M,Ix, Iy, D, x3, y3;
printf("Ingrese los puntos de la recta:\n");
scanf("%d %d %d %d",
&x1,&x2,&y1,&y2);
M=(y2-y1)/(x2-x1);
printf("\nLa pendiente es igual a: %f\n",
M);
Iy= (y1-x1)*M;
printf("El intercepto en y es: %f\n", Iy);
Ix= x1-(y1/M);
printf("El intercepto en x es: %f\n", Ix);
D= sqrt(pow(x2-x1,2)+pow(y2-y1,2));
printf("La distancia entre los dos puntos
de la recta son: %f\n",D);
x3=(x1+x2)/2;
y3=(y1+y2)/2;
printf("La coordenada del punto medio en
el eje x es: %f\n",x3);
printf("La coordenada del punto medio en
el eje y es: %f\n",y3);
return 0;
}



Programa #5.2
//Programa multiplicador
#include <stdio.h>
main ()
{
int a, b, producto;
printf ("\nTeclee dos nmeros enteros: ");
scanf ("%d %d", &a, &b);
producto = multiplica (a, b);
printf ("\nEl resultado es %d", producto);
}
/* Definicin de la funcin multiplica() */
multiplica (int x, int y)
{
return (x * y);
}

Grupo #6. Recursividad
La recursividad consiste en realizar una definicin de un concepto en trminos del propio concepto que
se est definiendo.
Una funcin recursiva es una funcin que se llama a si misma, ya sea de manera directa, o indirecta(a
travs de otra funcin ).
Los mtodos para solucionar problemas recursivos tienen un conjunto de elementos en comn, se llama
a una funcin recursiva para resolver un problema.

Solucin de problemas recursivos

Divisin sucesiva del problema original en uno o varios ms pequeos, del mismo tipo que el inicial.
Se van resolviendo estos problemas ms sencillos.
Con las soluciones de stos se construyen las soluciones de los problemas ms complejos.

Caractersticas de los problemas que pueden ser
resueltos de manera recursiva
Los problemas pueden ser redefinidos en trminos de uno o ms sub problemas, idnticos
en naturaleza al problema original, pero de alguna forma menores en tamao.

Uno o ms sub problemas tienen solucin directa o conocida, no recursiva.

Aplicando la redefinicin del problema en trminos de problemas ms pequeos, dicho
problema se reduce sucesivamente a los sub problemas cuyas soluciones se conocen
directamente.

La solucin a los problemas ms simples se utiliza para construir la solucin al problema
inicial.

El Caso Base
La llamada recursiva, que expresa el problema original en trminos de otro ms
pequeo, y el valor para el cual se conoce una solucin no recursiva.
Esto es lo que se conoce como caso base: una instancia del problema cuya
solucin no requiere de llamadas recursivas.
Es la condicin de finalizacin de la funcin recursiva. Sin el caso base la rutina
recursiva se llamara indefinidamente y no finalizara nunca.
Es el cimiento sobre el cual se construir la solucin completa al problema.

Programa #6.1
//Programa factorial
#include<stdio.h>
#include<conio.h>
int factorial(int n)
{
if(n<2)//Caso Base
return 1;
else
return n * factorial(n-1); //paso
recursivo
}
int main()
{
int num=0;
printf("::CALCULAR FACTORIAL::\n");
printf("Introduce un numero: ");
scanf("%i",&num); //Pedir variable num
printf("\tEl resultado es: %i\n",
factorial(num)); //Llama la funcion e
imprime resultado
getch ();
return 0;
}

Programa #6.2
// Este programa muestra en la pantalla cierto
numero de Garra dependiendo del numero
que decidamos darle a Porra e ira bajando
ese numero hasta el caso base que es n==1 y
entonces imprimir en la pantalla la palabra
Catracha
#include<iostream.h>
#include<conio.h>
void porra(int n);
int main()
{
porra(3);
return 0;
}
void porra(int n)
{
if(n == 1) //Caso Base
{
cout << " Catracha !!\n";
}
else
{
cout << " Garra ";
porra(n - 1);
}
getch ();
}

Grupo #7. Funciones Inline

Inline es utilizada en C++ y se aplica a una funcin. Esta indica al compilador que
cada llamado a la funcin inline deber ser reemplazado por el cuerpo de esta
funcin. En la prctica la funcin inline es utilizada solo cuando las funciones son
pequeas para evitar generar un ejecutable de tamao considerable.
La funcin inline se puede usar en cualquier biblioteca de C++.


Cuando una funcin miembro no deba modificar el valor de ningn dato de la clase,
podemos y debemos declararla como constante Una variable declarada const no se
puede cambiar, es decir, es una constante. No obstante, la palabra const slo se tiene
en cuenta durante el tiempo de compilacin. El compilador emite un error cuando
encuentra una instruccin que asignar un valor a una constante.

Const
Programa #7.1
//Volumen de un Cubo
#include<iostream.h>
#include<conio.h>
inline double cubo(const double lado)
{
return lado*lado*lado;
}
int main()
{
cout<<"introduzca la longitud del lado de
su cubo:";
double valorlado;
cin>>valorlado;

cout<<"el volumen del cubo es:
"<<cubo(valorlado)<<endl;
getch();
return 0;
}

Programa #7.2
// Programa del Factorial
include<iostream.h>
#include<conio.h>
int i; int factorial=1;
inline long int factoriales (const long int fac) {
for (i=1; i<=fac; i++) {
factorial=i*factorial;}
return factorial ; }
int main() {
long int n;
cout<<"ingrese el valor de n"<<endl;
cin>>n;
while (n<0) {
cout<<"el valor de n debe ser
positivo"<<endl<<endl;

cout<<"******************************
*"<<endl;
cout<<"Ingrese un nuevo valor de n
"<<endl;
cin>>n; }
if (n==0) { cout<<"el factorial es:1"<<endl;}
else { cout<<"el valor del factorial
es:"<<factoriales(n)<<endl;}
getch () ;
return 0; }

Grupo #8. Arreglos
Un arreglos es aquel almacenan una especie de lista de muchos elementos de un mismo tipo de
dato.
Se considera un buen principio de programacin declarar la cantidad de elementos de nuestro
arreglo en una variable constante; como se muestra en el siguiente ejemplo.
const int tam=10;
int lista [tam];
Los arreglos pueden ser: Unidimensional, Bidimensional, Multidimensional
Arreglo unidimensional: es un tipo de datos estructurados que est formado de una
coleccin finita y ordenada de datos del mismo tipo. Es la estructura natural para
modelar listas de elementos iguales.
Estn formados por un conjunto de elementos de un mismo tipo de datos que se
almacenan bajo un mismo nombre, y se diferencian por la posicin que tiene cada
elemento dentro del arreglo de datos.
[5,6,7,4,9,3]
int lista []

Arreglo bidimensional: es la representacin de tablas de valores o matrices, consistiendo de
informacin arreglada en reglones y columnas.
[5,6,7,4] int matriz[][]
Arreglo multidimensional: Es un tipo de dato estructurado, que est compuesto por dimensiones.
El termino dimensin representa el numero de ndices utilizados para referirse a un elemento en
particular dentro del arreglo.
<2,2,2> int vector []
Subndices en un arreglo: Los subndices nos permiten ver la posicin de un elemento dentro de
un arreglo.
C=[1,3,4,2,6,7,8] el elemento que tiene subndice 0 o que est en la posicin 0 del arreglo es 1;
C[0]=1, C[5]=7.
Declarar un arreglo es as como declaramos las variables de tipo entero (int)
1. Tipo de Dato (Almacena el arreglo si es entero)
2. Nombre o identificador
3. Cantidad de Elementos (se colocan entre corchetes)

Programa #8.1
//Inicializacion de un arreglo
#include<iostream.h>
#include<iomanip.h>
int main() {
int n[10];
for (int i=0; i<10; i++)
n[i]=0;
cout<<" elemento"<< setw(15)<<"valor"<<endl;
for (int j=0; j<10; j++)
cout<<setw(7)<<j<< setw(15)<<n[j]<<endl;
return 0;
}

Programa #8.2
//AREGLO EN DOS DIMENSIONES
// suma de matrices
# include<iostream.h>
# include<iomanip.h>
int main(){
int matrizA[2][2],matrizB[2][2];
cout<<"ingrese los elementos de la matriz A \n";
for (int i=0; i<2;i++)
for (int j=0; j<2;j++) {
cout<<"a"<<(i+1)<<(j+1)<<"=";
cin>>matrizA[i][j];
}
cout<<endl;
for (int m=0; m<2;m++) {
for (int n=0; n<2;n++)
cout<<setw(10)<<matrizA[m][n];
cout<<endl;
}
cout<<endl;
cout<<"ingrese los elementos de la matriz B \n";
for (int x=0; x<2;x++)
for (int y=0; y<2;y++) {
cout<<"b"<<(x+1)<<(y+1)<<"=";
cin>>matrizB[x][y];
}
cout<<endl;
for (int p=0; p<2;p++) {
for (int q=0; q<2;q++)
cout<<setw(10)<<matrizB[p][q];
cout<<endl;
}
cout<<endl;
cout<<"la suma de matrices es:\n\n";
for(int a=0;a<2;a++) {
for(int b=0;b<2;b++)
cout<<setw(5)<<matrizA[a][b]+matrizB[a][b];
cout<<endl;
}
return 0;
}

Grupo #9. Ordenamiento de Arreglos
Clave: La parte de un registro por la cual se ordena la lista. Por ejemplo, una lista de
registros con campos nombre, direccin y telfono se puede ordenar alfabticamente
de acuerdo a la clave nombre. En este caso los campos direccin y telfono no se
toman en cuenta en el ordenamiento.
Criterio de ordenamiento (o de comparacin): EL criterio que utilizamos para asignar
valores a los registros con base en una o ms claves. De esta manera decidimos si
un registro es mayor o menor que otro.
Registro: Un grupo de datos que forman la lista. Pueden ser datos atmicos
(enteros, caracteres, reales, etc.) o grupos de ellos, que en C equivalen a las
estructuras.
La Ordenacin de burbuja (Bubble Sort en ingls) es un sencillo algoritmo de
ordenamiento. Funciona revisando cada elemento de la lista que va a ser ordenada
con el siguiente, intercambindolos de posicin si estn en el orden equivocado. Es
necesario revisar varias veces toda la lista hasta que no se necesiten ms
intercambios, lo cual significa que la lista est ordenada.
Tambin es conocido como el mtodo del intercambio directo. Dado que solo
usa comparaciones para operar elementos, se lo considera un algoritmo de
comparacin, siendo el ms sencillo de implementar
La idea bsica de este algoritmo consiste en comparar pares de elementos adyacentes e
intercambiarlos entre s hasta que todos se encuentren ordenados. Se realizan (n-1)
pasadas, transportando en cada de las mismas el menor o mayor elemento (segn sea el
caso) a su posicin ideal.
Vamos a ordenar la lista en forma ascendiente, es decir, de menor a mayor. Obviamente
es esencialmente lo mismo que hacerlo en forma inversa.
La forma de intercambiar los elementos depende de la estructura de datos: si es un
arreglo (dinmico o esttico) es necesario guardar una copia del primer elemento,
asignarle el segundo al primero y el temporal al segundo. La variable temporal es
necesaria, porque de lo contrario se perdera uno de los elementos. Si la estructura es una
lista dinmica el procedimiento es parecido, pero se utilizan las direcciones de los
elementos. En el pseudocdigo se utilizar el primer mtodo.
La lista se manejar como un arreglo de C: si tiene TAM elementos, el primer elemento es
lista[0] y el ltimo es lista[TAM-1]. Esto ser as para todo el pseudocdigo presentado en
este artculo

Estructura con un ciclo For
1. for (i=1; i<TAM; i++)
2. for j=0 ; j<TAM - 1; j++)
3. if (lista[j] > lista[j+1])
4. temp = lista[j];
5. lista[j] = lista[j+1];
6. lista[j+1] = temp
Esta es nuestra lista:
4 - 3 - 5 - 2 - 1
Tenemos 5 elementos. Es decir, TAM toma el valor 5. Comenzamos comparando el primero con el
segundo elemento. 4 es mayor que 3, as que intercambiamos. Ahora tenemos:
3 - 4 - 5 - 2 - 1
Ahora comparamos el segundo con el tercero: 4 es menor que 5, as que no hacemos nada.
Continuamos con el tercero y el cuarto: 5 es mayor que 2. Intercambiamos y obtenemos:
3 - 4 - 2 - 5 - 1
Comparamos el cuarto y el quinto: 5 es mayor que 1. Intercambiamos nuevamente:
3 - 4 - 2 - 1 - 5
Repitiendo este proceso vamos obteniendo los siguientes resultados:
3 - 2 - 1 - 4 5 ; 2 - 1 - 3 - 4 5 ; 1 - 2 - 3 - 4 - 5

Programa #9.1
#include <iostream>
#include <iomanip>
using std:: setw;
int main ()
{
const int tamanoarreglo = 10;
int
a[tamanoarreglo]={2,7,8,3,78,98,21,34,89,9
};
int mantiene;
cout<<"elementos de datos en el orden
original";
getchar();
for(int i = 0; i< tamanoarreglo; i++)
cout<<setw(4)<<a[i];
for(int pasada =0; pasada <
tamanoarreglo - 1; pasada++ )
for(int j=0; j < tamanoarreglo - 1; j++ )
if (a[j] > a[j + 1 ])
{
mantiene = a[j];
a[j] = a[j + 1 ];
a[j + 1 ] = mantiene;
}
cout<<"\n elementos de datos en orden
ascendente\n";
for (int k = 0; k< tamanoarreglo; k++)
cout<<setw(4)<<a[k];
cout<<endl;
getchar();
return 0;
}

You might also like