ORDENAMIENTO Y BÚSQUEDA

Tamaño: px
Comenzar la demostración a partir de la página:

Download "ORDENAMIENTO Y BÚSQUEDA"

Transcripción

1 ORDENAMIENTO Y BÚSQUEDA Los computadores se emplean frecuentemente para almacenar y recuperar grandes volúmenes de datos. Con su velocidad y facilidad de acceso, los computadores aventajan a otros medios de almacenamiento como el papel y las microfichas. Es importante estudiar la forma en que los computadores pueden almacenar los datos, de modo que su recuperación (búsqueda) sea rápida. Para lograr esto, y puesto que usualmente los usuarios requieren que los datos recuperados cuenten con algún orden particular, también es importante estudiar algoritmos para ordenar los datos almacenados. En todos los ejemplos se supondrá que existe un vector que contiene N datos. Para el caso de la búsqueda, el problema consiste en averiguar si un determinado dato está o no en el vector, y si es así, queremos saber su posición. Para el caso del ordenamiento, el problema consiste en ordenar el vector en forma ascendente (de menor a mayor). Si se quisiera trabajar con ordenamiento descendente los cambios serían mínimos. En esta sección estudiaremos varios algoritmos de búsqueda y ordenamiento que difieren entre sí en cuanto a su complejidad y eficiencia. Búsqueda Lineal Algoritmo: Recorrer el vector de inicio a fin, comparando el dato buscado con cada elemento del arreglo. Implementación: Mediante una función que implemente el algoritmo descrito. La función retornará la posición en que se encontró el dato, o bien la cantidad de elementos en el vector en el caso en que no se encuentre (esto sería un subíndice inválido). * Funcion que realiza una busqueda lineal de un valor entero en un vector * de enteros. La funcion recibe como parametros el vector, la cantidad de * elementos que hay en el vector (N) y el valor entero que se busca. * Si se encuentra el valor entonces se devuelve la posicion de este, sino * se devuelve la cantidad de elementos del vector. int BuscarLinealmente(int Numeros[], int N, int NumeroBuscado) { /* Inicializar el indice para recorrer el vector de numeros */ int i = 0; /* Recorrer el vector mientras no se llegue a su fin y no se encuentre el numero buscado */ while ((i < N) && (NumeroBuscado!= Numeros[i])) i++; /* Retornar la posicion del numero o la cantidad de elementos */ return(i); Ejemplo: Búsqueda lineal en vector de enteros

2 * Ejemplo: Busqueda lineal en un vector de enteros. #include <stdio.h> /* Para usar fscanf, FILE, fopen, fclose. */ #include <stdlib.h> #define MAX_N 50 /* Para la definicion del vector */ * Funcion que realiza una busqueda lineal de un valor entero en un vector * de enteros. La funcion recibe como parametros el vector, la cantidad de * elementos que hay en el vector (N) y el valor entero a buscar. * Si se encuentra el valor entonces se devuelve la posicion de este, sino * se devuelve la cantidad de elementos del vector. int BuscarLinealmente(int Numeros[], int N, int NumeroBuscado) { /* Inicializar el indice para recorrer el vector de numeros */ int i = 0; /* Recorrer el vector mientras no se llegue a su fin y no se encuentre el numero buscado */ while ((i < N) && (NumeroBuscado!= Numeros[i])) i++; /* Retornar la posicion del numero o la cantidad de elementos */ return(i); * Funcion para leer un vector de numeros enteros desde un archivo. El * nombre del archivo se recibe como argumento, junto con el nombre del * vector donde se guardaran los valores. En el archivo de entrada el * primer valor indica el numero de elementos que vienen a continuacion. * La funcion retorna la cantidad de valores leidos y guardados. int LeerVector(char archivo[], int Numeros[]) { FILE *fh; int i, Cant; printf("leyendo datos de entrada\n"); /* Abrir el archivo pasado por la linea de comandos */ fh = fopen(archivo, "r"); if (fh == NULL) { printf("error abriendo el archivo: %s\n", archivo); /* Leer la cantidad de elementos del vector desde el archivo */ fscanf(fh, "%d", &Cant); /* Leer los numeros desde el archivo */ for (i = 0; i < Cant; i++) fscanf(fh, "%d", &Numeros[i]); /* fscanf requiere puntero: & */ /* Cerrar el archivo */ fclose(fh); return(cant);

3 * Funcion para imprimir por pantalla el contenido de un vector de enteros * de 'N' elementos. void MostrarVector(int Numeros[], int N) { int i; printf("el vector de %d enteros es:\n", N); for (i = 0; i < N; i++) printf("%4d", Numeros[i]); * Programa para demostrar la busqueda lineal en un vector de enteros. * Primero se lee un vector de numeros enteros desde un archivo y se le * muestra al usuario. Luego se solicita a este que entre un numero y se * busca en el vector. Si no se encuentra el numero se le indica y si se * encuentra se imprime posicion que ocupa dentro del vector de enteros. main(int argc, char *argv[]) { int Numeros[MAX_N]; int NumElementos; int n; int Posicion; /* Verifica que el usuario haya escrito el nombre del archivo */ if (argc!= 2) { printf("uso: %s archivo\n", argv[0]); /* Leer un vector de enteros desde el archivo indicado */ NumElementos = LeerVector(argv[1], Numeros); /* Mostrar el vector */ MostrarVector(Numeros, NumElementos); /* Solicitar al usuario un numero a buscar */ printf("\ningrese un numero entero: "); scanf("%d", &n); /* scanf requiere puntero: & */ /* Buscar el numero en el vector */ Posicion = BuscarLinealmente(Numeros, NumElementos, n); if (Posicion == NumElementos) printf("\nel %d no esta en el vector.\n", n); else printf("\nel %d esta en la posicion %d.\n", n, Posicion); Archivo de entrada

4 Ejemplo de ejecución C:\>blineal entrada.txt Leyendo datos de entrada El vector de 10 enteros es: Ingrese un numero entero: 5 El 5 no esta en el vector. C:\>blineal entrada.txt Leyendo datos de entrada El vector de 10 enteros es: Ingrese un numero entero: 11 El 11 esta en la posicion 4. Ordenamiento por Selección Algoritmo recursivo escogiendo el mayor: Si el vector tiene un único elemento no se hace nada. En caso contrario, se elige el mayor de los elementos y se intercambia por el último (posición N-1). De esta forma, el último elemento estará en su posición correcta. Luego se ordena el subvector que tiene N-1 datos. * Funcion recursiva que ordena un vector de enteros por seleccion. * Si el vector tiene un solo elemento no se hace nada. De lo contrario, * se elige el mayor de los elementos y se intercambia por el ultimo del * vector (posicion N - 1). Luego se ordena el vector con N - 1 datos. void OrdenarPorSeleccionRecursivo(int Numeros[], int N) { int aux, i, PosMayor; if (N > 1) { /* Elige el mayor */ PosMayor = 0; /* Supone que el mayor es el primero */ for (i=1; i<n; i++) if (Numeros[i] > Numeros[PosMayor]) PosMayor = i; /* Se lleva a cabo el intercambio */ aux = Numeros[N - 1]; Numeros[N - 1] = Numeros[PosMayor]; Numeros[PosMayor] = aux; /* Llamado recursivo a funcion con el subvector de N-1 elementos */ OrdenarPorSeleccionRecursivo(Numeros, N - 1);

5 * Ejemplo: Ordenamiento por seleccion de forma recursiva seleccionando el * mayor elemento. #include <stdio.h> /* Para usar fscanf, FILE, fopen, fclose. */ #include <stdlib.h> #define MAX_N 50 /* Para la definicion del vector */ * Funcion recursiva que ordena un vector de enteros por seleccion. * Si el vector tiene un solo elemento no se hace nada. De lo contrario, * se elige el mayor de los elementos y se intercambia por el ultimo del * vector (posicion N - 1). Luego se ordena el vector con N - 1 datos. void OrdenarPorSeleccionRecursivo(int Numeros[], int N) { int i, PosMayor, aux; if (N > 1) { /* Busca el mayor elemento */ PosMayor = 0; /* Supone que el mayor es el primero */ for (i=1; i<n; i++) if (Numeros[i] > Numeros[PosMayor]) PosMayor = i; /* Se lleva a cabo el intercambio */ aux = Numeros[N - 1]; Numeros[N - 1] = Numeros[PosMayor]; Numeros[PosMayor] = aux; /* Llamado recursivo a funcion con el subvector de N-1 elementos */ OrdenarPorSeleccionRecursivo(Numeros, N - 1); * Funcion para leer un vector de numeros enteros desde un archivo. El * nombre del archivo se recibe como argumento, junto con el nombre del * vector donde se guardaran los valores. En el archivo de entrada el * primer valor indica el numero de elementos que vienen a continuacion. * La funcion retorna la cantidad de valores leidos y guardados. int LeerVector(char archivo[], int Numeros[]) { FILE *fh; int i, Cant; printf("leyendo datos de entrada\n"); /* Abrir el archivo pasado por la linea de comandos */ fh = fopen(archivo, "r"); if (fh == NULL) { printf("error abriendo el archivo: %s\n", archivo); /* Leer la cantidad de elementos del vector desde el archivo */ fscanf(fh, "%d", &Cant); /* Leer los numeros desde el archivo */ for (i = 0; i < Cant; i++) fscanf(fh, "%d", &Numeros[i]); /* fscanf requiere puntero: & */ /* Cerrar el archivo */ fclose(fh); return(cant);

6 * Funcion para imprimir por pantalla el contenido de un vector de enteros * de 'N' elementos. void MostrarVector(int Numeros[], int N) { int i; printf("el vector de %d enteros es:\n", N); for (i = 0; i < N; i++) printf("%4d", Numeros[i]); * Programa ejemplo para demostrar el ordenamiento por seleccion del mayor * en un vector de enteros de forma recursiva. * - Se lee un vector de numeros enteros desde un archivo. * - Se muestra el vector antes de ordenarlo. * - Se ordena el vector a traves de la funcion recursiva de * ordenamiento por seleccion. * - Se muestra el vector despues de ordenarlo. main(int argc, char *argv[]) { int Numeros[MAX_N]; int NumElementos; /* Verifica que el usuario haya escrito el nombre del archivo */ if (argc!= 2) { printf("uso: %s archivo\n", argv[0]); /* Leer un vector de enteros desde el archivo indicado*/ NumElementos = LeerVector(argv[1], Numeros); /* Mostrar el vector antes de ordenarlo */ printf("\nantes de Ordenar\n"); MostrarVector(Numeros, NumElementos); /* Ordenar el vector de numeros de forma recursiva */ OrdenarPorSeleccionRecursivo(Numeros, NumElementos); /* Mostrar el vector despues de ordenarlo */ printf("\n\ndespues de Ordenar\n"); MostrarVector(Numeros, NumElementos); Archivo de entrada Ejemplo de ejecución C:\>ordsel entrada.txt Leyendo datos de entrada Antes de Ordenar El vector de 10 enteros es: Despues de Ordenar El vector de 10 enteros es:

7 Ordenamiento por Selección (variante eligiendo el menor) Algoritmo recursivo escogiendo el menor: Si el vector tiene un único elemento no se hace nada. En caso contrario, se elige el menor de los elementos y se intercambia por el primero (posición de inicio). De esta forma, el primer elemento estará en su posición correcta. Luego se ordena el subvector que empieza en la siguiente posición. * Funcion recursiva que ordena un vector de enteros por seleccion. * Si el vector tiene un solo elemento no se hace nada. De lo contrario, * se elige el menor de los elementos y se intercambia por el primero del * vector (posicion Inicio). Luego se ordena el vector a partir de la * posicion Inicio + 1. void OrdenarPorSeleccionRecursivo(int Numeros[], int Inicio, int N) { int i, PosMenor, aux; /* Busca el menor elemento */ if (Inicio + 1 < N) { PosMenor = Inicio; /* Supone que el menor es el primero */ for (i = Inicio + 1; i < N; i++) if (Numeros[i] < Numeros[PosMenor]) PosMenor = i; /* Lleva a cabo el intercambio */ aux = Numeros[Inicio]; Numeros[Inicio] = Numeros[PosMenor]; Numeros[PosMenor] = aux; /* Llamado recursivo a la funcion con el subvector */ OrdenarPorSeleccionRecursivo(Numeros, Inicio + 1, N); * Ejemplo: Ordenamiento por seleccion de forma recursiva seleccionando el * menor elemento. #include <stdio.h> /* Para usar fscanf, FILE, fopen, fclose. */ #include <stdlib.h> #define MAX_N 50 /* Para la definicion del vector */ * Funcion recursiva que ordena un vector de enteros por seleccion. * Si el vector tiene un solo elemento no se hace nada. De lo contrario, * se elige el menor de los elementos y se intercambia por el primero del * vector (posicion Inicio). Luego se ordena el vector a partir de la * posicion Inicio + 1. void OrdenarPorSeleccionRecursivo(int Numeros[], int Inicio, int N) { int i, PosMenor, aux; if (Inicio + 1 < N) { /* Busca el menor elemento */ PosMenor = Inicio; /* Supone que el menor es el primero */ for (i = Inicio + 1; i < N; i++) if (Numeros[i] < Numeros[PosMenor]) PosMenor = i;

8 aux = Numeros[Inicio]; /* Lleva a cabo el intercambio */ Numeros[Inicio] = Numeros[PosMenor]; Numeros[PosMenor] = aux; /* Llamado recursivo a la funcion con el subvector */ OrdenarPorSeleccionRecursivo(Numeros, Inicio + 1, N); * Funcion para leer un vector de numeros enteros desde un archivo. El * nombre del archivo se recibe como argumento, junto con el nombre del * vector donde se guardaran los valores. En el archivo de entrada el * primer valor indica el numero de elementos que vienen a continuacion. * La funcion retorna la cantidad de valores leidos y guardados. int LeerVector(char archivo[], int Numeros[]) { FILE *fh; int i, Cant; printf("leyendo datos de entrada\n"); /* Abrir el archivo pasado por la linea de comandos */ fh = fopen(archivo, "r"); if (fh == NULL) { printf("error abriendo el archivo: %s\n", archivo); /* Leer la cantidad de elementos del vector desde el archivo */ fscanf(fh, "%d", &Cant); /* Leer los numeros desde el archivo */ for (i = 0; i < Cant; i++) fscanf(fh, "%d", &Numeros[i]); /* fscanf requiere puntero: & */ /* Cerrar el archivo */ fclose(fh); return(cant); * Funcion para imprimir por pantalla el contenido de un vector de enteros * de 'N' elementos. void MostrarVector(int Numeros[], int N) { int i; printf("el vector de %d enteros es:\n", N); for (i = 0; i < N; i++) printf("%4d", Numeros[i]); * Programa ejemplo para demostrar el ordenamiento por seleccion del menor * en un vector de enteros de forma recursiva. * - Se lee un vector de numeros enteros desde un archivo. * - Se muestra el vector antes de ordenarlo. * - Se ordena el vector a traves de la funcion recursiva de * de ordenamiento por seleccion. * - Se muestra el vector despues de ordenarlo. main(int argc, char *argv[]) { int Numeros[MAX_N]; int NumElementos; /* Verifica que el usuario haya escrito el nombre del archivo */ if (argc!= 2) { printf("uso: %s archivo\n", argv[0]); /* Leer un vector de enteros desde archivo */ NumElementos = LeerVector(argv[1], Numeros); /* Mostrar el vector antes de ordenarlo */

9 printf("\nantes de Ordenar\n"); MostrarVector(Numeros, NumElementos); /* Ordenar el vector de numeros de forma recursiva */ OrdenarPorSeleccionRecursivo(Numeros, 0, NumElementos); /* Mostrar el vector despues de ordenarlo */ printf("\n\ndespues de Ordenar\n"); MostrarVector(Numeros, NumElementos); Archivo de entrada Ejemplo de ejecución C:\>ordsel entrada.txt Leyendo datos de entrada Antes de Ordenar El vector de 10 enteros es: Despues de Ordenar El vector de 10 enteros es: Ordenamiento por Selección (versión iterativa) Algoritmo iterativo escogiendo el mayor: Se itera tantas veces como elementos hay en el vector. En cada iteración se elige el mayor de los elementos y se intercambia por el último. Se decrementa N para que en la siguiente iteración se trate el siguiente. El orden en que se van ubicando los elementos es el mismo que en el caso recursivo.

10 * Funcion iterativa que ordena un vector de enteros por seleccion. * Si el vector tiene un solo elemento no se hace nada. De lo contrario, * se elige el mayor de los elementos y se intercambia por el ultimo del * vector (posicion Cant - 1). Luego se decrementa la cantidad de * elementos a ordenar y se vuelve a iterar. void OrdenarPorSeleccionIterativo(int Numeros[], int N) { int i, PosMayor, aux; /* Itera tantas veces como elementos hay en el vector. */ /* En cada iteracion ubica el elemento en la posicion N */ while (N > 1) { /* Busca el mayor */ PosMayor = 0; /* Supone que el mayor es el primero */ for (i = 1; i < N; i++) if (Numeros[i] > Numeros[PosMayor]) PosMayor = i; /* Lleva a cabo el intercambio */ aux = Numeros[N - 1]; Numeros[N - 1] = Numeros[PosMayor]; Numeros[PosMayor] = aux; N--; /* Decrementar la cantidad de elementos a ordenar */ * Ejemplo: Ordenamiento por seleccion de forma iterativa seleccionando el * mayor elemento. #include <stdio.h> /* Para usar fscanf, FILE, fopen, fclose. */ #include <stdlib.h> #define MAX_N 50 /* Para la definicion del vector */ * Funcion iterativa que ordena un vector de enteros por seleccion. * Si el vector tiene un solo elemento no se hace nada. De lo contrario, * se elige el mayor de los elementos y se intercambia por el ultimo del * vector (posicion Cant - 1). Luego se decrementa la cantidad de * elementos a ordenar y se vuelve a iterar. void OrdenarPorSeleccionIterativo(int Numeros[], int N) { int i, PosMayor, aux; /* Itera tantas veces como elementos hay en el vector. */ /* En cada iteracion ubica el elemento en la posicion N */ while (N > 1) { /* Busca el mayor */ PosMayor = 0; /* Supone que el mayor es el primero */ for (i = 1; i < N; i++) if (Numeros[i] > Numeros[PosMayor]) PosMayor = i; /* Lleva a cabo el intercambio */ aux = Numeros[N - 1]; Numeros[N - 1] = Numeros[PosMayor]; Numeros[PosMayor] = aux; N--; /* Decrementar la cantidad de elementos a ordenar */

11 * Funcion para leer un vector de numeros enteros desde un archivo. El * nombre del archivo se recibe como argumento, junto con el nombre del * vector donde se guardaran los valores. En el archivo de entrada el * primer valor indica el numero de elementos que vienen a continuacion. * La funcion retorna la cantidad de valores leidos y guardados. int LeerVector(char archivo[], int Numeros[]) { FILE *fh; int i, Cant; printf("leyendo datos de entrada\n"); /* Abrir el archivo pasado por la linea de comandos */ fh = fopen(archivo, "r"); if (fh == NULL) { printf("error abriendo el archivo: %s\n", archivo); /* Leer la cantidad de elementos del vector desde el archivo */ fscanf(fh, "%d", &Cant); /* Leer los numeros desde el archivo */ for (i = 0; i < Cant; i++) fscanf(fh, "%d", &Numeros[i]); /* fscanf requiere puntero: & */ /* Cerrar el archivo */ fclose(fh); return(cant); * Funcion para imprimir por pantalla el contenido de un vector de enteros * de 'N' elementos. void MostrarVector(int Numeros[], int N) { int i; printf("el vector de %d enteros es:\n", N); for (i = 0; i < N; i++) printf("%4d", Numeros[i]); * Programa ejemplo para demostrar el ordenamiento por seleccion del mayor * en un vector de enteros de forma iterativa. * - Se lee un vector de numeros enteros desde un archivo. * - Se muestra el vector antes de ordenarlo. * - Se ordena el vector a traves de la funcion iterativa de * ordenamiento por seleccion. * - Se muestra el vector despues de ordenarlo. main(int argc, char *argv[]) { int Numeros[MAX_N]; int NumElementos; /* Verifica que el usuario haya escrito el nombre del archivo */ if (argc!= 2) { printf("uso: %s archivo\n", argv[0]); /* Leer un vector de enteros desde archivo */ NumElementos = LeerVector(argv[1], Numeros); /* Mostrar el vector antes de ordenarlo */ printf("\nantes de Ordenar\n"); MostrarVector(Numeros, NumElementos); /* Ordenar el vector de numeros de forma iterativa */ OrdenarPorSeleccionIterativo(Numeros, NumElementos); /* Mostrar el vector despues de ordenarlo */ printf("\n\ndespues de Ordenar\n"); MostrarVector(Numeros, NumElementos);

12 Archivo de entrada Ejemplo de ejecución C:\>ordsel entrada.txt Leyendo datos de entrada Antes de Ordenar El vector de 10 enteros es: Despues de Ordenar El vector de 10 enteros es:

13 Complejidad de Algoritmos El estudio de la complejidad de los algoritmos intenta obtener medidas que indiquen cómo será el comportamiento de los algoritmos ante variaciones en las características de los datos de entrada (por ejemplo, la cantidad de datos). El orden de ejecución de un algoritmo, denotado por O(expresión) indica cómo será el comportamiento del tiempo de ejecución del algoritmo ante variaciones en los parámetros de la expresión. Por ejemplo, cuando se dice que un algoritmo tiene orden lineal respecto al número de elementos de entrada, n, y denotado por O(n), se quiere expresar que el tiempo de ejecución del algoritmo se incrementará linealmente conforme se incremente el número de elementos de entrada. Puede deducirse entonces que los algoritmos más deseables son aquellos que cuenten con órdenes de ejecución logarítmicos, y los menos deseables son aquellos con órdenes de ejecución exponenciales. Ordenamiento y Búsqueda Eficientes Cuando la cantidad de datos que se están manipulando es extremadamente grande, incluso un computador puede tener problemas para llevar a cabo búsquedas u ordenamientos en un tiempo razonable. El algoritmo de búsqueda lineal, como es de esperar, es de orden O(n), donde n es el número de elementos. El algoritmo de ordenamiento por selección es de orden O(n 2 ), donde n es el número de elementos. A continuación se estudiarán algoritmos que tienen complejidad O(log n). Búsqueda Binaria La búsqueda binaria puede aplicarse únicamente a un conjunto ordenado de datos. Por esto, supondremos que el vector que contiene los datos se encuentra ordenado ascendentemente (es decir, de menor a mayor). Algoritmo: Se analiza la posición del medio. Si ahí se encuentra el dato buscado, terminamos. Si el dato buscado es menor, se busca en el subvector menor, y si es mayor, se busca en el subvector mayor (aprovechando el hecho de que el vector está ordenado). Cada vez que se hace uno de estos análisis, se divide el vector en dos (de ahí su nombre, búsqueda binaria), y se descarta una de las mitades. Intuitivamente puede verse que la cantidad de trabajo necesaria para encontrar un elemento (o saber que no está), es mucho menor que para el caso de la búsqueda lineal.

14 * Funcion que realiza una busqueda binaria de un elemento en un vector * de enteros. La funcion recibe como parametros el vector, el indice de * inicio y de fin del vector, y el valor entero que se desea buscar. * Si el indice de inicio es mayor que el de fin se retorna que no se * encontro. En otro caso se divide el vector a la mitad, si el numero * buscado es menor que el que esta en la mitad se busca entonces en la * mitad inferior, si el numero buscado es mayor que el que esta en la * mitad se busca entonces en la mitad superior y en otro caso, el numero * en la mitad es el numero buscado. int BusquedaBinaria(int Numeros[], int Inicio, int Fin, int NumeroBuscado) { if (Inicio > Fin) return(no_encontrado); else { int pos = (Inicio + Fin) / 2; if (NumeroBuscado < Numeros[pos]) return(busquedabinaria(numeros, Inicio, pos - 1, NumeroBuscado)); else if (NumeroBuscado > Numeros[pos]) return(busquedabinaria(numeros, pos + 1, Fin, NumeroBuscado)); else return(pos); Ejemplo: Búsqueda Binaria * Ejemplo: Busqueda binaria de forma recursiva sobre un vector ordenado. #include <stdio.h> /* Para usar fscanf, FILE, fopen, fclose. */ #include <stdlib.h> #define MAX_N 50 /* Para la definicion del vector */ /* Valor a retornar cuando no se encuentra el elemento buscado */ #define NO_ENCONTRADO -1 * Funcion recursiva que ordena un vector de enteros por seleccion. * Si el vector tiene un solo elemento no se hace nada. De lo contrario, * se elige el mayor de los elementos y se intercambia por el ultimo del * vector (posicion N - 1). Luego se ordena el vector con N - 1 datos. void OrdenarPorSeleccionRecursivo(int Numeros[], int N) { int i, PosMayor, aux; if (N > 1) { /* Busca el mayor elemento */ PosMayor = 0; /* Supone que el mayor es el primero */ for (i=1; i<n; i++) if (Numeros[i] > Numeros[PosMayor]) PosMayor = i; /* Se lleva a cabo el intercambio */ aux = Numeros[N - 1]; Numeros[N - 1] = Numeros[PosMayor]; Numeros[PosMayor] = aux; /* Llamado recursivo a la funcion con el subvector de N-1 elementos */ OrdenarPorSeleccionRecursivo(Numeros, N - 1);

15 * Funcion para leer un vector de numeros enteros desde un archivo. int LeerVector(char archivo[], int Numeros[]) { FILE *fh; int i, Cant; printf("leyendo datos de entrada\n"); /* Abrir el archivo pasado por la linea de comandos */ fh = fopen(archivo, "r"); if (fh == NULL) { printf("error abriendo el archivo: %s\n", archivo); /* Leer la cantidad de elementos del vector desde el archivo */ fscanf(fh, "%d", &Cant); /* Leer los numeros desde el archivo */ for (i = 0; i < Cant; i++) fscanf(fh, "%d", &Numeros[i]); /* fscanf requiere puntero: & */ /* Cerrar el archivo */ fclose(fh); return(cant); * Funcion para imprimir por pantalla el contenido de un vector de enteros * de 'N' elementos. void MostrarVector(int Numeros[], int N) { int i; printf("el vector de %d enteros es:\n", N); for (i = 0; i < N; i++) printf("%4d", Numeros[i]); * Funcion que realiza una busqueda binaria de un elemento en un vector * de enteros. La funcion recibe como parametros el vector, el indice de * inicio y de fin del vector, y el valor entero que se desea buscar. * Si el indice de inicio es mayor que el de fin se retorna que no se * encontro. En otro caso se divide el vector a la mitad, si el numero * buscado es menor que el que esta en la mitad se busca entonces en la * mitad inferior, si el numero buscado es mayor que el que esta en la * mitad se busca entonces en la mitad superior y en otro caso, el numero * en la mitad es el numero buscado. int BusquedaBinaria(int Numeros[], int Inicio, int Fin, int NumeroBuscado) { if (Inicio > Fin) return(no_encontrado); else { int pos = (Inicio + Fin) / 2; if (NumeroBuscado < Numeros[pos]) return(busquedabinaria(numeros, Inicio, pos - 1, NumeroBuscado)); else if (NumeroBuscado > Numeros[pos]) return(busquedabinaria(numeros, pos + 1, Fin, NumeroBuscado)); else return(pos);

16 * Programa ejemplo para demostrar la busqueda binaria de forma recursiva * en un vector de enteros. Primero se lee un vector de numeros enteros * desde un archivo, se ordena y se le muestra al usuario. Luego se le * solicita a este que entre un numero y se busca en el vector a traves de * la busqueda binaria de forma recursiva. Si no se encuentra el numero se * le indica y si se encuentra se imprime la posicion que ocupa en vector. main(int argc, char *argv[]) { int Numeros[MAX_N]; int NumElementos, n, Posicion; /* Verifica que el usuario haya escrito el nombre del archivo */ if (argc!= 2) { printf("uso: %s archivo\n", argv[0]); /* Leer un vector de enteros desde archivo */ NumElementos = LeerVector(argv[1], Numeros); /* Ordenar el vector de numeros de forma recursiva */ OrdenarPorSeleccionRecursivo(Numeros, NumElementos); /* Mostrar el vector despues de ordenarlo */ MostrarVector(Numeros, NumElementos); /* Solicitar al usuario un numero a buscar */ printf("\ningrese un numero entero para buscarlo en el vector: "); scanf("%d", &n); /* scanf requiere puntero: & */ /* Buscar el numero en el vector */ Posicion = BusquedaBinaria(Numeros, 0, NumElementos - 1, n); if (Posicion == NO_ENCONTRADO) printf("\nel %d no esta en el vector.\n", n); else printf("\nel %d esta en la posicion %d.\n", n, Posicion); Versión Iterativa También es posible implementar el algoritmo de búsqueda binaria iterativamente, reemplazando la recursividad por un ciclo: /************************************************************************ * Funcion que realiza una busqueda binaria de un valor entero en vector * de enteros. La funcion recibe como parametros el vector, el indice de * inicio y de fin del vector, y el valor entero que se desea buscar. * Mientras el indice de inicio sea menor o igual que el de fin se divide * vector a la mitad, si el numero buscado es menor que el que esta en la * mitad se cambia el indice de fin para la posicion anterior a la mitad y * se vuelve a iterar, si el numero buscado es mayor que el que esta en la * mitad se cambia indice de inicio para la posicion posterior a la mitad * y se vuelve a iterar, y sino, el numero en la mitad es el buscado. * Si el indice de inicio se hace mayor que el de fin entonces se retorna * como No Encontrado. int BusquedaBinariaIterativa(int Numeros[], int Inicio, int Fin, int NumeroBuscado) { while (Inicio <= Fin) { int pos = (Inicio + Fin) / 2; if (NumeroBuscado < Numeros[pos]) Fin = pos - 1; else if (NumeroBuscado > Numeros[pos]) Inicio = pos + 1; else return pos; return NO_ENCONTRADO;

17 Quicksort El algoritmo Quicksort fue desarrollado en 1962 por C.A.R. Hoare, antes de que se implementaran los primeros lenguajes con capacidad para ejecutar funciones recursivas. El algoritmo, aplicado a un subvector vec[a... b] es: 1. Elegir un elemento x cualquiera del vector, entre a y b. El elemento x se llama pivote. Usualmente se elige el elemento que está en el medio. 2. Particionar el vector en dos subvectores: vec[a... p] y vec[p+1... b], intercambiando elementos de modo que todos los elementos que son menores que x estén a la izquierda y todos los mayores que x estén a la derecha. 3. Aplicar Quicksort al subvector vec[a... p] 4. Aplicar Quicksort al subvector vec[p+1... b] La función que implementa el algoritmo Quicksort podría implementarse de la siguiente manera: * Funcion recursiva que ordena un vector de enteros mediante Quicksort. * Si el vector no tiene mas de dos elementos no se hace nada. De lo * contrario, se particiona el vector y se aplica el metodo a los dos * subvectores que resultan de la particion. * Se reciben como parametros el vector y el indice inicial y final. void QuickSort(int Numeros[], int Inicio, int Fin) { int p; if (Inicio < Fin) { p = ParticionarVector(Numeros, Inicio, Fin); QuickSort(Numeros, Inicio, p); QuickSort(Numeros, p + 1, Fin); La función que lleva a cabo la selección del pivote y el particionamiento del vector sería: * Funcion para particionar un vector en dos subvectores, intercambiando * elementos de modo que todos los menores que el pivote esten a la * izquierda y los mayores a la derecha. * Se reciben como parametros el vector y el indice inicial y final. * Se retorna el indice para particionar el vector (posicion del pivote). int ParticionarVector(int Numeros[], int Inicio, int Fin) { int pivote = Numeros[(Inicio + Fin) / 2]; int izq = Inicio - 1; int der = Fin + 1; int aux; while (izq < der) { /* Busca el 1er. elemento de la derecha que haya que intercambiar */

18 do { izq++; while (Numeros[izq] < pivote); /* Busca el 1er. elemento de la izq. que haya que intercambiar */ do { der--; while (Numeros[der] > pivote); if (izq < der) { /* Lleva a cabo el intercambio */ aux = Numeros[izq]; Numeros[izq] = Numeros[der]; Numeros[der] = aux; return(der); Ejemplo: Ordenamiento con Quicksort de forma recursiva Ejemplo: Ordenamiento con quicksort de forma recursiva. #include <stdio.h> /* Para usar fscanf, FILE, fopen, fclose. */ #include <stdlib.h> #define MAX_N 50 /* Para la definicion del vector */ Funcion para particionar un vector en dos subvectores, intercambiando elementos de modo que todos los menores que el pivote esten a la izquierda y los mayores a la derecha. Se reciben como parametros el vector y el indice inicial y final. Se retorna el indice para particionar el vector (posicion del pivote). int ParticionarVector(int Numeros[], int Inicio, int Fin) { int pivote = Numeros[(Inicio + Fin) / 2]; int izq = Inicio - 1; int der = Fin + 1; int aux; while (izq < der) { /* Busca primer elemento de la derecha que haya que intercambiar */ do { izq++; while (Numeros[izq] < pivote); /* Busca primer elemento de la izquierda que haya que intercambiar */ do { der--; while (Numeros[der] > pivote); if (izq < der) { /* Lleva a cabo el intercambio */ aux = Numeros[izq]; Numeros[izq] = Numeros[der]; Numeros[der] = aux; return(der);

19 Funcion recursiva que ordena un vector de enteros mediante Quicksort. Si el vector no tiene mas de dos elementos no se hace nada. De lo contrario, se particiona el vector y se aplica el metodo a los dos subvectores que resultan de la particion. Se reciben como parametros el vector y el indice inicial y final. void QuickSort(int Numeros[], int Inicio, int Fin) { int p; if (Inicio < Fin) { p = ParticionarVector(Numeros, Inicio, Fin); QuickSort(Numeros, Inicio, p); QuickSort(Numeros, p + 1, Fin); * Funcion para leer un vector de numeros enteros desde un archivo. El * nombre del archivo se recibe como argumento, junto con el nombre del * vector donde se guardaran los valores. En el archivo de entrada el * primer valor indica el numero de elementos que vienen a continuacion. * La funcion retorna la cantidad de valores leidos y guardados. int LeerVector(char archivo[], int Numeros[]) { FILE *fh; int i, Cant; printf("leyendo datos de entrada\n"); /* Abrir el archivo pasado por la linea de comandos */ fh = fopen(archivo, "r"); if (fh == NULL) { printf("error abriendo el archivo: %s\n", archivo); /* Leer la cantidad de elementos del vector desde el archivo */ fscanf(fh, "%d", &Cant); /* Leer los numeros desde el archivo */ for (i = 0; i < Cant; i++) fscanf(fh, "%d", &Numeros[i]); /* fscanf requiere puntero: & */ /* Cerrar el archivo */ fclose(fh); return(cant); * Funcion para imprimir por pantalla el contenido de un vector de enteros * de 'N' elementos. void MostrarVector(int Numeros[], int N) { int i; printf("el vector de %d enteros es:\n", N); for (i = 0; i < N; i++) printf("%4d", Numeros[i]);

20 /************************************************************************ * Programa ejemplo para demostrar el ordenamiento con el algoritmo * Quicksort recursivo sobre un vector de enteros. * - Se lee un vector de numeros enteros desde un archivo. * - Se muestra el vector antes de ordenarlo. * - Se ordena el vector a traves de la funcion recursiva Quicksort. * - Se muestra el vector despues de ordenarlo. main(int argc, char *argv[]) { int Numeros[MAX_N]; int NumElementos; /* Verifica que el usuario haya escrito el nombre del archivo */ if (argc!= 2) { printf("uso: %s archivo\n", argv[0]); /* Leer un vector de enteros desde archivo */ NumElementos = LeerVector(argv[1], Numeros); /* Mostrar el vector antes de ordenarlo */ printf("\nantes de Ordenar\n"); MostrarVector(Numeros, NumElementos); /* Ordenar el vector de numeros de forma recursiva */ QuickSort(Numeros, 0, NumElementos-1); /* Mostrar el vector despues de ordenarlo */ printf("\n\ndespues de Ordenar\n"); MostrarVector(Numeros, NumElementos);

21 Comparación de algunas funciones de tiempo n log n n log n n2 n2 log n 1 0,00 0,0 1 0,0 2 0,69 1,4 4 2,8 5 1,61 8, ,2 10 2,30 23, ,3 20 3,00 59, ,3 50 3,91 195, , ,61 460, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,0 Ejemplo: Ordenando las líneas de un archivo Programa que ordena las líneas de un archivo y las guarda en otro. Ilustra el uso de operaciones sobre archivos, y aplica uno de los algoritmos de ordenamiento estudiados. Las líneas del archivo origen se leen una a una mediante fgets, y se almacenan en un vector de strings (o matriz de chars). Una vez ahí, se aplica un algoritmo de ordenamiento por selección y se procede a escribirlas al archivo de salida mediante fputs. Los nombres de los archivos, se pasan como argumentos a través de la línea de comandos. Modo de uso: filesort <archivo-origen> <archivo-destino>

22 * Ordena las lineas de un archivo y las guarda en otro: filesort * Ilustra el uso de operaciones sobre archivos. Las lineas del archivo * origen se leen una a una mediante fgets, y se almacenan en un vector * de strings (o matriz de chars). Una vez ahi, se aplica un algoritmo * de ordenamiento y se procede a escribirlas al archivo de salida * mediante fputs. Los nombres de los archivos, se pasan como argumentos * por la linea de comandos del programa. * Utilizar como: filesort <archivo-origen> <archivo-destino> #include <stdio.h> #include <stdlib.h> #include <string.h> /* Definicion de longitud maxima permitida para una linea del archivo */ #define MAX_LINEA 100 /* Definicion de la maxima cantidad de lineas permitidas en el archivo */ #define MAX_NUM_LINEAS 100 * Funcion recursiva que ordena un vector de N strings por seleccion. * Si el vector tiene un solo elemento no se hace nada. De lo contrario, * se elige el mayor de los elementos y se intercambia por el ultimo del * vector (posicion N - 1). Luego se ordena el vector con N - 1 datos. ************************************************************************/ void Ordenar(char VecStrings[MAX_NUM_LINEAS][MAX_LINEA], int N) { int i, PosMayor; char StrAux[MAX_LINEA]; if (N > 1) { /* Busca el mayor elemento */ PosMayor = 0; /* Supone que el mayor es el primero */ for (i=1; i<n; i++) if (strcmp(vecstrings[i], VecStrings[PosMayor])>0) PosMayor = i; /* Se lleva a cabo el intercambio */ strcpy(straux, VecStrings[N-1]); strcpy(vecstrings[n-1], VecStrings[PosMayor]); strcpy(vecstrings[posmayor], StrAux); /* Llamado recursivo a funcion con el subvector de N-1 elementos */ Ordenar(VecStrings, N - 1); main(int argc, char *argv[]) { FILE *origen, *destino; /* Descriptores para los archivos */ int NumLineas = 0; /* Numero de lineas leidas del archivo */ int i; /* Indice para el vector */ /* Vector donde se almacenara el archivo completo en memoria */ char vector[max_num_lineas][max_linea]; /* Verifica que se haya llamado correctamente el programa */ if (argc!= 3) { printf("uso correcto: sort <archivo-origen> <archivo-destino>\n"); /* Intenta abrir para lectura el archivo origen, tomando su nombre */ /* de la linea de comandos del programa. */ origen = fopen(argv[1], "r"); if (origen == NULL) { printf("no se pudo abrir archivo: %s\n", argv[2]);

23 /* Intenta abrir para escritura el archivo destino, tomando su */ /* nombre de la linea de comandos del programa. */ destino = fopen(argv[2], "w"); if (destino == NULL) { printf("no se pudo crear archivo: %s\n", argv[3]); fclose(origen); /* Ciclo para leer las lineas del archivo y guardarlas en el vector */ while (fgets(vector[numlineas], MAX_LINEA, origen)!= NULL) NumLineas++; /* Se ordena el vector */ Ordenar(vector, NumLineas); /* Ciclo para escribir en el archivo las lineas del vector */ for (i=0; i<numlineas; i++) fputs(vector[i], destino); /* Cierra los archivos */ fclose(origen); fclose(destino); Archivo de prueba original Volvo Renault Honda Daihatsu Chrysler Opel Alfa-Romeo Mitsubishi Suzuki Rover BMW Jaguar Ford Fiat Mercedes-Benz Volkswagen Dodge Nissan Chevrolet Kia Daewoo Toyota Audi Seat Subaru Citroen Porsche Peugeot Hyundai Mazda

24 Archivo de salida (resultado) Alfa-Romeo Audi BMW Chevrolet Chrysler Citroen Daewoo Daihatsu Dodge Fiat Ford Honda Hyundai Jaguar Kia Mazda Mercedes-Benz Mitsubishi Nissan Opel Peugeot Porsche Renault Rover Seat Subaru Suzuki Toyota Volkswagen Volvo

LISTA DE PRECIOS DISCOS Y CAMPANAS

LISTA DE PRECIOS DISCOS Y CAMPANAS Numerica BD 0001 KIA 932,65 BD 0802 ROVER 420,95 BD 0001 MAZDA 932,65 BD 0805 MERCEDES BENZ 1.617,41 BD 0002 KIA 1.024,70 BD 0812 MERCEDES BENZ 881,03 BD 0003 ASIA 718,94 BD 0817 ACURA 471,38 BD 0004 KIA

Más detalles

<tipo> Tipo de dato de los elementos del vector

<tipo> Tipo de dato de los elementos del vector Vectores y matrices Declaración Vector (array unidimiensional): []; Tipo de dato de los elementos del vector Identificador de la variable.

Más detalles

Este método se basa en buscar el elemento menor el vector y colocarlo en la primera

Este método se basa en buscar el elemento menor el vector y colocarlo en la primera Lectura ORDENACIÓN DE ARREGLOS Con frecuencia se requiere clasificar u ordenar los elementos de un vector (arreglo unidimensional) en algún orden en particular. Por ejemplo, ordenar un conjunto de números

Más detalles

250-21007 MITSUBISHI (4) 1985-1990 250-21002 CHRYSLER (4, 6, 8) 1979-1996 DODGE (4, 6, 8) 1979-1996 PLYMOUTH (4, 6, 8) 1979-1989

250-21007 MITSUBISHI (4) 1985-1990 250-21002 CHRYSLER (4, 6, 8) 1979-1996 DODGE (4, 6, 8) 1979-1996 PLYMOUTH (4, 6, 8) 1979-1989 250-21001 CHEVROLET (3, 4, 6, 8) 1980-2005 / DAEWOO (4) 1996-1998 GENERAL MOTORS (4, 6, 8) 1982-2005 / ISUZU (4, 6) 1981-1998 JEEP (6) 1984-1990 / SUZUKI (4) 1990-1994 250-21007 MITSUBISHI (4) 1985-1990

Más detalles

ORDENAMIENTO Y BÚSQUEDA EN ARREGLOS

ORDENAMIENTO Y BÚSQUEDA EN ARREGLOS 1 ORDENAMIENTO Y BÚSQUEDA EN ARREGLOS Corina Flores Villarroel ORDENAMIENTO EN ARREGLOS Y COLECCIONES Una de las tareas más comunes a la hora de procesar datos es la clasificación u ordenación de los datos.

Más detalles

Por ejemplo, para declarar un arreglo de enteros llamado a con diez elementos se hace de la siguiente forma:

Por ejemplo, para declarar un arreglo de enteros llamado a con diez elementos se hace de la siguiente forma: Arreglos unidimensionales y multidimensionales Los arreglos son una colección de variables del mismo tipo que se referencian utilizando un nombre común. Un arreglo consta de posiciones de memoria contigua.

Más detalles

Universidad de Valladolid. Departamento de informática. Campus de Segovia. Estructura de datos Tema 4: Ordenación. Prof. Montserrat Serrano Montero

Universidad de Valladolid. Departamento de informática. Campus de Segovia. Estructura de datos Tema 4: Ordenación. Prof. Montserrat Serrano Montero Universidad de Valladolid Departamento de informática Campus de Segovia Estructura de datos Tema 4: Ordenación Prof. Montserrat Serrano Montero ÍNDICE Conceptos básicos Elección de un método Métodos directos

Más detalles

Programación Estructurada

Programación Estructurada Programación Estructurada PROGRAMACIÓN ESTRUCTURADA 1 Sesión No. 11 Nombre: Manejo de archivos Contextualización En los lenguajes de programación estructurada como C, que carecían de una conexión a base

Más detalles

Ficheros conceptos. Manejo de ficheros en C. Apertura del fichero Función fopen: nombre del fichero. Apertura del fichero Función fopen

Ficheros conceptos. Manejo de ficheros en C. Apertura del fichero Función fopen: nombre del fichero. Apertura del fichero Función fopen Fundamentos de Informática. Dpto. de ATC - Página 1 de 8 conceptos Manejo de ficheros en C Contienen los datos que se almacenan en dispositivos de almacenamiento masivo: disquetes, discos duros, DROM,

Más detalles

Tema 13: Apuntadores en C

Tema 13: Apuntadores en C Tema 13: Apuntadores en C M. en C. Edgardo Adrián Franco Martínez http://www.eafranco.com edfrancom@ipn.mx @edfrancom edgardoadrianfrancom Estructuras de datos (Prof. Edgardo A. Franco) 1 Contenido Introducción

Más detalles

Complejidad computacional (Análisis de Algoritmos)

Complejidad computacional (Análisis de Algoritmos) Definición. Complejidad computacional (Análisis de Algoritmos) Es la rama de las ciencias de la computación que estudia, de manera teórica, la optimización de los recursos requeridos durante la ejecución

Más detalles

LUK - POWER TRAIN CLUTCHES Y SISTEMAS HIDRAULICOS. LUK clutches y sist hid Página 1. Componentes. # de Parte Anterior. # de Parte

LUK - POWER TRAIN CLUTCHES Y SISTEMAS HIDRAULICOS. LUK clutches y sist hid Página 1. Componentes. # de Parte Anterior. # de Parte LUK - POWER TRAIN CLUTCHES Y SISTEMAS HIDRAULICOS # de Parte # de Parte Anterior Servicio Marca Comentario Componentes 128002910 Agrícola John Deere 128031610 Agrícola John Deere 5425 130000940 Agrícola

Más detalles

TARIFA TURBO SERVICE 2016 BAJO PEDIDO

TARIFA TURBO SERVICE 2016 BAJO PEDIDO TARIFA TURBO SERVICE 2016 BAJO PEDIDO Ref* Artículo PVP* 712766-9001 GARRETT REMAN Alfa Romeo 550,00 721021-9001 GARRETT REMAN Audi 550,00 54399800022 KKK REMAN Audi 550,00 54399880022 KKK NUEVO Audi 723,27

Más detalles

Máquinas Eléctricas. DISPONIBILIDAD MAQUINAS ELECTRICAS NUEVAS ( Máquinas sin devolución de casco) - Febrero 2010 392 Referencias

Máquinas Eléctricas. DISPONIBILIDAD MAQUINAS ELECTRICAS NUEVAS ( Máquinas sin devolución de casco) - Febrero 2010 392 Referencias Disponibilidad gama s NUEVAS ( s sin devolución de casco) - Febrero 2010 432512 New Motor Arr CITROEN 433223 432538 New Motor Arr RENAULT 433310 432551 New Motor Arr CITROEN 433202 432555 New Motor Arr

Más detalles

Esquema de un programa en C: bloques básicos

Esquema de un programa en C: bloques básicos Esquema de un programa en C: bloques básicos // Incluimos los ficheros de cabecera que necesitemos. // Esto es un comentario #include #include // Si queremos definir alguna constante,

Más detalles

Solución - práctico 10

Solución - práctico 10 Solución - práctico 10 Complejidad Ejercicio 1 a) Una implementación del algoritmo es la siguiente: /* Procedimiento que se encarga de realizar la unión de los dos conjuntos * ordenados der1 e izq1 son

Más detalles

7.1 Consideraciones. Considere la búsqueda de un libro en una biblioteca. Considere la búsqueda de un nombre en el directorio telefónico.

7.1 Consideraciones. Considere la búsqueda de un libro en una biblioteca. Considere la búsqueda de un nombre en el directorio telefónico. 86 Capítulo 7. ORDENAMIENTO. 7.1 Consideraciones. Considere la búsqueda de un libro en una biblioteca. Considere la búsqueda de un nombre en el directorio telefónico. Si los elementos a ordenar son compuestos

Más detalles

Tema 9. Algoritmos sobre listas. Programación Programación - Tema 9: Algoritmos sobre listas

Tema 9. Algoritmos sobre listas. Programación Programación - Tema 9: Algoritmos sobre listas Tema 9 Algoritmos sobre listas Programación 2015-2016 Programación - Tema 9: Algoritmos sobre listas 1 Tema 9. Algoritmos sobre listas Algoritmos sobre Arrays. Búsqueda. Inserción. Ordenación. Programación

Más detalles

PARQUE VEHICULAR 2007

PARQUE VEHICULAR 2007 Boletín Parque Vehicular 2007 PARQUE VEHICULAR 2007 Boletín Estadístico Departamento Estudios Económico 5 Boletín Parque Vehicular 2007 DIRECCIÓN GENERAL DE IMPUESTOS INTERNOS BOLETIN ESTADISTICO DEL PARQUE

Más detalles

Notación Asintótica 2

Notación Asintótica 2 Notación Asintótica 2 mat-151 1 Éxamen Rápido (6 minutos) Cada operación fundamental usa c milisegundos, cuánto tiempo toma contar hasta 1,000,000? Cuál es el valor de N? Cuál es el órden de complejidad

Más detalles

Algoritmos Recursivos de Búsqueda y Ordenación y sus tiempos

Algoritmos Recursivos de Búsqueda y Ordenación y sus tiempos Estructura de Datos y Algoritmos Algoritmos Recursivos de Búsqueda y Ordenación y sus tiempos 1. Algoritmos de ordenación recursivos 1.1. Mergesort, Ordenamiento por fusión Mergesort se ejecuta en un tiempo

Más detalles

Métodos de Ordenamiento. Unidad VI: Estructura de datos

Métodos de Ordenamiento. Unidad VI: Estructura de datos Métodos de Ordenamiento Unidad VI: Estructura de datos Concepto de ordenación La ordenación de los datos consiste en disponer o clasificar un conjunto de datos (o una estructura) en algún determinado orden

Más detalles

Programación. Test Autoevaluación Tema 3

Programación. Test Autoevaluación Tema 3 Programación Test Autoevaluación Tema 3 Autores: M. Paz Sesmero Lorente Paula de Toledo Heras Fco. Javier Ordoñez Morales Juan Gómez Romero José A. Iglesias Martínez José Luis Mira Peidro SOLUCIONES 1.

Más detalles

Introducción a C++ y Code::Blocks

Introducción a C++ y Code::Blocks Introducción a C++ y Práctica Imperativo Clase 1 Luis Agustín Nieto Departamento de Computación, FCEyN,Universidad de Buenos Aires. 28 de mayo de 2010 Menu de esta Tarde Funcional Vs. Imperativo (Intérprete

Más detalles

Escuela Politécnica Superior de Elche

Escuela Politécnica Superior de Elche EXAMEN DE SISTEMAS INFORMÁTICOS INDUSTRIALES ((SOLUCIÓN) (TEORÍA)jUJ jhshshs SEPTIEMBRE 2015 1. Indicar si las siguientes afirmaciones son verdaderas o falsas: (a) En C++, una clase derivada puede acceder

Más detalles

Curso de Programación en C. Licenciatura, FCQeI. APUNTADORES.

Curso de Programación en C. Licenciatura, FCQeI. APUNTADORES. APUNTADORES. La memoria de una máquina esta ordenada en forma de celdas numeradas consecutivamente y que se pueden manipular individualmente o en grupos contiguos. La siguiente figura muestra una representación

Más detalles

Algorítmica y Complejidad. Tema 3 Ordenación.

Algorítmica y Complejidad. Tema 3 Ordenación. Algorítmica y Complejidad Tema . Introducción.. Algoritmo de inserción.. Algoritmo de selección.. Algoritmo de la burbuja.. Algoritmo heapsort.. Algoritmo quicksort. 7. Algoritmo countingsort.. Algoritmo

Más detalles

LABORATORIO 3 ESTRUCTURAS REPETITIVAS WHILE / DO WHILE

LABORATORIO 3 ESTRUCTURAS REPETITIVAS WHILE / DO WHILE LABORATORIO 3 ESTRUCTURAS REPETITIVAS WHILE / DO WHILE 1 OBJETIVOS Al finalizar esta actividad, serás capaz de: Entender el funcionamiento de las estructuras iterativas en general; la(s) condición(es)

Más detalles

Algoritmos de Búsqueda y Ordenamiento

Algoritmos de Búsqueda y Ordenamiento Departamento de Informática Universidad Técnica Federico Santa María Algoritmos de Búsqueda y Ordenamiento Programación de Computadores IWI--p Prof.: Teddy Alfaro Olave Algoritmos de Búsqueda Los procesos

Más detalles

TEMA 4. ESTRUCTURAS DE CONTROL

TEMA 4. ESTRUCTURAS DE CONTROL M.P. Sesmero, P. de Toledo, F.J. Ordoñez, J. Gómez-Romero, J.A. Iglesias, J.L. Mira Programación TEMA 4. ESTRUCTURAS DE CONTROL Grado en Ingeniería en Tecnologías Industriales Programación CONTENIDOS 4.1.

Más detalles

funciones printf scanf

funciones printf scanf FUNCIONES EN C FUNCIONES Los módulos en C se llaman funciones. Hemos estado utilizando funciones de la biblioteca estandar stdio.h como por ejemplo printf y scanf. Comenzaremos viendo algunas funciones

Más detalles

CAPITULO II ORDENAMIENTO Y BUSQUEDA. Ivan Medrano Valencia

CAPITULO II ORDENAMIENTO Y BUSQUEDA. Ivan Medrano Valencia CAPITULO II ORDENAMIENTO Y BUSQUEDA Ivan Medrano Valencia ORDENACIÓN La ordenación o clasificación de datos (sort en inglés) es una operación consistente en disponer un conjunto estructura de datos en

Más detalles

FILE *nombre_puntero_fichero; fopen(char_nombre_archivo,char_modo_apertura ); MODOS DE APERTURA. Abre un archivo de texto para lectura.

FILE *nombre_puntero_fichero; fopen(char_nombre_archivo,char_modo_apertura ); MODOS DE APERTURA. Abre un archivo de texto para lectura. FICHEROS El sistema de archivos de C está diseñado para secuencias que son independientes del dispositivo. Existen dos tipos se secuencias: de texto que es una ristra de caracteres organizados en líneas

Más detalles

Tema 3. Análisis de costes

Tema 3. Análisis de costes Tema 3. Análisis de costes http://aulavirtual.uji.es José M. Badía, Begoña Martínez, Antonio Morales y José M. Sanchiz {badia, bmartine, morales, sanchiz}@icc.uji.es Estructuras de datos y de la información

Más detalles

OBJETIVOS. Explicar el manejo de archivos de texto. Explicar el manejo de archivos binarios. Desarrollar programas que usen archivos.

OBJETIVOS. Explicar el manejo de archivos de texto. Explicar el manejo de archivos binarios. Desarrollar programas que usen archivos. / OBJETIVOS Explicar el manejo de archivos de texto. Explicar el manejo de archivos binarios. Desarrollar programas que usen archivos. LABORATORIO 6 MANEJO DE ARCHIVOS DE TEXTO Y BINARIOS Msc. Walter Fernandez

Más detalles

Algoritmos de Ordenación

Algoritmos de Ordenación Algoritmos de Ordenación Pedro Corcuera Dpto. Matemática Aplicada y Ciencias de la Computación Universidad de Cantabria corcuerp@unican.es Algoritmos comunes - Ordenación Ordenación o clasificación es

Más detalles

UNIVERSIDAD AUTÓNOMA DE BAJA CALIFORNIA FACULTAD DE CIENCIAS PRACTICA DE PROCESOS HERRAMIENTAS

UNIVERSIDAD AUTÓNOMA DE BAJA CALIFORNIA FACULTAD DE CIENCIAS PRACTICA DE PROCESOS HERRAMIENTAS UNIVERSIDAD AUTÓNOMA DE BAJA CALIFORNIA FACULTAD DE CIENCIAS PRACTICA DE PROCESOS HERRAMIENTAS Caso 1: 1.- Necesitamos un cd o Dvd para grabar alguna de las versiones de livecd de Linux. 2.- Liga de una

Más detalles

EQUIVALENCIAS EN C DE CONSTRUCCIONES SECUENICIALES EN PSEUDOCÓDIGO

EQUIVALENCIAS EN C DE CONSTRUCCIONES SECUENICIALES EN PSEUDOCÓDIGO EQUIVALENCIAS EN C DE CONSTRUCCIONES SECUENICIALES EN PSEUDOCÓDIGO TIPOS DE DATOS BÁSICOS: Tipo Tipo Tamaño aproximado en bits Rango mínimo Carácter char 8 0 a 55 Entero int 16-3767 a 3767 Real float 3

Más detalles

Caracteres y Cadenas Conversión de Datos Funciones y procedimientos Archivos cabecera. Fundamentos de programación

Caracteres y Cadenas Conversión de Datos Funciones y procedimientos Archivos cabecera. Fundamentos de programación 1 Caracteres y Cadenas Conversión de Datos Funciones y procedimientos Archivos cabecera Fundamentos de programación Agenda Caracteres y Cadenas Conversión de Datos Introducción a las funciones y procedimientos

Más detalles

Práctica 3. Paso de parámetros entre subrutinas. 3. Consideraciones sobre el paso de parámetros

Práctica 3. Paso de parámetros entre subrutinas. 3. Consideraciones sobre el paso de parámetros Práctica 3. Paso de parámetros entre subrutinas 1. Objetivo de la práctica El objetivo de esta práctica es que el estudiante se familiarice con la programación en ensamblador y el convenio de paso de parámetros

Más detalles

ARCHIVOS. 1. Introducción. 2. Definición de archivo. 3. Archivos de acceso secuencial. 4. Gestión de un archivo secuencial de estructuras

ARCHIVOS. 1. Introducción. 2. Definición de archivo. 3. Archivos de acceso secuencial. 4. Gestión de un archivo secuencial de estructuras ARCHIVOS 1. Introducción 2. Definición de archivo 3. Archivos de acceso secuencial 3.1. fopen 3.2. fclose 3.3. fcloseall 3.4. putc 3.5. getc 3.6. fscanf 3.7. fprintf 4. Gestión de un archivo secuencial

Más detalles

Examen Principios de Programación Febrero 2012

Examen Principios de Programación Febrero 2012 Por favor siga las siguientes indicaciones: Escriba con lápiz. Escriba su nombre y número de documento en todas las hojas que entregue. Numere las hojas e indique el total de hojas en la primera de ellas.

Más detalles

7. Manejo de Archivos en C.

7. Manejo de Archivos en C. 7. Manejo de Archivos en C. Los datos que hemos tratado hasta el momento han residido en la memoria principal. Sin embargo, las grandes cantidades de datos se almacenan normalmente en un dispositivo de

Más detalles

Programación I (Plan 1999) Algoritmos y Estructuras de Datos II (Plan 2009) Mgter. Oscar Adolfo Vallejos FaCENA - UNNE

Programación I (Plan 1999) Algoritmos y Estructuras de Datos II (Plan 2009) Mgter. Oscar Adolfo Vallejos FaCENA - UNNE Unidad 3: Eficiencia de Algoritmos Tema V: Búsqueda. Búsqueda. Búsqueda Lineal. Búsqueda binaria. Búsqueda Máximos y Mínimos. Análisis de los algoritmos de búsqueda. Programación I (Plan 1999) Algoritmos

Más detalles

Sistemas Operativos Práctica 3

Sistemas Operativos Práctica 3 Sistemas Operativos Práctica 3 Ing. Andrés Bustamante afbustamanteg@unal.edu.co Ingeniería de Sistemas Facultad de Ingeniería Universidad de la Amazonia 2009 1. Objetivo El objetivo de la práctica es que

Más detalles

Uso avanzado de punteros

Uso avanzado de punteros Uso avanzado de punteros Mario Medina C. mariomedina@udec.cl Punteros Contienen direcciones de memoria Punteros a tipos de datos simples int, char, float, double Punteros a estructuras Punteros a vectores

Más detalles

Lenguaje C Funciones. Omar Andrés Zapata Mesa Grupo de Fenomenología de Interacciones Fundamentales, (Gfif) Universidad de Antioquia

Lenguaje C Funciones. Omar Andrés Zapata Mesa Grupo de Fenomenología de Interacciones Fundamentales, (Gfif) Universidad de Antioquia Lenguaje C Funciones Omar Andrés Zapata Mesa Grupo de Fenomenología de Interacciones Fundamentales, (Gfif) Universidad de Antioquia Qué es una función o rutina/subrutina? Se presenta como un subalgoritmo

Más detalles

Algorítmica y Lenguajes de Programación. Ordenación (ii) En la lección anterior se vieron dos métodos de ordenación:

Algorítmica y Lenguajes de Programación. Ordenación (ii) En la lección anterior se vieron dos métodos de ordenación: Algorítmica y Lenguajes de Programación Ordenación (ii) Ordenación. Introducción En la lección anterior se vieron dos métodos de ordenación: Método de la burbuja. Método de la burbuja con señal. El primero

Más detalles

Análisis de Algoritmos

Análisis de Algoritmos Análisis de Algoritmos Amalia Duch Barcelona, marzo de 2007 Índice 1. Costes en tiempo y en espacio 1 2. Coste en los casos mejor, promedio y peor 3 3. Notación asintótica 4 4. Coste de los algoritmos

Más detalles

Punteros. Definición Un puntero es un dato que contiene una dirección de memoria.

Punteros. Definición Un puntero es un dato que contiene una dirección de memoria. Punteros Definición Un puntero es un dato que contiene una dirección de memoria. NOTA: Existe una dirección especial que se representa por medio de la constante NULL (definida en ) y se emplea

Más detalles

Tema 5.- Recursividad

Tema 5.- Recursividad Apuntes elaborados por: Raquel López, Eduardo Quevedo y Aaron Asencio Revado por: Javier Miranda el???? Tema 5.- Recursividad NOTA Todos los ejemplos que se exponen en este tema se pueden realizar utilizando

Más detalles

Ordenamiento Avanzado: Shellshort y Quicksort

Ordenamiento Avanzado: Shellshort y Quicksort October 1, 2009 1 2 3 4 Acerca del ordenamiento sencillo... Los métodos de ordenamiento sencillo que vimos anteriormente son relativamente fácil de implementar. A expensas de la facilidad de implementarlos

Más detalles

Dirección General de Impuestos Internos. Departamento de Estudios Económicos y Tributarios

Dirección General de Impuestos Internos. Departamento de Estudios Económicos y Tributarios 2013 Dirección General de Impuestos Internos Departamento de Estudios Económicos y Tributarios BOLETÍN PARQUE VEHICULAR 2013 Esta es una publicación de la Dirección General de Impuestos Internos. En caso

Más detalles

Metodología de la Programación II. Recursividad

Metodología de la Programación II. Recursividad Metodología de la Programación II Recursividad Objetivos Entender el concepto de recursividad. Conocer los fundamentos del diseño de algoritmos recursivos. Comprender la ejecución de algoritmos recursivos.

Más detalles

Lenguaje C Entrada y Salida de Datos. Omar Andrés Zapata Mesa Grupo de Fenomenología de Interacciones Fundamentales, (Gfif) Universidad de Antioquia

Lenguaje C Entrada y Salida de Datos. Omar Andrés Zapata Mesa Grupo de Fenomenología de Interacciones Fundamentales, (Gfif) Universidad de Antioquia Lenguaje C Entrada y Salida de Datos Omar Andrés Zapata Mesa Grupo de Fenomenología de Interacciones Fundamentales, (Gfif) Universidad de Antioquia E/S por consola Se refiere a las operaciones que ocurren

Más detalles

jun/13(a) may/13(b) jun/12(c) jun/11(d) Var a-b Var a-c Var a-d Ac. 13 Ac. 12 Var 13-12

jun/13(a) may/13(b) jun/12(c) jun/11(d) Var a-b Var a-c Var a-d Ac. 13 Ac. 12 Var 13-12 Patentamientos por Marcas - Mercado Total jun/13(a) may/13(b) jun/12(c) jun/11(d) Var a-b Var a-c Var a-d Ac. 13 Ac. 12 Var 13-12 Patentamientos por origen Automovil 55.209 70.154 54.727 60.530-21,30%

Más detalles

Taller de Sistemas Operativos Introducción

Taller de Sistemas Operativos Introducción Taller de Sistemas Operativos Introducción Escuela de Ingeniería Civil en Informática Universidad de Valparaíso, Chile http:// Conceptos generales 2 Proceso stdin Descriptor Flujo (FILE*) 0 stdout 1 Proceso

Más detalles

Prof. Dr. Paul Bustamante

Prof. Dr. Paul Bustamante Prácticas de C++ Practica Nº 2 Informática II Fundamentos de Programación Prof. Dr. Paul Bustamante Practica Nº 2 Programación en C++ Pág. 1 ÍNDICE ÍNDICE... 1 1. Introducción... 1 1.1 Ejercicio 1: Reserva

Más detalles

ALFA ROMEO. N / 146 (96»2001) / Parrilla Derecha (con rótula) $ 1.529,66

ALFA ROMEO. N / 146 (96»2001) / Parrilla Derecha (con rótula) $ 1.529,66 ALFA ROMEO N26285 145 / 146 (96»2001) / 155 - Parrilla Derecha (con rótula) $ 1.529,66 N26286 145 / 146 (96»2001) / 155 - Parrilla Izquierda (con rótula) $ 1.529,66 N26333 Mito (09»)- Parrilla Izquierda

Más detalles

Algoritmos y Programación I

Algoritmos y Programación I Algoritmos y Programación I ARREGLOS Y ESTRUCTURAS EN C Arreglos Un arreglo o vector es un conjunto de datos del mismo tipo, almacenados de forma contigua (es decir uno al lado del otro) en memoria principal.

Más detalles

Problemas de Recursividad

Problemas de Recursividad Problemas de Recursividad Problema 1. El factorial de un número entero n 0, denotado como n!, se define! como!!! i = 1 2 n cuando n > 0, y 0! = 1. Por ejemplo 6! = 1 2 3 4 5 6 = 720 Diseñad una método

Más detalles

Introducción Supongamos un subconjunto de n elementos X = {e 1,,e n de un conjunto referencial Y, X Y. Dentro de Y se define una relación de orden tot

Introducción Supongamos un subconjunto de n elementos X = {e 1,,e n de un conjunto referencial Y, X Y. Dentro de Y se define una relación de orden tot Algoritmos de ordenación Análisis y Diseño de Algoritmos Algoritmos de ordenación Algoritmos básicos: Θ(n 2 ) Ordenación por inserción Ordenación por selección Ordenación por intercambio directo (burbuja)

Más detalles

Programación de Sistemas

Programación de Sistemas Programación de Sistemas Algoritmos de Ordenación Índice Por qué es importante la ordenación? Un par de ejemplos InsertionSort QuickSort Para cada uno veremos: En qué consisten, Casos extremos Eficiencia

Más detalles

Tema 7 Vectores y cadenas de caracteres. Fundamentos de Informática

Tema 7 Vectores y cadenas de caracteres. Fundamentos de Informática Tema 7 Fundamentos de Informática Índice 1. Qué es un vector? 2. Vectores unidimensionales 3. Cadenas de caracteres 4. Paso de vectores unidimensionales a funciones. 5. Vectores multidimensionales: matrices

Más detalles

Formatos para prácticas de laboratorio

Formatos para prácticas de laboratorio Fecha de efectividad: CARRERA PLAN DE ESTUDIO CLAVE ASIGNATURA NOMBRE DE LA ASIGNATURA LSC 2003-1 5221 Lenguaje de Programación Estructurada PRÁCTICA No. 8 LABORATORIO DE NOMBRE DE LA PRÁCTICA Licenciado

Más detalles

Fundamentos de programación

Fundamentos de programación Fundamentos de programación Estructuras de Control Estructuras de control Estructuras de control Estructura secuencial Estructura alternativa Sentencias if, if else Sentencias if else anidadas El operador

Más detalles

Algoritmos de Ordenamiento

Algoritmos de Ordenamiento Algoritmos de Ordenamiento Fernando A. Lagos B. Copyleft 2007 INDICE 1 Introducción Pág. 3 2 Tipos de Algoritmos Pág. 4 2.1 Algoritmos iterativos Pág. 5 2.2 Algoritmos recursivos Pág. 6 3 Método de la

Más detalles

Funciones Tipos de funciones y Recursividad

Funciones Tipos de funciones y Recursividad Funciones Tipos de funciones y Recursividad SESION 4 Definición Una función es una subrutina o subprograma que forman un programa que realiza tareas bien definidas. Todo programa en C consta de una o más

Más detalles

DISEÑO DE UN ANIMADOR DE ALGORITMOS DE BÚSQUEDA Y ORDENACIÓN ( ID2012/055 )

DISEÑO DE UN ANIMADOR DE ALGORITMOS DE BÚSQUEDA Y ORDENACIÓN ( ID2012/055 ) MEMORIA DEL PROYECTO TITULADO: DISEÑO DE UN ANIMADOR DE ALGORITMOS DE BÚSQUEDA Y ORDENACIÓN ( ID2012/055 ) PRESENTADO POR: María Luisa Pérez Delgado María Luisa Pérez Delgado Dentro del marco del proyecto

Más detalles

Lenguajes de programación

Lenguajes de programación Lenguajes de programación Un computador solo entiende lenguaje binario Un procesador tiene un conjunto finito de operaciones binarias Un programa de computador es una secuencia de estas instrucciones Etapas

Más detalles

Tema 8: Algoritmos de ordenación y búsqueda

Tema 8: Algoritmos de ordenación y búsqueda Tema 8: Algoritmos de ordenación y búsqueda Objetivos: en este tema se presentan algoritmos que permiten buscar un elemento dentro de una colección y ordenar una colección en base a algún criterio (el

Más detalles

Dirección General De Impuestos Internos Departamento de Estudios Económicos y Tributarios PARQUE VEHICULAR

Dirección General De Impuestos Internos Departamento de Estudios Económicos y Tributarios PARQUE VEHICULAR Dirección General De Impuestos Internos Departamento de Estudios Económicos y Tributarios PARQUE VEHICULAR 2011 BOLETÍN PARQUE VEHICULAR 2011 Esta es una publicación de la Dirección General de Impuestos

Más detalles

Introducción al lenguaje C

Introducción al lenguaje C Programación 2 Profesorado de Informática CeRP del Suroeste, Uruguay 29 de marzo de 2016 Estructuras de control IV Iteración Sentencia for: for (inicio; condicion; paso) cuerpo for (int i = 0; i < 10;

Más detalles

Proyecto 1: Algoritmos de Ordenación

Proyecto 1: Algoritmos de Ordenación Proyecto 1: Algoritmos de Ordenación Algoritmos y Estructuras de Datos II - Laboratorio Docentes: Natalia Bidart, Matías Bordese, Diego Dubois, Leonardo Rodríguez. Objetivos La implementación en C de los

Más detalles

Índice / Como utilizar este catálogo... 01

Índice / Como utilizar este catálogo... 01 ÍNDICE Índice / Como utilizar este catálogo... 01 COMO UTILIZAR ESTE CATÁLOGO ensambladora recomendado para el Bujía NGK Nota: Bujía Green Bujía NGK G-Power Bujía NGK Iridium entre los electrodos (en mm)

Más detalles

Informática Ingeniería en Electrónica y Automática Industrial

Informática Ingeniería en Electrónica y Automática Industrial Informática Ingeniería en Electrónica y Automática Industrial Funciones en lenguaje C Funciones en lenguaje C Definición de funciones Declaración de funciones Relación entre variables y funciones Parámetros

Más detalles

CARTILLA - CRÉDITO COCHE

CARTILLA - CRÉDITO COCHE CARTILLA - CRÉDITO COCHE Descripción del producto El Crédito Coche es un crédito consumo a sola firma, con el destino de compra de automotores. Con el mismo, el cliente adquiere un paquete diferencial

Más detalles

Capítulo. Algoritmos de ordenación y búsqueda. Contenido. Introducción

Capítulo. Algoritmos de ordenación y búsqueda. Contenido. Introducción Capítulo 9 Algoritmos de ordenación y búsqueda Contenido Ordenación Ordenación por burbuja Ordenación por selección Ordenación por inserción Ordenación Shell Ordenación rápida ( quicksort) Búsqueda en

Más detalles

ANFAC no comparte que se ponga en duda la competencia en el mercado español del automóvil

ANFAC no comparte que se ponga en duda la competencia en el mercado español del automóvil ANFAC no comparte que se ponga en duda la competencia en el mercado español del automóvil El sector del automóvil español, entre los más competitivos de Europa Hasta 15 motivos apuntan a que el consumidor

Más detalles

INTRODUCCIÓN AL ESTUDIO DE ALGORITMOS Y SU COMPLEJIDAD

INTRODUCCIÓN AL ESTUDIO DE ALGORITMOS Y SU COMPLEJIDAD Alg. y Estr. Datos-I / Fund. Progr.-II (R. Ferrís, J. Albert) 9 INTRODUCCIÓN AL ESTUDIO DE ALGORITMOS Y SU COMPLEJIDAD 9.1. Definición de complejidad y su medida 9.1.1. Introducción El objetivo de este

Más detalles

Elring-Service. Juntas, juegos de juntas y piezas de recambio en calidad de equipamiento original

Elring-Service. Juntas, juegos de juntas y piezas de recambio en calidad de equipamiento original Elring-Service Juntas, juegos de juntas y piezas de recambio en calidad de equipamiento original CALIDAD ELRING: LÍDER MUNDIAL Las piezas de recambio Elring las fabrica la sociedad ElringKlinger AG, socio

Más detalles

Relación de prácticas de la asignatura METODOLOGÍA DE LA PROGRAMACIÓN Segundo Cuatrimestre Curso º Grado en Informática

Relación de prácticas de la asignatura METODOLOGÍA DE LA PROGRAMACIÓN Segundo Cuatrimestre Curso º Grado en Informática Relación de prácticas de la asignatura METODOLOGÍA DE LA PROGRAMACIÓN Segundo Cuatrimestre Curso 2013-2014. 1º Grado en Informática Práctica 1: Punteros Objetivos Se hará hincapié en la aritmética de punteros

Más detalles

Indice General. Página. Catálogo de Aplicaciones de Juntas Homocinéticas. Catálogo de Aplicaciones de Semiejes. Pág.

Indice General. Página. Catálogo de Aplicaciones de Juntas Homocinéticas. Catálogo de Aplicaciones de Semiejes. Pág. Indice General Página Catálogo de Aplicaciones de Juntas Homocinéticas 3 Catálogo de Aplicaciones de Semiejes 31 Indice General Pág Aplicaciones Juntas Homocinéticas Marca Página Marca Alfa Romeo 4 Lada

Más detalles

AUTOGUÍARED.ES DIFUSIÓN GRATUITA JULIO 2015 T. 886 317 600

AUTOGUÍARED.ES DIFUSIÓN GRATUITA JULIO 2015 T. 886 317 600 AUTOGUÍARED.ES GUÍA LOCAL DEL AUTOMOVIL EDICIÓN VIGO DIFUSIÓN GRATUITA JULIO 2015 T. 886 317 600 Para anunciantes contactar con: vigo@autoguiared.es, T. 886 317 600, Horario de 09:00 a 20:00 L-V MICROCOCHES

Más detalles

ALGORITMOS DE ORDENAMIENTO COUNTING SORT CHRISTIAN ESTEBAN ALDANA ROZO BRAYAN STIF FORERO CRUZ GIOVANNY GUZMÁN CÉSPEDES JORGE MEJIA

ALGORITMOS DE ORDENAMIENTO COUNTING SORT CHRISTIAN ESTEBAN ALDANA ROZO BRAYAN STIF FORERO CRUZ GIOVANNY GUZMÁN CÉSPEDES JORGE MEJIA ALGORITMOS DE ORDENAMIENTO COUNTING SORT CHRISTIAN ESTEBAN ALDANA ROZO BRAYAN STIF FORERO CRUZ GIOVANNY GUZMÁN CÉSPEDES JORGE MEJIA Profesora: DIANA MABEL DIAZ UNIVERSIDAD PILOTO DE COLOMBIA INGENIERIA

Más detalles

Algoritmos de Ordenamiento

Algoritmos de Ordenamiento Algoritmos de Ordenamiento mat-151 Alonso Ramírez Manzanares Computación y Algoritmos 12.04 Algoritmos de ordenamiento Entrada: secuencia de números. Salida: permutación

Más detalles

UNIVERSIDAD DE LOS ANDES NUCLEO UNIVERSITARIO RAFAEL RANGEL (NURR) DEPARTAMENTO DE FISICA Y MATEMATICA AREA COMPUTACION TRUJILLO EDO.

UNIVERSIDAD DE LOS ANDES NUCLEO UNIVERSITARIO RAFAEL RANGEL (NURR) DEPARTAMENTO DE FISICA Y MATEMATICA AREA COMPUTACION TRUJILLO EDO. UNIVERSIDAD DE LOS ANDES NUCLEO UNIVERSITARIO RAFAEL RANGEL (NURR) DEPARTAMENTO DE FISICA Y MATEMATICA AREA COMPUTACION TRUJILLO EDO. TRUJILLO 1.- Resumen de Prog1 Comentarios es C++ Declaraciones de variables.

Más detalles

Lenguaje C. Lenguaje C. Erwin Meza Vega

Lenguaje C. Lenguaje C. Erwin Meza Vega Lenguaje C Erwin Meza Vega Outline 1 Introducción 2 Tipos básicos de datos 3 Estructuras de control 4 Funciones 5 Ejemplos de funciones 6 Tipos compuestos de datos 7 Arreglos 8 Apuntadores (punteros) 9

Más detalles

Estructura de Datos. TDA: Listas. Primer Semestre, 2010. Indice. Tipos de estructura de datos lineales

Estructura de Datos. TDA: Listas. Primer Semestre, 2010. Indice. Tipos de estructura de datos lineales Estructura de Datos TDA: Listas Prof. Mauricio Solar Prof. Lorna Figueroa Parte del material fue obtenido de Lic. Claudio Barúa Primer Semestre, 2010 Indice Tipos de estructura de datos lineales Listas

Más detalles

TEMA 8: Gestión dinámica de memoria

TEMA 8: Gestión dinámica de memoria TEMA 8: Gestión dinámica de memoria 8.1.-Tipo de datos puntero Hasta ahora, los tipos de datos que hemos visto (a excepción de strings y ficheros) eran estructuras de datos estáticas, es decir, estructuras

Más detalles

Tema ADQUISICIÓN Y TRATAMIENTO DE DATOS. Departamento de Ciencias de la Computación e IA. Subprogramas en C

Tema ADQUISICIÓN Y TRATAMIENTO DE DATOS. Departamento de Ciencias de la Computación e IA. Subprogramas en C Tema ADQUISICIÓN Y TRATAMIENTO DE DATOS Departamento de Ciencias de la Computación e IA Subprogramas en C Objetivo Una vez que tengamos un programa que resuelva un problema concreto, ser capaces de usarlo

Más detalles

Repaso sobre lectura de datos desde la línea de comandos, manejo de memoria dinámica e introducción a la librería GSL

Repaso sobre lectura de datos desde la línea de comandos, manejo de memoria dinámica e introducción a la librería GSL Clase No. 5: Repaso sobre lectura de datos desde la línea de comandos, manejo de memoria dinámica e introducción a la librería GSL MAT 251 Dr. Alonso Ramírez Manzanares CIMAT, A.C. e-mail: alram@ cimat.mx

Más detalles

CAPÍTULO I Aspectos generales de la tesis

CAPÍTULO I Aspectos generales de la tesis EL TLCAN Y LAS AGENCIAS GENERAL MOTORS DEL ESTADO DE PUEBLA. 1.1. Planteamiento del problema CAPÍTULO I Aspectos generales de la tesis La industria automotriz en nuestro país ocupa un importante lugar

Más detalles

UNAN LEÓN Departamento de Computación. Asignatura: ALGORITMO Y ESTRUCTURA DE DATOS MANEJO DE ARCHIVOS (FICHEROS) EN C

UNAN LEÓN Departamento de Computación. Asignatura: ALGORITMO Y ESTRUCTURA DE DATOS MANEJO DE ARCHIVOS (FICHEROS) EN C 2011 UNAN LEÓN Departamento de Computación Asignatura: ALGORITMO Y ESTRUCTURA DE DATOS MANEJO DE ARCHIVOS (FICHEROS) EN C TEMA 1: MANEJO DE ARCHIVOS EN C 1.1 GENERALIDADES: Muy a menudo necesitamos almacenar

Más detalles

Informática Ingeniería en Electrónica y Automática Industrial

Informática Ingeniería en Electrónica y Automática Industrial Informática Ingeniería en Electrónica y Automática Industrial Entrada y salida estándar V1.3 Autores Entrada y salida estándar Entradas y salidas Salida con formato: printf() Entrada de datos con formato:

Más detalles

Lenguaje C [Apuntadores y arreglos]

Lenguaje C [Apuntadores y arreglos] Lenguaje C [Apuntadores y arreglos] M. en C. Sergio Luis Pérez Pérez UAM CUAJIMALPA, MÉXICO, D. F. Trimestre 14-O Sergio Luis Pérez (UAM CUAJIMALPA) Curso de Lenguaje C 1 / 20 Apuntadores y direcciones

Más detalles

Página 14: Ventas del mes de abril mercado de Livianos y Medianos. Página 20: Ventas regionales del mercado de Livianos y Medianos

Página 14: Ventas del mes de abril mercado de Livianos y Medianos. Página 20: Ventas regionales del mercado de Livianos y Medianos 1 CONTENIDO Página 3: Revisión proyecciones de mercado Página 12: Cifras del sector automotor del mes de abril Página 14: Ventas del mes de abril mercado de Livianos y Medianos Página 16: Ventas del mes

Más detalles

Todas las marcas de autos que existen

Todas las marcas de autos que existen Todas las marcas de autos que existen LIMUSINA Herramientas para el escritor: Seguramente el siguiente listadillo te servirá para cuando el escritor o la escritora necesite describir el automóvil conducía

Más detalles

PVP FINAL: 43,11 + IVA

PVP FINAL: 43,11 + IVA ACEITE TOTAL QUARTZ INEO MC3 5W30 - ACEA C3 - API SM/CF - MERCEDES BENZ MB-Approval 229,51 y retroaplicable 229.31 - BMW LL-04 - VW 502.00/505.01 - HYUNDAI-KIA: Satisface las exigencias de Hyundai Kia

Más detalles

Relación de prácticas de la asignatura METODOLOGÍA DE LA PROGRAMACIÓN Segundo Cuatrimestre Curso º Grado en Informática

Relación de prácticas de la asignatura METODOLOGÍA DE LA PROGRAMACIÓN Segundo Cuatrimestre Curso º Grado en Informática Relación de prácticas de la asignatura METODOLOGÍA DE LA PROGRAMACIÓN Segundo Cuatrimestre Curso 2013-2014. 1º Grado en Informática Práctica 2: Memoria dinámica y Bibliotecas Objetivos Practicar conceptos

Más detalles