apoyo.vectores2015

11
UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA INTRODUCCION A LA PROGRAMACION 2015 IRINA NARVAEZ ESPINOSA CEAD ACACIAS ARREGLOS Y CADENAS: Cuando declaramos una variable estamos apartando en memoria espacio para guardar sus posibles valores dependiendo del tipo de dato que se trata. Un array o arreglo son una serie de localidades en memoria consecutivas que están asignadas a un solo nombre y un mismo tipo de datos Declaración La forma de declarar un arreglo de cualquier tipo de datos es la siguiente: tipo nombre [tamaño] ; Por ejemplo, podemos declarar un arreglo de enteros con 12 elementos. int MiArreglo [12] ; El compilador se encargará de asignar la memoria requerida para almacenar determinados valores. Cuando se declara un arreglo de caracteres se trata entonces de una cadena. char nombre[20] ; Inicialización En la declaración, podemos asignarle un valor inicial a los elementos de un vector. int vector[3] = {4, 5, 6}; int matriz[2][3] = { {1,2,3}, {4,5,6} }; El compilador puede deducir las dimensiones del array: int vector[] = {1, 2, 3, 5, 7}; Manipulación de vectores y matrices Las operaciones se realizan componente a componente No es necesario utilizar todos los elementos del vector, por lo que, en C, al trabajar con ellos, se suele utilizar una variable entera adicional que nos indique el número de datos utilizados. Ordenación por selección

Upload: eduardo-andres-rubiano

Post on 18-Dec-2015

213 views

Category:

Documents


0 download

DESCRIPTION

vectores

TRANSCRIPT

  • UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA INTRODUCCION A LA PROGRAMACION 2015

    IRINA NARVAEZ ESPINOSA CEAD ACACIAS

    ARREGLOS Y CADENAS: Cuando declaramos una variable estamos apartando en memoria espacio para guardar sus posibles valores dependiendo del tipo de dato que se trata. Un array o arreglo son una serie de localidades en memoria consecutivas que estn asignadas a un solo nombre y un mismo tipo de datos

    Declaracin

    La forma de declarar un arreglo de cualquier tipo de datos es la siguiente: tipo nombre [tamao] ;

    Por ejemplo, podemos declarar un arreglo de enteros con 12 elementos. int MiArreglo [12] ;

    El compilador se encargar de asignar la memoria requerida para almacenar determinados valores. Cuando se declara un arreglo de caracteres se trata entonces de una cadena.

    char nombre[20] ;

    Inicializacin

    En la declaracin, podemos asignarle un valor inicial a los elementos de un vector. int vector[3] = {4, 5, 6}; int matriz[2][3] = { {1,2,3}, {4,5,6} };

    El compilador puede deducir las dimensiones del array: int vector[] = {1, 2, 3, 5, 7};

    Manipulacin de vectores y matrices

    Las operaciones se realizan componente a componente

    No es necesario utilizar todos los elementos del vector, por lo que, en C, al trabajar con ellos, se suele utilizar una variable entera adicional que nos indique el nmero de datos utilizados.

    Ordenacin por seleccin

  • UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA INTRODUCCION A LA PROGRAMACION 2015

    IRINA NARVAEZ ESPINOSA CEAD ACACIAS

    void OrdenarSeleccion (double v[], int N) { int i, j, pos_min; double tmp; for (i=0; i

  • UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA INTRODUCCION A LA PROGRAMACION 2015

    IRINA NARVAEZ ESPINOSA CEAD ACACIAS

    void OrdenarInsercion (double v[], int N) { int i, j; double tmp; for (i=1; i0) && (tmp

  • UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA INTRODUCCION A LA PROGRAMACION 2015

    IRINA NARVAEZ ESPINOSA CEAD ACACIAS

    void OrdenarBurbuja

    (double v[], int N)

    {

    int i, j;

    double tmp;

    for (i=1; ii; j--)

    if (v[j] < v[j-1]) {

    tmp = v[j];

    v[j] = v[j-1];

    v[j-1] = tmp;

    }

    }

    Ordenacin rpida (QuickSort)

    1. Se toma un elemento arbitrario del vector, al que denominaremos pivote (p). 2. Se divide el vector de tal forma que todos los elementos a la izquierda del pivote sean menores que l, mientras que los que quedan a la derecha son mayores que l. 3. Ordenamos, por separado, las dos zonas delimitadas por el pivote. void quicksort (double v[], int izda, int dcha) { int pivote; // Posicin del pivote if (izda p. b. Se recorre el vector, de derecha a izquierda, hasta encontrar otro elemento situado en una posicin j tal que v[j] < p. c. Se intercambian los elementos situados en las casillas i y j (de modo que, ahora, v[i] < p < v[j]).

  • UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA INTRODUCCION A LA PROGRAMACION 2015

    IRINA NARVAEZ ESPINOSA CEAD ACACIAS

    // Intercambio de dos valores void swap (double *a, double *b) { double tmp; tmp = *a; *a = *b; *b = tmp;

    } // Divisin el vector en dos partes // - Devuelve la posicin del pivote int partir (double v[], int primero, int ultimo) { double pivote = v[primero]; // Valor del pivote int izda = primero+1; int dcha = ultimo; do { // Pivotear while ((izda

  • UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA INTRODUCCION A LA PROGRAMACION 2015

    IRINA NARVAEZ ESPINOSA CEAD ACACIAS

    izda++; } } while (izda

  • UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA INTRODUCCION A LA PROGRAMACION 2015

    IRINA NARVAEZ ESPINOSA CEAD ACACIAS

    // Bsqueda binaria de un elemento en un vector // - Devuelve la posicin de dato en el vector // - Si dato no est en el vector, devuelve -1 // Implementacin recursiva // Uso: binSearch (vector, 0, N-1, dato) int binSearch ( double vector[], int izq, int der, double buscado) { int centro = (izq+der)/2; if (izq>der) return -1; else if (buscado==vector[centro]) return centro; else if (buscado

  • UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA INTRODUCCION A LA PROGRAMACION 2015

    IRINA NARVAEZ ESPINOSA CEAD ACACIAS

    { int izq = 0; int der = N-1; int centro = (izq+der)/2; while ((izq

  • UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA INTRODUCCION A LA PROGRAMACION 2015

    IRINA NARVAEZ ESPINOSA CEAD ACACIAS

    const unsigned NFILAS = 3;

    const unsigned NCOLUMNAS = 5;

    // -- Tipos ------------

    typedef array Fila;

    typedef array Matriz;

    // -- Subalgoritmos ----

    int sumar_fila (const Fila& fil)

    {

    int suma = 0;

    for (unsigned c = 0; c < fil.size(); ++c) {

    suma += fil[c];

    }

    return suma;

    }

    int sumar_columna (const Matriz& m, unsigned c)

    {

    int suma = 0;

    for (unsigned f = 0; f < m.size(); ++f) {

    suma += m[f][c];

    }

    return suma;

    }

    void escribir_fila (const Fila& fil)

    {

    for (unsigned c = 0; c < fil.size(); ++c) {

    cout

  • UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA INTRODUCCION A LA PROGRAMACION 2015

    IRINA NARVAEZ ESPINOSA CEAD ACACIAS

    }

    void leer_matriz (Matriz& m)

    {

    cout m[f][c];

    }

    }

    } // -- Principal -------- int main () {

    Matriz m; leer_matriz(m); escribir_matriz_formato(m);

    }

    Busqueda Binaria

    //-------------------------------- typedef array Vector; //-------------------------------- // busca la posici_on del primer elemento == x // si no encontrado, retorna v.size() //------------- unsigned buscar_bin(int x, const Vector& v) {

    unsigned i = 0; unsigned f = v.size(); unsigned res = v.size(); while (i < f) {

    unsigned m = (i + f) / 2; if (x == v[m]) {

    res = i = f = m; } else if (x < v[m]) {

    f = m; } else {

    i = m + 1; }

    } return res;

    } //---------------------------- // busca la posici_on del primer elemento >= x //------------- unsigned buscar_bin_mayig(int x, const Vector& v) {

    unsigned i = 0; unsigned f = v.size(); while (i < f) {

  • UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA INTRODUCCION A LA PROGRAMACION 2015

    IRINA NARVAEZ ESPINOSA CEAD ACACIAS

    unsigned m = (i + f) / 2; if (x x //------------- unsigned buscar_bin_may(int x, const Vector& v) {

    unsigned i = 0; unsigned f = v.size(); while (i < f) {

    unsigned m = (i + f) / 2; if (x < v[m]) {

    f = m; } else {

    i = m + 1; }

    } return i;

    } //--------------------------------