vectores - webdelprofesor.ula.ve · vectores material original: prof. flor narciso modificaciones:...

34
27/05/05 Programación Digital I 1 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

Upload: dinhkhuong

Post on 24-Sep-2018

228 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Vectores - webdelprofesor.ula.ve · Vectores Material Original: Prof. Flor Narciso Modificaciones: Prof. Andrés Arcia Departamento de Computación Escuela de Ingeniería de Sistemas

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

Page 2: Vectores - webdelprofesor.ula.ve · Vectores Material Original: Prof. Flor Narciso Modificaciones: Prof. Andrés Arcia Departamento de Computación Escuela de Ingeniería de Sistemas

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.

Page 3: Vectores - webdelprofesor.ula.ve · Vectores Material Original: Prof. Flor Narciso Modificaciones: Prof. Andrés Arcia Departamento de Computación Escuela de Ingeniería de Sistemas

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

Page 4: Vectores - webdelprofesor.ula.ve · Vectores Material Original: Prof. Flor Narciso Modificaciones: Prof. Andrés Arcia Departamento de Computación Escuela de Ingeniería de Sistemas

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

Page 5: Vectores - webdelprofesor.ula.ve · Vectores Material Original: Prof. Flor Narciso Modificaciones: Prof. Andrés Arcia Departamento de Computación Escuela de Ingeniería de Sistemas

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

Page 6: Vectores - webdelprofesor.ula.ve · Vectores Material Original: Prof. Flor Narciso Modificaciones: Prof. Andrés Arcia Departamento de Computación Escuela de Ingeniería de Sistemas

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

Page 7: Vectores - webdelprofesor.ula.ve · Vectores Material Original: Prof. Flor Narciso Modificaciones: Prof. Andrés Arcia Departamento de Computación Escuela de Ingeniería de Sistemas

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

Page 8: Vectores - webdelprofesor.ula.ve · Vectores Material Original: Prof. Flor Narciso Modificaciones: Prof. Andrés Arcia Departamento de Computación Escuela de Ingeniería de Sistemas

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.

Page 9: Vectores - webdelprofesor.ula.ve · Vectores Material Original: Prof. Flor Narciso Modificaciones: Prof. Andrés Arcia Departamento de Computación Escuela de Ingeniería de Sistemas

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

Page 10: Vectores - webdelprofesor.ula.ve · Vectores Material Original: Prof. Flor Narciso Modificaciones: Prof. Andrés Arcia Departamento de Computación Escuela de Ingeniería de Sistemas

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];

Page 11: Vectores - webdelprofesor.ula.ve · Vectores Material Original: Prof. Flor Narciso Modificaciones: Prof. Andrés Arcia Departamento de Computación Escuela de Ingeniería de Sistemas

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

Page 12: Vectores - webdelprofesor.ula.ve · Vectores Material Original: Prof. Flor Narciso Modificaciones: Prof. Andrés Arcia Departamento de Computación Escuela de Ingeniería de Sistemas

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].

Page 13: Vectores - webdelprofesor.ula.ve · Vectores Material Original: Prof. Flor Narciso Modificaciones: Prof. Andrés Arcia Departamento de Computación Escuela de Ingeniería de Sistemas

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

Page 14: Vectores - webdelprofesor.ula.ve · Vectores Material Original: Prof. Flor Narciso Modificaciones: Prof. Andrés Arcia Departamento de Computación Escuela de Ingeniería de Sistemas

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.

Page 15: Vectores - webdelprofesor.ula.ve · Vectores Material Original: Prof. Flor Narciso Modificaciones: Prof. Andrés Arcia Departamento de Computación Escuela de Ingeniería de Sistemas

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

Page 16: Vectores - webdelprofesor.ula.ve · Vectores Material Original: Prof. Flor Narciso Modificaciones: Prof. Andrés Arcia Departamento de Computación Escuela de Ingeniería de Sistemas

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

Page 17: Vectores - webdelprofesor.ula.ve · Vectores Material Original: Prof. Flor Narciso Modificaciones: Prof. Andrés Arcia Departamento de Computación Escuela de Ingeniería de Sistemas

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’

Page 18: Vectores - webdelprofesor.ula.ve · Vectores Material Original: Prof. Flor Narciso Modificaciones: Prof. Andrés Arcia Departamento de Computación Escuela de Ingeniería de Sistemas

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;

}

Page 19: Vectores - webdelprofesor.ula.ve · Vectores Material Original: Prof. Flor Narciso Modificaciones: Prof. Andrés Arcia Departamento de Computación Escuela de Ingeniería de Sistemas

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] = ‘,’

Page 20: Vectores - webdelprofesor.ula.ve · Vectores Material Original: Prof. Flor Narciso Modificaciones: Prof. Andrés Arcia Departamento de Computación Escuela de Ingeniería de Sistemas

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”;

Page 21: Vectores - webdelprofesor.ula.ve · Vectores Material Original: Prof. Flor Narciso Modificaciones: Prof. Andrés Arcia Departamento de Computación Escuela de Ingeniería de Sistemas

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]);

}

Page 22: Vectores - webdelprofesor.ula.ve · Vectores Material Original: Prof. Flor Narciso Modificaciones: Prof. Andrés Arcia Departamento de Computación Escuela de Ingeniería de Sistemas

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;

}

Page 23: Vectores - webdelprofesor.ula.ve · Vectores Material Original: Prof. Flor Narciso Modificaciones: Prof. Andrés Arcia Departamento de Computación Escuela de Ingeniería de Sistemas

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

Page 24: Vectores - webdelprofesor.ula.ve · Vectores Material Original: Prof. Flor Narciso Modificaciones: Prof. Andrés Arcia Departamento de Computación Escuela de Ingeniería de Sistemas

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;}

Page 25: Vectores - webdelprofesor.ula.ve · Vectores Material Original: Prof. Flor Narciso Modificaciones: Prof. Andrés Arcia Departamento de Computación Escuela de Ingeniería de Sistemas

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

}

Page 26: Vectores - webdelprofesor.ula.ve · Vectores Material Original: Prof. Flor Narciso Modificaciones: Prof. Andrés Arcia Departamento de Computación Escuela de Ingeniería de Sistemas

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;}

}

Page 27: Vectores - webdelprofesor.ula.ve · Vectores Material Original: Prof. Flor Narciso Modificaciones: Prof. Andrés Arcia Departamento de Computación Escuela de Ingeniería de Sistemas

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;

}

}

Page 28: Vectores - webdelprofesor.ula.ve · Vectores Material Original: Prof. Flor Narciso Modificaciones: Prof. Andrés Arcia Departamento de Computación Escuela de Ingeniería de Sistemas

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

Page 29: Vectores - webdelprofesor.ula.ve · Vectores Material Original: Prof. Flor Narciso Modificaciones: Prof. Andrés Arcia Departamento de Computación Escuela de Ingeniería de Sistemas

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].

Page 30: Vectores - webdelprofesor.ula.ve · Vectores Material Original: Prof. Flor Narciso Modificaciones: Prof. Andrés Arcia Departamento de Computación Escuela de Ingeniería de Sistemas

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;

}

Page 31: Vectores - webdelprofesor.ula.ve · Vectores Material Original: Prof. Flor Narciso Modificaciones: Prof. Andrés Arcia Departamento de Computación Escuela de Ingeniería de Sistemas

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];

Page 32: Vectores - webdelprofesor.ula.ve · Vectores Material Original: Prof. Flor Narciso Modificaciones: Prof. Andrés Arcia Departamento de Computación Escuela de Ingeniería de Sistemas

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--;

}

Page 33: Vectores - webdelprofesor.ula.ve · Vectores Material Original: Prof. Flor Narciso Modificaciones: Prof. Andrés Arcia Departamento de Computación Escuela de Ingeniería de Sistemas

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.

Page 34: Vectores - webdelprofesor.ula.ve · Vectores Material Original: Prof. Flor Narciso Modificaciones: Prof. Andrés Arcia Departamento de Computación Escuela de Ingeniería de Sistemas

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.