Vectores Material Original: Prof. Flor Narciso Modificaciones: Prof. Andrés Arcia Departamento de Computación Escuela de Ingeniería de Sistemas Facultad de Ingeniería Universidad de Los Andes Programación Digital I 1
Tipos de Datos Simples: Son las unidades mínimas para almacenar algún valor. Las más conocidas son: enteros, reales, caracteres, apuntadores, lógicos. Compuestos o estructurados: Almacenan uno o mas valores de uno o diversos tipos (arreglos, registros, cadenas de caracteres). Se utilizan cuando se requiere el procesamiento de múltiples datos que tienen características comunes. Ejemplos: Un conjunto de números enteros, un conjunto de estudiantes, un conjunto de temperaturas. Programación Digital I 2
Arreglo Definición Generalización del concepto de variable. Variable: Puede tener como máximo un valor. Cada variable es referenciada por un nombre. Arreglo: Representa un conjunto de valores (caracteres, enteros, reales, etc.) donde todos comparten el mismo nombre. Cada valor es referenciado utilizando uno o mas subíndices (nùmero entero). Tipos de arreglos: Los arreglos se clasifican según el número dimensiones que almacenan: - Vector (arreglos unidimensionales - 1D), un subíndice - Matriz (arreglos bidimensionales - 2D), dos subíndices - Multidimensional (tres - 3D- o mas dimensiones), 3 o mas subíndices Programación Digital I 3
Vector (Arreglo Unidimensional) Generalización del concepto de variable. Variable: Almacenar cuatro números enteros. int num1, num2, num3, num4; Vector: Almacenar cuatro números enteros. num 2 5 1 23 Programación Digital I 4
Vector (Arreglo Unidimensional) Grupo de localidades consecutivas de memoria relacionadas por el hecho que tienen el mismo nombre y tipo. Esto implica que cada celda tenga exactamente el mismo tamaño. Cada localidad (o grupo de localidades) almacena un elemento del vector. Nombre del vector arreglo_notas 12 15 12 18 11 14 Programación Digital I 5
Vector (Arreglo Unidimensional) Cada elemento del vector es accedido mediante el nombre del vector y un subíndice que representa la posición numérica (entero no negativo) de dicho elemento dentro del vector. arreglo_notas 12 15 Nombre del vector 12 18 0 1 2 3 4 5 6 11 4 14 subíndices Programación Digital I 6
Vector: Representación Gráfica deudas_mes Nombre del vector 20200 12030 45000 21300 15600 30222 21333 43020 21000 43222 21350 53929 0 1 2 11 subíndices Vector de 12 elementos cuyo nombre es deudas_mes Programación Digital I 7
Vector: Representación Gráfica Note que en general un vector de n elementos tiene indices que estan numerados (por pura convension) desde 0 hasta n-1. Dependiendo del lenguaje que utilicemos, los subindices van numerados desde 0 o desde 1. Programación Digital I 8
Declaración de un Vector: Notación Algorítmica tipo_dato nombre_vector[número_elementos] Siendo número_elementos un valor entero constante mayor que cero (0) Ejemplos: entero A[12] carácter cdn[8] real b[100] Vector A de 12 números enteros Vector cdn de 8 caracteres Vector b de 100 números reales Programación Digital I 9
Declaración de un Vector: Notación en C Ejemplos: tipo_dato nombre_vector[número_elementos]; int A[12]; char cdn[8]; float b[100]; // Vector A de 12 números enteros // Vector cdn de 8 caracteres // Vector b de 100 números reales También podemos tener declaraciones múltiples: int vector1[3], vector2[201]; float x[43], y[56], z[87]; char linea[80], texto[2000]; Programación Digital I 10
Declaración de un Vector: Ejemplos Notacion Algoritmica TAM: 10 MAXCAR: 24 NHORAS: 24 NFIL: 2 Entero v[tam] Caracter palabra[maxcar] Real temp[nhoras] Entero m[nfil] Notacion en C #define TAM 10 #define MAXCAR 80 #define NHORAS 24 #define NFIL 2 int v[tam]; char palabra[maxcar]; double temp[nhoras]; int m[nfil]; Programación Digital I 11
Acceso a los Elementos de un Vector nombre_vector[subíndice] El valor del subíndice o posición numérica de un elemento dentro del vector puede expresarse como: Constante entera o valor literal (por ejemplo 3) Variable entera (por ejemplo x) Expresión entera (por ejemplo x + y - 1). En cualquiera de los casos, el valor del subíndice debe ser un entero mayor o igual a cero. El valor del subíndice puede variar de 0 a n-1, donde n es el número de elementos del vector. En general, para tener acceso al i-ésimo elemento del vector se escribe nombre_vector[i-1]. Programación Digital I 12
Acceso a los Elementos de un Vector altura_personas 1.39 1.57 1.56 2.02 1.89 1.66 0 1 2 3 4 5 Primer elemento: altura_personas[0] == 1.39 Segundo elemento: altura_personas[1] == 1.57 Tercer elemento: altura_personas[2] == 1.56. Sexto y ultimo elemento: altura_personas[5] == 1.66 Programación Digital I 13
Vector: Instrucciones Válidas A[1] = 3; X = A[4]; cin >> A[6]; cout << A[10]; A[1] = A[b+2]; Y = Suma (A[i], b, c); b = A[6] / 2; Notese que cada elemento de un vector puede usarse como una variable cualquiera. Programación Digital I 14
Inicialización de un Vector: Ejemplo 1 Inicializar con valores constantes Inicializar los elementos de un vector de N elementos enteros en cero. #define N 100 //Declaración del vector y del subíndice int vector[n], i; for (i = 0; i < N; i++) vector[i] = 0; // Inicialización de cada // elemento del vector en 0 0 0 0 0 0 0 0 0 0 0 1 2 3 4 5 6 7 99 Programación Digital I 15
Inicialización de un Vector: Ejemplo 2 Inicializar usando variables Inicializar los elementos de un vector de 10 elementos enteros con valores del 1 al 10. int v1[10], i; // Declaración del vector y del subíndice for (i = 0; i < 10; i++) v1[i] = i + 1; // Inicialización de cada // elemento del vector 1 2 3 4 5 6 7 8 9 10 0 1 2 3 4 5 6 7 8 9 Programación Digital I 16
Inicialización de un Vector: Ejemplo 3 Inicializar mediante lectura Inicializar los elementos de un vector de 30 elementos de tipo carácter con valores introducidos por el usuario char frase[30]; int indice; char car; // Declaración del vector // Declaración del subíndice for (indice = 0; indice < 30; indice++) { printf( Introduzca una frase\n ); scanf( %c, car); frase[indice] = car; } f r a s e c o r t a 0 1 2 3 4 5 6 7 8 9 10 Programación Digital I 17
Inicialización de un Vector: Ejemplo 4 // Leer una linea de un texto en minusculas y escribirla en mayusculas #include <iostream.h> #include <ctype.h> #define TAMANO 80 int main() { char letrasminusculas[tamano], letrasmayusculas[tamano]; int cont; } for (cont = 0; cont < TAMANO; cont++) { letrasminusculas[cont] = getchar(); letrasmayusculas[cont] = toupper(letrasminusculas [cont]); } for (cont = 0; cont < TAMANO; cont++) putchar(letrasmayusculas[cont]); return 0; Programación Digital I 18
Inicialización de un Vector en la Declaración Existen varias formas de predefinir los valores que puede contener un vector: int a[8] = {0}; a[0] = a[1] = a[2] = a[3] = a[4] = a[5] = a[6] = a[7] = 0 float n[5] = {0.25, 0.50, 0.75, 1.00, 1.25}; n[0] = 0.25 n[1] = 0.50 n[2] = 0.75 n[3] = 1.00 n[4] = 1.25 char cdn[8] = { S, I,, a, l, l, i,, }; cdn[0] = S cdn[1] = I cdn[2] = cdn[3] = a cdn[4] = l cdn[5] = l cdn[6] = I cdn[7] =, Programación Digital I 19
Inicialización de un Vector en la Declaración Todos los elementos del vector no tienen asignado valores iniciales: int a[8] = {1, 2, 3}; a[0] = 1 a[1] = 2 a[2] = 3 a[3] = 0 a[4] = 0 a[5] = 0 a[6] = 0 a[7] = 0 float n[5] = {0.25, 0.00, 0.30}; n[0] = 0.25 n[1] = 0.00 n[2] = 0.30 n[3] = 0.00 n[4] = 0.00 char cadena[11]= Una Cadena ; Programación Digital I 20
Inicialización de un Vector en la Declaración: Ejemplo 1 #include <iostream.h> void EscribirVector( ) { int n[9] = {32, 27, 64, 18, 95, 14, 90, 70, 60}, j; } for (j = 0; j < 9; j++) printf( Elemento %i = %i \n,j,n[j]); Programación Digital I 21
Vectores: Ejemplo 1 Inicializar los elementos de un vector s con los números pares del 2 al 20 void inicializarvectorpares() { int j; int s[10]; } for (j = 0; j < 10; j++) s[j] = 2 + 2 * j; Programación Digital I 22
Vectores: Ejemplo 2 Calcular la suma de los elementos de un vector Algoritmo entero función sumvector ( ) entero a[8] = {1, 3, 5, 4, 7, 2, 99, 16} entero i entero total 0. Inicio 1. total = 0 2. Repita para (i = 0; i < 8; i = i + 1) total = total + a[i] fin-rp 3. devolver total 4. fin_función Programación Digital I 23
Vectores: Ejemplo 2 Calcular la suma de los elementos de un vector Codificación int sumvector ( ) { int a[8] = {1, 3, 5, 4, 7, 2, 99, 16}, i, total = 0; for (i = 0; i < 8; i++) total += a[i]; } return total; Programación Digital I 24
Vectores: Ejemplo 3 Calcular la media de n números y después calcular la desviación de cada número respecto a la media. #include <iostream.h> #define NRO_ELEM 100 void main () { int n, cont; float media, d, suma = 0; float numeros[nro_elem]; cout << Introduzca el total de numeros a procesar << endl; cin >> n; // Leer el total de numeros procesar for (cont = 0; cont < n; cont++) { // Lectura cout << Introduzca un numero << endl; cin >> numeros[cont]; suma += numero[cont]; // Sumar cada numero con los anteriores } Programación Digital I 25
Vectores: Ejemplo 3 } media = suma/n; // Calcular la media cout << Media = << media << endl; for (cont = 0; cont < n; cont++) { d = numeros[cont] - media // Calcular la desviacion de cada numero cout << La desviacion de x = << numeros[cont] << es << d << endl; } Programación Digital I 26
Vectores: Ejemplo 4 Ordenamiento de una lista de n números enteros en orden creciente. #define n 5 void main() { int elem, temp, i, x[n] = {4, 2, 5, 0, 1}; for (elem = 0; elem < n-1; elem++) for (i = elem+1; i < n; i++) if (x[i] < x[elem]) { temp = x[elem]; x[elem] = x[i]; x[i] = temp; } } Programación Digital I 27
Vectores: Ejemplo 4 elem i temp x[0] x[1] x[2] x[3] x[4] 4 2 5 0 1 0 1 4 2 4 5 0 1 0 2 4 2 4 5 0 1 0 3 2 0 4 5 2 1 0 4 2 0 4 5 2 1 1 3 4 0 2 5 4 1 1 4 2 0 1 5 4 2 2 3 5 0 1 4 5 2 2 4 4 0 1 2 5 4 3 4 5 0 1 2 4 5 Programación Digital I 28
Recuerde. Todos los elementos de un vector deben ser del mismo tipo. Cada elemento de un vector se almacena en una localidad de memoria separada. Cada elemento de un vector es accedido a través de un subíndice único. El rango del subíndice varía de 0 a n-1, siendo n el número de elementos del vector. Un vector recibe un nombre, independientemente del número de elementos que contenga. Antes de usar un vector, éste debe ser declarado como cualquier otra variable. Para acceder un elemento de un vector se usa el nombre, seguido de su posición dentro del vector entre corchetes: nombre_vector [subíndice]. Programación Digital I 29
Ejercicios Escribir una declaración apropiada para cada uno de los siguientes problemas: Definir un vector de 12 elementos enteros llamado c. Asignar los valores 1, 4, 7, 10,, 34 a los elementos del vector. Definir un vector de caracteres llamado punto. Asignar los caracteres N, O, R, T, E a los caracteres del vector. Describir la salida producida por el siguiente programa: #include <iostream.h> void main() { int a, b = 0; int c[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 0}; } for (a = 0; a < 10; a++) if ((c[a] % 2) == 0) b +=c[a]; cout << b << endl; Programación Digital I 30
Ejercicios Determinar el valor final de la variable valor después de la ejecución del siguiente segmento de programa: int alfa = {-10, 16, 19, -15, 20}; int index, valor = 0; for (index = 0; index!= 5; index++) valor += alfa[index]; Programación Digital I 31
Ejercicios Determinar el valor final del vector numeros después de la ejecución del siguiente segmento de programa: int numeros = {5, 2, 8, 7, 0, 3}; int izq = 0, der = 5; while (izq <= der) { numeros[der] = numeros[izq]; izq++; der--; } Programación Digital I 32
Ejercicios Escribir un programa en C que lea una línea de texto, la almacene en un vector y la escriba al revés. La longitud de la línea no será especificada (terminará al pulsar la tecla Enter), pero se supone que no excederá de 80 caracteres. Escribir un programa en C que genere un vector con los valores que resultan de la ecuación: y = 2e -0.1t sen(0.5t) donde t varía entre 0 y 60. Permitir que el incremento de t sea introducido como parámetro de entrada. Escribir un programa en C que reciba como entrada un número entero construya un vector con los 10 primeros múltiplos de dicho número. Programación Digital I 33
Ejercicios Escribir un programa en C que lea una lista de números reales, los almacene en un vector y calcule e imprima la suma, el valor máximo, el valor mínimo y el valor medio de todos ellos. El tamaño de la lista de números se conocerá de antemano, y en ningún caso excederá de 100. Programación Digital I 34