Monografias.com > Sin categoría
Descargar Imprimir Comentar Ver trabajos relacionados

Diseño de algoritmos para la solución de problemas (página 2)




Enviado por Pablo Turmero



Partes: 1, 2

Monografias.com

Técnicas de diseño de algoritmos
Estrategia Greedy

Un algoritmo Greedy elige, en cada paso, una solución local optima. Las estrategias greedy encuentra una solución maxima al problema. (ejem. Rutas de entrega)

-Programación dinámica

Es un método para reducir el tiempo de ejecución de un algoritmo mediante la utilización de subproblemas superpuestos y subestructuras óptimas. Una subestructura óptima significa que soluciones óptimas de subproblemas pueden ser usadas para encontrar las soluciones óptimas del problema en su conjunto.
Se pueden resolver problemas con subestructuras óptimas siguiendo estos tres pasos:
Dividir el problema en subproblemas más pequeños.
Resolver estos problemas de manera óptima usando este proceso de tres pasos recursivamente.
Usar estas soluciones óptimas para construir una solución óptima al problema original.

-Inducción

A través de la inducción matemática se puede definir un mecanismo para encontrar todos los posibles elementos de un conjunto recursivo partiendo de un subconjunto conocido, o bien, para probar la validez de la definición de una función recursiva a partir de un caso base.

Monografias.com

LOS DATOS A PROCESAR PUEDEN SER:

SIMPLES
Ocupan solo una casilla de memoria. (enteros, caracteres, decimales).
Ejem.- 567

COMPLEJOS O ESTRUCTURADOS .- Hacen referencia a un grupo de casillas de memoria y son construidos a partir de los datos simples.
Arreglos o vectores, matriz, árboles, registros, archivos, Bases de Datos, etc.

Monografias.com

Tipos simples.
Las En C/C++ existen básicamente cuatro tipos de datos, aunque como se verá después, podremos definir nuestros propios tipos de datos a partir de estos cuatro.

TIPO Tamaño
char 1 byte
int 2 bytes
float 4 bytes
double 8 bytes

Monografias.com

QUE SON LOS ARREGLOS O VECTORES ?

Es un conjunto o lista de datos estructurados
Es una colección finita, homogenea y ordenada de elementos
Finita.- Indica el número máximo
Homogenea.- Son del mismo tipo (entero, reales, caracteres)
Ordenada.- Llevan un orden consecutivo a través de un índice

Ejem.- A= 34 45 12 05 93 Datos
(0) (1) (2) (3) (4) Indices

Monografias.com

Los índices hacen referencia a los componentes (datos) en forma individual.

Ejem.- A= 34 45 12 05 93 Datos
(0) (1) (2) (3) (4) Indices

En forma individual.- A[2]= 12

Cuanto vale A[1], A[4] …?

Monografias.com

DECLARACIÓN DE UN ARREGLO EN C/C++

La sintaxis de declaración de arreglos es:

tipo nombre_arreglo [numero_de_elementos];

Ejem:
int A[5]; //Define un arreglo de 5 numeros
int CoordenadasDePantalla[5]; // Un arreglo de 5 enteros
char IDCompania[20]; //Un arreglo de 20 caracteres
float Calificación[3]; //Arreglo de 3 números decimales

Monografias.com

Que podemos programar con Arreglos ?.

Las operaciones básicas con Arreglos son:

Lectura de un arreglo
Despliegue de datos de un arreglo
Llenado de un arreglo
Ordenacion de un arreglo
Búsqueda de datos en un arreglo

Monografias.com

LLENADO/LECTURA DE UN ARREGLO

Pseudocodigo:
Dame los 10 datos ?
PARA i desde 0 hasta 10 incrementa
LEE A[i].

Codigo en C o C++
printf ("Dame los 10 datos");
for (i=0; i< 10; i++)
{
scanf ("%d", &valor [i]);
}

Monografias.com

DESPLIEGUE DE UN ARREGLO Y OPERACIONES CON SUS COMPONENTES
Pseudocodigo:
PARA i desde 0 hasta 10 incrementa
Inicio
DESPLIEGA “Valor”, Indice + 1, valor
SUMA los valores del arreglo
termina
Codigo en C o C++
for (i=0; i< 10; i++)
{
printf ("Valor %d = %dn", i+1, valor [i]);
suma += valor [i];
}

Monografias.com

PRACTICA (5):

HACER UN PROGRAMA (ProgArreg.cpp) EN C o C++ QUE PIDA EL PROCESO PARA N CALIFICACIONES Y LOS DATOS DESPLEGANDO AL FINAL SU PROMEDIO.

Monografias.com

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

int i, valor [100], suma=0, n, num=0, num1=0, aux=0, pos=0, pos1=0;
float promedio;
main ()
{
printf ("Cuantas calificaciones ? ");
scanf ("%d", &n);
printf ("Dime los %d Datos en el mismo renglonn", n);
for (i=0; i< n; i++)
{
scanf ("%d", &valor[i]);
}
for (i=0; i< n; i++)
{
printf ("Valor %d = %dn", i, valor [i]);
suma += valor [i];

}
promedio = (float) suma/n;
printf ("El promedio es %.2gn", promedio);

num=valor[0];
num1=valor[0];
for(i=1; i< n; i++)
{ // saca el valor mayor
if(valor[i]>num){
pos = i;
num=valor[i];
}
// saca el valor menor
if(valor[i]< num1){
pos1 = i;
num1=valor[i];
}
}
printf ("El mayor es %dn", num);
printf ("En posicion %dnn", pos);
printf ("El menor es %dn", num1);
printf ("En posicion %dnn", pos1);

getch();
}

Monografias.com

ARREGLOS MULTIDIMENCIONALES:

Un vector es un array unidimensional, es decir, sólo utiliza un índice para referenciar a cada uno de los elementos. Su declaración será:
tipo nombre [tamaño];
Una matriz es un array multidimensional. Se definen igual que los vectores excepto que se requiere un índice por cada dimensión. Su sintaxis es la siguiente:
tipo nombre [tamaño 1][tamaño 2]…;
Una matriz bidimensional se podría representar gráficamente como una tabla con filas y columnas.

Monografias.com

ARREGLOS MULTIDIMENCIONALES:
Ejem.- Una matriz de 2X3 (2 filas por 3 columnas) se inicializa en C/C++ como:
int matriz[2][3] = {
{ 20,50,30 },
{ 4,15,166 }
};

Otra manera es llenar el arreglo mediante una instrucción FOR anidada

Monografias.com

ESTRUCTURA DE DATOS ( ARREGLOS )
/* Matriz bidimensional. */
#include < stdio.h>
#include < conio.h>

main() /* Rellenamos una matriz */
{
int x,i,numeros[3][4]; /* rellenamos la matriz */
printf("Dime los valores de matriz 3X4n");
for (x=0;x< 3;x++)
for (i=0;i< 4;i++)
scanf("%d",&numeros[x][i]);

/* visualizamos la matriz */
for (x=0;x< 3;x++)
for (i=0;i< 4;i++)
printf("%d",numeros[x][i]);
getch();
}

Monografias.com

ESTRUCTURA DE DATOS ( ARREGLOS )
int numeros[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};

quedarían asignados de la siguiente manera:

numeros[0][0]=1 numeros[0][1]=2 numeros[0][2]=3 numeros[0][3]=4
numeros[1][0]=5 numeros[1][1]=6 numeros[1][2]=7 numeros[1][3]=8
numeros[2][0]=9 numeros[2][1]=10 numeros[2][2]=11 numeros[2][3]=12

Monografias.com

PRACTICA (9):HACER UN PROGRAMA DE UNA MATRIZ QUE SIMULE UN TABLERO DE AjEDREZ DE 8×8:
/* Programa: Matriz_tablero.cpp. Simula una matriz de 8×8 */
#include < stdio.h>
#include < conio.h>
main() {
int suma, x,i,numeros[8][8];
printf("Dime los valores de matriz 8X8n");
for (x=0;x< 8;x++)
for (i=0;i< 8;i++)
scanf("%d",&numeros[x][i]);
for (x=0;x< 8;x++){ // visualizamos la matriz
printf("n");
for (i=0;i< 8;i++){
printf("%d",numeros[x][i]);
}
}
printf("n");
getch();
} // Al finalizar hacer un programa que calcule una suma de valores en casillas

Monografias.com

QUE SON ORDENAMIENTOS DE DATOS ?
SORT / ORDENACION.-
Es reagrupar un grupo de datos en una secuencia especifica de orden

(mayor -> menor o menor -> mayor)

Monografias.com

LA ORDENACION DE ELEMENTOS PUEDE SER:
Ordenación Interna.- En memoria principal (arrays, listas).

Ordenación Externa.- En memoria secundaria. (dispositivos de almacenamiento externo.- archivos y Bases de datos).

Monografias.com

TIPOS DE ORDENACION

Los mas usuales son:

POR INTERCAMBIO (Compara e intercambia elementos.- Burbuja)
POR SELECCIÓN (Selecciona el mas pequeño y lo intercambia)
POR INSERSION (Inserta los elementos en una sublista ordenada)
METODO SHELL (Es una insersión mejorada)
ORDENACION RAPIDA (Quick Sort.- divide una lista en dos partes)

Monografias.com

POR INTERCAMBIO (Burbuja o bubble sort )
El bubble sort, también conocido como ordenamiento burbuja, funciona de la siguiente manera:
Se va comparando cada elemento del arreglo con el siguiente; si un elemento es mayor que el que le sigue, entonces se intercambian; esto producirá que en el arreglo quede como su último elemento, el más grande.
Este proceso deberá repetirse recorriendo todo el arreglo hasta que no ocurra ningún intercambio.
Los elementos que van quedando ordenados ya no se comparan. "Baja el más pesado".

Monografias.com

EJEMPLO: Ordenamiento por Burbuja o bubble sort
Consiste en comparar pares de elementos adyacentes e intercambiarlos entre sí hasta que estén todos ordenados.
Sea un array de 6 números de empleados: {40,21,4,9,10,35}:

Primera pasada:
{21,40,4,9,10,35} < — Se cambia el 21 por el 40.
{21,4,40,9,10,35} < — Se cambia el 40 por el 4.
{21,4,9,40,10,35} < — Se cambia el 9 por el 40.
{21,4,9,10,40,35} < — Se cambia el 40 por el 10.
{21,4,9,10,35,40} < — Se cambia el 35 por el 40.

Segunda pasada:
{4,21,9,10,35,40} < — Se cambia el 21 por el 4.
{4,9,21,10,35,40} < — Se cambia el 9 por el 21.
{4,9,10,21,35,40} < — Se cambia el 21 por el 10.

Ya están ordenados, pero para comprobarlo habría que acabar esta segunda
comprobación y hacer una tercera.

Monografias.com

Funciones.- Son bloques de código utilizados para dividir un programa en partes mas pequeñas

Prototipo de función.- Es la declaración de la función en el código

Variables:
Gobales.- Nivel programa
locales.- Nivel funcion
Que son las funciones ?

Monografias.com

// Definimos una función donde A=arreglo y N=tamaño
int bubblesort(int A[],int N){
int i,j,AUX;
for(i=2;i< =N;i++){ //siguiente
for(j=N;j>=i;j–){ //anterior
if(A[j-1]>A[j]){ //si i > d intercambio
AUX=A[j-1]; //guardamos en AUX
A[j-1]=A[j]; //pasamos d a i
A[j]=AUX; //copiamos AUX en d
}
}
}
return 1;
}

Monografias.com

Practica: Hacer un programa con Arreglos que ordene por el método de la burbuja Bubblesort en forma ascendente un vector de 10 números de empleados de una empresa.
Pseudocódigo:
1.- Inicio
2.- Definir un vector de 10 números
3.- Llenar el vector con los números
4.- Mostrar la salida de los números capturados en desorden
5.- Ordenar el vector por el método bubblesort
6.- Mostrar la salida con los números ordenados del vector

Códificación :
main()
{
int A[10];
llenavector(A,10); // es uma función
printf("ORDENAMIENTO POR BURBUJA n");
printf("Numeros a ordenar: n");
salida(A,10); // es uma función
printf("nnNumeros ordenados: n");
bubblesort(A,10); // es uma función
salida(A,10); // es uma función
getch();
}

Monografias.com

Función que llena el vector con los números
int llenavector(int A[],int N){
int c;
int x;
cout< < "Ingrese 10 numeros de empleados:"< < endl;
for(c=1;c< =N;c++){
cin>>x; // lee x numero
A[c]=x; // lo graba en el vector
}
return 1;
}

Monografias.com

Ordenar el vector por el método bubblesort
int bubblesort(int A[],int N){
int i,j,AUX;
for(i=2;i< =N;i++){
for(j=N;j>=i;j–){
if(A[j-1]>A[j]){
AUX=A[j-1]; //Intercambio
A[j-1]=A[j];
A[j]=AUX;
}
}
}
return 1;
}

Monografias.com

Muestra la salida de los números en el arreglo.
int salida(int A[],int N){
int c;
for(c=1;c< =N;c++){
printf("%d, ",A[c]); // muestra el vector
}
return 1;
}

// Nota: este mismo procedimiento fue el que se utilizó para mostrar los datos desordenados.(solo se escribe una vez)

Monografias.com

Practica # S01: Construir el programa con Arreglos que ordene por el método de la burbuja Bubblesort en forma ascendente un vector de 10 números de empleados de una empresa.
Librerias:
#include < stdlib.h>
#include < stdio.h>
#include < iostream>
#include < conio.h>

using namespace std;

Partes: 1, 2
 Página anterior Volver al principio del trabajoPágina siguiente 

Nota al lector: es posible que esta página no contenga todos los componentes del trabajo original (pies de página, avanzadas formulas matemáticas, esquemas o tablas complejas, etc.). Recuerde que para ver el trabajo en su versión original completa, puede descargarlo desde el menú superior.

Todos los documentos disponibles en este sitio expresan los puntos de vista de sus respectivos autores y no de Monografias.com. El objetivo de Monografias.com es poner el conocimiento a disposición de toda su comunidad. Queda bajo la responsabilidad de cada lector el eventual uso que se le de a esta información. Asimismo, es obligatoria la cita del autor del contenido y de Monografias.com como fuentes de información.

Categorias
Newsletter