apoyo.vectores2015
DESCRIPTION
vectoresTRANSCRIPT
-
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;
} //--------------------------------