27/05/05 Programación Digital I 1
Vectores
Material Original: Prof. Flor NarcisoModificaciones: Prof. Andrés ArciaDepartamento de ComputaciónEscuela de Ingeniería de SistemasFacultad de IngenieríaUniversidad de Los Andes
Programación Digital I 227/05/05
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 unoo diversos tipos (arreglos, registros, cadenas de caracteres).
Se utilizan cuando se requiere el procesamiento de múltiplesdatos que tienen características comunes.
Ejemplos: Un conjunto de números enteros, un conjunto deestudiantes, un conjunto de temperaturas.
Programación Digital I 327/05/05
Arreglo
DefiniciónGeneralización del concepto de variable.
Variable: Puede tener como máximo un valor. Cada variable esreferenciada 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 clasificansegú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 massubíndices
Programación Digital I 427/05/05
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 23152
Programación Digital I 527/05/05
Vector (Arreglo Unidimensional)
• Grupo de localidades consecutivas de memoriarelacionadas por el hecho que tienen el mismo nombrey tipo. Esto implica que cada celda tenga exactamenteel mismo tamaño.
• Cada localidad (o grupo de localidades) almacena unelemento del vector.Nombre del
vector
arreglo_notas
141118121512
Programación Digital I 627/05/05
Vector (Arreglo Unidimensional)
• Cada elemento del vector es accedido mediante el nombredel vector y un subíndice que representa la posiciónnumérica (entero no negativo) de dicho elemento dentro delvector.
arreglo_notas
Nombre delvector
0 1 2 3 4 5 6
subíndices
1441118121512
Programación Digital I 727/05/05
Vector: Representación Gráfica
deudas_mes
Nombre delvector
Vector de 12 elementos cuyo nombre es deudas_mes
0 1 2 … 11
subíndices
539292135043222210004302021333302221560021300450001203020200
Programación Digital I 827/05/05
Vector: Representación Gráfica
•Note que en general un vector de n elementos tiene indices queestan numerados (por pura convension) desde 0 hasta n-1.
•Dependiendo del lenguaje que utilicemos, los subindices vannumerados desde 0 o desde 1.
Programación Digital I 927/05/05
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 quecero (0)
Ejemplos:entero A[12] Vector A de 12 números enteroscarácter cdn[8] Vector cdn de 8 caracteresreal b[100] Vector b de 100 números reales
Programación Digital I 1027/05/05
Declaración de un Vector:Notación en C
tipo_dato nombre_vector[número_elementos];
Ejemplos:
int A[12]; // Vector A de 12 números enteroschar cdn[8]; // Vector cdn de 8 caracteresfloat b[100]; // 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 1127/05/05
Declaración de un Vector:Ejemplos
#define TAM 10#define MAXCAR 80#define NHORAS 24#define NFIL 2
int v[TAM];char palabra[MAXCAR];double temp[NHORAS];int m[NFIL];
TAM: 10MAXCAR: 24NHORAS: 24NFIL: 2Entero v[TAM]Caracter palabra[MAXCAR]Real temp[NHORAS]Entero m[NFIL]
Notacion en CNotacion Algoritmica
Programación Digital I 1227/05/05
Acceso a los Elementos de unVector
nombre_vector[subíndice]
El valor del subíndice o posición numérica de unelemento 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 loscasos, el valor del subíndice debe ser un entero mayor o igual acero.
El valor del subíndice puede variar de 0 a n-1, donde nes el número de elementos del vector.
En general, para tener acceso al i-ésimo elemento delvector se escribe nombre_vector[i-1].
Programación Digital I 1327/05/05
Acceso a los Elementos de unVector
Primer elemento: altura_personas[0] == 1.39Segundo elemento: altura_personas[1] == 1.57Tercer elemento: altura_personas[2] == 1.56….Sexto y ultimo elemento: altura_personas[5] == 1.66
543210
1.661.892.021.561.571.39
altura_personas
Programación Digital I 1427/05/05
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 unavariable cualquiera.
Programación Digital I 1527/05/05
Inicialización de un Vector:Ejemplo 1Inicializar 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índiceint vector[N], i;
for (i = 0; i < N; i++)vector[i] = 0; // Inicialización de cada
// elemento del vector en 0
99…76543210
0…00000000
Programación Digital I 1627/05/05
Inicialización de un Vector:Ejemplo 2Inicializar usando variables
Inicializar los elementos de un vector de 10 elementos enteroscon 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
9876543210
10987654321
Programación Digital I 1727/05/05
Inicialización de un Vector:Ejemplo 3Inicializar mediante lecturaInicializar los elementos de un vector de 30 elementos de tipocarácter con valores introducidos por el usuario
char frase[30]; // Declaración del vectorint indice; // Declaración del subíndicechar car;
for (indice = 0; indice < 30; indice++){
printf(“Introduzca una frase\n”);scanf(“%c”, car);frase[indice] = car;
}
9
‘t’
10876543210
‘a’‘r’‘o’‘c’‘ ‘‘e’‘s’‘a’‘r’‘f’
Programación Digital I 1827/05/05
Inicialización de un Vector:Ejemplo 4
// Leer una linea de un texto en minusculas y escribirla enmayusculas
#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 1927/05/05
Inicialización de un Vector en laDeclaraciónExisten varias formas de predefinir los valores quepuede 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.75n[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 2027/05/05
Inicialización de un Vector en laDeclaraciónTodos los elementos del vector no tienen asignadovalores iniciales:
int a[8] = {1, 2, 3};
a[0] = 1 a[1] = 2 a[2] = 3 a[3] = 0a[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.30n[3] = 0.00 n[4] = 0.00
char cadena[11]=”Una Cadena”;
Programación Digital I 2127/05/05
Inicialización de un Vector en laDeclaració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 2227/05/05
Vectores: Ejemplo 1
Inicializar los elementos de un vector s con los númerospares 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 2327/05/05
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 ientero total
0. Inicio1. total = 02. Repita para (i = 0; i < 8; i = i + 1)
total = total + a[i]fin-RP
3. devolver total4. fin_función
Programación Digital I 2427/05/05
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 2527/05/05
Vectores: Ejemplo 3Calcular la media de n números y después calcular ladesviació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 procesarfor (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 2627/05/05
Vectores: Ejemplo 3
media = suma/n; // Calcular la mediacout << “Media = “ << media << endl;for (cont = 0; cont < n; cont++) {
d = numeros[cont] - media// Calcular la desviacion de cada numerocout << “La desviacion de x = “ << numeros[cont]
<< “es” << d << endl;}
}
Programación Digital I 2727/05/05
Vectores: Ejemplo 4
Ordenamiento de una lista de n números enteros enorden 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 2827/05/05
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 10 2 4 2 4 5 0 10 3 2 0 4 5 2 10 4 2 0 4 5 2 11 3 4 0 2 5 4 11 4 2 0 1 5 4 22 3 5 0 1 4 5 22 4 4 0 1 2 5 43 4 5 0 1 2 4 5
Programación Digital I 2927/05/05
Recuerde.
Todos los elementos de un vector deben ser del mismo tipo.
Cada elemento de un vector se almacena en una localidad dememoria 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úmerode elementos del vector.
Un vector recibe un nombre, independientemente del número deelementos que contenga.
Antes de usar un vector, éste debe ser declarado como cualquierotra variable.
Para acceder un elemento de un vector se usa el nombre, seguidode su posición dentro del vector entre corchetes: nombre_vector[subíndice].
Programación Digital I 3027/05/05
EjerciciosEscribir una declaración apropiada para cada uno de lossiguientes problemas:
Definir un vector de 12 elementos enteros llamado c.Asignar los valores 1, 4, 7, 10, …, 34 a los elementos delvector.Definir un vector de caracteres llamado punto. Asignar loscaracteres ‘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 3127/05/05
EjerciciosDeterminar el valor final de la variable valor después de laejecució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 3227/05/05
EjerciciosDeterminar el valor final del vector numeros después de laejecució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 3327/05/05
Ejercicios
Escribir un programa en C que lea una línea de texto, la almaceneen 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 suponeque no excederá de 80 caracteres.
Escribir un programa en C que genere un vector con los valoresque resultan de la ecuación:
y = 2e-0.1tsen(0.5t)donde t varía entre 0 y 60. Permitir que el incremento de t seaintroducido como parámetro de entrada.
Escribir un programa en C que reciba como entrada un númeroentero construya un vector con los 10 primeros múltiplos de dichonúmero.
Programación Digital I 3427/05/05
Ejercicios
Escribir un programa en C que lea una lista de números reales, losalmacene en un vector y calcule e imprima la suma, el valormáximo, el valor mínimo y el valor medio de todos ellos. El tamañode la lista de números se conocerá de antemano, y en ningún casoexcederá de 100.